Full Code of chrislit/abydos for AI

master 344346a5fceb cached
895 files
86.4 MB
6.4M tokens
3211 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (25,594K chars total). Download the full file to get everything.
Repository: chrislit/abydos
Branch: master
Commit: 344346a5fceb
Files: 895
Total size: 86.4 MB

Directory structure:
gitextract_pif85cg4/

├── .circleci/
│   └── config.yml
├── .codeclimate.yml
├── .coveragerc
├── .github/
│   └── CODEOWNERS
├── .gitignore
├── .gitmodules
├── .project
├── .pypirc
├── .pyup.yml
├── .travis.yml
├── AUTHORS.rst
├── CODE_OF_CONDUCT.rst
├── CODING_STANDARDS.rst
├── FAQ.rst
├── HISTORY.rst
├── LICENSE
├── MANIFEST.in
├── Pipfile
├── README.rst
├── VERSION.rst
├── abydos/
│   ├── __init__.py
│   ├── compression/
│   │   ├── __init__.py
│   │   ├── _arithmetic.py
│   │   ├── _bwt.py
│   │   └── _rle.py
│   ├── corpus/
│   │   ├── __init__.py
│   │   ├── _corpus.py
│   │   ├── _ngram_corpus.py
│   │   └── _unigram_corpus.py
│   ├── distance/
│   │   ├── __init__.py
│   │   ├── _aline.py
│   │   ├── _ample.py
│   │   ├── _anderberg.py
│   │   ├── _andres_marzo_delta.py
│   │   ├── _average_linkage.py
│   │   ├── _azzoo.py
│   │   ├── _bag.py
│   │   ├── _baroni_urbani_buser_i.py
│   │   ├── _baroni_urbani_buser_ii.py
│   │   ├── _batagelj_bren.py
│   │   ├── _baulieu_i.py
│   │   ├── _baulieu_ii.py
│   │   ├── _baulieu_iii.py
│   │   ├── _baulieu_iv.py
│   │   ├── _baulieu_ix.py
│   │   ├── _baulieu_v.py
│   │   ├── _baulieu_vi.py
│   │   ├── _baulieu_vii.py
│   │   ├── _baulieu_viii.py
│   │   ├── _baulieu_x.py
│   │   ├── _baulieu_xi.py
│   │   ├── _baulieu_xii.py
│   │   ├── _baulieu_xiii.py
│   │   ├── _baulieu_xiv.py
│   │   ├── _baulieu_xv.py
│   │   ├── _baystat.py
│   │   ├── _benini_i.py
│   │   ├── _benini_ii.py
│   │   ├── _bennet.py
│   │   ├── _bhattacharyya.py
│   │   ├── _bisim.py
│   │   ├── _bleu.py
│   │   ├── _block_levenshtein.py
│   │   ├── _brainerd_robinson.py
│   │   ├── _braun_blanquet.py
│   │   ├── _canberra.py
│   │   ├── _cao.py
│   │   ├── _chao_dice.py
│   │   ├── _chao_jaccard.py
│   │   ├── _chebyshev.py
│   │   ├── _chord.py
│   │   ├── _clark.py
│   │   ├── _clement.py
│   │   ├── _cohen_kappa.py
│   │   ├── _cole.py
│   │   ├── _complete_linkage.py
│   │   ├── _consonni_todeschini_i.py
│   │   ├── _consonni_todeschini_ii.py
│   │   ├── _consonni_todeschini_iii.py
│   │   ├── _consonni_todeschini_iv.py
│   │   ├── _consonni_todeschini_v.py
│   │   ├── _cormode_lz.py
│   │   ├── _cosine.py
│   │   ├── _covington.py
│   │   ├── _damerau_levenshtein.py
│   │   ├── _dennis.py
│   │   ├── _dice.py
│   │   ├── _dice_asymmetric_i.py
│   │   ├── _dice_asymmetric_ii.py
│   │   ├── _digby.py
│   │   ├── _discounted_levenshtein.py
│   │   ├── _dispersion.py
│   │   ├── _distance.py
│   │   ├── _doolittle.py
│   │   ├── _dunning.py
│   │   ├── _editex.py
│   │   ├── _euclidean.py
│   │   ├── _eudex.py
│   │   ├── _eyraud.py
│   │   ├── _fager_mcgowan.py
│   │   ├── _faith.py
│   │   ├── _fellegi_sunter.py
│   │   ├── _fidelity.py
│   │   ├── _fleiss.py
│   │   ├── _fleiss_levin_paik.py
│   │   ├── _flexmetric.py
│   │   ├── _forbes_i.py
│   │   ├── _forbes_ii.py
│   │   ├── _fossum.py
│   │   ├── _fuzzywuzzy_partial_string.py
│   │   ├── _fuzzywuzzy_token_set.py
│   │   ├── _fuzzywuzzy_token_sort.py
│   │   ├── _generalized_fleiss.py
│   │   ├── _gilbert.py
│   │   ├── _gilbert_wells.py
│   │   ├── _gini_i.py
│   │   ├── _gini_ii.py
│   │   ├── _goodall.py
│   │   ├── _goodman_kruskal_lambda.py
│   │   ├── _goodman_kruskal_lambda_r.py
│   │   ├── _goodman_kruskal_tau_a.py
│   │   ├── _goodman_kruskal_tau_b.py
│   │   ├── _gotoh.py
│   │   ├── _gower_legendre.py
│   │   ├── _guth.py
│   │   ├── _guttman_lambda_a.py
│   │   ├── _guttman_lambda_b.py
│   │   ├── _gwet_ac.py
│   │   ├── _hamann.py
│   │   ├── _hamming.py
│   │   ├── _harris_lahey.py
│   │   ├── _hassanat.py
│   │   ├── _hawkins_dotson.py
│   │   ├── _hellinger.py
│   │   ├── _henderson_heron.py
│   │   ├── _higuera_mico.py
│   │   ├── _horn_morisita.py
│   │   ├── _hurlbert.py
│   │   ├── _ident.py
│   │   ├── _inclusion.py
│   │   ├── _indel.py
│   │   ├── _isg.py
│   │   ├── _iterative_substring.py
│   │   ├── _jaccard.py
│   │   ├── _jaccard_nm.py
│   │   ├── _jaro_winkler.py
│   │   ├── _jensen_shannon.py
│   │   ├── _johnson.py
│   │   ├── _kendall_tau.py
│   │   ├── _kent_foster_i.py
│   │   ├── _kent_foster_ii.py
│   │   ├── _koppen_i.py
│   │   ├── _koppen_ii.py
│   │   ├── _kuder_richardson.py
│   │   ├── _kuhns_i.py
│   │   ├── _kuhns_ii.py
│   │   ├── _kuhns_iii.py
│   │   ├── _kuhns_iv.py
│   │   ├── _kuhns_ix.py
│   │   ├── _kuhns_v.py
│   │   ├── _kuhns_vi.py
│   │   ├── _kuhns_vii.py
│   │   ├── _kuhns_viii.py
│   │   ├── _kuhns_x.py
│   │   ├── _kuhns_xi.py
│   │   ├── _kuhns_xii.py
│   │   ├── _kulczynski_i.py
│   │   ├── _kulczynski_ii.py
│   │   ├── _lcprefix.py
│   │   ├── _lcsseq.py
│   │   ├── _lcsstr.py
│   │   ├── _lcsuffix.py
│   │   ├── _length.py
│   │   ├── _levenshtein.py
│   │   ├── _lig3.py
│   │   ├── _lorentzian.py
│   │   ├── _maarel.py
│   │   ├── _manhattan.py
│   │   ├── _marking.py
│   │   ├── _marking_metric.py
│   │   ├── _masi.py
│   │   ├── _matusita.py
│   │   ├── _maxwell_pilliner.py
│   │   ├── _mcconnaughey.py
│   │   ├── _mcewen_michael.py
│   │   ├── _meta_levenshtein.py
│   │   ├── _michelet.py
│   │   ├── _millar.py
│   │   ├── _minhash.py
│   │   ├── _minkowski.py
│   │   ├── _mlipns.py
│   │   ├── _monge_elkan.py
│   │   ├── _morisita.py
│   │   ├── _mountford.py
│   │   ├── _mra.py
│   │   ├── _ms_contingency.py
│   │   ├── _mutual_information.py
│   │   ├── _ncd_arith.py
│   │   ├── _ncd_bwtrle.py
│   │   ├── _ncd_bz2.py
│   │   ├── _ncd_lzma.py
│   │   ├── _ncd_lzss.py
│   │   ├── _ncd_paq9a.py
│   │   ├── _ncd_rle.py
│   │   ├── _ncd_zlib.py
│   │   ├── _needleman_wunsch.py
│   │   ├── _overlap.py
│   │   ├── _ozbay.py
│   │   ├── _pattern.py
│   │   ├── _pearson_chi_squared.py
│   │   ├── _pearson_heron_ii.py
│   │   ├── _pearson_ii.py
│   │   ├── _pearson_iii.py
│   │   ├── _pearson_phi.py
│   │   ├── _peirce.py
│   │   ├── _phonetic_distance.py
│   │   ├── _phonetic_edit_distance.py
│   │   ├── _positional_q_gram_dice.py
│   │   ├── _positional_q_gram_jaccard.py
│   │   ├── _positional_q_gram_overlap.py
│   │   ├── _prefix.py
│   │   ├── _q_gram.py
│   │   ├── _quantitative_cosine.py
│   │   ├── _quantitative_dice.py
│   │   ├── _quantitative_jaccard.py
│   │   ├── _ratcliff_obershelp.py
│   │   ├── _raup_crick.py
│   │   ├── _rees_levenshtein.py
│   │   ├── _relaxed_hamming.py
│   │   ├── _roberts.py
│   │   ├── _rogers_tanimoto.py
│   │   ├── _rogot_goldberg.py
│   │   ├── _rouge_l.py
│   │   ├── _rouge_s.py
│   │   ├── _rouge_su.py
│   │   ├── _rouge_w.py
│   │   ├── _russell_rao.py
│   │   ├── _saps.py
│   │   ├── _scott_pi.py
│   │   ├── _shape.py
│   │   ├── _shapira_storer_i.py
│   │   ├── _sift4.py
│   │   ├── _sift4_extended.py
│   │   ├── _sift4_simplest.py
│   │   ├── _single_linkage.py
│   │   ├── _size.py
│   │   ├── _smith_waterman.py
│   │   ├── _soft_cosine.py
│   │   ├── _softtf_idf.py
│   │   ├── _sokal_michener.py
│   │   ├── _sokal_sneath_i.py
│   │   ├── _sokal_sneath_ii.py
│   │   ├── _sokal_sneath_iii.py
│   │   ├── _sokal_sneath_iv.py
│   │   ├── _sokal_sneath_v.py
│   │   ├── _sorgenfrei.py
│   │   ├── _ssk.py
│   │   ├── _steffensen.py
│   │   ├── _stiles.py
│   │   ├── _strcmp95.py
│   │   ├── _stuart_tau.py
│   │   ├── _suffix.py
│   │   ├── _synoname.py
│   │   ├── _tarantula.py
│   │   ├── _tarwid.py
│   │   ├── _tetrachoric.py
│   │   ├── _tf_idf.py
│   │   ├── _tichy.py
│   │   ├── _token_distance.py
│   │   ├── _tulloss_r.py
│   │   ├── _tulloss_s.py
│   │   ├── _tulloss_t.py
│   │   ├── _tulloss_u.py
│   │   ├── _tversky.py
│   │   ├── _typo.py
│   │   ├── _unigram_subtuple.py
│   │   ├── _unknown_a.py
│   │   ├── _unknown_b.py
│   │   ├── _unknown_c.py
│   │   ├── _unknown_d.py
│   │   ├── _unknown_e.py
│   │   ├── _unknown_f.py
│   │   ├── _unknown_g.py
│   │   ├── _unknown_h.py
│   │   ├── _unknown_i.py
│   │   ├── _unknown_j.py
│   │   ├── _unknown_k.py
│   │   ├── _unknown_l.py
│   │   ├── _unknown_m.py
│   │   ├── _upholt.py
│   │   ├── _vps.py
│   │   ├── _warrens_i.py
│   │   ├── _warrens_ii.py
│   │   ├── _warrens_iii.py
│   │   ├── _warrens_iv.py
│   │   ├── _warrens_v.py
│   │   ├── _weighted_jaccard.py
│   │   ├── _whittaker.py
│   │   ├── _yates_chi_squared.py
│   │   ├── _yjhhr.py
│   │   ├── _yujian_bo.py
│   │   ├── _yule_q.py
│   │   ├── _yule_q_ii.py
│   │   └── _yule_y.py
│   ├── fingerprint/
│   │   ├── __init__.py
│   │   ├── _bwtf.py
│   │   ├── _bwtrlef.py
│   │   ├── _consonant.py
│   │   ├── _count.py
│   │   ├── _extract.py
│   │   ├── _extract_position_frequency.py
│   │   ├── _fingerprint.py
│   │   ├── _lacss.py
│   │   ├── _lc_cutter.py
│   │   ├── _occurrence.py
│   │   ├── _occurrence_halved.py
│   │   ├── _omission_key.py
│   │   ├── _phonetic.py
│   │   ├── _position.py
│   │   ├── _qgram.py
│   │   ├── _skeleton_key.py
│   │   ├── _string.py
│   │   └── _synoname_toolcode.py
│   ├── phones/
│   │   ├── __init__.py
│   │   └── _phones.py
│   ├── phonetic/
│   │   ├── __init__.py
│   │   ├── _ainsworth.py
│   │   ├── _alpha_sis.py
│   │   ├── _beider_morse.py
│   │   ├── _beider_morse_data.py
│   │   ├── _caverphone.py
│   │   ├── _daitch_mokotoff.py
│   │   ├── _davidson.py
│   │   ├── _dolby.py
│   │   ├── _double_metaphone.py
│   │   ├── _eudex.py
│   │   ├── _fonem.py
│   │   ├── _fuzzy_soundex.py
│   │   ├── _haase.py
│   │   ├── _henry_early.py
│   │   ├── _koelner.py
│   │   ├── _lein.py
│   │   ├── _meta_soundex.py
│   │   ├── _metaphone.py
│   │   ├── _mra.py
│   │   ├── _norphone.py
│   │   ├── _nrl.py
│   │   ├── _nysiis.py
│   │   ├── _onca.py
│   │   ├── _parmar_kumbharana.py
│   │   ├── _phonem.py
│   │   ├── _phonet.py
│   │   ├── _phonetic.py
│   │   ├── _phonetic_spanish.py
│   │   ├── _phonex.py
│   │   ├── _phonic.py
│   │   ├── _phonix.py
│   │   ├── _pshp_soundex_first.py
│   │   ├── _pshp_soundex_last.py
│   │   ├── _refined_soundex.py
│   │   ├── _reth_schek.py
│   │   ├── _roger_root.py
│   │   ├── _russell_index.py
│   │   ├── _sfinx_bis.py
│   │   ├── _sound_d.py
│   │   ├── _soundex.py
│   │   ├── _soundex_br.py
│   │   ├── _spanish_metaphone.py
│   │   ├── _spfc.py
│   │   ├── _statistics_canada.py
│   │   └── _waahlin.py
│   ├── stats/
│   │   ├── __init__.py
│   │   ├── _confusion_table.py
│   │   ├── _mean.py
│   │   └── _pairwise.py
│   ├── stemmer/
│   │   ├── __init__.py
│   │   ├── _caumanns.py
│   │   ├── _clef_german.py
│   │   ├── _clef_german_plus.py
│   │   ├── _clef_swedish.py
│   │   ├── _lovins.py
│   │   ├── _paice_husk.py
│   │   ├── _porter.py
│   │   ├── _porter2.py
│   │   ├── _s_stemmer.py
│   │   ├── _schinke.py
│   │   ├── _snowball.py
│   │   ├── _snowball_danish.py
│   │   ├── _snowball_dutch.py
│   │   ├── _snowball_german.py
│   │   ├── _snowball_norwegian.py
│   │   ├── _snowball_swedish.py
│   │   ├── _stemmer.py
│   │   └── _uea_lite.py
│   ├── tokenizer/
│   │   ├── __init__.py
│   │   ├── _c_or_v_cluster.py
│   │   ├── _character.py
│   │   ├── _cv_cluster.py
│   │   ├── _legalipy.py
│   │   ├── _nltk.py
│   │   ├── _q_grams.py
│   │   ├── _q_skipgrams.py
│   │   ├── _regexp.py
│   │   ├── _saps.py
│   │   ├── _sonoripy.py
│   │   ├── _tokenizer.py
│   │   ├── _vc_cluster.py
│   │   ├── _whitespace.py
│   │   └── _wordpunct.py
│   └── util/
│       ├── __init__.py
│       ├── _data.py
│       ├── _ncr.py
│       └── _prod.py
├── abydos.xcf
├── azure-pipelines.yml
├── badge_update.py
├── binder/
│   ├── Basic Examples.ipynb
│   ├── Reversed Metaphone using Keras seq2seq.ipynb
│   ├── Text Classification of Drug Reviews.ipynb
│   └── requirements.txt
├── data/
│   └── features/
│       ├── features_csv_to_dict.py
│       ├── features_symbols.csv
│       └── features_terms.csv
├── docs/
│   ├── Makefile
│   ├── _build/
│   │   └── .gitignore
│   ├── _static/
│   │   └── .gitignore
│   ├── _templates/
│   │   └── .gitignore
│   ├── abydos.bib
│   ├── abydos.compression.rst
│   ├── abydos.corpus.rst
│   ├── abydos.distance.rst
│   ├── abydos.fingerprint.rst
│   ├── abydos.phones.rst
│   ├── abydos.phonetic.rst
│   ├── abydos.rst
│   ├── abydos.stats.rst
│   ├── abydos.stemmer.rst
│   ├── abydos.tokenizer.rst
│   ├── abydos.util.rst
│   ├── conf.py
│   ├── faq.rst
│   ├── history.rst
│   ├── index.rst
│   ├── intro.rst
│   ├── make.bat
│   ├── modules.rst
│   └── requirements.txt
├── helpers/
│   ├── bm_php2py.py
│   └── call_and_write_log.py
├── pyproject.toml
├── requirements-dev.txt
├── requirements-test.txt
├── requirements.txt
├── setup.cfg
├── setup.py
├── stubs/
│   ├── lzss/
│   │   └── __init__.pyi
│   ├── numpy/
│   │   ├── __init__.pyi
│   │   └── core/
│   │       ├── __init__.pyi
│   │       ├── _internal.pyi
│   │       ├── numeric.pyi
│   │       └── numerictypes.pyi
│   ├── paq/
│   │   └── __init__.pyi
│   └── syllabipy/
│       ├── __init__.pyi
│       ├── legalipy.pyi
│       └── sonoripy.pyi
├── tests/
│   ├── __init__.py
│   ├── compression/
│   │   ├── __init__.py
│   │   ├── test_compression_arithmetic.py
│   │   ├── test_compression_bwt.py
│   │   └── test_compression_rle.py
│   ├── corpora/
│   │   ├── fake_words.csv
│   │   ├── googlebooks-ger-all-1gram-20120701-y
│   │   ├── googlebooks-ger-all-2gram-20120701-yp
│   │   ├── googlebooks-ger-all-3gram-20120701-yp
│   │   ├── homophones.csv
│   │   ├── misspellings.csv
│   │   ├── nachnamen.bm.cc.csv
│   │   ├── nachnamen.bm.csv
│   │   ├── nachnamen.csv
│   │   ├── ngerman.csv
│   │   ├── paicehusk.csv
│   │   ├── php_caverphone.csv
│   │   ├── simple-ngrams-pos.txt
│   │   ├── simple-ngrams.txt
│   │   ├── snowball_danish.csv
│   │   ├── snowball_dutch.csv
│   │   ├── snowball_german.csv
│   │   ├── snowball_lovins.csv
│   │   ├── snowball_norwegian.csv
│   │   ├── snowball_porter.csv
│   │   ├── snowball_porter2.csv
│   │   ├── snowball_schinke.csv
│   │   ├── snowball_swedish.csv
│   │   ├── uea-lite_wsj.csv
│   │   ├── uscensus2000.bm.cc.csv
│   │   ├── uscensus2000.bm.csv
│   │   ├── uscensus2000.csv
│   │   ├── variantNames.csv
│   │   └── wikipediaCommonMisspellings.csv
│   ├── corpus/
│   │   ├── __init__.py
│   │   ├── test_corpus_corpus.py
│   │   ├── test_corpus_n_gram_corpus.py
│   │   └── test_corpus_unigram_corpus.py
│   ├── distance/
│   │   ├── __init__.py
│   │   ├── test_distance__distance.py
│   │   ├── test_distance__token_distance.py
│   │   ├── test_distance_aline.py
│   │   ├── test_distance_ample.py
│   │   ├── test_distance_anderberg.py
│   │   ├── test_distance_andres_marzo_delta.py
│   │   ├── test_distance_average_linkage.py
│   │   ├── test_distance_azzoo.py
│   │   ├── test_distance_bag.py
│   │   ├── test_distance_baroni_urbani_buser_i.py
│   │   ├── test_distance_baroni_urbani_buser_ii.py
│   │   ├── test_distance_batagelj_bren.py
│   │   ├── test_distance_baulieu_i.py
│   │   ├── test_distance_baulieu_ii.py
│   │   ├── test_distance_baulieu_iii.py
│   │   ├── test_distance_baulieu_iv.py
│   │   ├── test_distance_baulieu_ix.py
│   │   ├── test_distance_baulieu_v.py
│   │   ├── test_distance_baulieu_vi.py
│   │   ├── test_distance_baulieu_vii.py
│   │   ├── test_distance_baulieu_viii.py
│   │   ├── test_distance_baulieu_x.py
│   │   ├── test_distance_baulieu_xi.py
│   │   ├── test_distance_baulieu_xii.py
│   │   ├── test_distance_baulieu_xiii.py
│   │   ├── test_distance_baulieu_xiv.py
│   │   ├── test_distance_baulieu_xv.py
│   │   ├── test_distance_baystat.py
│   │   ├── test_distance_benini_i.py
│   │   ├── test_distance_benini_ii.py
│   │   ├── test_distance_bennet.py
│   │   ├── test_distance_bhattacharyya.py
│   │   ├── test_distance_bisim.py
│   │   ├── test_distance_bleu.py
│   │   ├── test_distance_block_levenshtein.py
│   │   ├── test_distance_brainerd_robinson.py
│   │   ├── test_distance_braun_blanquet.py
│   │   ├── test_distance_canberra.py
│   │   ├── test_distance_cao.py
│   │   ├── test_distance_chao_dice.py
│   │   ├── test_distance_chao_jaccard.py
│   │   ├── test_distance_chebyshev.py
│   │   ├── test_distance_chord.py
│   │   ├── test_distance_clark.py
│   │   ├── test_distance_clement.py
│   │   ├── test_distance_cohen_kappa.py
│   │   ├── test_distance_cole.py
│   │   ├── test_distance_complete_linkage.py
│   │   ├── test_distance_consonni_todeschini_i.py
│   │   ├── test_distance_consonni_todeschini_ii.py
│   │   ├── test_distance_consonni_todeschini_iii.py
│   │   ├── test_distance_consonni_todeschini_iv.py
│   │   ├── test_distance_consonni_todeschini_v.py
│   │   ├── test_distance_cormode_lz.py
│   │   ├── test_distance_cosine.py
│   │   ├── test_distance_covington.py
│   │   ├── test_distance_damerau_levenshtein.py
│   │   ├── test_distance_dennis.py
│   │   ├── test_distance_dice.py
│   │   ├── test_distance_dice_asymmetric_i.py
│   │   ├── test_distance_dice_asymmetric_ii.py
│   │   ├── test_distance_digby.py
│   │   ├── test_distance_discounted_levenshtein.py
│   │   ├── test_distance_dispersion.py
│   │   ├── test_distance_doolittle.py
│   │   ├── test_distance_dunning.py
│   │   ├── test_distance_editex.py
│   │   ├── test_distance_euclidean.py
│   │   ├── test_distance_eudex.py
│   │   ├── test_distance_eyraud.py
│   │   ├── test_distance_fager_mcgowan.py
│   │   ├── test_distance_faith.py
│   │   ├── test_distance_fellegi_sunter.py
│   │   ├── test_distance_fidelity.py
│   │   ├── test_distance_fleiss.py
│   │   ├── test_distance_fleiss_levin_paik.py
│   │   ├── test_distance_flexmetric.py
│   │   ├── test_distance_forbes_i.py
│   │   ├── test_distance_forbes_ii.py
│   │   ├── test_distance_fossum.py
│   │   ├── test_distance_fuzzywuzzy_partial_string.py
│   │   ├── test_distance_fuzzywuzzy_token_set.py
│   │   ├── test_distance_fuzzywuzzy_token_sort.py
│   │   ├── test_distance_generalized_fleiss.py
│   │   ├── test_distance_gilbert.py
│   │   ├── test_distance_gilbert_wells.py
│   │   ├── test_distance_gini_i.py
│   │   ├── test_distance_gini_ii.py
│   │   ├── test_distance_goodall.py
│   │   ├── test_distance_goodman_kruskal_lambda.py
│   │   ├── test_distance_goodman_kruskal_lambda_r.py
│   │   ├── test_distance_goodman_kruskal_tau_a.py
│   │   ├── test_distance_goodman_kruskal_tau_b.py
│   │   ├── test_distance_gotoh.py
│   │   ├── test_distance_gower_legendre.py
│   │   ├── test_distance_guth.py
│   │   ├── test_distance_guttman_lambda_a.py
│   │   ├── test_distance_guttman_lambda_b.py
│   │   ├── test_distance_gwet_ac.py
│   │   ├── test_distance_hamann.py
│   │   ├── test_distance_hamming.py
│   │   ├── test_distance_harris_lahey.py
│   │   ├── test_distance_hassanat.py
│   │   ├── test_distance_hawkins_dotson.py
│   │   ├── test_distance_hellinger.py
│   │   ├── test_distance_henderson_heron.py
│   │   ├── test_distance_higuera_mico.py
│   │   ├── test_distance_horn_morisita.py
│   │   ├── test_distance_hurlbert.py
│   │   ├── test_distance_ident.py
│   │   ├── test_distance_inclusion.py
│   │   ├── test_distance_indel.py
│   │   ├── test_distance_isg.py
│   │   ├── test_distance_iterative_substring.py
│   │   ├── test_distance_jaccard.py
│   │   ├── test_distance_jaccard_nm.py
│   │   ├── test_distance_jaro_winkler.py
│   │   ├── test_distance_jensen_shannon.py
│   │   ├── test_distance_johnson.py
│   │   ├── test_distance_kendall_tau.py
│   │   ├── test_distance_kent_foster_i.py
│   │   ├── test_distance_kent_foster_ii.py
│   │   ├── test_distance_koppen_i.py
│   │   ├── test_distance_koppen_ii.py
│   │   ├── test_distance_kuder_richardson.py
│   │   ├── test_distance_kuhns_i.py
│   │   ├── test_distance_kuhns_ii.py
│   │   ├── test_distance_kuhns_iii.py
│   │   ├── test_distance_kuhns_iv.py
│   │   ├── test_distance_kuhns_ix.py
│   │   ├── test_distance_kuhns_v.py
│   │   ├── test_distance_kuhns_vi.py
│   │   ├── test_distance_kuhns_vii.py
│   │   ├── test_distance_kuhns_viii.py
│   │   ├── test_distance_kuhns_x.py
│   │   ├── test_distance_kuhns_xi.py
│   │   ├── test_distance_kuhns_xii.py
│   │   ├── test_distance_kulczynski_i.py
│   │   ├── test_distance_kulczynski_ii.py
│   │   ├── test_distance_lcprefix.py
│   │   ├── test_distance_lcsseq.py
│   │   ├── test_distance_lcsstr.py
│   │   ├── test_distance_lcsuffix.py
│   │   ├── test_distance_length.py
│   │   ├── test_distance_levenshtein.py
│   │   ├── test_distance_lig3.py
│   │   ├── test_distance_lorentzian.py
│   │   ├── test_distance_maarel.py
│   │   ├── test_distance_manhattan.py
│   │   ├── test_distance_marking.py
│   │   ├── test_distance_marking_metric.py
│   │   ├── test_distance_masi.py
│   │   ├── test_distance_matusita.py
│   │   ├── test_distance_maxwell_pilliner.py
│   │   ├── test_distance_mcconnaughey.py
│   │   ├── test_distance_mcewen_michael.py
│   │   ├── test_distance_meta_levenshtein.py
│   │   ├── test_distance_michelet.py
│   │   ├── test_distance_millar.py
│   │   ├── test_distance_minhash.py
│   │   ├── test_distance_minkowski.py
│   │   ├── test_distance_mlipns.py
│   │   ├── test_distance_monge_elkan.py
│   │   ├── test_distance_morisita.py
│   │   ├── test_distance_mountford.py
│   │   ├── test_distance_mra.py
│   │   ├── test_distance_ms_contingency.py
│   │   ├── test_distance_mutual_information.py
│   │   ├── test_distance_ncd_arith.py
│   │   ├── test_distance_ncd_bwtrle.py
│   │   ├── test_distance_ncd_bz2.py
│   │   ├── test_distance_ncd_lzma.py
│   │   ├── test_distance_ncd_lzss.py
│   │   ├── test_distance_ncd_paq9a.py
│   │   ├── test_distance_ncd_rle.py
│   │   ├── test_distance_ncd_zlib.py
│   │   ├── test_distance_needleman_wunsch.py
│   │   ├── test_distance_overlap.py
│   │   ├── test_distance_ozbay.py
│   │   ├── test_distance_pattern.py
│   │   ├── test_distance_pearson_chi_squared.py
│   │   ├── test_distance_pearson_heron_ii.py
│   │   ├── test_distance_pearson_ii.py
│   │   ├── test_distance_pearson_iii.py
│   │   ├── test_distance_pearson_phi.py
│   │   ├── test_distance_peirce.py
│   │   ├── test_distance_phonetic_distance.py
│   │   ├── test_distance_phonetic_edit_distance.py
│   │   ├── test_distance_positional_q_gram_dice.py
│   │   ├── test_distance_positional_q_gram_jaccard.py
│   │   ├── test_distance_positional_q_gram_overlap.py
│   │   ├── test_distance_prefix.py
│   │   ├── test_distance_q_gram.py
│   │   ├── test_distance_quantitative_cosine.py
│   │   ├── test_distance_quantitative_dice.py
│   │   ├── test_distance_quantitative_jaccard.py
│   │   ├── test_distance_ratcliff_obershelp.py
│   │   ├── test_distance_raup_crick.py
│   │   ├── test_distance_rees_levenshtein.py
│   │   ├── test_distance_relaxed_hamming.py
│   │   ├── test_distance_roberts.py
│   │   ├── test_distance_rogers_tanimoto.py
│   │   ├── test_distance_rogot_goldberg.py
│   │   ├── test_distance_rouge_l.py
│   │   ├── test_distance_rouge_s.py
│   │   ├── test_distance_rouge_su.py
│   │   ├── test_distance_rouge_w.py
│   │   ├── test_distance_russell_rao.py
│   │   ├── test_distance_saps.py
│   │   ├── test_distance_scott_pi.py
│   │   ├── test_distance_shape.py
│   │   ├── test_distance_shapira_storer_i.py
│   │   ├── test_distance_sift4.py
│   │   ├── test_distance_sift4_extended.py
│   │   ├── test_distance_sift4_simplest.py
│   │   ├── test_distance_single_linkage.py
│   │   ├── test_distance_size.py
│   │   ├── test_distance_smith_waterman.py
│   │   ├── test_distance_soft_cosine.py
│   │   ├── test_distance_softtf_idf.py
│   │   ├── test_distance_sokal_michener.py
│   │   ├── test_distance_sokal_sneath_i.py
│   │   ├── test_distance_sokal_sneath_ii.py
│   │   ├── test_distance_sokal_sneath_iii.py
│   │   ├── test_distance_sokal_sneath_iv.py
│   │   ├── test_distance_sokal_sneath_v.py
│   │   ├── test_distance_sorgenfrei.py
│   │   ├── test_distance_ssk.py
│   │   ├── test_distance_steffensen.py
│   │   ├── test_distance_stiles.py
│   │   ├── test_distance_strcmp95.py
│   │   ├── test_distance_stuart_tau.py
│   │   ├── test_distance_suffix.py
│   │   ├── test_distance_synoname.py
│   │   ├── test_distance_tarantula.py
│   │   ├── test_distance_tarwid.py
│   │   ├── test_distance_tetrachoric.py
│   │   ├── test_distance_tf_idf.py
│   │   ├── test_distance_tichy.py
│   │   ├── test_distance_tulloss_r.py
│   │   ├── test_distance_tulloss_s.py
│   │   ├── test_distance_tulloss_t.py
│   │   ├── test_distance_tulloss_u.py
│   │   ├── test_distance_tversky.py
│   │   ├── test_distance_typo.py
│   │   ├── test_distance_unigram_subtuple.py
│   │   ├── test_distance_unknown_a.py
│   │   ├── test_distance_unknown_b.py
│   │   ├── test_distance_unknown_c.py
│   │   ├── test_distance_unknown_d.py
│   │   ├── test_distance_unknown_e.py
│   │   ├── test_distance_unknown_f.py
│   │   ├── test_distance_unknown_g.py
│   │   ├── test_distance_unknown_h.py
│   │   ├── test_distance_unknown_i.py
│   │   ├── test_distance_unknown_j.py
│   │   ├── test_distance_unknown_k.py
│   │   ├── test_distance_unknown_l.py
│   │   ├── test_distance_unknown_m.py
│   │   ├── test_distance_upholt.py
│   │   ├── test_distance_vps.py
│   │   ├── test_distance_warrens_i.py
│   │   ├── test_distance_warrens_ii.py
│   │   ├── test_distance_warrens_iii.py
│   │   ├── test_distance_warrens_iv.py
│   │   ├── test_distance_warrens_v.py
│   │   ├── test_distance_weighted_jaccard.py
│   │   ├── test_distance_whittaker.py
│   │   ├── test_distance_yates_chi_squared.py
│   │   ├── test_distance_yjhhr.py
│   │   ├── test_distance_yujian_bo.py
│   │   ├── test_distance_yule_q.py
│   │   ├── test_distance_yule_q_ii.py
│   │   └── test_distance_yule_y.py
│   ├── fingerprint/
│   │   ├── __init__.py
│   │   ├── test_fingerprint__fingerprint.py
│   │   ├── test_fingerprint_bwtf.py
│   │   ├── test_fingerprint_bwtrlef.py
│   │   ├── test_fingerprint_consonant.py
│   │   ├── test_fingerprint_count.py
│   │   ├── test_fingerprint_extract.py
│   │   ├── test_fingerprint_extract_position_frequency.py
│   │   ├── test_fingerprint_lacss.py
│   │   ├── test_fingerprint_lc_cutter.py
│   │   ├── test_fingerprint_occurrence.py
│   │   ├── test_fingerprint_occurrence_halved.py
│   │   ├── test_fingerprint_omission_key.py
│   │   ├── test_fingerprint_phonetic.py
│   │   ├── test_fingerprint_position.py
│   │   ├── test_fingerprint_qgram.py
│   │   ├── test_fingerprint_skeleton_key.py
│   │   ├── test_fingerprint_string.py
│   │   └── test_fingerprint_synoname_toolcode.py
│   ├── fuzz/
│   │   ├── __init__.py
│   │   ├── corpora/
│   │   │   ├── basewords.txt
│   │   │   └── blns.txt
│   │   ├── fuzz_test_distance.py
│   │   ├── fuzz_test_fingerprint.py
│   │   ├── fuzz_test_phonetic.py
│   │   ├── fuzz_test_stemmer.py
│   │   └── fuzz_test_tokenizer.py
│   ├── phones/
│   │   ├── __init__.py
│   │   └── test_phones.py
│   ├── phonetic/
│   │   ├── __init__.py
│   │   ├── test_phonetic__phonetic.py
│   │   ├── test_phonetic_ainsworth.py
│   │   ├── test_phonetic_alpha_sis.py
│   │   ├── test_phonetic_beider_morse.py
│   │   ├── test_phonetic_caverphone.py
│   │   ├── test_phonetic_daitch_mokotoff.py
│   │   ├── test_phonetic_davidson.py
│   │   ├── test_phonetic_dolby.py
│   │   ├── test_phonetic_double_metaphone.py
│   │   ├── test_phonetic_eudex.py
│   │   ├── test_phonetic_fonem.py
│   │   ├── test_phonetic_fuzzy_soundex.py
│   │   ├── test_phonetic_haase.py
│   │   ├── test_phonetic_henry_early.py
│   │   ├── test_phonetic_koelner.py
│   │   ├── test_phonetic_lein.py
│   │   ├── test_phonetic_meta_soundex.py
│   │   ├── test_phonetic_metaphone.py
│   │   ├── test_phonetic_mra.py
│   │   ├── test_phonetic_norphone.py
│   │   ├── test_phonetic_nrl.py
│   │   ├── test_phonetic_nysiis.py
│   │   ├── test_phonetic_onca.py
│   │   ├── test_phonetic_parmar_kumbharana.py
│   │   ├── test_phonetic_phonem.py
│   │   ├── test_phonetic_phonet.py
│   │   ├── test_phonetic_phonetic_spanish.py
│   │   ├── test_phonetic_phonex.py
│   │   ├── test_phonetic_phonic.py
│   │   ├── test_phonetic_phonix.py
│   │   ├── test_phonetic_pshp_soundex_first.py
│   │   ├── test_phonetic_pshp_soundex_last.py
│   │   ├── test_phonetic_refined_soundex.py
│   │   ├── test_phonetic_reth_schek.py
│   │   ├── test_phonetic_roger_root.py
│   │   ├── test_phonetic_russell_index.py
│   │   ├── test_phonetic_sfinxbis.py
│   │   ├── test_phonetic_sound_d.py
│   │   ├── test_phonetic_soundex.py
│   │   ├── test_phonetic_soundex_br.py
│   │   ├── test_phonetic_spanish_metaphone.py
│   │   ├── test_phonetic_spfc.py
│   │   ├── test_phonetic_statistics_canada.py
│   │   └── test_phonetic_waahlin.py
│   ├── stats/
│   │   ├── __init__.py
│   │   ├── test_stats_confusion_table.py
│   │   ├── test_stats_mean.py
│   │   └── test_stats_pairwise.py
│   ├── stemmer/
│   │   ├── __init__.py
│   │   ├── test_stemmer__snowball.py
│   │   ├── test_stemmer__stemmer.py
│   │   ├── test_stemmer_caumanns.py
│   │   ├── test_stemmer_clef_german.py
│   │   ├── test_stemmer_clef_german_plus.py
│   │   ├── test_stemmer_clef_swedish.py
│   │   ├── test_stemmer_lovins.py
│   │   ├── test_stemmer_paice_husk.py
│   │   ├── test_stemmer_porter.py
│   │   ├── test_stemmer_porter2.py
│   │   ├── test_stemmer_s_stemmer.py
│   │   ├── test_stemmer_schinke.py
│   │   ├── test_stemmer_snowball_danish.py
│   │   ├── test_stemmer_snowball_dutch.py
│   │   ├── test_stemmer_snowball_german.py
│   │   ├── test_stemmer_snowball_norwegian.py
│   │   ├── test_stemmer_snowball_swedish.py
│   │   └── test_stemmer_uealite.py
│   ├── tokenizer/
│   │   ├── __init__.py
│   │   ├── test_tokenizer__tokenizer.py
│   │   ├── test_tokenizer_c_or_v_cluster.py
│   │   ├── test_tokenizer_character.py
│   │   ├── test_tokenizer_cv_cluster.py
│   │   ├── test_tokenizer_legalipy.py
│   │   ├── test_tokenizer_nltk.py
│   │   ├── test_tokenizer_q_grams.py
│   │   ├── test_tokenizer_q_skipgrams.py
│   │   ├── test_tokenizer_regexp.py
│   │   ├── test_tokenizer_saps.py
│   │   ├── test_tokenizer_sonoripy.py
│   │   ├── test_tokenizer_vc_cluster.py
│   │   ├── test_tokenizer_whitespace.py
│   │   └── test_tokenizer_wordpunct.py
│   └── util/
│       ├── __init__.py
│       ├── test_data.py
│       ├── test_ncr.py
│       └── test_prod.py
└── tox.ini

================================================
FILE CONTENTS
================================================

================================================
FILE: .circleci/config.yml
================================================
# Python CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-python/ for more details
#
version: 2
jobs:
  build:
    docker:
      # specify the version you desire here
      # use `-browsers` prefix for selenium tests, e.g. `3.6.1-browsers`
      - image: circleci/python:3.7
      
      # Specify service dependencies here if necessary
      # CircleCI maintains a library of pre-built images
      # documented at https://circleci.com/docs/2.0/circleci-images/
      # - image: circleci/postgres:9.4

    working_directory: ~/repo

    steps:
      - checkout

      # Download and cache dependencies
      - restore_cache:
          keys:
          - v1-dependencies-{{ checksum "requirements.txt" }}
          # fallback to using the latest cache if no exact match is found
          - v1-dependencies-

      - run:
          name: install dependencies
          command: |
            python3 -m venv venv
            . venv/bin/activate
            python3 -m pip install --upgrade pip
            pip install cython
            echo "tox" >> requirements.txt
            pip install -r requirements.txt -r requirements-test.txt

      - save_cache:
          paths:
            - ./venv
          key: v1-dependencies-{{ checksum "requirements.txt" }}
        
      # run tests!
      # this example uses Django's built-in test-runner
      # other common Python testing frameworks include pytest and nose
      # https://pytest.org
      # https://nose.readthedocs.io
      - run:
          name: run tests
          command: |
            . venv/bin/activate
            tox -e py37

      - store_artifacts:
          path: test-reports
          destination: test-reports


================================================
FILE: .codeclimate.yml
================================================
---
version: "2"
plugins:
  sonar-python:
    enabled: true
  fixme:
    enabled: true
  pylint:
    enabled: true
  radon:
    enabled: true
  duplication:
    enabled: true
  git-legal:
    enabled: true
  shellcheck:
    enabled: true
exclude_patterns:
- "tests/"
- "data/"
- "helpers/"
- "docs/"
- "setup.py"
- "badge_update.py"
- "_beider_morse_data.py"


================================================
FILE: .coveragerc
================================================
[run]
source = abydos
omit =
    */tests/*
parallel = True
branch = True

[report]
exclude_lines =
    pragma: no cover
    if __name__ == .__main__.:


================================================
FILE: .github/CODEOWNERS
================================================
# Lines starting with '#' are comments.
# Each line is a file pattern followed by one or more owners.

# These owners will be the default owners for everything in the repo.
*       @chrislit

# Order is important. The last matching pattern has the most precedence.
# So if a pull request only touches javascript files, only these owners
# will be requested to review.


# You can also use email addresses if you prefer.



================================================
FILE: .gitignore
================================================
build/
cover/
dist/
flake8/
mypy/
abydos.egg-info/
venv/
.settings/
*.bak
*.pyc
*.log
.coverage
.idea/
.mypy_cache/
.pyre/
.tox/
.ipynb_checkpoints
Untitled*.ipynb


================================================
FILE: .gitmodules
================================================
[submodule "tests/regtests"]
    path = tests/regression
    url = https://github.com/chrislit/abydos-regtests.git


================================================
FILE: .project
================================================
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>abydos</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>org.python.pydev.PyDevBuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>org.python.pydev.pythonNature</nature>
	</natures>
</projectDescription>


================================================
FILE: .pypirc
================================================
[distutils]
index-servers=
    pypi
    testpypi

[testpypi]
repository: https://test.pypi.org/legacy/
username: chrislit
#password:

[pypi]
username: chrislit
#password:


================================================
FILE: .pyup.yml
================================================
# autogenerated pyup.io config file 
# see https://pyup.io/docs/configuration/ for all available options
update: "insecure"
schedule: "every day"
pin: False


================================================
FILE: .travis.yml
================================================
language: python

jobs:
  include:
    - os: linux
      arch: arm64
      python: 3.7
    - os: linux
      arch: ppc64le
      python: 3.7
    - os: linux
      dist: xenial
      python: 3.5
    - os: linux
      dist: xenial
      python: 3.6
    - os: linux
      dist: xenial
      python: 3.7
    - os: linux
      dist: xenial
      python: 3.8

notifications:
  email: false

# Install packages
install:
  - travis_retry python -m pip install --upgrade pip
  - travis_retry pip install cython
  - travis_retry pip install paq lzss coveralls -r requirements.txt -r requirements-test.txt
  - travis_retry python setup.py install

# Run test
script:
  - nosetests --verbose --with-coverage --cover-erase --cover-branches --cover-package=abydos --logging-level=INFO --process-timeout=60 --process-restartworker

# Calculate coverage
after_success:
  - coveralls --verbose --rcfile=.coveragerc


================================================
FILE: AUTHORS.rst
================================================

Creator & Maintainer
````````````````````

- Christopher C. Little (`@chrislit <https://github.com/chrislit>`_) <chrisclittle+abydos@gmail.com>


Contributors
````````````

- Szolár Balázs (`@LEFTazs <https://github.com/LEFTazs>`_)


================================================
FILE: CODE_OF_CONDUCT.rst
================================================
Contributor Covenant Code of Conduct
====================================

Our Pledge
----------

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age,
body size, disability, ethnicity, gender identity and expression, level of
experience, nationality, personal appearance, race, religion, or sexual
identity and orientation.

Our Standards
-------------

Examples of behavior that contributes to creating a positive environment
include:

- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

- The use of sexualized language or imagery and unwelcome sexual attention or
  advances
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or electronic
  address, without explicit permission
- Other conduct which could reasonably be considered inappropriate in a
  professional setting

Our Responsibilities
--------------------

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.

Scope
-----

This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an
appointed representative at an online or offline event. Representation of a
project may be further defined and clarified by project maintainers.

Enforcement
-----------

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at chrisclittle+abydos@gmail.com. The
project team will review and investigate all complaints, and will respond in a
way that it deems appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an
incident. Further details of specific enforcement policies may be posted
separately.

Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.

Attribution
-----------

This Code of Conduct is adapted from the `Contributor Covenant`_,
version 1.4, available at `http://contributor-covenant.org/version/1/4`_

.. _Contributor Covenant: http://contributor-covenant.org
.. _`http://contributor-covenant.org/version/1/4`: http://contributor-covenant.org/version/1/4/


================================================
FILE: CODING_STANDARDS.rst
================================================
CODING STANDARDS
----------------

- Nosetest will be used for testing.
- Flake8 will be used for best practice conformance.
- Pydocstyle will be used to ensure documentation style conformance to PEP257
  (for the most part) and NumPy documentation style.
- Black will be used to keep code style consistent.
- 3rd party packages may be used, but must be present in both PyPI and conda
  or conda-forge. They must also support all supported Python versions.

----

git commits
~~~~~~~~~~~

Each commit should be a minimal unit of code or represent minimal changes.
Avoid doing multiple things in a single commit, but describe them in separate
lines of the commit log if this does occur.


git pushes
~~~~~~~~~~

A git push should be performed only under the following conditions:

- library is syntactically correct (compiling correctly) in both Python 3
- library passes all tests and doctests according to nosetests in Python 3
- test coverage is 100% according to nosetests
- flake8 and pydocstyle should report 0 issues
- black code styling has been applied


Notes on architecture
~~~~~~~~~~~~~~~~~~~~~

As of the 0.3.6 release, each major algorithm of the compression, distance,
fingerprint, phonetic, & stemmer subpackages has been moved into a class of its
own. The distance, fingerprint, phonetic, & stemmer classes each inherit from
respectively common classes that define basic methods for these four major
types of classes.

The old functional API for these subpackages has been retained for backwards
compatibility until the release of version 0.6, but its use is deprecated as
of version 0.4. New classes (those not present at the release of version 0.3.6)
will not be given functional API wrappers.

Although, as of the 0.3.6 release, many of the classes that have are pre-0.3.6
functions encapsulated in a class simply consist of a single method that
could be a static method, making these methods static is generally avoided.
As development continues, these classes will take more advantage of object
architecture to store parameters between calls and inherit from base classes.


================================================
FILE: FAQ.rst
================================================
FAQ
===


Why is the library licensed under GPL3+? Can you change the license?
--------------------------------------------------------------------

GPL3 is the only license compatible with all of the various parts of
Abydos that have been ported to Python from other languages. For example,
the Beider-Morse Phonetic Matching algorithm implementation included in
Abydos was ported from their reference implementation in PHP, which is
itself licensed under GPL3.

Accordingly, it's not possible to change to a different license without
removing parts of the library. However, if you have a need for a specific
part of the library and can't use GPL3+ code, contact us and we may be able
to provide it separately or can give guidance on its underlying licensing
status.

What is the purpose of this library?
------------------------------------

A. Abydos is intended to facilitate any manner of string transformation and
comparison might be useful for string matching or record linkage. The two
most significant parts of the library are string distance/similarity
measures and phonetic algorithms/string fingerprint algorithms, but a large
collection of tokenizers, corpus classes, compression algorithms, &
phonetics functions support these and afford greater customization.

Can you add this new feature?
-----------------------------

Maybe. Open an issue at https://github.com/chrislit/abydos/issues and
propose your new feature.

Additional string distance/similarity measures,
phonetic algorithms, string fingerprint algorithms, and string tokenizers
will certainly be added if possible -- but it's helpful to point them
out since we may not be aware of them.

Can I contribute to the project?
--------------------------------

Absolutely. You can take on an unclaimed issue, report bugs, add new
classes, or whatever piques your interest. You are welcome to open an
issue at https://github.com/chrislit/abydos/issues proposing what you'd
like to work on, or you can submit a pull request if you have something
ready to contribute to the repository.

Will you add Metaphone 3?
-------------------------

No. Although Lawrence Philips (author of Metaphone, Double Metaphone, and
Metaphone 3) released Metaphone 3 version 2.1.3 under the BSD 3-clause
license as part of Google Refine, which became OpenRefine
(https://github.com/OpenRefine/OpenRefine/blob/master/main/src/com/google/refine/clustering/binning/Metaphone3.java),
he doesn't want that code used for ports to other languages or used in any
way outside of OpenRefine. In accordance with his wishes, no one has
released Metaphone 3 ports to other languages or included it other
libraries.

Why have you included algorithm X when it is already a part of NLTK/SciPy/...?
------------------------------------------------------------------------------

Abydos is a collection of algorithms with common class & function
interfaces and options. So, while NLTK has Levenshtein & Jaccard string
similarity measures, they don't allow for tunable edit costs or using
the tokenizer of your choice.

Are there similar projects for languages other than Python?
-----------------------------------------------------------

Yes, there are libraries such as:

    - Talisman_ for JavaScript
    - Phonics_ for R (phonetic algorithms)
    - stringmetric_ for Scala

.. _Talisman: https://github.com/Yomguithereal/talisman
.. _Phonics: https://github.com/howardjp/phonics
.. _stringmetric: https://github.com/rockymadden/stringmetric

What is the process for adding a new class to the library?
----------------------------------------------------------

The process of adding a new class follows roughly the following steps:

    - Discover that a new (unimplemented) measure/algorithm/method exists
    - Locate the original source of the algorithm (a journal article, a
      reference implementation, etc.). And save the reference to it in
      docs/abydos.bib.

        - If the original source cannot be located for reference, use an
          adequate secondary source and add its reference info to
          docs/abydos.bib.

    - Implement the class based on its description/reference implementation.
    - Create a test class and add all examples and test cases from the
      original source. Add other reliable test cases from other sources, if
      they are available.
    - Ensure that the class passes all test cases.
    - Add test cases, as necessary, until test coverage reaches 100%, or as
      close to 100% as possible.

Are these really Frequently Asked Questions?
--------------------------------------------

No. Most of these questions have never been explicitly asked.


================================================
FILE: HISTORY.rst
================================================
Release History
---------------

0.6.0 (2020-00-00) *frija*
++++++++++++++++++++++++++

doi:10.5281/zenodo.

Changes:

- The deprecated function-based API wrappers were removed.
- Added type hints
- Made all phonetic algorithms' encode & encode_alpha methods and all string
  fingerprinters' fingerprint methods return values of type str.


0.5.0 (2020-01-10) *ecgtheow*
+++++++++++++++++++++++++++++

doi:10.5281/zenodo.3603514

Changes:

- Support for Python 2.7 was removed.


0.4.1 (2020-01-07) *distant dietrich*
+++++++++++++++++++++++++++++++++++++

doi:10.5281/zenodo.3600548

Changes:

- Support for Python 3.4 was removed. (3.4 reached end-of-life on March 18,
  2019)
- Fuzzy intersections were corrected to avoid over-counting partial
  intersection instances.
- Levenshtein can now return an optimal alignment
- Added the following distance measures:
    - Indice de Similitude-Guth (ISG)
    - INClusion Programme
    - Guth
    - Victorian Panel Study (VPS) score
    - LIG3 similarity
    - Discounted Levenshtein
    - Relaxed Hamming
    - String subsequence kernel (SSK) similarity
    - Phonetic edit distance
    - Henderson-Heron dissimilarity
    - Raup-Crick similarity
    - Millar's binomial deviance dissimilarity
    - Morisita similarity
    - Horn-Morisita similarity
    - Clark's coefficient of divergence
    - Chao's Jaccard similarity
    - Chao's Dice similarity
    - Cao's CY similarity (CYs) and dissimilarity (CYd)
- Added the following fingerprint classes:
    - Taft's Consonant coding
    - Taft's Extract - letter list
    - Taft's Extract - position & frequency
    - L.A. County Sheriff's System
    - Library of Congres Cutter table encoding
- Added the following phonetic algorithms:
    - Ainsworth's grapheme-to-phoneme
    - PHONIC


0.4.0 (2019-05-30) *dietrich*
+++++++++++++++++++++++++++++

doi:10.5281/zenodo.3235034

Version 0.4.0 focuses on distance measures, adding 211 new measures. Attempts
were made to provide normalized version for measure that did not inherently
range from 0 to 1. The other major focus was the addition of 12 tokenizers, in
service of expanding distance measure options.

Changes:

- Support for Python 3.3 was dropped.
- Deprecated functions that merely wrap class methods to maintain API
  compatibility, for removal in 0.6.0
- Added methods to ConfusionTable to return:
    - its internal representation
    - false negative rate
    - false omission rate
    - positive & negative likelihood ratios
    - diagnostic odds ratio
    - error rate
    - prevalence
    - Jaccard index
    - D-measure
    - Phi coefficient
    - joint, actual, & predicted entropies
    - mutual information
    - proficiency (uncertainty coefficient)
    - information gain ratio
    - dependency
    - lift
- Deprecated f-measure & g-measure from ConfusionTable for removal in
  0.6.0
- Added notes to indicate when functions, classes, & methods were added
- Added the following 12 tokenizers:
    - QSkipgrams
    - CharacterTokenizer
    - RegexpTokenizer, WhitespaceTokenizer, & WordpunctTokenizer
    - COrVClusterTokenizer, CVClusterTokenizer, & VCClusterTokenizer
    - SonoriPyTokenizer & LegaliPyTokenizer
    - NLTKTokenizer
    - SAPSTokenizer
- Added the UnigramCorpus class & a facility for downloading data, such as
  pre-processed/trained data, from storage on GitHub
- Added the Wåhlin phonetic encoding
- Added the following 211 similarity/distance/correlation measures:
    - ALINE
    - AMPLE
    - Anderberg
    - Andres & Marzo's Delta
    - Average Linkage
    - AZZOO
    - Baroni-Urbani & Buser I & II
    - Batagelj & Bren
    - Baulieu I-XV
    - Benini I & II
    - Bennet
    - Bhattacharyya
    - BI-SIM
    - BLEU
    - Block Levenshtein
    - Brainerd-Robinson
    - Braun-Blanquet
    - Canberra
    - Chord
    - Clement
    - Cohen's Kappa
    - Cole
    - Complete Linkage
    - Consonni & Todeschini I-V
    - Cormode's LZ
    - Covington
    - Dennis
    - Dice Asymmetric I & II
    - Digby
    - Dispersion
    - Doolittle
    - Dunning
    - Eyraud
    - Fager & McGowan
    - Faith
    - Fellegi-Sunter
    - Fidelity
    - Fleiss
    - Fleiss-Levin-Paik
    - FlexMetric
    - Forbes I & II
    - Fossum
    - FuzzyWuzzy Partial String
    - FuzzyWuzzy Token Set
    - FuzzyWuzzy Token Sort
    - Generalized Fleiss
    - Gilbert
    - Gilbert & Wells
    - Gini I & II
    - Goodall
    - Goodman & Kruskal's Lambda
    - Goodman & Kruskal's Lambda-r
    - Goodman & Kruskal's Tau A & B
    - Gower & Legendre
    - Guttman's Lambda A & B
    - Gwet's AC
    - Hamann
    - Harris & Lahey
    - Hassanat
    - Hawkins & Dotson
    - Hellinger
    - Higuera & Mico
    - Hurlbert
    - Iterative SubString
    - Jaccard-NM
    - Jensen-Shannon
    - Johnson
    - Kendall's Tau
    - Kent & Foster I & II
    - Koppen I & II
    - Kuder & Richardson
    - Kuhns I-XII
    - Kulczynski I & II
    - Longest Common Prefix
    - Longest Common Suffix
    - Lorentzian
    - Maarel
    - Marking
    - Marking Metric
    - MASI
    - Matusita
    - Maxwell & Pilliner
    - McConnaughey
    - McEwen & Michael
    - MetaLevenshtein
    - Michelet
    - MinHash
    - Mountford
    - Mean Squared Contingency
    - Mutual Information
    - NCD with LZSS
    - NCD with PAQ9a
    - Ozbay
    - Pattern
    - Pearson's Chi-Squared
    - Pearson & Heron II
    - Pearson II & III
    - Pearson's Phi
    - Peirce
    - Positional Q-Gram Dice, Jaccard, & Overlap
    - Q-Gram
    - Quantitative Cosine, Dice, & Jaccard
    - Rees-Levenshtein
    - Roberts
    - Rogers & Tanimoto
    - Rogot & Goldberg
    - Rouge-L, -S, -SU, & -W
    - Russell & Rao
    - SAPS
    - Scott's Pi
    - Shape
    - Shapira & Storer I
    - Sift4 Extended
    - Single Linkage
    - Size
    - Soft Cosine
    - SoftTF-IDF
    - Sokal & Michener
    - Sokal & Sneath I-V
    - Sorgenfrei
    - Steffensen
    - Stiles
    - Stuart's Tau
    - Tarantula
    - Tarwid
    - Tetrachoric
    - TF-IDF
    - Tichy
    - Tulloss's R, S, T, & U
    - Unigram Subtuple
    - Unknown A-M
    - Upholt
    - Warrens I-V
    - Weighted Jaccard
    - Whittaker
    - Yates' Chi-Squared
    - YJHHR
    - Yujian & Bo
    - Yule's Q, Q II, & Y
- Four intersection types are now supported for all distance measure that are
  based on _TokenDistance. In addition to basic crisp intersections, soft,
  fuzzy, and group linkage intersections have been provided.


0.3.6 (2018-11-17) *classy carl*
++++++++++++++++++++++++++++++++

doi:10.5281/zenodo.1490537

Changes:

- Most functions were encapsulated into classes.
- Each class is broken out into its own file, with test files paralleling
  library files.
- Documentation was converted from Sphinx markup to Numpy style.
- A tutorial was written for each subpackage.
- Documentation was cleaned up, with math markup corrections and many
  additional links.


0.3.5 (2018-10-31) *cantankerous carl*
++++++++++++++++++++++++++++++++++++++

doi:10.5281/zenodo.1463204

Version 0.3.5 focuses on refactoring the whole project. The API itself remains
largely the same as in previous versions, but underlyingly modules have been
split up. Essentially no new features are added (bugfixes aside) in this
version.

Changes:

- Refactored library and tests into smaller modules
- Broke compression distances (NCD) out into separate functions
- Adopted Black code style
- Added pyproject.toml to use Poetry for packaging (but will continue using
  setuptools and setup.py for the present)
- Minor bug fixes


0.3.0 (2018-10-15) *carl*
+++++++++++++++++++++++++

doi:10.5281/zenodo.1462443

Version 0.3.0 focuses on additional phonetic algorithms, but does add numerous
distance measures, fingerprints, and even a few stemmers. Another focus was
getting everything to build again (including docs) and to move to more
standard modern tools (flake8, tox, etc.).

Changes:

- Fixed implementation of Bag distance
- Updated BMPM to version 3.10
- Fixed Sphinx documentation on readthedocs.org
- Split string fingerprints out of clustering into their own module
- Added support for q-grams to skip-n characters
- New phonetic algorithms:
   - Statistics Canada
   - Lein
   - Roger Root
   - Oxford Name Compression Algorithm (ONCA)
   - Eudex phonetic hash
   - Haase Phonetik
   - Reth-Schek Phonetik
   - FONEM
   - Parmar-Kumbharana
   - Davidson's Consonant Code
   - SoundD
   - PSHP Soundex/Viewex Coding
   - an early version of Henry Code
   - Norphone
   - Dolby Code
   - Phonetic Spanish
   - Spanish Metaphone
   - MetaSoundex
   - SoundexBR
   - NRL English-to-phoneme
- New string fingerprints:
   - Cisłak & Grabowski's occurrence fingerprint
   - Cisłak & Grabowski's occurrence halved fingerprint
   - Cisłak & Grabowski's count fingerprint
   - Cisłak & Grabowski's position fingerprint
   - Synoname Toolcode
- New distance measures:
   - Minkowski distance & similarity
   - Manhattan distance & similarity
   - Euclidean distance & similarity
   - Chebyshev distance & similarity
   - Eudex distances
   - Sift4 distance
   - Baystat distance & similarity
   - Typo distance
   - Indel distance
   - Synoname
- New stemmers:
   - UEA-Lite Stemmer
   - Paice-Husk Stemmer
   - Schinke Latin stemmer
   - S stemmer
- Eliminated ._compat submodule in favor of six
- Transitioned from PEP8 to flake8, etc.
- Phonetic algorithms now consistently use max_length=-1 to indicate that
  there should be no length limit
- Added example notebooks in binder directory


0.2.0 (2015-05-27) *berthold*
+++++++++++++++++++++++++++++

- Added Caumanns' German stemmer
- Added Lovins' English stemmer
- Updated Beider-Morse Phonetic Matching to 3.04
- Added Sphinx documentation


0.1.1 (2015-05-12) *albrecht*
+++++++++++++++++++++++++++++

- First Beta release to PyPI


================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    {one line to give the program's name and a brief idea of what it does.}
    Copyright (C) {year}  {name of author}

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    {project}  Copyright (C) {year}  {fullname}
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.


================================================
FILE: MANIFEST.in
================================================
include *.rst LICENSE abydos.png


================================================
FILE: Pipfile
================================================
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]
tox = "*"
nose = "*"
coverage = "*"
nltk = "*"
syllabipy = "*"

[packages]
numpy = "*"
deprecation = "*"


================================================
FILE: README.rst
================================================
Abydos
======

+------------------+------------------------------------------------------+
| CI & Test Status | |travis| |circle| |azure| |semaphore| |coveralls|    |
+------------------+------------------------------------------------------+
| Code Quality     | |codeclimate| |scrutinizer| |codacy| |codefactor|    |
+------------------+------------------------------------------------------+
| Dependencies     | |requires| |snyk| |pyup| |cii| |black|               |
+------------------+------------------------------------------------------+
| Local Analysis   | |pylint| |flake8| |pydocstyle| |sloccount| |mypy|    |
+------------------+------------------------------------------------------+
| Usage            | |docs| |mybinder| |license| |sourcerank| |zenodo|    |
+------------------+------------------------------------------------------+
| Contribution     | |openhub| |gh-commits| |gh-issues| |gh-stars|        |
+------------------+------------------------------------------------------+
| PyPI             | |pypi| |pypi-dl| |pypi-ver|                          |
+------------------+------------------------------------------------------+
| conda-forge      | |conda| |conda-dl| |conda-platforms|                 |
+------------------+------------------------------------------------------+

.. |travis| image:: https://travis-ci.org/chrislit/abydos.svg?branch=master
    :target: https://travis-ci.org/chrislit/abydos
    :alt: Travis-CI Build Status

.. |circle| image:: https://circleci.com/gh/chrislit/abydos/tree/master.svg?style=shield
    :target: https://circleci.com/gh/chrislit/abydos/tree/master
    :alt: Circle-CI Build Status

.. |azure| image:: https://dev.azure.com/chrislit/abydos/_apis/build/status/chrislit.abydos?branchName=master
    :target: https://dev.azure.com/chrislit/abydos/_build/latest?definitionId=1
    :alt: Azure Pipelines Build Status

.. |semaphore| image:: https://semaphoreci.com/api/v1/chrislit/abydos/branches/master/shields_badge.svg
    :target: https://semaphoreci.com/chrislit/abydos
    :alt: Semaphore Build Status

.. |coveralls| image:: https://coveralls.io/repos/github/chrislit/abydos/badge.svg?branch=master
    :target: https://coveralls.io/github/chrislit/abydos?branch=master
    :alt: Coverage Status

.. |codeclimate| image:: https://codeclimate.com/github/chrislit/abydos/badges/gpa.svg
    :target: https://codeclimate.com/github/chrislit/abydos
    :alt: Code Climate

.. |scrutinizer| image:: https://scrutinizer-ci.com/g/chrislit/abydos/badges/quality-score.png?b=master
    :target: https://scrutinizer-ci.com/g/chrislit/abydos/?branch=master
    :alt: Scrutinizer

.. |codacy| image:: https://api.codacy.com/project/badge/Grade/db79f2c31ea142fb9b5938abe87b0854
    :target: https://www.codacy.com/app/chrislit/abydos?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=chrislit/abydos&amp;utm_campaign=Badge_Grade
    :alt: Codacy

.. |codefactor| image:: https://www.codefactor.io/repository/github/chrislit/abydos/badge
    :target: https://www.codefactor.io/repository/github/chrislit/abydos
    :alt: CodeFactor

.. |requires| image:: https://requires.io/github/chrislit/abydos/requirements.svg?branch=master
    :target: https://requires.io/github/chrislit/abydos/requirements/?branch=master
    :alt: Requirements Status

.. |snyk| image:: https://snyk.io/test/github/chrislit/abydos/badge.svg?targetFile=requirements.txt
    :target: https://snyk.io/test/github/chrislit/abydos?targetFile=requirements.txt
    :alt: Known Vulnerabilities

.. |pyup| image:: https://pyup.io/repos/github/chrislit/abydos/shield.svg
    :target: https://pyup.io/repos/github/chrislit/abydos/
    :alt: Updates

.. |cii| image:: https://bestpractices.coreinfrastructure.org/projects/1598/badge
    :target: https://bestpractices.coreinfrastructure.org/projects/1598
    :alt: CII Best Practices

.. |black| image:: https://img.shields.io/badge/code%20style-black-000000.svg
    :target: https://github.com/ambv/black
    :alt: black

.. |pylint| image:: https://img.shields.io/badge/Pylint-9.13/10-yellowgreen.svg
    :target: #
    :alt: Pylint Score

.. |flake8| image:: https://img.shields.io/badge/flake8-0-brightgreen.svg
    :target: #
    :alt: flake8 Errors

.. |pydocstyle| image:: https://img.shields.io/badge/pydocstyle-0-brightgreen.svg
    :target: #
    :alt: pydocstyle Errors

.. |sloccount| image:: https://img.shields.io/badge/SLOCCount-40,079-blue.svg
    :target: #
    :alt: SLOCCount

.. |mypy| image:: https://img.shields.io/badge/mypy-1.87%25%20imprecise-1F5082.svg
    :target: #
    :alt: mypy Imprecision

.. |docs| image:: https://readthedocs.org/projects/abydos/badge/?version=latest
    :target: https://abydos.readthedocs.org/en/latest/
    :alt: Documentation Status

.. |mybinder| image:: https://img.shields.io/badge/launch-binder-579aca.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFkAAABZCAMAAABi1XidAAAB8lBMVEX///9XmsrmZYH1olJXmsr1olJXmsrmZYH1olJXmsr1olJXmsrmZYH1olL1olJXmsr1olJXmsrmZYH1olL1olJXmsrmZYH1olJXmsr1olL1olJXmsrmZYH1olL1olJXmsrmZYH1olL1olL0nFf1olJXmsrmZYH1olJXmsq8dZb1olJXmsrmZYH1olJXmspXmspXmsr1olL1olJXmsrmZYH1olJXmsr1olL1olJXmsrmZYH1olL1olLeaIVXmsrmZYH1olL1olL1olJXmsrmZYH1olLna31Xmsr1olJXmsr1olJXmsrmZYH1olLqoVr1olJXmsr1olJXmsrmZYH1olL1olKkfaPobXvviGabgadXmsqThKuofKHmZ4Dobnr1olJXmsr1olJXmspXmsr1olJXmsrfZ4TuhWn1olL1olJXmsqBi7X1olJXmspZmslbmMhbmsdemsVfl8ZgmsNim8Jpk8F0m7R4m7F5nLB6jbh7jbiDirOEibOGnKaMhq+PnaCVg6qWg6qegKaff6WhnpKofKGtnomxeZy3noG6dZi+n3vCcpPDcpPGn3bLb4/Mb47UbIrVa4rYoGjdaIbeaIXhoWHmZYHobXvpcHjqdHXreHLroVrsfG/uhGnuh2bwj2Hxk17yl1vzmljzm1j0nlX1olL3AJXWAAAAbXRSTlMAEBAQHx8gICAuLjAwMDw9PUBAQEpQUFBXV1hgYGBkcHBwcXl8gICAgoiIkJCQlJicnJ2goKCmqK+wsLC4usDAwMjP0NDQ1NbW3Nzg4ODi5+3v8PDw8/T09PX29vb39/f5+fr7+/z8/Pz9/v7+zczCxgAABC5JREFUeAHN1ul3k0UUBvCb1CTVpmpaitAGSLSpSuKCLWpbTKNJFGlcSMAFF63iUmRccNG6gLbuxkXU66JAUef/9LSpmXnyLr3T5AO/rzl5zj137p136BISy44fKJXuGN/d19PUfYeO67Znqtf2KH33Id1psXoFdW30sPZ1sMvs2D060AHqws4FHeJojLZqnw53cmfvg+XR8mC0OEjuxrXEkX5ydeVJLVIlV0e10PXk5k7dYeHu7Cj1j+49uKg7uLU61tGLw1lq27ugQYlclHC4bgv7VQ+TAyj5Zc/UjsPvs1sd5cWryWObtvWT2EPa4rtnWW3JkpjggEpbOsPr7F7EyNewtpBIslA7p43HCsnwooXTEc3UmPmCNn5lrqTJxy6nRmcavGZVt/3Da2pD5NHvsOHJCrdc1G2r3DITpU7yic7w/7Rxnjc0kt5GC4djiv2Sz3Fb2iEZg41/ddsFDoyuYrIkmFehz0HR2thPgQqMyQYb2OtB0WxsZ3BeG3+wpRb1vzl2UYBog8FfGhttFKjtAclnZYrRo9ryG9uG/FZQU4AEg8ZE9LjGMzTmqKXPLnlWVnIlQQTvxJf8ip7VgjZjyVPrjw1te5otM7RmP7xm+sK2Gv9I8Gi++BRbEkR9EBw8zRUcKxwp73xkaLiqQb+kGduJTNHG72zcW9LoJgqQxpP3/Tj//c3yB0tqzaml05/+orHLksVO+95kX7/7qgJvnjlrfr2Ggsyx0eoy9uPzN5SPd86aXggOsEKW2Prz7du3VID3/tzs/sSRs2w7ovVHKtjrX2pd7ZMlTxAYfBAL9jiDwfLkq55Tm7ifhMlTGPyCAs7RFRhn47JnlcB9RM5T97ASuZXIcVNuUDIndpDbdsfrqsOppeXl5Y+XVKdjFCTh+zGaVuj0d9zy05PPK3QzBamxdwtTCrzyg/2Rvf2EstUjordGwa/kx9mSJLr8mLLtCW8HHGJc2R5hS219IiF6PnTusOqcMl57gm0Z8kanKMAQg0qSyuZfn7zItsbGyO9QlnxY0eCuD1XL2ys/MsrQhltE7Ug0uFOzufJFE2PxBo/YAx8XPPdDwWN0MrDRYIZF0mSMKCNHgaIVFoBbNoLJ7tEQDKxGF0kcLQimojCZopv0OkNOyWCCg9XMVAi7ARJzQdM2QUh0gmBozjc3Skg6dSBRqDGYSUOu66Zg+I2fNZs/M3/f/Grl/XnyF1Gw3VKCez0PN5IUfFLqvgUN4C0qNqYs5YhPL+aVZYDE4IpUk57oSFnJm4FyCqqOE0jhY2SMyLFoo56zyo6becOS5UVDdj7Vih0zp+tcMhwRpBeLyqtIjlJKAIZSbI8SGSF3k0pA3mR5tHuwPFoa7N7reoq2bqCsAk1HqCu5uvI1n6JuRXI+S1Mco54YmYTwcn6Aeic+kssXi8XpXC4V3t7/ADuTNKaQJdScAAAAAElFTkSuQmCC
    :target: https://mybinder.org/v2/gh/chrislit/abydos/master?filepath=binder
    :alt: Binder

.. |license| image:: https://img.shields.io/badge/License-GPL%20v3+-blue.svg?logo=gnu
    :target: https://www.gnu.org/licenses/gpl-3.0
    :alt: License: GPL v3.0+

.. |sourcerank| image:: https://img.shields.io/librariesio/sourcerank/pypi/abydos.svg
    :target: https://libraries.io/pypi/abydos
    :alt: Libraries.io SourceRank

.. |zenodo| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.3603514.svg
    :target: https://doi.org/10.5281/zenodo.3603514
    :alt: Zenodo

.. |openhub| image:: https://www.openhub.net/p/abydosnlp/widgets/project_thin_badge.gif
    :target: https://www.openhub.net/p/abydosnlp
    :alt: OpenHUB

.. |gh-commits| image:: https://img.shields.io/github/commit-activity/y/chrislit/abydos.svg?logo=github
    :target: https://github.com/chrislit/abydos/graphs/commit-activity
    :alt: GitHub Commits

.. |gh-issues| image:: https://img.shields.io/github/issues-closed/chrislit/abydos.svg?logo=github
    :target: https://github.com/chrislit/abydos/issues?q=
    :alt: GitHub Issues Closed

.. |gh-stars| image:: https://img.shields.io/github/stars/chrislit/abydos.svg?logo=github
    :target: https://github.com/chrislit/abydos/stargazers
    :alt: GitHub Stars

.. |pypi| image:: https://img.shields.io/pypi/v/abydos.svg?logo=python&logoColor=white
    :target: https://pypi.python.org/pypi/abydos
    :alt: PyPI

.. |pypi-dl| image:: https://img.shields.io/pypi/dm/abydos.svg?logo=python&logoColor=white
    :target: https://pypi.python.org/pypi/abydos
    :alt: PyPI downloads/month

.. |pypi-ver| image:: https://img.shields.io/pypi/pyversions/abydos.svg?logo=python&logoColor=white
    :target: https://pypi.python.org/pypi/abydos
    :alt: PyPI versions

.. |conda| image:: https://img.shields.io/conda/vn/conda-forge/abydos.svg?logo=conda-forge
    :target: https://anaconda.org/conda-forge/abydos
    :alt: conda-forge

.. |conda-dl| image:: 	https://img.shields.io/conda/dn/conda-forge/abydos.svg?logo=conda-forge
    :target: https://anaconda.org/conda-forge/abydos
    :alt: conda-forge downloads

.. |conda-platforms| image:: https://img.shields.io/conda/pn/conda-forge/abydos.svg?logo=conda-forge
    :target: https://anaconda.org/conda-forge/abydos
    :alt: conda-forge platforms

|

.. image:: https://raw.githubusercontent.com/chrislit/abydos/master/abydos-small.png
    :target: https://github.com/chrislit/abydos
    :alt: abydos
    :align: right

|
| `Abydos NLP/IR library <https://github.com/chrislit/abydos>`_
| Copyright 2014-2020 by Christopher C. Little

Abydos is a library of phonetic algorithms, string distance measures & metrics,
stemmers, and string fingerprinters including:

- Phonetic algorithms
    - Robert C. Russell's Index
    - American Soundex
    - Refined Soundex
    - Daitch-Mokotoff Soundex
    - Kölner Phonetik
    - NYSIIS
    - Match Rating Algorithm
    - Metaphone
    - Double Metaphone
    - Caverphone
    - Alpha Search Inquiry System
    - Fuzzy Soundex
    - Phonex
    - Phonem
    - Phonix
    - SfinxBis
    - phonet
    - Standardized Phonetic Frequency Code
    - Statistics Canada
    - Lein
    - Roger Root
    - Oxford Name Compression Algorithm (ONCA)
    - Eudex phonetic hash
    - Haase Phonetik
    - Reth-Schek Phonetik
    - FONEM
    - Parmar-Kumbharana
    - Davidson's Consonant Code
    - SoundD
    - PSHP Soundex/Viewex Coding
    - an early version of Henry Code
    - Norphone
    - Dolby Code
    - Phonetic Spanish
    - Spanish Metaphone
    - MetaSoundex
    - SoundexBR
    - NRL English-to-phoneme
    - Beider-Morse Phonetic Matching

- String distance metrics
    - Levenshtein distance
    - Optimal String Alignment distance
    - Levenshtein-Damerau distance
    - Hamming distance
    - Tversky index
    - Sørensen–Dice coefficient & distance
    - Jaccard similarity coefficient & distance
    - overlap similarity & distance
    - Tanimoto coefficient & distance
    - Minkowski distance & similarity
    - Manhattan distance & similarity
    - Euclidean distance & similarity
    - Chebyshev distance
    - cosine similarity & distance
    - Jaro distance
    - Jaro-Winkler distance (incl. the strcmp95 algorithm variant)
    - Longest common substring
    - Ratcliff-Obershelp similarity & distance
    - Match Rating Algorithm similarity
    - Normalized Compression Distance (NCD) & similarity
    - Monge-Elkan similarity & distance
    - Matrix similarity
    - Needleman-Wunsch score
    - Smith-Waterman score
    - Gotoh score
    - Length similarity
    - Prefix, Suffix, and Identity similarity & distance
    - Modified Language-Independent Product Name Search (MLIPNS) similarity &
      distance
    - Bag distance
    - Editex distance
    - Eudex distances
    - Sift4 distance
    - Baystat distance & similarity
    - Typo distance
    - Indel distance
    - Synoname

- Stemmers
    - the Lovins stemmer
    - the Porter and Porter2 (Snowball English) stemmers
    - Snowball stemmers for German, Dutch, Norwegian, Swedish, and Danish
    - CLEF German, German plus, and Swedish stemmers
    - Caumann's German stemmer
    - UEA-Lite Stemmer
    - Paice-Husk Stemmer
    - Schinke Latin stemmer
    - S stemmer

- String Fingerprints
    - string fingerprint
    - q-gram fingerprint
    - phonetic fingerprint
    - Pollock & Zomora's skeleton key
    - Pollock & Zomora's omission key
    - Cisłak & Grabowski's occurrence fingerprint
    - Cisłak & Grabowski's occurrence halved fingerprint
    - Cisłak & Grabowski's count fingerprint
    - Cisłak & Grabowski's position fingerprint
    - Synoname Toolcode


-----

Installation
============

Required libraries:

- NumPy
- deprecation

Optional libraries (all available on PyPI, some available on conda or
conda-forge):

- `SyllabiPy <http://syllabipy.com/>`_
- `NLTK <https://www.nltk.org/>`_
- `PyLZSS <https://github.com/rumbah/pylzss>`_
- `paq <https://github.com/observerss/paq>`_


To install Abydos (master) from Github source::

   git clone https://github.com/chrislit/abydos.git --recursive
   cd abydos
   python setup install

If your default python command calls Python 2.7 but you want to install for
Python 3, you may instead need to call::

   python3 setup install


To install Abydos (latest release) from PyPI using pip::

   pip install abydos

To install from `conda-forge <https://anaconda.org/conda-forge/abydos>`_::

   conda install abydos

It should run on Python 3.5-3.8.

Testing & Contributing
======================

To run the whole test-suite just call tox::

    tox

The tox setup has the following environments: black, py37, doctest,
regression, fuzz, pylint, pydocstyle, flake8, doc8, docs, sloccount, badges, &
build. So if you only want to generate documentation (in HTML, EPUB, & PDF
formats), just call::

    tox -e docs

In order to only run & generate Flake8 reports, call::

    tox -e flake8

Contributions such as bug reports, PRs, suggestions, desired new features, etc.
are welcome through Github
`Issues <https://github.com/chrislit/abydos/issues>`_ &
`Pull requests <https://github.com/chrislit/abydos/pulls>`_.


================================================
FILE: VERSION.rst
================================================
0.6.0


================================================
FILE: abydos/__init__.py
================================================
# Copyright 2014-2020 by Christopher C. Little.
# This file is part of Abydos.
#
# Abydos is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Abydos is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Abydos. If not, see <http://www.gnu.org/licenses/>.

"""abydos.

Abydos NLP/IR library by Christopher C. Little


There are nine major packages that make up Abydos:

    - :py:mod:`.compression` for string compression classes
    - :py:mod:`.corpus` for document corpus classes
    - :py:mod:`.distance` for string distance measure & metric classes
    - :py:mod:`.fingerprint` for string fingerprint classes
    - :py:mod:`.phones` for functions relating to phones and phonemes
    - :py:mod:`.phonetic` for phonetic algorithm classes
    - :py:mod:`.stats` for statistical functions and a confusion table class
    - :py:mod:`.stemmer` for stemming classes
    - :py:mod:`.tokenizer` for tokenizer classes

Classes with each package have consistent method names, as discussed below.
A tenth package, :py:mod:`.util`, contains functions not intended for end-user
use.

----

"""

__version__ = '0.6.0'

__all__ = [
    '__version__',
    'compression',
    'corpus',
    'distance',
    'fingerprint',
    'phones',
    'phonetic',
    'stats',
    'stemmer',
    'tokenizer',
    'util',
]


================================================
FILE: abydos/compression/__init__.py
================================================
# Copyright 2014-2020 by Christopher C. Little.
# This file is part of Abydos.
#
# Abydos is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Abydos is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Abydos. If not, see <http://www.gnu.org/licenses/>.

r"""abydos.compression.

The compression package defines compression and compression-related functions
for use within Abydos, including implementations of the following:

        - :py:class:`.Arithmetic` for arithmetic coding
        - :py:class:`.BWT` for Burrows-Wheeler Transform
        - :py:class:`.RLE` for Run-Length Encoding


Each class exposes ``encode`` and ``decode`` methods for performing and
reversing its encoding. For example, the Burrows-Wheeler Transform can be
performed by creating a :py:class:`.BWT` object and then calling
:py:meth:`.BWT.encode` on a string:

>>> bwt = BWT()
>>> bwt.encode('^BANANA')
'ANNB^AA\x00'

----

"""

from ._arithmetic import Arithmetic
from ._bwt import BWT
from ._rle import RLE

__all__ = [
    'Arithmetic',
    'BWT',
    'RLE',
]


if __name__ == '__main__':
    import doctest

    doctest.testmod()


================================================
FILE: abydos/compression/_arithmetic.py
================================================
# Copyright 2014-2020 by Christopher C. Little.
# This file is part of Abydos.
#
# Abydos is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Abydos is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Abydos. If not, see <http://www.gnu.org/licenses/>.

"""abydos.compression._arithmetic.

Arithmetic coder/decoder
"""

from collections import Counter
from fractions import Fraction
from typing import Dict, Tuple, Union

__all__ = ['Arithmetic']


class Arithmetic:
    """Arithmetic Coder.

    This is based on Andrew Dalke's public domain implementation
    :cite:`Dalke:2005`. It has been ported to use the fractions.Fraction class.


    .. versionadded:: 0.3.6
    """

    _probs = {}  # type: Dict[str, Tuple[Fraction, Fraction]]

    def __init__(self, text: Union[str, None] = None) -> None:
        """Initialize arithmetic coder object.

        Parameters
        ----------
        text : str or None
            The training text


        .. versionadded:: 0.3.6

        """
        if text is not None:
            self.train(text)

    def get_probs(self) -> Dict[str, Tuple[Fraction, Fraction]]:
        """Return the probs dictionary.

        Returns
        -------
        dict
            The dictionary of probabilities


        .. versionadded:: 0.3.6

        """
        return self._probs

    def set_probs(self, probs: Dict[str, Tuple[Fraction, Fraction]]) -> None:
        """Set the probs dictionary.

        Parameters
        ----------
        probs : dict
            The dictionary of probabilities


        .. versionadded:: 0.3.6

        """
        self._probs = probs

    def train(self, text: str) -> None:
        r"""Generate a probability dict from the provided text.

        Text to 0-order probability statistics as a dict

        Parameters
        ----------
        text : str
            The text data over which to calculate probability statistics. This
            must not contain the NUL (0x00) character because that is used to
            indicate the end of data.

        Example
        -------
        >>> ac = Arithmetic()
        >>> ac.train('the quick brown fox jumped over the lazy dog')
        >>> ac.get_probs()
        {' ': (Fraction(0, 1), Fraction(8, 45)),
         'o': (Fraction(8, 45), Fraction(4, 15)),
         'e': (Fraction(4, 15), Fraction(16, 45)),
         'u': (Fraction(16, 45), Fraction(2, 5)),
         't': (Fraction(2, 5), Fraction(4, 9)),
         'r': (Fraction(4, 9), Fraction(22, 45)),
         'h': (Fraction(22, 45), Fraction(8, 15)),
         'd': (Fraction(8, 15), Fraction(26, 45)),
         'z': (Fraction(26, 45), Fraction(3, 5)),
         'y': (Fraction(3, 5), Fraction(28, 45)),
         'x': (Fraction(28, 45), Fraction(29, 45)),
         'w': (Fraction(29, 45), Fraction(2, 3)),
         'v': (Fraction(2, 3), Fraction(31, 45)),
         'q': (Fraction(31, 45), Fraction(32, 45)),
         'p': (Fraction(32, 45), Fraction(11, 15)),
         'n': (Fraction(11, 15), Fraction(34, 45)),
         'm': (Fraction(34, 45), Fraction(7, 9)),
         'l': (Fraction(7, 9), Fraction(4, 5)),
         'k': (Fraction(4, 5), Fraction(37, 45)),
         'j': (Fraction(37, 45), Fraction(38, 45)),
         'i': (Fraction(38, 45), Fraction(13, 15)),
         'g': (Fraction(13, 15), Fraction(8, 9)),
         'f': (Fraction(8, 9), Fraction(41, 45)),
         'c': (Fraction(41, 45), Fraction(14, 15)),
         'b': (Fraction(14, 15), Fraction(43, 45)),
         'a': (Fraction(43, 45), Fraction(44, 45)),
         '\x00': (Fraction(44, 45), Fraction(1, 1))}


        .. versionadded:: 0.1.0
        .. versionchanged:: 0.3.6
            Encapsulated in class

        """
        if '\x00' in text:
            text = text.replace('\x00', ' ')
        counts = Counter(text)
        counts['\x00'] = 1
        tot_letters = sum(counts.values())

        tot = 0
        self._probs = {}
        prev = Fraction(0)
        for char, count in sorted(
            counts.items(), key=lambda x: (x[1], x[0]), reverse=True
        ):
            follow = Fraction(tot + count, tot_letters)
            self._probs[char] = (prev, follow)
            prev = follow
            tot = tot + count

    def encode(self, text: str) -> Tuple[int, int]:
        """Encode a text using arithmetic coding.

        Text and the 0-order probability statistics -> longval, nbits

        The encoded number is Fraction(longval, 2**nbits)

        Parameters
        ----------
        text : str
            A string to encode

        Returns
        -------
        tuple
            The arithmetically coded text

        Example
        -------
        >>> ac = Arithmetic('the quick brown fox jumped over the lazy dog')
        >>> ac.encode('align')
        (16720586181, 34)


        .. versionadded:: 0.1.0
        .. versionchanged:: 0.3.6
            Encapsulated in class

        """
        if '\x00' in text:
            text = text.replace('\x00', ' ')
        minval = Fraction(0)
        maxval = Fraction(1)

        for char in text + '\x00':
            prob_range = self._probs[char]
            delta = maxval - minval
            maxval = minval + prob_range[1] * delta
            minval = minval + prob_range[0] * delta

        # I tried without the /2 just to check.  Doesn't work.
        # Keep scaling up until the error range is >= 1.  That
        # gives me the minimum number of bits needed to resolve
        # down to the end-of-data character.
        delta = (maxval - minval) / 2
        nbits = int(0)
        while delta < 1:
            nbits += 1
            delta *= 2
        # The below condition shouldn't ever be false
        if nbits == 0:  # pragma: no cover
            return 0, 0
        # using -1 instead of /2
        avg = (maxval + minval) * 2 ** (nbits - 1)
        # Could return a rational instead ...
        # the division truncation is deliberate
        return avg.numerator // avg.denominator, nbits

    def decode(self, longval: int, nbits: int) -> str:
        """Decode the number to a string using the given statistics.

        Parameters
        ----------
        longval : int
            The first part of an encoded tuple from encode
        nbits : int
            The second part of an encoded tuple from encode

        Returns
        -------
        str
            The arithmetically decoded text

        Example
        -------
        >>> ac = Arithmetic('the quick brown fox jumped over the lazy dog')
        >>> ac.decode(16720586181, 34)
        'align'


        .. versionadded:: 0.1.0
        .. versionchanged:: 0.3.6
            Encapsulated in class

        """
        val = Fraction(longval, int(1) << nbits)
        letters = []

        probs_items = [
            (char, minval, maxval)
            for (char, (minval, maxval)) in self._probs.items()
        ]

        char = '\x00'
        minval = maxval = Fraction(0)
        while True:
            for (char, minval, maxval) in probs_items:  # noqa: B007
                if minval <= val < maxval:
                    break

            if char == '\x00':
                break
            letters.append(char)
            delta = maxval - minval
            val = (val - minval) / delta
        return ''.join(letters)


if __name__ == '__main__':
    import doctest

    doctest.testmod(optionflags=doctest.NORMALIZE_WHITESPACE)


================================================
FILE: abydos/compression/_bwt.py
================================================
# Copyright 2014-2020 by Christopher C. Little.
# This file is part of Abydos.
#
# Abydos is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Abydos is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Abydos. If not, see <http://www.gnu.org/licenses/>.

"""abydos.compression._bwt.

Burrows-Wheeler Transform encoder/decoder
"""

__all__ = ['BWT']


class BWT:
    """Burrows-Wheeler Transform.

    The Burrows-Wheeler transform is an attempt at placing similar characters
    together to improve compression.
    Cf. :cite:`Burrows:1994`.

    .. versionadded:: 0.3.6
    """

    def __init__(self, terminator: str = '\0') -> None:
        """Initialize BWT instance.

        Parameters
        ----------
        terminator : str
            A character added to signal the end of the string


        .. versionadded:: 0.4.0

        """
        self._terminator = terminator

    def encode(self, word: str) -> str:
        r"""Return the Burrows-Wheeler transformed form of a word.

        Parameters
        ----------
        word : str
            The word to transform using BWT

        Returns
        -------
        str
            Word encoded by BWT

        Raises
        ------
        ValueError
            Specified terminator absent from code.

        Examples
        --------
        >>> bwt = BWT()
        >>> bwt.encode('align')
        'n\x00ilag'
        >>> bwt.encode('banana')
        'annb\x00aa'

        >>> bwt = BWT('@')
        >>> bwt.encode('banana')
        'annb@aa'


        .. versionadded:: 0.1.0
        .. versionchanged:: 0.3.6
            Encapsulated in class

        """
        if word:
            if self._terminator in word:
                raise ValueError(
                    'Specified terminator, {}, already in word.'.format(
                        self._terminator if self._terminator != '\0' else '\\0'
                    )
                )
            else:
                word += self._terminator
                wordlist = sorted(
                    word[i:] + word[:i] for i in range(len(word))
                )
                return ''.join([w[-1] for w in wordlist])
        else:
            return self._terminator

    def decode(self, code: str) -> str:
        r"""Return a word decoded from BWT form.

        Parameters
        ----------
        code : str
            The word to transform from BWT form

        Returns
        -------
        str
            Word decoded by BWT

        Raises
        ------
        ValueError
            Specified terminator absent from code.

        Examples
        --------
        >>> bwt = BWT()
        >>> bwt.decode('n\x00ilag')
        'align'
        >>> bwt.decode('annb\x00aa')
        'banana'

        >>> bwt = BWT('@')
        >>> bwt.decode('annb@aa')
        'banana'


        .. versionadded:: 0.1.0
        .. versionchanged:: 0.3.6
            Encapsulated in class

        """
        if code:
            if self._terminator not in code:
                raise ValueError(
                    'Specified terminator, {}, absent from code.'.format(
                        self._terminator if self._terminator != '\0' else '\\0'
                    )
                )
            else:
                wordlist = [''] * len(code)
                for i in range(len(code)):
                    wordlist = sorted(
                        code[i] + wordlist[i] for i in range(len(code))
                    )
                rows = [w for w in wordlist if w[-1] == self._terminator][0]
                return rows.rstrip(self._terminator)
        else:
            return ''


if __name__ == '__main__':
    import doctest

    doctest.testmod()


================================================
FILE: abydos/compression/_rle.py
================================================
# Copyright 2014-2020 by Christopher C. Little.
# This file is part of Abydos.
#
# Abydos is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Abydos is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Abydos. If not, see <http://www.gnu.org/licenses/>.

"""abydos.compression._rle.

Run-Length Encoding encoder/decoder
"""

from itertools import groupby

__all__ = ['RLE']


class RLE:
    """Run-Length Encoding.

    Cf. :cite:`Robinson:1967`.

    Based on http://rosettacode.org/wiki/Run-length_encoding#Python
    :cite:`rosettacode:2018`. This is licensed GFDL 1.2.

    Digits 0-9 cannot be in text.

    .. versionadded:: 0.3.6
    """

    def encode(self, text: str) -> str:
        r"""Perform encoding of run-length-encoding (RLE).

        Parameters
        ----------
        text : str
            A text string to encode

        Returns
        -------
        str
            Word decoded by RLE

        Examples
        --------
        >>> from abydos.compression import BWT
        >>> rle = RLE()
        >>> bwt = BWT()
        >>> rle.encode(bwt.encode('align'))
        'n\x00ilag'
        >>> rle.encode('align')
        'align'

        >>> rle.encode(bwt.encode('banana'))
        'annb\x00aa'
        >>> rle.encode('banana')
        'banana'

        >>> rle.encode(bwt.encode('aaabaabababa'))
        'ab\x00abbab5a'
        >>> rle.encode('aaabaabababa')
        '3abaabababa'

        .. versionadded:: 0.1.0
        .. versionchanged:: 0.3.6
            Encapsulated in class

        """
        if text:
            text = ''.join(
                (str(n) + k if n > 2 else (k if n == 1 else 2 * k))
                for n, k in ((len(list(g)), k) for k, g in groupby(text))
            )
        return text

    def decode(self, text: str) -> str:
        r"""Perform decoding of run-length-encoding (RLE).

        Parameters
        ----------
        text : str
            A text string to decode

        Returns
        -------
        str
            Word decoded by RLE

        Examples
        --------
        >>> from abydos.compression import BWT
        >>> rle = RLE()
        >>> bwt = BWT()
        >>> bwt.decode(rle.decode('n\x00ilag'))
        'align'
        >>> rle.decode('align')
        'align'

        >>> bwt.decode(rle.decode('annb\x00aa'))
        'banana'
        >>> rle.decode('banana')
        'banana'

        >>> bwt.decode(rle.decode('ab\x00abbab5a'))
        'aaabaabababa'
        >>> rle.decode('3abaabababa')
        'aaabaabababa'

        .. versionadded:: 0.1.0
        .. versionchanged:: 0.3.6
            Encapsulated in class

        """
        mult = ''
        decoded = []
        for letter in list(text):
            if not letter.isdigit():
                if mult:
                    decoded.append(int(mult) * letter)
                    mult = ''
                else:
                    decoded.append(letter)
            else:
                mult += letter

        text = ''.join(decoded)
        return text


if __name__ == '__main__':
    import doctest

    doctest.testmod()


================================================
FILE: abydos/corpus/__init__.py
================================================
# Copyright 2014-2020 by Christopher C. Little.
# This file is part of Abydos.
#
# Abydos is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Abydos is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Abydos. If not, see <http://www.gnu.org/licenses/>.

r"""abydos.corpus.

The corpus package includes basic and n-gram corpus classes:

- :py:class:`Corpus`
- :py:class:`NGramCorpus`
- :py:class:`UnigramCorpus`


As a quick example of :py:class:`.Corpus`:

>>> tqbf = 'The quick brown fox jumped over the lazy dog.\n\n'
>>> tqbf += 'And then it slept.\n\n And the dog ran off.'
>>> corp = Corpus(tqbf)
>>> corp.docs()
[[['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy', 'dog.']],
[['And', 'then', 'it', 'slept.']], [['And', 'the', 'dog', 'ran', 'off.']]]
>>> round(corp.idf('dog'), 10)
1.0986122887
>>> round(corp.idf('the'), 10)
0.4054651081

Here, each sentence is a separate "document". We can retrieve IDF values from
the :py:class:`.Corpus`. The same :py:class:`.Corpus` can be used to initialize
an :py:class:`.NGramCorpus` and calculate TF values:

>>> ngcorp = NGramCorpus(corp)
>>> ngcorp.get_count('the')
2
>>> ngcorp.get_count('fox')
1


----

"""

from ._corpus import Corpus
from ._ngram_corpus import NGramCorpus
from ._unigram_corpus import UnigramCorpus

__all__ = ['Corpus', 'NGramCorpus', 'UnigramCorpus']


if __name__ == '__main__':
    import doctest

    doctest.testmod()


================================================
FILE: abydos/corpus/_corpus.py
================================================
# Copyright 2014-2020 by Christopher C. Little.
# This file is part of Abydos.
#
# Abydos is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Abydos is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Abydos. If not, see <http://www.gnu.org/licenses/>.

"""abydos.corpus._corpus.

The Corpus class is a container for linguistic corpora and includes various
functions for corpus statistics, language modeling, etc.
"""

from math import log
from typing import Callable, List, Optional, Set, Tuple, Union

from ..tokenizer import _Tokenizer

__all__ = ['Corpus']


class Corpus:
    """Corpus class.

    Internally, this is a list of lists or lists. The corpus itself is a list
    of documents. Each document is an ordered list of sentences in those
    documents. And each sentence is an ordered list of words that make up that
    sentence.

    .. versionadded:: 0.1.0
    """

    def __init__(
        self,
        corpus_text: str = '',
        doc_split: str = '\n\n',
        sent_split: str = '\n',
        filter_chars: Union[str, List[str], Set[str], Tuple[str]] = '',
        stop_words: Optional[Union[List[str], Set[str], Tuple[str]]] = None,
        word_tokenizer: Optional[_Tokenizer] = None,
    ) -> None:
        r"""Initialize Corpus.

        By default, when importing a corpus:
            - two consecutive newlines divide documents
            - single newlines divide sentences
            - other whitespace divides words

        Parameters
        ----------
        corpus_text : str
            The corpus text as a single string
        doc_split : str
            A character or string used to split corpus_text into documents
        sent_split : str
            A character or string used to split documents into sentences
        filter_chars : list or set or tuple or str
            A list of characters (as a string, tuple, set, or list) to filter
            out of the corpus text
        stop_words : list or set or tuple
            A list of words (as a tuple, set, or list) to filter out of the
            corpus text
        word_tokenizer : _Tokenizer
            A tokenizer to apply to each sentence in order to retrieve the
            individual "word" tokens. If set to none, str.split() will be used.

        Example
        -------
        >>> tqbf = 'The quick brown fox jumped over the lazy dog.\n'
        >>> tqbf += 'And then it slept.\n And the dog ran off.'
        >>> corp = Corpus(tqbf)


        .. versionadded:: 0.1.0

        """
        self.corpus = []  # type: List[List[List[str]]]
        self.doc_split = doc_split
        self.sent_split = sent_split

        for document in corpus_text.split(doc_split):
            doc = []  # type: List[List[str]]
            for sentence in document.split(sent_split):
                if word_tokenizer:
                    word_tokenizer.tokenize(sentence)
                    sentence_words = word_tokenizer.get_list()
                else:
                    sentence_words = sentence.split()

                if stop_words:
                    for word in set(stop_words):
                        while word in sentence_words:
                            sentence_words.remove(word)
                for char in set(filter_chars):
                    sentence_words = [
                        word.replace(char, '') for word in sentence_words
                    ]
                if sentence_words:
                    doc.append(sentence_words)
            if doc:
                self.corpus.append(doc)

    def docs(self) -> List[List[List[str]]]:
        r"""Return the docs in the corpus.

        Each list within a doc represents the sentences in that doc, each of
        which is in turn a list of words within that sentence.

        Returns
        -------
        [[[str]]]
            The docs in the corpus as a list of lists of lists of strs

        Example
        -------
        >>> tqbf = 'The quick brown fox jumped over the lazy dog.\n'
        >>> tqbf += 'And then it slept.\n And the dog ran off.'
        >>> corp = Corpus(tqbf)
        >>> corp.docs()
        [[['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy',
        'dog.'], ['And', 'then', 'it', 'slept.'], ['And', 'the', 'dog',
        'ran', 'off.']]]
        >>> len(corp.docs())
        1


        .. versionadded:: 0.1.0

        """
        return self.corpus

    def paras(self) -> List[List[List[str]]]:
        r"""Return the paragraphs in the corpus.

        Each list within a paragraph represents the sentences in that doc, each
        of which is in turn a list of words within that sentence.
        This is identical to the docs() member function and exists only to
        mirror part of NLTK's API for corpora.

        Returns
        -------
        [[[str]]]
            The paragraphs in the corpus as a list of lists of lists of strs

        Example
        -------
        >>> tqbf = 'The quick brown fox jumped over the lazy dog.\n'
        >>> tqbf += 'And then it slept.\n And the dog ran off.'
        >>> corp = Corpus(tqbf)
        >>> corp.paras()
        [[['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy',
        'dog.'], ['And', 'then', 'it', 'slept.'], ['And', 'the', 'dog',
        'ran', 'off.']]]
        >>> len(corp.paras())
        1


        .. versionadded:: 0.1.0

        """
        return self.docs()

    def sents(self) -> List[List[str]]:
        r"""Return the sentences in the corpus.

        Each list within a sentence represents the words within that sentence.

        Returns
        -------
        [[str]]
            The sentences in the corpus as a list of lists of strs

        Example
        -------
        >>> tqbf = 'The quick brown fox jumped over the lazy dog.\n'
        >>> tqbf += 'And then it slept.\n And the dog ran off.'
        >>> corp = Corpus(tqbf)
        >>> corp.sents()
        [['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy',
        'dog.'], ['And', 'then', 'it', 'slept.'], ['And', 'the', 'dog',
        'ran', 'off.']]
        >>> len(corp.sents())
        3

        """
        return [words for sents in self.corpus for words in sents]

    def words(self) -> List[str]:
        r"""Return the words in the corpus as a single list.

        Returns
        -------
        [str]
            The words in the corpus as a list of strs

        Example
        -------
        >>> tqbf = 'The quick brown fox jumped over the lazy dog.\n'
        >>> tqbf += 'And then it slept.\n And the dog ran off.'
        >>> corp = Corpus(tqbf)
        >>> corp.words()
        ['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy',
        'dog.', 'And', 'then', 'it', 'slept.', 'And', 'the', 'dog', 'ran',
        'off.']
        >>> len(corp.words())
        18


        .. versionadded:: 0.1.0

        """
        return [words for sents in self.sents() for words in sents]

    def docs_of_words(self) -> List[List[str]]:
        r"""Return the docs in the corpus, with sentences flattened.

        Each list within the corpus represents all the words of that document.
        Thus the sentence level of lists has been flattened.

        Returns
        -------
        [[str]]
            The docs in the corpus as a list of list of strs

        Example
        -------
        >>> tqbf = 'The quick brown fox jumped over the lazy dog.\n'
        >>> tqbf += 'And then it slept.\n And the dog ran off.'
        >>> corp = Corpus(tqbf)
        >>> corp.docs_of_words()
        [['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy',
        'dog.', 'And', 'then', 'it', 'slept.', 'And', 'the', 'dog', 'ran',
        'off.']]
        >>> len(corp.docs_of_words())
        1


        .. versionadded:: 0.1.0

        """
        return [
            [words for sents in doc for words in sents] for doc in self.corpus
        ]

    def raw(self) -> str:
        r"""Return the raw corpus.

        This is reconstructed by joining sub-components with the corpus' split
        characters

        Returns
        -------
        str
            The raw corpus

        Example
        -------
        >>> tqbf = 'The quick brown fox jumped over the lazy dog.\n'
        >>> tqbf += 'And then it slept.\n And the dog ran off.'
        >>> corp = Corpus(tqbf)
        >>> print(corp.raw())
        The quick brown fox jumped over the lazy dog.
        And then it slept.
        And the dog ran off.
        >>> len(corp.raw())
        85


        .. versionadded:: 0.1.0

        """
        doc_list = []
        for doc in self.corpus:
            sent_list = []
            for sent in doc:
                sent_list.append(' '.join(sent))
            doc_list.append(self.sent_split.join(sent_list))
            del sent_list
        return self.doc_split.join(doc_list)

    def idf(
        self, term: str, transform: Optional[Callable[[str], str]] = None
    ) -> float:
        r"""Calculate the Inverse Document Frequency of a term in the corpus.

        Parameters
        ----------
        term : str
            The term to calculate the IDF of
        transform : function
            A function to apply to each document term before checking for the
            presence of term

        Returns
        -------
        float
            The IDF

        Examples
        --------
        >>> tqbf = 'The quick brown fox jumped over the lazy dog.\n\n'
        >>> tqbf += 'And then it slept.\n\n And the dog ran off.'
        >>> corp = Corpus(tqbf)
        >>> print(corp.docs())
        [[['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy',
        'dog.']],
        [['And', 'then', 'it', 'slept.']],
        [['And', 'the', 'dog', 'ran', 'off.']]]
        >>> round(corp.idf('dog'), 10)
        1.0986122887
        >>> round(corp.idf('the'), 10)
        0.4054651081


        .. versionadded:: 0.1.0

        """
        docs_with_term = 0
        docs = self.docs_of_words()
        for doc in docs:
            doc_set = set(doc)
            if transform:
                transformed_doc = []
                for word in doc_set:
                    transformed_doc.append(transform(word))
                doc_set = set(transformed_doc)

            if term in doc_set:
                docs_with_term += 1

        if docs_with_term == 0:
            return float('inf')

        return log(len(docs) / docs_with_term)


if __name__ == '__main__':
    import doctest

    doctest.testmod(optionflags=doctest.NORMALIZE_WHITESPACE)


================================================
FILE: abydos/corpus/_ngram_corpus.py
================================================
# Copyright 2014-2020 by Christopher C. Little.
# This file is part of Abydos.
#
# Abydos is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Abydos is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Abydos. If not, see <http://www.gnu.org/licenses/>.

"""abydos.corpus._ngram_corpus.

The NGram class is a container for an n-gram corpus
"""

from codecs import open as c_open
from collections import Counter
from typing import Any, Counter as TCounter, List, Optional, Union, cast

from ._corpus import Corpus

__all__ = ['NGramCorpus']


class NGramCorpus:
    """The NGramCorpus class.

    Internally, this is a set of recursively embedded dicts, with n layers for
    a corpus of n-grams. E.g. for a trigram corpus, this will be a dict of
    dicts of dicts. More precisely, ``collections.Counter`` is used in place of
    dict, making multiset operations valid and allowing unattested n-grams to
    be queried.

    The key at each level is a word. The value at the most deeply embedded
    level is a numeric value representing the frequency of the trigram. E.g.
    the trigram frequency of 'colorless green ideas' would be the value stored
    in ``self.ngcorpus['colorless']['green']['ideas'][None]``.

    .. versionadded:: 0.3.0
    """

    def __init__(self, corpus: Optional[Corpus] = None) -> None:
        r"""Initialize Corpus.

        Parameters
        ----------
        corpus : Corpus
            The :py:class:`Corpus` from which to initialize the n-gram corpus.
            By default, this is None, which initializes an empty NGramCorpus.
            This can then be populated using NGramCorpus methods.

        Raises
        ------
        TypeError
            Corpus argument must be None or of type abydos.Corpus

        Example
        -------
        >>> tqbf = 'The quick brown fox jumped over the lazy dog.\n'
        >>> tqbf += 'And then it slept.\n And the dog ran off.'
        >>> ngcorp = NGramCorpus(Corpus(tqbf))


        .. versionadded:: 0.3.0

        """
        self.ngcorpus = Counter()  # type: TCounter[Optional[str]]

        if corpus is None:
            return
        elif isinstance(corpus, Corpus):
            self.corpus_importer(corpus)
        else:
            raise TypeError(
                'Corpus argument must be None or of type abydos.corpus.Corpus. '
                + str(type(corpus))
                + ' found.'
            )

    def corpus_importer(
        self,
        corpus: Corpus,
        n_val: int = 1,
        bos: str = '_START_',
        eos: str = '_END_',
    ) -> None:
        r"""Fill in self.ngcorpus from a Corpus argument.

        Parameters
        ----------
        corpus : Corpus
            The Corpus from which to initialize the n-gram corpus
        n_val : int
            Maximum n value for n-grams
        bos : str
            String to insert as an indicator of beginning of sentence
        eos : str
            String to insert as an indicator of end of sentence

        Raises
        ------
        TypeError
            Corpus argument of the Corpus class required.

        Example
        -------
        >>> tqbf = 'The quick brown fox jumped over the lazy dog.\n'
        >>> tqbf += 'And then it slept.\n And the dog ran off.'
        >>> ngcorp = NGramCorpus()
        >>> ngcorp.corpus_importer(Corpus(tqbf))


        .. versionadded:: 0.3.0

        """
        if not corpus or not isinstance(corpus, Corpus):
            raise TypeError('Corpus argument of the Corpus class required.')

        sentences = corpus.sents()

        for sent in sentences:
            ngs = Counter(sent)
            for key in ngs.keys():
                self._add_to_ngcorpus(self.ngcorpus, [key], ngs[key])

            if n_val > 1:
                if bos and bos != '':
                    sent = [bos] + sent
                if eos and eos != '':
                    sent += [eos]
                for i in range(2, n_val + 1):
                    for j in range(len(sent) - i + 1):
                        self._add_to_ngcorpus(
                            self.ngcorpus, sent[j : j + i], 1
                        )

    def get_count(
        self,
        ngram: Union[str, List[str]],
        corpus: Optional[TCounter[Optional[str]]] = None,
    ) -> int:
        r"""Get the count of an n-gram in the corpus.

        Parameters
        ----------
        ngram : str or List[str]
            The n-gram to retrieve the count of from the n-gram corpus
        corpus : Counter[str] or None
            The corpus

        Returns
        -------
        int
            The n-gram count

        Examples
        --------
        >>> tqbf = 'The quick brown fox jumped over the lazy dog.\n'
        >>> tqbf += 'And then it slept.\n And the dog ran off.'
        >>> ngcorp = NGramCorpus(Corpus(tqbf))
        >>> ngcorp.get_count('the')
        2
        >>> ngcorp.get_count('fox')
        1


        .. versionadded:: 0.3.0

        """
        if not corpus:
            corpus = self.ngcorpus

        # if ngram is empty, we're at our leaf node and should return the
        # value in None
        if not ngram:
            return corpus[None]

        # support strings or lists/tuples by splitting strings
        if isinstance(ngram, str):
            ngram = ngram.split()

        # if ngram is not empty, check whether the next element is in the
        # corpus; if so, recurse--if not, return 0
        if ngram[0] in corpus:
            return self.get_count(
                ngram[1:],
                cast(Optional[TCounter[Optional[str]]], corpus[ngram[0]]),
            )
        return 0

    def _add_to_ngcorpus(
        self, corpus: Any, words: List[str], count: int
    ) -> None:
        """Build up a corpus entry recursively.

        Parameters
        ----------
        corpus : Corpus or counter
            The corpus
        words : [str]
            Words to add to the corpus
        count : int
            Count of words


        .. versionadded:: 0.3.0

        """
        if words[0] not in corpus:
            corpus[words[0]] = Counter()

        if len(words) == 1:
            corpus[words[0]][None] += count
        else:
            self._add_to_ngcorpus(corpus[words[0]], words[1:], count)

    def gng_importer(self, corpus_file: str) -> None:
        """Fill in self.ngcorpus from a Google NGram corpus file.

        Parameters
        ----------
        corpus_file : str
            The filename of the Google NGram file from which to initialize the
            n-gram corpus


        .. versionadded:: 0.3.0

        """
        with c_open(corpus_file, 'r', encoding='utf-8') as gng:
            for line in gng:
                line_parts = line.rstrip().split('\t')
                words = line_parts[0].split()

                self._add_to_ngcorpus(self.ngcorpus, words, int(line_parts[2]))


if __name__ == '__main__':
    import doctest

    doctest.testmod()


================================================
FILE: abydos/corpus/_unigram_corpus.py
================================================
# Copyright 2019-2020 by Christopher C. Little.
# This file is part of Abydos.
#
# Abydos is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Abydos is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Abydos. If not, see <http://www.gnu.org/licenses/>.

"""abydos.corpus._unigram_corpus.

Unigram Corpus
"""

import pickle  # noqa: S403
from codecs import open as c_open
from collections import Counter, defaultdict
from math import log1p
from typing import Any, Callable, DefaultDict, Optional, Tuple

from ..tokenizer import _Tokenizer

__all__ = ['UnigramCorpus']


def _dd_default(*args: Any) -> Tuple[int, int]:
    return 0, 0


class UnigramCorpus:
    """Unigram corpus class.

    Largely intended for calculating inverse document frequence (IDF) from a
    large corpus of unigram (or smaller) tokens, this class encapsulates a
    dict object. Each key is a unigram token whose value is a tuple consisting
    of the number of times a term appeared and the number of distinct documents
    in which it appeared.

    .. versionadded:: 0.4.0
    """

    def __init__(
        self,
        corpus_text: str = '',
        documents: int = 0,
        word_transform: Optional[Callable[[str], str]] = None,
        word_tokenizer: Optional[_Tokenizer] = None,
    ) -> None:
        r"""Initialize UnigramCorpus.

        Parameters
        ----------
        corpus_text : str
            The corpus text as a single string
        documents : int
            The number of documents in the corpus. If equal to 0 (the default)
            then the maximum from the internal dictionary's distinct
            documents count.
        word_transform : function
            A function to apply to each term before term tokenization and
            addition to the corpus. One might use this, for example, to apply
            Soundex encoding to each term.
        word_tokenizer : _Tokenizer
            A tokenizer to apply to each sentence in order to retrieve the
            individual "word" tokens. If set to none, str.split() will be used.

        Example
        -------
        >>> tqbf = 'The quick brown fox jumped over the lazy dog.\n'
        >>> tqbf += 'And then it slept.\n And the dog ran off.'
        >>> corp = UnigramCorpus(tqbf)


        .. versionadded:: 0.4.0

        """
        self.corpus = defaultdict(
            _dd_default
        )  # type: DefaultDict[str, Tuple[int, int]]
        self.transform = word_transform
        self.tokenizer = word_tokenizer
        self.doc_count = documents

        self.add_document(corpus_text)

    def add_document(self, doc: str) -> None:
        """Add a new document to the corpus.

        Parameters
        ----------
        doc : str
            A string, representing the document to be added.


        .. versionadded:: 0.4.0

        """
        for word, count in Counter(doc.split()).items():
            self._add_word(word, count, 1)
        self.doc_count += 1

    def save_corpus(self, filename: str) -> None:
        """Save the corpus to a file.

        This employs pickle to save the corpus (a defaultdict). Other
        parameters of the corpus, such as its word_tokenizer, will not be
        affected and should be set during initialization.

        Parameters
        ----------
        filename : str
            The filename to save the corpus to.


        .. versionadded:: 0.4.0

        """
        with open(filename, mode='wb') as pkl:
            pickle.dump(self.corpus, pkl)

    def load_corpus(self, filename: str) -> None:
        """Load the corpus from a file.

        This employs pickle to load the corpus (a defaultdict). Other
        parameters of the corpus, such as its word_tokenizer, will not be
        affected and should be set during initialization.

        Parameters
        ----------
        filename : str
            The filename to load the corpus from.


        .. versionadded:: 0.4.0

        """
        with open(filename, mode='rb') as pkl:
            self.corpus = pickle.load(pkl)  # noqa: S301
        self._update_doc_count()

    def _update_doc_count(self) -> None:
        """Update document count, if necessary.

        .. versionadded:: 0.4.0
        """
        max_docs = max(self.corpus.values(), key=lambda _: _[1])[1]
        self.doc_count = max(max_docs, self.doc_count)

    def _add_word(self, word: str, count: int, doc_count: int) -> None:
        """Add a term to the corpus, possibly after tokenization.

        Parameters
        ----------
        word : str
            Word to add to the corpus
        count : int
            Count of word appearances
        doc_count : int
            Count of distinct documents in which word appears


        .. versionadded:: 0.4.0

        """
        if self.transform is not None:
            word = self.transform(word)

        if self.tokenizer is not None:
            self.tokenizer.tokenize(word)
            tokens = self.tokenizer.get_counter()
            for tok in tokens:
                n = tokens[tok] * count
                prior_count, prior_doc_count = self.corpus[tok]
                self.corpus[tok] = (
                    prior_count + n,
                    prior_doc_count + doc_count,
                )
        else:
            prior_count, prior_doc_count = self.corpus[word]
            self.corpus[word] = (
                prior_count + count,
                prior_doc_count + doc_count,
            )

    def gng_importer(self, corpus_file: str) -> None:
        """Fill in self.corpus from a Google NGram corpus file.

        Parameters
        ----------
        corpus_file : file
            The Google NGram file from which to initialize the n-gram corpus


        .. versionadded:: 0.4.0

        """
        with c_open(corpus_file, 'r', encoding='utf-8') as gng:
            for line in gng:
                word, _, count, doc_count = line.rstrip().split('\t')
                if '_' in word:
                    word = word[: word.find('_')]

                self._add_word(word, int(count), int(doc_count))
            self._update_doc_count()

    def idf(self, term: str) -> float:
        r"""Calculate the Inverse Document Frequency of a term in the corpus.

        Parameters
        ----------
        term : str
            The term to calculate the IDF of

        Returns
        -------
        float
            The IDF

        Examples
        --------
        >>> tqbf = 'the quick brown fox jumped over the lazy dog\n\n'
        >>> tqbf += 'and then it slept\n\n and the dog ran off'
        >>> corp = UnigramCorpus(tqbf)
        >>> round(corp.idf('dog'), 10)
        0.6931471806
        >>> round(corp.idf('the'), 10)
        0.6931471806


        .. versionadded:: 0.4.0

        """
        if term in self.corpus:
            count, term_doc_count = self.corpus[term]
            return log1p(self.doc_count / term_doc_count)
        else:
            return float('inf')


if __name__ == '__main__':
    import doctest

    doctest.testmod(optionflags=doctest.NORMALIZE_WHITESPACE)


================================================
FILE: abydos/distance/__init__.py
================================================
# Copyright 2014-2020 by Christopher C. Little.
# This file is part of Abydos.
#
# Abydos is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Abydos is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Abydos. If not, see <http://www.gnu.org/licenses/>.

r"""abydos.distance.

The distance package implements string distance measure and metric classes:

These include traditional Levenshtein edit distance and related algorithms:

    - Levenshtein distance (:py:class:`.Levenshtein`)
    - Optimal String Alignment distance (:py:class:`.Levenshtein` with
      ``mode='osa'``)
    - Damerau-Levenshtein distance (:py:class:`.DamerauLevenshtein`)
    - Yujian-Bo normalized edit distance (:py:class:`.YujianBo`)
    - Higuera-Micó contextual normalized edit distance
      (:py:class:`.HigueraMico`)
    - Indel distance (:py:class:`.Indel`)
    - Syllable Alignment Pattern Searching similarity
      (:py:class:`.distance.SAPS`)
    - Meta-Levenshtein distance (:py:class:`.MetaLevenshtein`)
    - Covington distance (:py:class:`.Covington`)
    - ALINE distance (:py:class:`.ALINE`)
    - FlexMetric distance (:py:class:`.FlexMetric`)
    - BI-SIM similarity (:py:class:`.BISIM`)
    - Discounted Levenshtein distance (:py:class:`.DiscountedLevenshtein`)
    - Phonetic edit distance (:py:class:`.PhoneticEditDistance`)

Hamming distance (:py:class:`.Hamming`), Relaxed Hamming distance
(:py:class:`.RelaxedHamming`), and the closely related Modified
Language-Independent Product Name Search distance (:py:class:`.MLIPNS`) are
provided.

Block edit distances:

    - Tichy edit distance (:py:class:`.Tichy`)
    - Levenshtein distance with block operations
      (:py:class:`.BlockLevenshtein`)
    - Rees-Levenshtein distance (:py:class:`.ReesLevenshtein`)
    - Cormode's LZ distance (:py:class:`.CormodeLZ`)
    - Shapira-Storer I edit distance with block moves, greedy algorithm
      (:py:class:`.ShapiraStorerI`)

Distance metrics developed for the US Census or derived from them are included:

    - Jaro distance (:py:class:`.JaroWinkler` with ``mode='Jaro'``)
    - Jaro-Winkler distance (:py:class:`.JaroWinkler`)
    - Strcmp95 distance (:py:class:`.Strcmp95`)
    - Iterative-SubString (I-Sub) correlation
      (:py:class:`.IterativeSubString`)

A large set of multi-set token-based distance metrics are provided, including:

    - AMPLE similarity (:py:class:`.AMPLE`)
    - AZZOO similarity (:py:class:`.AZZOO`)
    - Anderberg's D similarity (:py:class:`.Anderberg`)
    - Andres & Marzo's Delta correlation (:py:class:`.AndresMarzoDelta`)
    - Baroni-Urbani & Buser I similarity (:py:class:`.BaroniUrbaniBuserI`)
    - Baroni-Urbani & Buser II correlation (:py:class:`.BaroniUrbaniBuserII`)
    - Batagelj & Bren similarity (:py:class:`.BatageljBren`)
    - Baulieu I distance (:py:class:`.BaulieuI`)
    - Baulieu II distance (:py:class:`.BaulieuII`)
    - Baulieu III distance (:py:class:`.BaulieuIII`)
    - Baulieu IV distance (:py:class:`.BaulieuIV`)
    - Baulieu V distance (:py:class:`.BaulieuV`)
    - Baulieu VI distance (:py:class:`.BaulieuVI`)
    - Baulieu VII distance (:py:class:`.BaulieuVII`)
    - Baulieu VIII distance (:py:class:`.BaulieuVIII`)
    - Baulieu IX distance (:py:class:`.BaulieuIX`)
    - Baulieu X distance (:py:class:`.BaulieuX`)
    - Baulieu XI distance (:py:class:`.BaulieuXI`)
    - Baulieu XII distance (:py:class:`.BaulieuXII`)
    - Baulieu XIII distance (:py:class:`.BaulieuXIII`)
    - Baulieu XIV distance (:py:class:`.BaulieuXIV`)
    - Baulieu XV distance (:py:class:`.BaulieuXV`)
    - Benini I correlation (:py:class:`.BeniniI`)
    - Benini II correlation (:py:class:`.BeniniII`)
    - Bennet's S correlation (:py:class:`.Bennet`)
    - Braun-Blanquet similarity (:py:class:`.BraunBlanquet`)
    - Canberra distance (:py:class:`.Canberra`)
    - Cao similarity (:py:class:`.Cao`)
    - Chao's Dice similarity (:py:class:`.ChaoDice`)
    - Chao's Jaccard similarity (:py:class:`.ChaoJaccard`)
    - Chebyshev distance (:py:class:`.Chebyshev`)
    - Chord distance (:py:class:`.Chord`)
    - Clark distance (:py:class:`.Clark`)
    - Clement similarity (:py:class:`.Clement`)
    - Cohen's Kappa similarity (:py:class:`.CohenKappa`)
    - Cole correlation (:py:class:`.Cole`)
    - Consonni & Todeschini I similarity (:py:class:`.ConsonniTodeschiniI`)
    - Consonni & Todeschini II similarity (:py:class:`.ConsonniTodeschiniII`)
    - Consonni & Todeschini III similarity (:py:class:`.ConsonniTodeschiniIII`)
    - Consonni & Todeschini IV similarity (:py:class:`.ConsonniTodeschiniIV`)
    - Consonni & Todeschini V correlation (:py:class:`.ConsonniTodeschiniV`)
    - Cosine similarity (:py:class:`.Cosine`)
    - Dennis similarity (:py:class:`.Dennis`)
    - Dice's Asymmetric I similarity (:py:class:`.DiceAsymmetricI`)
    - Dice's Asymmetric II similarity (:py:class:`.DiceAsymmetricII`)
    - Digby correlation (:py:class:`.Digby`)
    - Dispersion correlation (:py:class:`.Dispersion`)
    - Doolittle similarity (:py:class:`.Doolittle`)
    - Dunning similarity (:py:class:`.Dunning`)
    - Euclidean distance (:py:class:`.Euclidean`)
    - Eyraud similarity (:py:class:`.Eyraud`)
    - Fager & McGowan similarity (:py:class:`.FagerMcGowan`)
    - Faith similarity (:py:class:`.Faith`)
    - Fidelity similarity (:py:class:`.Fidelity`)
    - Fleiss correlation (:py:class:`.Fleiss`)
    - Fleiss-Levin-Paik similarity (:py:class:`.FleissLevinPaik`)
    - Forbes I similarity (:py:class:`.ForbesI`)
    - Forbes II correlation (:py:class:`.ForbesII`)
    - Fossum similarity (:py:class:`.Fossum`)
    - Generalized Fleiss correlation (:py:class:`.GeneralizedFleiss`)
    - Gilbert correlation (:py:class:`.Gilbert`)
    - Gilbert & Wells similarity (:py:class:`.GilbertWells`)
    - Gini I correlation (:py:class:`.GiniI`)
    - Gini II correlation (:py:class:`.GiniII`)
    - Goodall similarity (:py:class:`.Goodall`)
    - Goodman & Kruskal's Lambda similarity (:py:class:`.GoodmanKruskalLambda`)
    - Goodman & Kruskal's Lambda-r correlation
      (:py:class:`.GoodmanKruskalLambdaR`)
    - Goodman & Kruskal's Tau A similarity (:py:class:`.GoodmanKruskalTauA`)
    - Goodman & Kruskal's Tau B similarity (:py:class:`.GoodmanKruskalTauB`)
    - Gower & Legendre similarity (:py:class:`.GowerLegendre`)
    - Guttman Lambda A similarity (:py:class:`.GuttmanLambdaA`)
    - Guttman Lambda B similarity (:py:class:`.GuttmanLambdaB`)
    - Gwet's AC correlation (:py:class:`.GwetAC`)
    - Hamann correlation (:py:class:`.Hamann`)
    - Harris & Lahey similarity (:py:class:`.HarrisLahey`)
    - Hassanat distance (:py:class:`.Hassanat`)
    - Hawkins & Dotson similarity (:py:class:`.HawkinsDotson`)
    - Hellinger distance (:py:class:`.Hellinger`)
    - Henderson-Heron similarity (:py:class:`.HendersonHeron`)
    - Horn-Morisita similarity (:py:class:`.HornMorisita`)
    - Hurlbert correlation (:py:class:`.Hurlbert`)
    - Jaccard similarity (:py:class:`.Jaccard`) &
      Tanimoto coefficient (:py:meth:`.Jaccard.tanimoto_coeff`)
    - Jaccard-NM similarity (:py:class:`.JaccardNM`)
    - Johnson similarity (:py:class:`.Johnson`)
    - Kendall's Tau correlation (:py:class:`.KendallTau`)
    - Kent & Foster I similarity (:py:class:`.KentFosterI`)
    - Kent & Foster II similarity (:py:class:`.KentFosterII`)
    - Köppen I correlation (:py:class:`.KoppenI`)
    - Köppen II similarity (:py:class:`.KoppenII`)
    - Kuder & Richardson correlation (:py:class:`.KuderRichardson`)
    - Kuhns I correlation (:py:class:`.KuhnsI`)
    - Kuhns II correlation (:py:class:`.KuhnsII`)
    - Kuhns III correlation (:py:class:`.KuhnsIII`)
    - Kuhns IV correlation (:py:class:`.KuhnsIV`)
    - Kuhns V correlation (:py:class:`.KuhnsV`)
    - Kuhns VI correlation (:py:class:`.KuhnsVI`)
    - Kuhns VII correlation (:py:class:`.KuhnsVII`)
    - Kuhns VIII correlation (:py:class:`.KuhnsVIII`)
    - Kuhns IX correlation (:py:class:`.KuhnsIX`)
    - Kuhns X correlation (:py:class:`.KuhnsX`)
    - Kuhns XI correlation (:py:class:`.KuhnsXI`)
    - Kuhns XII similarity (:py:class:`.KuhnsXII`)
    - Kulczynski I similarity (:py:class:`.KulczynskiI`)
    - Kulczynski II similarity (:py:class:`.KulczynskiII`)
    - Lorentzian distance (:py:class:`.Lorentzian`)
    - Maarel correlation (:py:class:`.Maarel`)
    - Manhattan distance (:py:class:`.Manhattan`)
    - Morisita similarity (:py:class:`.Morisita`)
    - marking distance (:py:class:`.Marking`)
    - marking metric (:py:class:`.MarkingMetric`)
    - MASI similarity (:py:class:`.MASI`)
    - Matusita distance (:py:class:`.Matusita`)
    - Maxwell & Pilliner correlation (:py:class:`.MaxwellPilliner`)
    - McConnaughey correlation (:py:class:`.McConnaughey`)
    - McEwen & Michael correlation (:py:class:`.McEwenMichael`)
    - mean squared contingency correlation (:py:class:`.MSContingency`)
    - Michael similarity (:py:class:`.Michael`)
    - Michelet similarity (:py:class:`.Michelet`)
    - Millar distance (:py:class:`.Millar`)
    - Minkowski distance (:py:class:`.Minkowski`)
    - Mountford similarity (:py:class:`.Mountford`)
    - Mutual Information similarity (:py:class:`.MutualInformation`)
    - Overlap distance (:py:class:`.Overlap`)
    - Pattern difference (:py:class:`.Pattern`)
    - Pearson & Heron II correlation (:py:class:`.PearsonHeronII`)
    - Pearson II similarity (:py:class:`.PearsonII`)
    - Pearson III correlation (:py:class:`.PearsonIII`)
    - Pearson's Chi-Squared similarity (:py:class:`.PearsonChiSquared`)
    - Pearson's Phi correlation (:py:class:`.PearsonPhi`)
    - Peirce correlation (:py:class:`.Peirce`)
    - q-gram distance (:py:class:`.QGram`)
    - Raup-Crick similarity (:py:class:`.RaupCrick`)
    - Rogers & Tanimoto similarity (:py:class:`.RogersTanimoto`)
    - Rogot & Goldberg similarity (:py:class:`.RogotGoldberg`)
    - Russell & Rao similarity (:py:class:`.RussellRao`)
    - Scott's Pi correlation (:py:class:`.ScottPi`)
    - Shape difference (:py:class:`.Shape`)
    - Size difference (:py:class:`.Size`)
    - Sokal & Michener similarity (:py:class:`.SokalMichener`)
    - Sokal & Sneath I similarity (:py:class:`.SokalSneathI`)
    - Sokal & Sneath II similarity (:py:class:`.SokalSneathII`)
    - Sokal & Sneath III similarity (:py:class:`.SokalSneathIII`)
    - Sokal & Sneath IV similarity (:py:class:`.SokalSneathIV`)
    - Sokal & Sneath V similarity (:py:class:`.SokalSneathV`)
    - Sørensen–Dice coefficient (:py:class:`.Dice`)
    - Sorgenfrei similarity (:py:class:`.Sorgenfrei`)
    - Steffensen similarity (:py:class:`.Steffensen`)
    - Stiles similarity (:py:class:`.Stiles`)
    - Stuart's Tau correlation (:py:class:`.StuartTau`)
    - Tarantula similarity (:py:class:`.Tarantula`)
    - Tarwid correlation (:py:class:`.Tarwid`)
    - Tetrachoric correlation coefficient (:py:class:`.Tetrachronic`)
    - Tulloss' R similarity (:py:class:`.TullossR`)
    - Tulloss' S similarity (:py:class:`.TullossS`)
    - Tulloss' T similarity (:py:class:`.TullossT`)
    - Tulloss' U similarity (:py:class:`.TullossU`)
    - Tversky distance (:py:class:`.Tversky`)
    - Weighted Jaccard similarity (:py:class:`.WeightedJaccard`)
    - Unigram subtuple similarity (:py:class:`.UnigramSubtuple`)
    - Unknown A correlation (:py:class:`.UnknownA`)
    - Unknown B similarity (:py:class:`.UnknownB`)
    - Unknown C similarity (:py:class:`.UnknownC`)
    - Unknown D similarity (:py:class:`.UnknownD`)
    - Unknown E correlation (:py:class:`.UnknownE`)
    - Unknown F similarity (:py:class:`.UnknownF`)
    - Unknown G similarity (:py:class:`.UnknownG`)
    - Unknown H similarity (:py:class:`.UnknownH`)
    - Unknown I similarity (:py:class:`.UnknownI`)
    - Unknown J similarity (:py:class:`.UnknownJ`)
    - Unknown K distance (:py:class:`.UnknownK`)
    - Unknown L similarity (:py:class:`.UnknownL`)
    - Unknown M similarity (:py:class:`.UnknownM`)
    - Upholt similarity (:py:class:`.Upholt`)
    - Warrens I correlation (:py:class:`.WarrensI`)
    - Warrens II similarity (:py:class:`.WarrensII`)
    - Warrens III correlation (:py:class:`.WarrensIII`)
    - Warrens IV similarity (:py:class:`.WarrensIV`)
    - Warrens V similarity (:py:class:`.WarrensV`)
    - Whittaker distance (:py:class:`.Whittaker`)
    - Yates' Chi-Squared similarity (:py:class:`.YatesChiSquared`)
    - Yule's Q correlation (:py:class:`.YuleQ`)
    - Yule's Q II distance (:py:class:`.YuleQII`)
    - Yule's Y correlation (:py:class:`.YuleY`)
    - YJHHR distance (:py:class:`.YJHHR`)

    - Bhattacharyya distance (:py:class:`.Bhattacharyya`)
    - Brainerd-Robinson similarity (:py:class:`.BrainerdRobinson`)
    - Quantitative Cosine similarity (:py:class:`.QuantitativeCosine`)
    - Quantitative Dice similarity (:py:class:`.QuantitativeDice`)
    - Quantitative Jaccard similarity (:py:class:`.QuantitativeJaccard`)
    - Roberts similarity (:py:class:`.Roberts`)
    - Average linkage distance (:py:class:`.AverageLinkage`)
    - Single linkage distance (:py:class:`.SingleLinkage`)
    - Complete linkage distance (:py:class:`.CompleteLinkage`)

    - Bag distance (:py:class:`.Bag`)
    - Soft cosine similarity (:py:class:`.SoftCosine`)
    - Monge-Elkan distance (:py:class:`.MongeElkan`)
    - TF-IDF similarity (:py:class:`.TFIDF`)
    - SoftTF-IDF similarity (:py:class:`.SoftTFIDF`)
    - Jensen-Shannon divergence (:py:class:`.JensenShannon`)
    - Simplified Fellegi-Sunter distance (:py:class:`.FellegiSunter`)
    - MinHash similarity (:py:class:`.MinHash`)

    - BLEU similarity (:py:class:`.BLEU`)
    - Rouge-L similarity (:py:class:`.RougeL`)
    - Rouge-W similarity (:py:class:`.RougeW`)
    - Rouge-S similarity (:py:class:`.RougeS`)
    - Rouge-SU similarity (:py:class:`.RougeSU`)

    - Positional Q-Gram Dice distance (:py:class:`.PositionalQGramDice`)
    - Positional Q-Gram Jaccard distance (:py:class:`.PositionalQGramJaccard`)
    - Positional Q-Gram Overlap distance (:py:class:`.PositionalQGramOverlap`)

Three popular sequence alignment algorithms are provided:

    - Needleman-Wunsch score (:py:class:`.NeedlemanWunsch`)
    - Smith-Waterman score (:py:class:`.SmithWaterman`)
    - Gotoh score (:py:class:`.Gotoh`)

Classes relating to substring and subsequence distances include:

    - Longest common subsequence (:py:class:`.LCSseq`)
    - Longest common substring (:py:class:`.LCSstr`)
    - Ratcliff-Obserhelp distance (:py:class:`.RatcliffObershelp`)

A number of simple distance classes provided in the package include:

    - Identity distance (:py:class:`.Ident`)
    - Length distance (:py:class:`.Length`)
    - Prefix distance (:py:class:`.Prefix`)
    - Suffix distance (:py:class:`.Suffix`)

Normalized compression distance classes for a variety of compression algorithms
are provided:

    - zlib (:py:class:`.NCDzlib`)
    - bzip2 (:py:class:`.NCDbz2`)
    - lzma (:py:class:`.NCDlzma`)
    - LZSS (:py:class:`.NCDlzss`)
    - arithmetic coding (:py:class:`.NCDarith`)
    - PAQ9A (:py:class:`.NCDpaq9a`)
    - BWT plus RLE (:py:class:`.NCDbwtrle`)
    - RLE (:py:class:`.NCDrle`)

Three similarity measures from SeatGeek's FuzzyWuzzy:

    - FuzzyWuzzy Partial String similarity
      (:py:class:`FuzzyWuzzyPartialString`)
    - FuzzyWuzzy Token Sort similarity (:py:class:`FuzzyWuzzyTokenSort`)
    - FuzzyWuzzy Token Set similarity (:py:class:`FuzzyWuzzyTokenSet`)

A convenience class, allowing one to pass a list of string transforms (phonetic
algorithms, string transforms, and/or stemmers) and, optionally, a string
distance measure to compute the similarity/distance of two strings that have
undergone each transform, is provided in:

    - Phonetic distance (:py:class:`.PhoneticDistance`)

The remaining distance measures & metrics include:

    - Western Airlines' Match Rating Algorithm comparison
      (:py:class:`.distance.MRA`)
    - Editex (:py:class:`.Editex`)
    - Bavarian Landesamt für Statistik distance (:py:class:`.Baystat`)
    - Eudex distance (:py:class:`.distance.Eudex`)
    - Sift4 distance (:py:class:`.Sift4`, :py:class:`.Sift4Simplest`,
      :py:class:`.Sift4Extended`)
    - Typo distance (:py:class:`.Typo`)
    - Synoname (:py:class:`.Synoname`)
    - Ozbay metric (:py:class:`.Ozbay`)
    - Indice de Similitude-Guth (:py:class:`.ISG`)
    - INClusion Programme (:py:class:`.Inclusion`)
    - Guth (:py:class:`.Guth`)
    - Victorian Panel Study (:py:class:`.VPS`)
    - LIG3 (:py:class:`.LIG3`)
    - String subsequence kernel (SSK) (:py:class:`.SSK`)

Most of the distance and similarity measures have ``sim`` and ``dist`` methods,
which return a measure that is normalized to the range :math:`[0, 1]`. The
normalized distance and similarity are always complements, so the normalized
distance will always equal 1 - the similarity for a particular measure supplied
with the same input. Some measures have an absolute distance method
``dist_abs`` and/or a similarity score ``sim_score``, which are not limited to
any range.

The first three methods can be demonstrated using the
:py:class:`.DamerauLevenshtein` class, while :py:class:`.SmithWaterman` offers
the fourth:

>>> dl = DamerauLevenshtein()
>>> dl.dist_abs('orange', 'strange')
2
>>> dl.dist('orange', 'strange')
0.2857142857142857
>>> dl.sim('orange', 'strange')
0.7142857142857143

>>> sw = SmithWaterman()
>>> sw.sim_score('TGTTACGG', 'GGTTGACTA')
4.0

----

"""

from ._aline import ALINE
from ._ample import AMPLE
from ._anderberg import Anderberg
from ._andres_marzo_delta import AndresMarzoDelta
from ._average_linkage import AverageLinkage
from ._azzoo import AZZOO
from ._bag import Bag
from ._baroni_urbani_buser_i import BaroniUrbaniBuserI
from ._baroni_urbani_buser_ii import BaroniUrbaniBuserII
from ._batagelj_bren import BatageljBren
from ._baulieu_i import BaulieuI
from ._baulieu_ii import BaulieuII
from ._baulieu_iii import BaulieuIII
from ._baulieu_iv import BaulieuIV
from ._baulieu_ix import BaulieuIX
from ._baulieu_v import BaulieuV
from ._baulieu_vi import BaulieuVI
from ._baulieu_vii import BaulieuVII
from ._baulieu_viii import BaulieuVIII
from ._baulieu_x import BaulieuX
from ._baulieu_xi import BaulieuXI
from ._baulieu_xii import BaulieuXII
from ._baulieu_xiii import BaulieuXIII
from ._baulieu_xiv import BaulieuXIV
from ._baulieu_xv import BaulieuXV
from ._baystat import Baystat
from ._benini_i import BeniniI
from ._benini_ii import BeniniII
from ._bennet import Bennet
from ._bhattacharyya import Bhattacharyya
from ._bisim import BISIM
from ._bleu import BLEU
from ._block_levenshtein import BlockLevenshtein
from ._brainerd_robinson import BrainerdRobinson
from ._braun_blanquet import BraunBlanquet
from ._canberra import Canberra
from ._cao import Cao
from ._chao_dice import ChaoDice
from ._chao_jaccard import ChaoJaccard
from ._chebyshev import Chebyshev
from ._chord import Chord
from ._clark import Clark
from ._clement import Clement
from ._cohen_kappa import CohenKappa
from ._cole import Cole
from ._complete_linkage import CompleteLinkage
from ._consonni_todeschini_i import ConsonniTodeschiniI
from ._consonni_todeschini_ii import ConsonniTodeschiniII
from ._consonni_todeschini_iii import ConsonniTodeschiniIII
from ._consonni_todeschini_iv import ConsonniTodeschiniIV
from ._consonni_todeschini_v import ConsonniTodeschiniV
from ._cormode_lz import CormodeLZ
from ._cosine import Cosine
from ._covington import Covington
from ._damerau_levenshtein import DamerauLevenshtein
from ._dennis import Dennis
from ._dice import Dice
from ._dice_asymmetric_i import DiceAsymmetricI
from ._dice_asymmetric_ii import DiceAsymmetricII
from ._digby import Digby
from ._discounted_levenshtein import DiscountedLevenshtein
from ._dispersion import Dispersion
from ._distance import _Distance
from ._doolittle import Doolittle
from ._dunning import Dunning
from ._editex import Editex
from ._euclidean import Euclidean
from ._eudex import Eudex
from ._eyraud import Eyraud
from ._fager_mcgowan import FagerMcGowan
from ._faith import Faith
from ._fellegi_sunter import FellegiSunter
from ._fidelity import Fidelity
from ._fleiss import Fleiss
from ._fleiss_levin_paik import FleissLevinPaik
from ._flexmetric import FlexMetric
from ._forbes_i import ForbesI
from ._forbes_ii import ForbesII
from ._fossum import Fossum
from ._fuzzywuzzy_partial_string import FuzzyWuzzyPartialString
from ._fuzzywuzzy_token_set import FuzzyWuzzyTokenSet
from ._fuzzywuzzy_token_sort import FuzzyWuzzyTokenSort
from ._generalized_fleiss import GeneralizedFleiss
from ._gilbert import Gilbert
from ._gilbert_wells import GilbertWells
from ._gini_i import GiniI
from ._gini_ii import GiniII
from ._goodall import Goodall
from ._goodman_kruskal_lambda import GoodmanKruskalLambda
from ._goodman_kruskal_lambda_r import GoodmanKruskalLambdaR
from ._goodman_kruskal_tau_a import GoodmanKruskalTauA
from ._goodman_kruskal_tau_b import GoodmanKruskalTauB
from ._gotoh import Gotoh
from ._gower_legendre import GowerLegendre
from ._guth import Guth
from ._guttman_lambda_a import GuttmanLambdaA
from ._guttman_lambda_b import GuttmanLambdaB
from ._gwet_ac import GwetAC
from ._hamann import Hamann
from ._hamming import Hamming
from ._harris_lahey import HarrisLahey
from ._hassanat import Hassanat
from ._hawkins_dotson import HawkinsDotson
from ._hellinger import Hellinger
from ._henderson_heron import HendersonHeron
from ._higuera_mico import HigueraMico
from ._horn_morisita import HornMorisita
from ._hurlbert import Hurlbert
from ._ident import Ident
from ._inclusion import Inclusion
from ._indel import Indel
from ._isg import ISG
from ._iterative_substring import IterativeSubString
from ._jaccard import Jaccard
from ._jaccard_nm import JaccardNM
from ._jaro_winkler import JaroWinkler
from ._jensen_shannon import JensenShannon
from ._johnson import Johnson
from ._kendall_tau import KendallTau
from ._kent_foster_i import KentFosterI
from ._kent_foster_ii import KentFosterII
from ._koppen_i import KoppenI
from ._koppen_ii import KoppenII
from ._kuder_richardson import KuderRichardson
from ._kuhns_i import KuhnsI
from ._kuhns_ii import KuhnsII
from ._kuhns_iii import KuhnsIII
from ._kuhns_iv import KuhnsIV
from ._kuhns_ix import KuhnsIX
from ._kuhns_v import KuhnsV
from ._kuhns_vi import KuhnsVI
from ._kuhns_vii import KuhnsVII
from ._kuhns_viii import KuhnsVIII
from ._kuhns_x import KuhnsX
from ._kuhns_xi import KuhnsXI
from ._kuhns_xii import KuhnsXII
from ._kulczynski_i import KulczynskiI
from ._kulczynski_ii import KulczynskiII
from ._lcprefix import LCPrefix
from ._lcsseq import LCSseq
from ._lcsstr import LCSstr
from ._lcsuffix import LCSuffix
from ._length import Length
from ._levenshtein import Levenshtein
from ._lig3 import LIG3
from ._lorentzian import Lorentzian
from ._maarel import Maarel
from ._manhattan import Manhattan
from ._marking import Marking
from ._marking_metric import MarkingMetric
from ._masi import MASI
from ._matusita import Matusita
from ._maxwell_pilliner import MaxwellPilliner
from ._mcconnaughey import McConnaughey
from ._mcewen_michael import McEwenMichael
from ._meta_levenshtein import MetaLevenshtein
from ._michelet import Michelet
from ._millar import Millar
from ._minhash import MinHash
from ._minkowski import Minkowski
from ._mlipns import MLIPNS
from ._monge_elkan import MongeElkan
from ._morisita import Morisita
from ._mountford import Mountford
from ._mra import MRA
from ._ms_contingency import MSContingency
from ._mutual_information import MutualInformation
from ._ncd_arith import NCDarith
from ._ncd_bwtrle import NCDbwtrle
from ._ncd_bz2 import NCDbz2
from ._ncd_lzma import NCDlzma
from ._ncd_lzss import NCDlzss
from ._ncd_paq9a import NCDpaq9a
from ._ncd_rle import NCDrle
from ._ncd_zlib import NCDzlib
from ._needleman_wunsch import NeedlemanWunsch
from ._overlap import Overlap
from ._ozbay import Ozbay
from ._pattern import Pattern
from ._pearson_chi_squared import PearsonChiSquared
from ._pearson_heron_ii import PearsonHeronII
from ._pearson_ii import PearsonII
from ._pearson_iii import PearsonIII
from ._pearson_phi import PearsonPhi
from ._peirce import Peirce
from ._phonetic_distance import PhoneticDistance
from ._phonetic_edit_distance import PhoneticEditDistance
from ._positional_q_gram_dice import PositionalQGramDice
from ._positional_q_gram_jaccard import PositionalQGramJaccard
from ._positional_q_gram_overlap import PositionalQGramOverlap
from ._prefix import Prefix
from ._q_gram import QGram
from ._quantitative_cosine import QuantitativeCosine
from ._quantitative_dice import QuantitativeDice
from ._quantitative_jaccard import QuantitativeJaccard
from ._ratcliff_obershelp import RatcliffObershelp
from ._raup_crick import RaupCrick
from ._rees_levenshtein import ReesLevenshtein
from ._relaxed_hamming import RelaxedHamming
from ._roberts import Roberts
from ._rogers_tanimoto import RogersTanimoto
from ._rogot_goldberg import RogotGoldberg
from ._rouge_l import RougeL
from ._rouge_s import RougeS
from ._rouge_su import RougeSU
from ._rouge_w import RougeW
from ._russell_rao import RussellRao
from ._saps import SAPS
from ._scott_pi import ScottPi
from ._shape import Shape
from ._shapira_storer_i import ShapiraStorerI
from ._sift4 import Sift4
from ._sift4_extended import Sift4Extended
from ._sift4_simplest import Sift4Simplest
from ._single_linkage import SingleLinkage
from ._size import Size
from ._smith_waterman import SmithWaterman
from ._soft_cosine import SoftCosine
from ._softtf_idf import SoftTFIDF
from ._sokal_michener import SokalMichener
from ._sokal_sneath_i import SokalSneathI
from ._sokal_sneath_ii import SokalSneathII
from ._sokal_sneath_iii import SokalSneathIII
from ._sokal_sneath_iv import SokalSneathIV
from ._sokal_sneath_v import SokalSneathV
from ._sorgenfrei import Sorgenfrei
from ._ssk import SSK
from ._steffensen import Steffensen
from ._stiles import Stiles
from ._strcmp95 import Strcmp95
from ._stuart_tau import StuartTau
from ._suffix import Suffix
from ._synoname import Synoname
from ._tarantula import Tarantula
from ._tarwid import Tarwid
from ._tetrachoric import Tetrachoric
from ._tf_idf import TFIDF
from ._tichy import Tichy
from ._token_distance import _TokenDistance
from ._tulloss_r import TullossR
from ._tulloss_s import TullossS
from ._tulloss_t import TullossT
from ._tulloss_u import TullossU
from ._tversky import Tversky
from ._typo import Typo
from ._unigram_subtuple import UnigramSubtuple
from ._unknown_a import UnknownA
from ._unknown_b import UnknownB
from ._unknown_c import UnknownC
from ._unknown_d import UnknownD
from ._unknown_e import UnknownE
from ._unknown_f import UnknownF
from ._unknown_g import UnknownG
from ._unknown_h import UnknownH
from ._unknown_i import UnknownI
from ._unknown_j import UnknownJ
from ._unknown_k import UnknownK
from ._unknown_l import UnknownL
from ._unknown_m import UnknownM
from ._upholt import Upholt
from ._vps import VPS
from ._warrens_i import WarrensI
from ._warrens_ii import WarrensII
from ._warrens_iii import WarrensIII
from ._warrens_iv import WarrensIV
from ._warrens_v import WarrensV
from ._weighted_jaccard import WeightedJaccard
from ._whittaker import Whittaker
from ._yates_chi_squared import YatesChiSquared
from ._yjhhr import YJHHR
from ._yujian_bo import YujianBo
from ._yule_q import YuleQ
from ._yule_q_ii import YuleQII
from ._yule_y import YuleY

__all__ = [
    '_Distance',
    '_TokenDistance',
    'Levenshtein',
    'DamerauLevenshtein',
    'ShapiraStorerI',
    'Marking',
    'MarkingMetric',
    'YujianBo',
    'HigueraMico',
    'Indel',
    'SAPS',
    'MetaLevenshtein',
    'Covington',
    'ALINE',
    'FlexMetric',
    'BISIM',
    'DiscountedLevenshtein',
    'PhoneticEditDistance',
    'Hamming',
    'MLIPNS',
    'RelaxedHamming',
    'Tichy',
    'BlockLevenshtein',
    'CormodeLZ',
    'JaroWinkler',
    'Strcmp95',
    'IterativeSubString',
    'AMPLE',
    'AZZOO',
    'Anderberg',
    'AndresMarzoDelta',
    'BaroniUrbaniBuserI',
    'BaroniUrbaniBuserII',
    'BatageljBren',
    'BaulieuI',
    'BaulieuII',
    'BaulieuIII',
    'BaulieuIV',
    'BaulieuV',
    'BaulieuVI',
    'BaulieuVII',
    'BaulieuVIII',
    'BaulieuIX',
    'BaulieuX',
    'BaulieuXI',
    'BaulieuXII',
    'BaulieuXIII',
    'BaulieuXIV',
    'BaulieuXV',
    'BeniniI',
    'BeniniII',
    'Bennet',
    'BraunBlanquet',
    'Canberra',
    'Cao',
    'ChaoDice',
    'ChaoJaccard',
    'Chebyshev',
    'Chord',
    'Clark',
    'Clement',
    'CohenKappa',
    'Cole',
    'ConsonniTodeschiniI',
    'ConsonniTodeschiniII',
    'ConsonniTodeschiniIII',
    'ConsonniTodeschiniIV',
    'ConsonniTodeschiniV',
    'Cosine',
    'Dennis',
    'Dice',
    'DiceAsymmetricI',
    'DiceAsymmetricII',
    'Digby',
    'Dispersion',
    'Doolittle',
    'Dunning',
    'Euclidean',
    'Eyraud',
    'FagerMcGowan',
    'Faith',
    'Fidelity',
    'Fleiss',
    'FleissLevinPaik',
    'ForbesI',
    'ForbesII',
    'Fossum',
    'GeneralizedFleiss',
    'Gilbert',
    'GilbertWells',
    'GiniI',
    'GiniII',
    'Goodall',
    'GoodmanKruskalLambda',
    'GoodmanKruskalLambdaR',
    'GoodmanKruskalTauA',
    'GoodmanKruskalTauB',
    'GowerLegendre',
    'GuttmanLambdaA',
    'GuttmanLambdaB',
    'GwetAC',
    'Hamann',
    'HarrisLahey',
    'Hassanat',
    'HawkinsDotson',
    'Hellinger',
    'HendersonHeron',
    'HornMorisita',
    'Hurlbert',
    'Jaccard',
    'JaccardNM',
    'Johnson',
    'KendallTau',
    'KentFosterI',
    'KentFosterII',
    'KoppenI',
    'KoppenII',
    'KuderRichardson',
    'KuhnsI',
    'KuhnsII',
    'KuhnsIII',
    'KuhnsIV',
    'KuhnsV',
    'KuhnsVI',
    'KuhnsVII',
    'KuhnsVIII',
    'KuhnsIX',
    'KuhnsX',
    'KuhnsXI',
    'KuhnsXII',
    'KulczynskiI',
    'KulczynskiII',
    'Lorentzian',
    'Maarel',
    'Morisita',
    'Manhattan',
    'Michelet',
    'Millar',
    'Minkowski',
    'MASI',
    'Matusita',
    'MaxwellPilliner',
    'McConnaughey',
    'McEwenMichael',
    'Mountford',
    'MutualInformation',
    'MSContingency',
    'Overlap',
    'Pattern',
    'PearsonHeronII',
    'PearsonII',
    'PearsonIII',
    'PearsonChiSquared',
    'PearsonPhi',
    'Peirce',
    'QGram',
    'RaupCrick',
    'ReesLevenshtein',
    'RogersTanimoto',
    'RogotGoldberg',
    'RussellRao',
    'ScottPi',
    'Shape',
    'Size',
    'SokalMichener',
    'SokalSneathI',
    'SokalSneathII',
    'SokalSneathIII',
    'SokalSneathIV',
    'SokalSneathV',
    'Sorgenfrei',
    'Steffensen',
    'Stiles',
    'StuartTau',
    'Tarantula',
    'Tarwid',
    'Tetrachoric',
    'TullossR',
    'TullossS',
    'TullossT',
    'TullossU',
    'Tversky',
    'UnigramSubtuple',
    'UnknownA',
    'UnknownB',
    'UnknownC',
    'UnknownD',
    'UnknownE',
    'UnknownF',
    'UnknownG',
    'UnknownH',
    'UnknownI',
    'UnknownJ',
    'UnknownK',
    'UnknownL',
    'UnknownM',
    'Upholt',
    'WarrensI',
    'WarrensII',
    'WarrensIII',
    'WarrensIV',
    'WarrensV',
    'WeightedJaccard',
    'Whittaker',
    'YatesChiSquared',
    'YuleQ',
    'YuleQII',
    'YuleY',
    'YJHHR',
    'Bhattacharyya',
    'BrainerdRobinson',
    'QuantitativeCosine',
    'QuantitativeDice',
    'QuantitativeJaccard',
    'Roberts',
    'AverageLinkage',
    'SingleLinkage',
    'CompleteLinkage',
    'Bag',
    'SoftCosine',
    'MongeElkan',
    'TFIDF',
    'SoftTFIDF',
    'JensenShannon',
    'FellegiSunter',
    'MinHash',
    'BLEU',
    'RougeL',
    'RougeW',
    'RougeS',
    'RougeSU',
    'PositionalQGramDice',
    'PositionalQGramJaccard',
    'PositionalQGramOverlap',
    'NeedlemanWunsch',
    'SmithWaterman',
    'Gotoh',
    'LCSseq',
    'LCSstr',
    'LCPrefix',
    'LCSuffix',
    'RatcliffObershelp',
    'Ident',
    'Length',
    'Prefix',
    'Suffix',
    'NCDzlib',
    'NCDbz2',
    'NCDlzma',
    'NCDarith',
    'NCDbwtrle',
    'NCDrle',
    'NCDpaq9a',
    'NCDlzss',
    'FuzzyWuzzyPartialString',
    'FuzzyWuzzyTokenSort',
    'FuzzyWuzzyTokenSet',
    'PhoneticDistance',
    'MRA',
    'Editex',
    'Baystat',
    'Eudex',
    'Sift4',
    'Sift4Simplest',
    'Sift4Extended',
    'Typo',
    'Synoname',
    'Ozbay',
    'ISG',
    'Inclusion',
    'Guth',
    'VPS',
    'LIG3',
    'SSK',
]


if __name__ == '__main__':
    import doctest

    doctest.testmod()


================================================
FILE: abydos/distance/_aline.py
================================================
# Copyright 2019-2020 by Christopher C. Little.
# This file is part of Abydos.
#
# Abydos is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Abydos is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Abydos. If not, see <http://www.gnu.org/licenses/>.

"""abydos.distance._aline.

ALINE alignment, similarity, and distance
"""

from copy import deepcopy
from typing import Any, Callable, Dict, List, Tuple, Union, cast

from numpy import float_, inf, zeros

from ._distance import _Distance

__all__ = ['ALINE']


class ALINE(_Distance):
    r"""ALINE alignment, similarity, and distance.

    ALINE alignment was developed by
    :cite:`Kondrak:2000,Kondrak:2002,Downey:2008`, and establishes an
    alignment algorithm based on multivalued phonetic features and feature
    salience weights. Along with the alignment itself, the algorithm produces a
    term similarity score.

    :cite:`Downey:2008` develops ALINE's similarity score into a similarity
    measure & distance measure:

        .. math::

            sim_{ALINE} = \frac{2 \dot score_{ALINE}(src, tar)}
            {score_{ALINE}(src, src) + score_{ALINE}(tar, tar)}

    However, because the average of the two self-similarity scores is not
    guaranteed to be greater than or equal to the similarity score between
    the two strings, by default, this formula is not used here in order to
    guarantee that the similarity measure is bounded to [0, 1]. Instead,
    Kondrak's similarity measure is employed:

        .. math::

            sim_{ALINE} = \frac{score_{ALINE}(src, tar)}
            {max(score_{ALINE}(src, src), score_{ALINE}(tar, tar))}


    .. versionadded:: 0.4.0
    """

    # The three dicts below are mostly copied from NLTK's implementation
    # https://www.nltk.org/_modules/nltk/metrics/aline.html
    # But values have been returned, as much as possible to the reference
    # values supplied in Kondrak's paper.
    feature_weights = {
        # place
        'bilabial': 1.0,
        'labiodental': 0.95,
        'dental': 0.9,
        'alveolar': 0.85,
        'retroflex': 0.8,
        'palato-alveolar': 0.75,
        'palatal': 0.7,
        'velar': 0.6,
        'uvular': 0.5,
        'pharyngeal': 0.3,
        'glottal': 0.1,
        # manner
        'stop': 1.0,
        'affricate': 0.9,
        'fricative': 0.8,
        'approximant': 0.6,
        'trill': 0.55,  # not in original
        'tap': 0.5,  # not in original
        'high vowel': 0.4,
        'mid vowel': 0.2,
        'low vowel': 0.0,
        # high
        'high': 1.0,
        'mid': 0.5,
        'low': 0.0,
        # back
        'front': 1.0,
        'central': 0.5,
        'back': 0.0,
        # binary features
        'plus': 1.0,
        'minus': 0.0,
    }

    v_features = {
        'syllabic',
        'nasal',
        'retroflex',
        'high',
        'back',
        'round',
        'long',
    }
    c_features = {
        'syllabic',
        'manner',
        'voice',
        'nasal',
        'retroflex',
        'lateral',
        'aspirated',
        'place',
    }

    salience = {
        'syllabic': 5,
        'voice': 10,
        'lateral': 10,
        'high': 5,
        'manner': 50,
        'long': 1,
        'place': 40,
        'nasal': 10,
        'aspirated': 5,
        'back': 5,
        'retroflex': 10,
        'round': 5,
    }

    phones_ipa = {
        'p': {
            'place': 'bilabial',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'b': {
            'place': 'bilabial',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        't': {
            'place': 'alveolar',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'd': {
            'place': 'alveolar',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ʈ': {
            'place': 'retroflex',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'plus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ɖ': {
            'place': 'retroflex',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'plus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'c': {
            'place': 'palatal',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ɟ': {
            'place': 'palatal',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'k': {
            'place': 'velar',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'g': {
            'place': 'velar',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'q': {
            'place': 'uvular',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ɢ': {
            'place': 'uvular',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ʔ': {
            'place': 'glottal',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'm': {
            'place': 'bilabial',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'plus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ɱ': {
            'place': 'labiodental',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'plus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'n': {
            'place': 'alveolar',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'plus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ɳ': {
            'place': 'retroflex',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'plus',
            'retroflex': 'plus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ɲ': {
            'place': 'palatal',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'plus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ŋ': {
            'place': 'velar',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'plus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ɴ': {
            'place': 'uvular',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'plus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ʙ': {
            'place': 'bilabial',
            'manner': 'trill',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'r': {
            'place': 'alveolar',
            'manner': 'trill',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'plus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ʀ': {
            'place': 'uvular',
            'manner': 'trill',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ɾ': {
            'place': 'alveolar',
            'manner': 'tap',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ɽ': {
            'place': 'retroflex',
            'manner': 'tap',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'plus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ɸ': {
            'place': 'bilabial',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'β': {
            'place': 'bilabial',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'f': {
            'place': 'labiodental',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'v': {
            'place': 'labiodental',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'θ': {
            'place': 'dental',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ð': {
            'place': 'dental',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        's': {
            'place': 'alveolar',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'z': {
            'place': 'alveolar',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ʃ': {
            'place': 'palato-alveolar',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ʒ': {
            'place': 'palato-alveolar',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ʂ': {
            'place': 'retroflex',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'plus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ʐ': {
            'place': 'retroflex',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'plus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ç': {
            'place': 'palatal',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ʝ': {
            'place': 'palatal',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'x': {
            'place': 'velar',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ɣ': {
            'place': 'velar',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'χ': {
            'place': 'uvular',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ʁ': {
            'place': 'uvular',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ħ': {
            'place': 'pharyngeal',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ʕ': {
            'place': 'pharyngeal',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'h': {
            'place': 'glottal',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ɦ': {
            'place': 'glottal',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ɬ': {
            'place': 'alveolar',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'plus',
            'aspirated': 'minus',
        },
        'ɮ': {
            'place': 'alveolar',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'plus',
            'aspirated': 'minus',
        },
        'ʋ': {
            'place': 'labiodental',
            'manner': 'approximant',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ɹ': {
            'place': 'alveolar',
            'manner': 'approximant',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ɻ': {
            'place': 'retroflex',
            'manner': 'approximant',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'plus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'j': {
            'place': 'palatal',
            'manner': 'approximant',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'ɰ': {
            'place': 'velar',
            'manner': 'approximant',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
        },
        'l': {
            'place': 'alveolar',
            'manner': 'approximant',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'plus',
            'aspirated': 'minus',
        },
        'w': {
            'place': 'velar',
            'manner': 'approximant',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'aspirated': 'minus',
            'double': 'bilabial',
        },
        'i': {
            'manner': 'high vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'high',
            'back': 'front',
            'round': 'minus',
            'long': 'minus',
            'aspirated': 'minus',
        },
        'y': {
            'manner': 'high vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'high',
            'back': 'front',
            'round': 'plus',
            'long': 'minus',
            'aspirated': 'minus',
        },
        'e': {
            'manner': 'mid vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'mid',
            'back': 'front',
            'round': 'minus',
            'long': 'minus',
            'aspirated': 'minus',
        },
        'ø': {
            'manner': 'mid vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'mid',
            'back': 'front',
            'round': 'plus',
            'long': 'minus',
            'aspirated': 'minus',
        },
        'ɛ': {
            'manner': 'mid vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'mid',
            'back': 'front',
            'round': 'minus',
            'long': 'minus',
            'aspirated': 'minus',
        },
        'œ': {
            'manner': 'mid vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'mid',
            'back': 'front',
            'round': 'plus',
            'long': 'minus',
            'aspirated': 'minus',
        },
        'æ': {
            'manner': 'low vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'low',
            'back': 'front',
            'round': 'minus',
            'long': 'minus',
            'aspirated': 'minus',
        },
        'a': {
            'manner': 'low vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'low',
            'back': 'front',
            'round': 'minus',
            'long': 'minus',
            'aspirated': 'minus',
        },
        'ɨ': {
            'manner': 'high vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'high',
            'back': 'central',
            'round': 'minus',
            'long': 'minus',
            'aspirated': 'minus',
        },
        'ʉ': {
            'manner': 'high vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'high',
            'back': 'central',
            'round': 'plus',
            'long': 'minus',
            'aspirated': 'minus',
        },
        'ə': {
            'manner': 'mid vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'mid',
            'back': 'central',
            'round': 'minus',
            'long': 'minus',
            'aspirated': 'minus',
        },
        'u': {
            'manner': 'high vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'high',
            'back': 'back',
            'round': 'plus',
            'long': 'minus',
            'aspirated': 'minus',
        },
        'o': {
            'manner': 'mid vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'mid',
            'back': 'back',
            'round': 'plus',
            'long': 'minus',
            'aspirated': 'minus',
        },
        'ɔ': {
            'manner': 'mid vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'mid',
            'back': 'back',
            'round': 'plus',
            'long': 'minus',
            'aspirated': 'minus',
        },
        'ɒ': {
            'manner': 'low vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'low',
            'back': 'back',
            'round': 'minus',
            'long': 'minus',
            'aspirated': 'minus',
        },
        'ː': {'long': 'plus', 'supplemental': 'True'},
        'ʰ': {'aspirated': 'plus', 'supplemental': 'True'},
    }  # type: Dict[str, Dict[str, str]]

    phones_kondrak = {
        'a': {
            'place': 'velar',
            'manner': 'low vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'low',
            'back': 'central',
            'round': 'minus',
        },
        'b': {
            'place': 'bilabial',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
        },
        'c': {
            'place': 'alveolar',
            'manner': 'affricate',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
        },
        'd': {
            'place': 'alveolar',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
        },
        'e': {
            'place': 'palatal',
            'manner': 'mid vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'mid',
            'back': 'front',
            'round': 'minus',
        },
        'f': {
            'place': 'labiodental',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
        },
        'g': {
            'place': 'velar',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
        },
        'h': {
            'place': 'glottal',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
        },
        'i': {
            'place': 'palatal',
            'manner': 'high vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'high',
            'back': 'front',
            'round': 'plus',
        },
        'j': {
            'place': 'alveolar',
            'manner': 'affricate',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
        },
        'k': {
            'place': 'velar',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
        },
        'l': {
            'place': 'alveolar',
            'manner': 'approximant',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'plus',
        },
        'm': {
            'place': 'bilabial',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'plus',
            'retroflex': 'minus',
            'lateral': 'minus',
        },
        'n': {
            'place': 'alveolar',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'plus',
            'retroflex': 'minus',
            'lateral': 'minus',
        },
        'o': {
            'place': 'velar',
            'manner': 'mid vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'mid',
            'back': 'back',
            'round': 'plus',
        },
        'p': {
            'place': 'bilabial',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
        },
        'q': {
            'place': 'glottal',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
        },
        'r': {
            'place': 'retroflex',
            'manner': 'approximant',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'plus',
            'lateral': 'minus',
        },
        's': {
            'place': 'alveolar',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
        },
        't': {
            'place': 'alveolar',
            'manner': 'stop',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
        },
        'u': {
            'place': 'velar',
            'manner': 'high vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'high',
            'back': 'back',
            'round': 'plus',
        },
        'v': {
            'place': 'labiodental',
            'manner': 'fricative',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
        },
        'w': {
            'place': 'velar',
            'manner': 'high vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'high',
            'back': 'back',
            'round': 'plus',
            'double': 'bilabial',
        },
        'x': {
            'place': 'velar',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'minus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
        },
        'y': {
            'place': 'velar',
            'manner': 'high vowel',
            'syllabic': 'plus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
            'high': 'high',
            'back': 'front',
            'round': 'minus',
        },
        'z': {
            'place': 'alveolar',
            'manner': 'fricative',
            'syllabic': 'minus',
            'voice': 'plus',
            'nasal': 'minus',
            'retroflex': 'minus',
            'lateral': 'minus',
        },
        'A': {'aspirated': 'plus', 'supplemental': 'True'},
        'B': {'back': 'back', 'supplemental': 'True'},
        'C': {'back': 'central', 'supplemental': 'True'},
        'D': {'place': 'dental', 'supplemental': 'True'},
        'F': {'back': 'front', 'supplemental': 'True'},
        'H': {'long': 'plus', 'supplemental': 'True'},
        'N': {'nasal': 'plus', 'supplemental': 'True'},
        'P': {'place': 'palatal', 'supplemental': 'True'},
        'R': {'round': 'plus', 'supplemental': 'True'},
        'S': {'manner': 'fricative', 'supplemental': 'True'},
        'V': {'place': 'palato-alveolar', 'supplemental': 'True'},
    }  # type: Dict[str, Dict[str, str]]

    def __init__(
        self,
        epsilon: float = 0.0,
        c_skip: float = -10,
        c_sub: float = 35,
        c_exp: float = 45,
        c_vwl: float = 10,
        mode: str = 'local',
        phones: str = 'aline',
        normalizer: Callable[[List[float]], float] = max,
        **kwargs: Any
    ) -> None:
        """Initialize ALINE instance.

        Parameters
        ----------
        epsilon : float
            The portion (out of 1.0) of the maximum ALINE score, above which
            alignments are returned. If set to 0, only the alignments matching
            the maximum alignment score are returned. If set to 1, all
            alignments scoring 0 or higher are returned.
        c_skip : float
            The cost of an insertion or deletion
        c_sub : float
            The cost of a substitution
        c_exp : float
            The cost of an expansion or contraction
        c_vwl : float
            The additional cost of a vowel substitution, expansion, or
            contraction
        mode : str
            Alignment mode, which can be ``local`` (default), ``global``,
            ``half-local``, or ``semi-global``
        phones : str
            Phonetic symbol set, which can be:
                - ``aline`` selects Kondrak's original symbols set
                - ``ipa`` selects IPA symbols
        normalizer : function
            A function that takes an list and computes a normalization term
            by which the edit distance is divided (max by default). For the
            normalization proposed by Downey, et al. (2008), set this to:
            ``lambda x: sum(x)/len(x)``
        **kwargs
            Arbitrary keyword arguments


        .. versionadded:: 0.4.0

        """
        super(ALINE, self).__init__(**kwargs)
        self._epsilon = epsilon
        self._c_skip = c_skip
        self._c_sub = c_sub
        self._c_exp = c_exp
        self._c_vwl = c_vwl
        self._mode = mode
        if self._mode not in {'local', 'global', 'half-local', 'semi-global'}:
            self._mode = 'local'
        if phones == 'ipa':
            self._phones = self.phones_ipa
        else:
            self._phones = self.phones_kondrak
        self._normalizer = normalizer

    def alignment(self, src: str, tar: str) -> Tuple[float, str, str]:
        """Return the top ALINE alignment of two strings.

        The `top` ALINE alignment is the first alignment with the best score.
        The purpose of this function is to have a single tuple as a return
        value.

        Parameters
        ----------
        src : str
            Source string for comparison
        tar : str
            Target string for comparison

        Returns
        -------
        tuple(float, str, str)
            ALINE alignment and its score

        Examples
        --------
        >>> cmp = ALINE()
        >>> cmp.alignment('cat', 'hat')
        (50.0, 'c ‖ a t ‖', 'h ‖ a t ‖')
        >>> cmp.alignment('niall', 'neil')
        (90.0, '‖ n i a ll ‖', '‖ n e i l  ‖')
        >>> cmp.alignment('aluminum', 'catalan')
        (81.5, '‖ a l u m ‖ inum', 'cat ‖ a l a n ‖')
        >>> cmp.alignment('atcg', 'tagc')
        (65.0, '‖ a t c ‖ g', 't ‖ a g c ‖')


        .. versionadded:: 0.4.1

        """
        return cast(List[Tuple[float, str, str]], self.alignments(src, tar))[0]

    def alignments(
        self, src: str, tar: str, score_only: bool = False
    ) -> Union[float, List[Tuple[float, str, str]]]:
        """Return the ALINE alignments of two strings.

        Parameters
        ----------
        src : str
            Source string for comparison
        tar : str
            Target string for comparison
        score_only : bool
            Return the score only, not the alignments

        Returns
        -------
        list(tuple(float, str, str) or float
            ALINE alignments and their scores or the top score

        Examples
        --------
        >>> cmp = ALINE()
        >>> cmp.alignments('cat', 'hat')
        [(50.0, 'c ‖ a t ‖', 'h ‖ a t ‖')]
        >>> cmp.alignments('niall', 'neil')
        [(90.0, '‖ n i a ll ‖', '‖ n e i l  ‖')]
        >>> cmp.alignments('aluminum', 'catalan')
        [(81.5, '‖ a l u m ‖ inum', 'cat ‖ a l a n ‖')]
        >>> cmp.alignments('atcg', 'tagc')
        [(65.0, '‖ a t c ‖ g', 't ‖ a g c ‖'), (65.0, 'a ‖ tc - g ‖',
        '‖ t  a g ‖ c')]


        .. versionadded:: 0.4.0
        .. versionchanged:: 0.4.1
            Renamed from .alignment to .alignments

        """

        def _sig_skip(*args: Any) -> float:
            return self._c_skip

        def _sig_sub(seg1: Dict[str, float], seg2: Dict[str, float]) -> float:
            return (
                self._c_sub
                - _delta(seg1, seg2)
                - _sig_vwl(seg1)
                - _sig_vwl(seg2)
            )

        def _sig_exp(
            seg1: Dict[str, float],
            seg2a: Dict[str, float],
            seg2b: Dict[str, float],
        ) -> float:
            return (
                self._c_exp
                - _delta(seg1, seg2a)
                - _delta(seg1, seg2b)
                - _sig_vwl(seg1)
                - max(_sig_vwl(seg2a), _sig_vwl(seg2b))
            )

        def _sig_vwl(seg1: Dict[str, float]) -> float:
            return (
                0.0
                if seg1['manner'] > self.feature_weights['high vowel']
                else self._c_vwl
            )

        def _delta(seg1: Dict[str, float], seg2: Dict[str, float]) -> float:
            features = (
                self.c_features
                if max(seg1['manner'], seg2['manner'])
                > self.feature_weights['high vowel']
                else self.v_features
            )
            diff = 0.0
            for f in features:
                diff += (
                    abs(seg1.get(f, 0.0) - seg2.get(f, 0.0)) * self.salience[f]
                )
            return diff

        def _retrieve(
            i: int, j: int, score: float, out: List[Tuple[str, str]]
        ) -> None:
            def _record(score: float, out: List[Tuple[str, str]]) -> None:
                out.append(('‖', '‖'))
                for i1 in range(i - 1, -1, -1):
                    out.append((src_tok[i1], ''))
                for j1 in range(j - 1, -1, -1):
                    out.append(('', tar_tok[j1]))
                if self._mode == 'global':
                    score += (i + j) * _sig_skip('')

                out = out[::-1]

                src_alignment = []
                tar_alignment = []

                out.append(('‖', '‖'))
                part = 0
                s_segment = ''  # type: Union[str, List[str]]
                t_segment = ''  # type: Union[str, List[str]]
                for ss, ts in out:
                    if ss == '‖':
                        if part % 2 == 0:
                            src_alignment.append(s_segment)
                            tar_alignment.append(t_segment)
                            s_segment = []
                            t_segment = []
                        else:
                            src_alignment.append(' '.join(s_segment))
                            tar_alignment.append(' '.join(t_segment))
                            s_segment = ''
                            t_segment = ''
                        part += 1
                    else:
                        if part % 2 == 0:
                            s_segment = cast(str, s_segment) + ss
                            t_segment = cast(str, t_segment) + ts
                        else:
                            cast(List[str], s_segment).append(
                                ss + ' ' * (len(ts) - len(ss))
                            )
                            cast(List[str], t_segment).append(
                                ts + ' ' * (len(ss) - len(ts))
                            )

                src_alignment_str = ' ‖ '.join(
                    cast(List[str], src_alignment)
                ).strip()
                tar_alignment_str = ' ‖ '.join(
                    cast(List[str], tar_alignment)
                ).strip()

                alignments.append(
                    (score, src_alignment_str, tar_alignment_str)
                )
                return

            if s_mat[i, j] == 0:
                _record(score, out)
                return
            else:
                if (
                    i > 0
                    and j > 0
                    and s_mat[i - 1, j - 1]
                    + _sig_sub(src_feat_wt[i - 1], tar_feat_wt[j - 1])
                    + score
                    >= threshold
                ):
                    loc_out = deepcopy(out)
                    loc_out.append((src_tok[i - 1], tar_tok[j - 1]))
                    _retrieve(
                        i - 1,
                        j - 1,
                        score
                        + _sig_sub(src_feat_wt[i - 1], tar_feat_wt[j - 1]),
                        loc_out,
                    )
                    loc_out.pop()

                if (
                    j > 0
                    and s_mat[i, j - 1] + _sig_skip(tar_tok[j - 1]) + score
                    >= threshold
                ):
                    loc_out = deepcopy(out)
                   
Download .txt
gitextract_pif85cg4/

├── .circleci/
│   └── config.yml
├── .codeclimate.yml
├── .coveragerc
├── .github/
│   └── CODEOWNERS
├── .gitignore
├── .gitmodules
├── .project
├── .pypirc
├── .pyup.yml
├── .travis.yml
├── AUTHORS.rst
├── CODE_OF_CONDUCT.rst
├── CODING_STANDARDS.rst
├── FAQ.rst
├── HISTORY.rst
├── LICENSE
├── MANIFEST.in
├── Pipfile
├── README.rst
├── VERSION.rst
├── abydos/
│   ├── __init__.py
│   ├── compression/
│   │   ├── __init__.py
│   │   ├── _arithmetic.py
│   │   ├── _bwt.py
│   │   └── _rle.py
│   ├── corpus/
│   │   ├── __init__.py
│   │   ├── _corpus.py
│   │   ├── _ngram_corpus.py
│   │   └── _unigram_corpus.py
│   ├── distance/
│   │   ├── __init__.py
│   │   ├── _aline.py
│   │   ├── _ample.py
│   │   ├── _anderberg.py
│   │   ├── _andres_marzo_delta.py
│   │   ├── _average_linkage.py
│   │   ├── _azzoo.py
│   │   ├── _bag.py
│   │   ├── _baroni_urbani_buser_i.py
│   │   ├── _baroni_urbani_buser_ii.py
│   │   ├── _batagelj_bren.py
│   │   ├── _baulieu_i.py
│   │   ├── _baulieu_ii.py
│   │   ├── _baulieu_iii.py
│   │   ├── _baulieu_iv.py
│   │   ├── _baulieu_ix.py
│   │   ├── _baulieu_v.py
│   │   ├── _baulieu_vi.py
│   │   ├── _baulieu_vii.py
│   │   ├── _baulieu_viii.py
│   │   ├── _baulieu_x.py
│   │   ├── _baulieu_xi.py
│   │   ├── _baulieu_xii.py
│   │   ├── _baulieu_xiii.py
│   │   ├── _baulieu_xiv.py
│   │   ├── _baulieu_xv.py
│   │   ├── _baystat.py
│   │   ├── _benini_i.py
│   │   ├── _benini_ii.py
│   │   ├── _bennet.py
│   │   ├── _bhattacharyya.py
│   │   ├── _bisim.py
│   │   ├── _bleu.py
│   │   ├── _block_levenshtein.py
│   │   ├── _brainerd_robinson.py
│   │   ├── _braun_blanquet.py
│   │   ├── _canberra.py
│   │   ├── _cao.py
│   │   ├── _chao_dice.py
│   │   ├── _chao_jaccard.py
│   │   ├── _chebyshev.py
│   │   ├── _chord.py
│   │   ├── _clark.py
│   │   ├── _clement.py
│   │   ├── _cohen_kappa.py
│   │   ├── _cole.py
│   │   ├── _complete_linkage.py
│   │   ├── _consonni_todeschini_i.py
│   │   ├── _consonni_todeschini_ii.py
│   │   ├── _consonni_todeschini_iii.py
│   │   ├── _consonni_todeschini_iv.py
│   │   ├── _consonni_todeschini_v.py
│   │   ├── _cormode_lz.py
│   │   ├── _cosine.py
│   │   ├── _covington.py
│   │   ├── _damerau_levenshtein.py
│   │   ├── _dennis.py
│   │   ├── _dice.py
│   │   ├── _dice_asymmetric_i.py
│   │   ├── _dice_asymmetric_ii.py
│   │   ├── _digby.py
│   │   ├── _discounted_levenshtein.py
│   │   ├── _dispersion.py
│   │   ├── _distance.py
│   │   ├── _doolittle.py
│   │   ├── _dunning.py
│   │   ├── _editex.py
│   │   ├── _euclidean.py
│   │   ├── _eudex.py
│   │   ├── _eyraud.py
│   │   ├── _fager_mcgowan.py
│   │   ├── _faith.py
│   │   ├── _fellegi_sunter.py
│   │   ├── _fidelity.py
│   │   ├── _fleiss.py
│   │   ├── _fleiss_levin_paik.py
│   │   ├── _flexmetric.py
│   │   ├── _forbes_i.py
│   │   ├── _forbes_ii.py
│   │   ├── _fossum.py
│   │   ├── _fuzzywuzzy_partial_string.py
│   │   ├── _fuzzywuzzy_token_set.py
│   │   ├── _fuzzywuzzy_token_sort.py
│   │   ├── _generalized_fleiss.py
│   │   ├── _gilbert.py
│   │   ├── _gilbert_wells.py
│   │   ├── _gini_i.py
│   │   ├── _gini_ii.py
│   │   ├── _goodall.py
│   │   ├── _goodman_kruskal_lambda.py
│   │   ├── _goodman_kruskal_lambda_r.py
│   │   ├── _goodman_kruskal_tau_a.py
│   │   ├── _goodman_kruskal_tau_b.py
│   │   ├── _gotoh.py
│   │   ├── _gower_legendre.py
│   │   ├── _guth.py
│   │   ├── _guttman_lambda_a.py
│   │   ├── _guttman_lambda_b.py
│   │   ├── _gwet_ac.py
│   │   ├── _hamann.py
│   │   ├── _hamming.py
│   │   ├── _harris_lahey.py
│   │   ├── _hassanat.py
│   │   ├── _hawkins_dotson.py
│   │   ├── _hellinger.py
│   │   ├── _henderson_heron.py
│   │   ├── _higuera_mico.py
│   │   ├── _horn_morisita.py
│   │   ├── _hurlbert.py
│   │   ├── _ident.py
│   │   ├── _inclusion.py
│   │   ├── _indel.py
│   │   ├── _isg.py
│   │   ├── _iterative_substring.py
│   │   ├── _jaccard.py
│   │   ├── _jaccard_nm.py
│   │   ├── _jaro_winkler.py
│   │   ├── _jensen_shannon.py
│   │   ├── _johnson.py
│   │   ├── _kendall_tau.py
│   │   ├── _kent_foster_i.py
│   │   ├── _kent_foster_ii.py
│   │   ├── _koppen_i.py
│   │   ├── _koppen_ii.py
│   │   ├── _kuder_richardson.py
│   │   ├── _kuhns_i.py
│   │   ├── _kuhns_ii.py
│   │   ├── _kuhns_iii.py
│   │   ├── _kuhns_iv.py
│   │   ├── _kuhns_ix.py
│   │   ├── _kuhns_v.py
│   │   ├── _kuhns_vi.py
│   │   ├── _kuhns_vii.py
│   │   ├── _kuhns_viii.py
│   │   ├── _kuhns_x.py
│   │   ├── _kuhns_xi.py
│   │   ├── _kuhns_xii.py
│   │   ├── _kulczynski_i.py
│   │   ├── _kulczynski_ii.py
│   │   ├── _lcprefix.py
│   │   ├── _lcsseq.py
│   │   ├── _lcsstr.py
│   │   ├── _lcsuffix.py
│   │   ├── _length.py
│   │   ├── _levenshtein.py
│   │   ├── _lig3.py
│   │   ├── _lorentzian.py
│   │   ├── _maarel.py
│   │   ├── _manhattan.py
│   │   ├── _marking.py
│   │   ├── _marking_metric.py
│   │   ├── _masi.py
│   │   ├── _matusita.py
│   │   ├── _maxwell_pilliner.py
│   │   ├── _mcconnaughey.py
│   │   ├── _mcewen_michael.py
│   │   ├── _meta_levenshtein.py
│   │   ├── _michelet.py
│   │   ├── _millar.py
│   │   ├── _minhash.py
│   │   ├── _minkowski.py
│   │   ├── _mlipns.py
│   │   ├── _monge_elkan.py
│   │   ├── _morisita.py
│   │   ├── _mountford.py
│   │   ├── _mra.py
│   │   ├── _ms_contingency.py
│   │   ├── _mutual_information.py
│   │   ├── _ncd_arith.py
│   │   ├── _ncd_bwtrle.py
│   │   ├── _ncd_bz2.py
│   │   ├── _ncd_lzma.py
│   │   ├── _ncd_lzss.py
│   │   ├── _ncd_paq9a.py
│   │   ├── _ncd_rle.py
│   │   ├── _ncd_zlib.py
│   │   ├── _needleman_wunsch.py
│   │   ├── _overlap.py
│   │   ├── _ozbay.py
│   │   ├── _pattern.py
│   │   ├── _pearson_chi_squared.py
│   │   ├── _pearson_heron_ii.py
│   │   ├── _pearson_ii.py
│   │   ├── _pearson_iii.py
│   │   ├── _pearson_phi.py
│   │   ├── _peirce.py
│   │   ├── _phonetic_distance.py
│   │   ├── _phonetic_edit_distance.py
│   │   ├── _positional_q_gram_dice.py
│   │   ├── _positional_q_gram_jaccard.py
│   │   ├── _positional_q_gram_overlap.py
│   │   ├── _prefix.py
│   │   ├── _q_gram.py
│   │   ├── _quantitative_cosine.py
│   │   ├── _quantitative_dice.py
│   │   ├── _quantitative_jaccard.py
│   │   ├── _ratcliff_obershelp.py
│   │   ├── _raup_crick.py
│   │   ├── _rees_levenshtein.py
│   │   ├── _relaxed_hamming.py
│   │   ├── _roberts.py
│   │   ├── _rogers_tanimoto.py
│   │   ├── _rogot_goldberg.py
│   │   ├── _rouge_l.py
│   │   ├── _rouge_s.py
│   │   ├── _rouge_su.py
│   │   ├── _rouge_w.py
│   │   ├── _russell_rao.py
│   │   ├── _saps.py
│   │   ├── _scott_pi.py
│   │   ├── _shape.py
│   │   ├── _shapira_storer_i.py
│   │   ├── _sift4.py
│   │   ├── _sift4_extended.py
│   │   ├── _sift4_simplest.py
│   │   ├── _single_linkage.py
│   │   ├── _size.py
│   │   ├── _smith_waterman.py
│   │   ├── _soft_cosine.py
│   │   ├── _softtf_idf.py
│   │   ├── _sokal_michener.py
│   │   ├── _sokal_sneath_i.py
│   │   ├── _sokal_sneath_ii.py
│   │   ├── _sokal_sneath_iii.py
│   │   ├── _sokal_sneath_iv.py
│   │   ├── _sokal_sneath_v.py
│   │   ├── _sorgenfrei.py
│   │   ├── _ssk.py
│   │   ├── _steffensen.py
│   │   ├── _stiles.py
│   │   ├── _strcmp95.py
│   │   ├── _stuart_tau.py
│   │   ├── _suffix.py
│   │   ├── _synoname.py
│   │   ├── _tarantula.py
│   │   ├── _tarwid.py
│   │   ├── _tetrachoric.py
│   │   ├── _tf_idf.py
│   │   ├── _tichy.py
│   │   ├── _token_distance.py
│   │   ├── _tulloss_r.py
│   │   ├── _tulloss_s.py
│   │   ├── _tulloss_t.py
│   │   ├── _tulloss_u.py
│   │   ├── _tversky.py
│   │   ├── _typo.py
│   │   ├── _unigram_subtuple.py
│   │   ├── _unknown_a.py
│   │   ├── _unknown_b.py
│   │   ├── _unknown_c.py
│   │   ├── _unknown_d.py
│   │   ├── _unknown_e.py
│   │   ├── _unknown_f.py
│   │   ├── _unknown_g.py
│   │   ├── _unknown_h.py
│   │   ├── _unknown_i.py
│   │   ├── _unknown_j.py
│   │   ├── _unknown_k.py
│   │   ├── _unknown_l.py
│   │   ├── _unknown_m.py
│   │   ├── _upholt.py
│   │   ├── _vps.py
│   │   ├── _warrens_i.py
│   │   ├── _warrens_ii.py
│   │   ├── _warrens_iii.py
│   │   ├── _warrens_iv.py
│   │   ├── _warrens_v.py
│   │   ├── _weighted_jaccard.py
│   │   ├── _whittaker.py
│   │   ├── _yates_chi_squared.py
│   │   ├── _yjhhr.py
│   │   ├── _yujian_bo.py
│   │   ├── _yule_q.py
│   │   ├── _yule_q_ii.py
│   │   └── _yule_y.py
│   ├── fingerprint/
│   │   ├── __init__.py
│   │   ├── _bwtf.py
│   │   ├── _bwtrlef.py
│   │   ├── _consonant.py
│   │   ├── _count.py
│   │   ├── _extract.py
│   │   ├── _extract_position_frequency.py
│   │   ├── _fingerprint.py
│   │   ├── _lacss.py
│   │   ├── _lc_cutter.py
│   │   ├── _occurrence.py
│   │   ├── _occurrence_halved.py
│   │   ├── _omission_key.py
│   │   ├── _phonetic.py
│   │   ├── _position.py
│   │   ├── _qgram.py
│   │   ├── _skeleton_key.py
│   │   ├── _string.py
│   │   └── _synoname_toolcode.py
│   ├── phones/
│   │   ├── __init__.py
│   │   └── _phones.py
│   ├── phonetic/
│   │   ├── __init__.py
│   │   ├── _ainsworth.py
│   │   ├── _alpha_sis.py
│   │   ├── _beider_morse.py
│   │   ├── _beider_morse_data.py
│   │   ├── _caverphone.py
│   │   ├── _daitch_mokotoff.py
│   │   ├── _davidson.py
│   │   ├── _dolby.py
│   │   ├── _double_metaphone.py
│   │   ├── _eudex.py
│   │   ├── _fonem.py
│   │   ├── _fuzzy_soundex.py
│   │   ├── _haase.py
│   │   ├── _henry_early.py
│   │   ├── _koelner.py
│   │   ├── _lein.py
│   │   ├── _meta_soundex.py
│   │   ├── _metaphone.py
│   │   ├── _mra.py
│   │   ├── _norphone.py
│   │   ├── _nrl.py
│   │   ├── _nysiis.py
│   │   ├── _onca.py
│   │   ├── _parmar_kumbharana.py
│   │   ├── _phonem.py
│   │   ├── _phonet.py
│   │   ├── _phonetic.py
│   │   ├── _phonetic_spanish.py
│   │   ├── _phonex.py
│   │   ├── _phonic.py
│   │   ├── _phonix.py
│   │   ├── _pshp_soundex_first.py
│   │   ├── _pshp_soundex_last.py
│   │   ├── _refined_soundex.py
│   │   ├── _reth_schek.py
│   │   ├── _roger_root.py
│   │   ├── _russell_index.py
│   │   ├── _sfinx_bis.py
│   │   ├── _sound_d.py
│   │   ├── _soundex.py
│   │   ├── _soundex_br.py
│   │   ├── _spanish_metaphone.py
│   │   ├── _spfc.py
│   │   ├── _statistics_canada.py
│   │   └── _waahlin.py
│   ├── stats/
│   │   ├── __init__.py
│   │   ├── _confusion_table.py
│   │   ├── _mean.py
│   │   └── _pairwise.py
│   ├── stemmer/
│   │   ├── __init__.py
│   │   ├── _caumanns.py
│   │   ├── _clef_german.py
│   │   ├── _clef_german_plus.py
│   │   ├── _clef_swedish.py
│   │   ├── _lovins.py
│   │   ├── _paice_husk.py
│   │   ├── _porter.py
│   │   ├── _porter2.py
│   │   ├── _s_stemmer.py
│   │   ├── _schinke.py
│   │   ├── _snowball.py
│   │   ├── _snowball_danish.py
│   │   ├── _snowball_dutch.py
│   │   ├── _snowball_german.py
│   │   ├── _snowball_norwegian.py
│   │   ├── _snowball_swedish.py
│   │   ├── _stemmer.py
│   │   └── _uea_lite.py
│   ├── tokenizer/
│   │   ├── __init__.py
│   │   ├── _c_or_v_cluster.py
│   │   ├── _character.py
│   │   ├── _cv_cluster.py
│   │   ├── _legalipy.py
│   │   ├── _nltk.py
│   │   ├── _q_grams.py
│   │   ├── _q_skipgrams.py
│   │   ├── _regexp.py
│   │   ├── _saps.py
│   │   ├── _sonoripy.py
│   │   ├── _tokenizer.py
│   │   ├── _vc_cluster.py
│   │   ├── _whitespace.py
│   │   └── _wordpunct.py
│   └── util/
│       ├── __init__.py
│       ├── _data.py
│       ├── _ncr.py
│       └── _prod.py
├── abydos.xcf
├── azure-pipelines.yml
├── badge_update.py
├── binder/
│   ├── Basic Examples.ipynb
│   ├── Reversed Metaphone using Keras seq2seq.ipynb
│   ├── Text Classification of Drug Reviews.ipynb
│   └── requirements.txt
├── data/
│   └── features/
│       ├── features_csv_to_dict.py
│       ├── features_symbols.csv
│       └── features_terms.csv
├── docs/
│   ├── Makefile
│   ├── _build/
│   │   └── .gitignore
│   ├── _static/
│   │   └── .gitignore
│   ├── _templates/
│   │   └── .gitignore
│   ├── abydos.bib
│   ├── abydos.compression.rst
│   ├── abydos.corpus.rst
│   ├── abydos.distance.rst
│   ├── abydos.fingerprint.rst
│   ├── abydos.phones.rst
│   ├── abydos.phonetic.rst
│   ├── abydos.rst
│   ├── abydos.stats.rst
│   ├── abydos.stemmer.rst
│   ├── abydos.tokenizer.rst
│   ├── abydos.util.rst
│   ├── conf.py
│   ├── faq.rst
│   ├── history.rst
│   ├── index.rst
│   ├── intro.rst
│   ├── make.bat
│   ├── modules.rst
│   └── requirements.txt
├── helpers/
│   ├── bm_php2py.py
│   └── call_and_write_log.py
├── pyproject.toml
├── requirements-dev.txt
├── requirements-test.txt
├── requirements.txt
├── setup.cfg
├── setup.py
├── stubs/
│   ├── lzss/
│   │   └── __init__.pyi
│   ├── numpy/
│   │   ├── __init__.pyi
│   │   └── core/
│   │       ├── __init__.pyi
│   │       ├── _internal.pyi
│   │       ├── numeric.pyi
│   │       └── numerictypes.pyi
│   ├── paq/
│   │   └── __init__.pyi
│   └── syllabipy/
│       ├── __init__.pyi
│       ├── legalipy.pyi
│       └── sonoripy.pyi
├── tests/
│   ├── __init__.py
│   ├── compression/
│   │   ├── __init__.py
│   │   ├── test_compression_arithmetic.py
│   │   ├── test_compression_bwt.py
│   │   └── test_compression_rle.py
│   ├── corpora/
│   │   ├── fake_words.csv
│   │   ├── googlebooks-ger-all-1gram-20120701-y
│   │   ├── googlebooks-ger-all-2gram-20120701-yp
│   │   ├── googlebooks-ger-all-3gram-20120701-yp
│   │   ├── homophones.csv
│   │   ├── misspellings.csv
│   │   ├── nachnamen.bm.cc.csv
│   │   ├── nachnamen.bm.csv
│   │   ├── nachnamen.csv
│   │   ├── ngerman.csv
│   │   ├── paicehusk.csv
│   │   ├── php_caverphone.csv
│   │   ├── simple-ngrams-pos.txt
│   │   ├── simple-ngrams.txt
│   │   ├── snowball_danish.csv
│   │   ├── snowball_dutch.csv
│   │   ├── snowball_german.csv
│   │   ├── snowball_lovins.csv
│   │   ├── snowball_norwegian.csv
│   │   ├── snowball_porter.csv
│   │   ├── snowball_porter2.csv
│   │   ├── snowball_schinke.csv
│   │   ├── snowball_swedish.csv
│   │   ├── uea-lite_wsj.csv
│   │   ├── uscensus2000.bm.cc.csv
│   │   ├── uscensus2000.bm.csv
│   │   ├── uscensus2000.csv
│   │   ├── variantNames.csv
│   │   └── wikipediaCommonMisspellings.csv
│   ├── corpus/
│   │   ├── __init__.py
│   │   ├── test_corpus_corpus.py
│   │   ├── test_corpus_n_gram_corpus.py
│   │   └── test_corpus_unigram_corpus.py
│   ├── distance/
│   │   ├── __init__.py
│   │   ├── test_distance__distance.py
│   │   ├── test_distance__token_distance.py
│   │   ├── test_distance_aline.py
│   │   ├── test_distance_ample.py
│   │   ├── test_distance_anderberg.py
│   │   ├── test_distance_andres_marzo_delta.py
│   │   ├── test_distance_average_linkage.py
│   │   ├── test_distance_azzoo.py
│   │   ├── test_distance_bag.py
│   │   ├── test_distance_baroni_urbani_buser_i.py
│   │   ├── test_distance_baroni_urbani_buser_ii.py
│   │   ├── test_distance_batagelj_bren.py
│   │   ├── test_distance_baulieu_i.py
│   │   ├── test_distance_baulieu_ii.py
│   │   ├── test_distance_baulieu_iii.py
│   │   ├── test_distance_baulieu_iv.py
│   │   ├── test_distance_baulieu_ix.py
│   │   ├── test_distance_baulieu_v.py
│   │   ├── test_distance_baulieu_vi.py
│   │   ├── test_distance_baulieu_vii.py
│   │   ├── test_distance_baulieu_viii.py
│   │   ├── test_distance_baulieu_x.py
│   │   ├── test_distance_baulieu_xi.py
│   │   ├── test_distance_baulieu_xii.py
│   │   ├── test_distance_baulieu_xiii.py
│   │   ├── test_distance_baulieu_xiv.py
│   │   ├── test_distance_baulieu_xv.py
│   │   ├── test_distance_baystat.py
│   │   ├── test_distance_benini_i.py
│   │   ├── test_distance_benini_ii.py
│   │   ├── test_distance_bennet.py
│   │   ├── test_distance_bhattacharyya.py
│   │   ├── test_distance_bisim.py
│   │   ├── test_distance_bleu.py
│   │   ├── test_distance_block_levenshtein.py
│   │   ├── test_distance_brainerd_robinson.py
│   │   ├── test_distance_braun_blanquet.py
│   │   ├── test_distance_canberra.py
│   │   ├── test_distance_cao.py
│   │   ├── test_distance_chao_dice.py
│   │   ├── test_distance_chao_jaccard.py
│   │   ├── test_distance_chebyshev.py
│   │   ├── test_distance_chord.py
│   │   ├── test_distance_clark.py
│   │   ├── test_distance_clement.py
│   │   ├── test_distance_cohen_kappa.py
│   │   ├── test_distance_cole.py
│   │   ├── test_distance_complete_linkage.py
│   │   ├── test_distance_consonni_todeschini_i.py
│   │   ├── test_distance_consonni_todeschini_ii.py
│   │   ├── test_distance_consonni_todeschini_iii.py
│   │   ├── test_distance_consonni_todeschini_iv.py
│   │   ├── test_distance_consonni_todeschini_v.py
│   │   ├── test_distance_cormode_lz.py
│   │   ├── test_distance_cosine.py
│   │   ├── test_distance_covington.py
│   │   ├── test_distance_damerau_levenshtein.py
│   │   ├── test_distance_dennis.py
│   │   ├── test_distance_dice.py
│   │   ├── test_distance_dice_asymmetric_i.py
│   │   ├── test_distance_dice_asymmetric_ii.py
│   │   ├── test_distance_digby.py
│   │   ├── test_distance_discounted_levenshtein.py
│   │   ├── test_distance_dispersion.py
│   │   ├── test_distance_doolittle.py
│   │   ├── test_distance_dunning.py
│   │   ├── test_distance_editex.py
│   │   ├── test_distance_euclidean.py
│   │   ├── test_distance_eudex.py
│   │   ├── test_distance_eyraud.py
│   │   ├── test_distance_fager_mcgowan.py
│   │   ├── test_distance_faith.py
│   │   ├── test_distance_fellegi_sunter.py
│   │   ├── test_distance_fidelity.py
│   │   ├── test_distance_fleiss.py
│   │   ├── test_distance_fleiss_levin_paik.py
│   │   ├── test_distance_flexmetric.py
│   │   ├── test_distance_forbes_i.py
│   │   ├── test_distance_forbes_ii.py
│   │   ├── test_distance_fossum.py
│   │   ├── test_distance_fuzzywuzzy_partial_string.py
│   │   ├── test_distance_fuzzywuzzy_token_set.py
│   │   ├── test_distance_fuzzywuzzy_token_sort.py
│   │   ├── test_distance_generalized_fleiss.py
│   │   ├── test_distance_gilbert.py
│   │   ├── test_distance_gilbert_wells.py
│   │   ├── test_distance_gini_i.py
│   │   ├── test_distance_gini_ii.py
│   │   ├── test_distance_goodall.py
│   │   ├── test_distance_goodman_kruskal_lambda.py
│   │   ├── test_distance_goodman_kruskal_lambda_r.py
│   │   ├── test_distance_goodman_kruskal_tau_a.py
│   │   ├── test_distance_goodman_kruskal_tau_b.py
│   │   ├── test_distance_gotoh.py
│   │   ├── test_distance_gower_legendre.py
│   │   ├── test_distance_guth.py
│   │   ├── test_distance_guttman_lambda_a.py
│   │   ├── test_distance_guttman_lambda_b.py
│   │   ├── test_distance_gwet_ac.py
│   │   ├── test_distance_hamann.py
│   │   ├── test_distance_hamming.py
│   │   ├── test_distance_harris_lahey.py
│   │   ├── test_distance_hassanat.py
│   │   ├── test_distance_hawkins_dotson.py
│   │   ├── test_distance_hellinger.py
│   │   ├── test_distance_henderson_heron.py
│   │   ├── test_distance_higuera_mico.py
│   │   ├── test_distance_horn_morisita.py
│   │   ├── test_distance_hurlbert.py
│   │   ├── test_distance_ident.py
│   │   ├── test_distance_inclusion.py
│   │   ├── test_distance_indel.py
│   │   ├── test_distance_isg.py
│   │   ├── test_distance_iterative_substring.py
│   │   ├── test_distance_jaccard.py
│   │   ├── test_distance_jaccard_nm.py
│   │   ├── test_distance_jaro_winkler.py
│   │   ├── test_distance_jensen_shannon.py
│   │   ├── test_distance_johnson.py
│   │   ├── test_distance_kendall_tau.py
│   │   ├── test_distance_kent_foster_i.py
│   │   ├── test_distance_kent_foster_ii.py
│   │   ├── test_distance_koppen_i.py
│   │   ├── test_distance_koppen_ii.py
│   │   ├── test_distance_kuder_richardson.py
│   │   ├── test_distance_kuhns_i.py
│   │   ├── test_distance_kuhns_ii.py
│   │   ├── test_distance_kuhns_iii.py
│   │   ├── test_distance_kuhns_iv.py
│   │   ├── test_distance_kuhns_ix.py
│   │   ├── test_distance_kuhns_v.py
│   │   ├── test_distance_kuhns_vi.py
│   │   ├── test_distance_kuhns_vii.py
│   │   ├── test_distance_kuhns_viii.py
│   │   ├── test_distance_kuhns_x.py
│   │   ├── test_distance_kuhns_xi.py
│   │   ├── test_distance_kuhns_xii.py
│   │   ├── test_distance_kulczynski_i.py
│   │   ├── test_distance_kulczynski_ii.py
│   │   ├── test_distance_lcprefix.py
│   │   ├── test_distance_lcsseq.py
│   │   ├── test_distance_lcsstr.py
│   │   ├── test_distance_lcsuffix.py
│   │   ├── test_distance_length.py
│   │   ├── test_distance_levenshtein.py
│   │   ├── test_distance_lig3.py
│   │   ├── test_distance_lorentzian.py
│   │   ├── test_distance_maarel.py
│   │   ├── test_distance_manhattan.py
│   │   ├── test_distance_marking.py
│   │   ├── test_distance_marking_metric.py
│   │   ├── test_distance_masi.py
│   │   ├── test_distance_matusita.py
│   │   ├── test_distance_maxwell_pilliner.py
│   │   ├── test_distance_mcconnaughey.py
│   │   ├── test_distance_mcewen_michael.py
│   │   ├── test_distance_meta_levenshtein.py
│   │   ├── test_distance_michelet.py
│   │   ├── test_distance_millar.py
│   │   ├── test_distance_minhash.py
│   │   ├── test_distance_minkowski.py
│   │   ├── test_distance_mlipns.py
│   │   ├── test_distance_monge_elkan.py
│   │   ├── test_distance_morisita.py
│   │   ├── test_distance_mountford.py
│   │   ├── test_distance_mra.py
│   │   ├── test_distance_ms_contingency.py
│   │   ├── test_distance_mutual_information.py
│   │   ├── test_distance_ncd_arith.py
│   │   ├── test_distance_ncd_bwtrle.py
│   │   ├── test_distance_ncd_bz2.py
│   │   ├── test_distance_ncd_lzma.py
│   │   ├── test_distance_ncd_lzss.py
│   │   ├── test_distance_ncd_paq9a.py
│   │   ├── test_distance_ncd_rle.py
│   │   ├── test_distance_ncd_zlib.py
│   │   ├── test_distance_needleman_wunsch.py
│   │   ├── test_distance_overlap.py
│   │   ├── test_distance_ozbay.py
│   │   ├── test_distance_pattern.py
│   │   ├── test_distance_pearson_chi_squared.py
│   │   ├── test_distance_pearson_heron_ii.py
│   │   ├── test_distance_pearson_ii.py
│   │   ├── test_distance_pearson_iii.py
│   │   ├── test_distance_pearson_phi.py
│   │   ├── test_distance_peirce.py
│   │   ├── test_distance_phonetic_distance.py
│   │   ├── test_distance_phonetic_edit_distance.py
│   │   ├── test_distance_positional_q_gram_dice.py
│   │   ├── test_distance_positional_q_gram_jaccard.py
│   │   ├── test_distance_positional_q_gram_overlap.py
│   │   ├── test_distance_prefix.py
│   │   ├── test_distance_q_gram.py
│   │   ├── test_distance_quantitative_cosine.py
│   │   ├── test_distance_quantitative_dice.py
│   │   ├── test_distance_quantitative_jaccard.py
│   │   ├── test_distance_ratcliff_obershelp.py
│   │   ├── test_distance_raup_crick.py
│   │   ├── test_distance_rees_levenshtein.py
│   │   ├── test_distance_relaxed_hamming.py
│   │   ├── test_distance_roberts.py
│   │   ├── test_distance_rogers_tanimoto.py
│   │   ├── test_distance_rogot_goldberg.py
│   │   ├── test_distance_rouge_l.py
│   │   ├── test_distance_rouge_s.py
│   │   ├── test_distance_rouge_su.py
│   │   ├── test_distance_rouge_w.py
│   │   ├── test_distance_russell_rao.py
│   │   ├── test_distance_saps.py
│   │   ├── test_distance_scott_pi.py
│   │   ├── test_distance_shape.py
│   │   ├── test_distance_shapira_storer_i.py
│   │   ├── test_distance_sift4.py
│   │   ├── test_distance_sift4_extended.py
│   │   ├── test_distance_sift4_simplest.py
│   │   ├── test_distance_single_linkage.py
│   │   ├── test_distance_size.py
│   │   ├── test_distance_smith_waterman.py
│   │   ├── test_distance_soft_cosine.py
│   │   ├── test_distance_softtf_idf.py
│   │   ├── test_distance_sokal_michener.py
│   │   ├── test_distance_sokal_sneath_i.py
│   │   ├── test_distance_sokal_sneath_ii.py
│   │   ├── test_distance_sokal_sneath_iii.py
│   │   ├── test_distance_sokal_sneath_iv.py
│   │   ├── test_distance_sokal_sneath_v.py
│   │   ├── test_distance_sorgenfrei.py
│   │   ├── test_distance_ssk.py
│   │   ├── test_distance_steffensen.py
│   │   ├── test_distance_stiles.py
│   │   ├── test_distance_strcmp95.py
│   │   ├── test_distance_stuart_tau.py
│   │   ├── test_distance_suffix.py
│   │   ├── test_distance_synoname.py
│   │   ├── test_distance_tarantula.py
│   │   ├── test_distance_tarwid.py
│   │   ├── test_distance_tetrachoric.py
│   │   ├── test_distance_tf_idf.py
│   │   ├── test_distance_tichy.py
│   │   ├── test_distance_tulloss_r.py
│   │   ├── test_distance_tulloss_s.py
│   │   ├── test_distance_tulloss_t.py
│   │   ├── test_distance_tulloss_u.py
│   │   ├── test_distance_tversky.py
│   │   ├── test_distance_typo.py
│   │   ├── test_distance_unigram_subtuple.py
│   │   ├── test_distance_unknown_a.py
│   │   ├── test_distance_unknown_b.py
│   │   ├── test_distance_unknown_c.py
│   │   ├── test_distance_unknown_d.py
│   │   ├── test_distance_unknown_e.py
│   │   ├── test_distance_unknown_f.py
│   │   ├── test_distance_unknown_g.py
│   │   ├── test_distance_unknown_h.py
│   │   ├── test_distance_unknown_i.py
│   │   ├── test_distance_unknown_j.py
│   │   ├── test_distance_unknown_k.py
│   │   ├── test_distance_unknown_l.py
│   │   ├── test_distance_unknown_m.py
│   │   ├── test_distance_upholt.py
│   │   ├── test_distance_vps.py
│   │   ├── test_distance_warrens_i.py
│   │   ├── test_distance_warrens_ii.py
│   │   ├── test_distance_warrens_iii.py
│   │   ├── test_distance_warrens_iv.py
│   │   ├── test_distance_warrens_v.py
│   │   ├── test_distance_weighted_jaccard.py
│   │   ├── test_distance_whittaker.py
│   │   ├── test_distance_yates_chi_squared.py
│   │   ├── test_distance_yjhhr.py
│   │   ├── test_distance_yujian_bo.py
│   │   ├── test_distance_yule_q.py
│   │   ├── test_distance_yule_q_ii.py
│   │   └── test_distance_yule_y.py
│   ├── fingerprint/
│   │   ├── __init__.py
│   │   ├── test_fingerprint__fingerprint.py
│   │   ├── test_fingerprint_bwtf.py
│   │   ├── test_fingerprint_bwtrlef.py
│   │   ├── test_fingerprint_consonant.py
│   │   ├── test_fingerprint_count.py
│   │   ├── test_fingerprint_extract.py
│   │   ├── test_fingerprint_extract_position_frequency.py
│   │   ├── test_fingerprint_lacss.py
│   │   ├── test_fingerprint_lc_cutter.py
│   │   ├── test_fingerprint_occurrence.py
│   │   ├── test_fingerprint_occurrence_halved.py
│   │   ├── test_fingerprint_omission_key.py
│   │   ├── test_fingerprint_phonetic.py
│   │   ├── test_fingerprint_position.py
│   │   ├── test_fingerprint_qgram.py
│   │   ├── test_fingerprint_skeleton_key.py
│   │   ├── test_fingerprint_string.py
│   │   └── test_fingerprint_synoname_toolcode.py
│   ├── fuzz/
│   │   ├── __init__.py
│   │   ├── corpora/
│   │   │   ├── basewords.txt
│   │   │   └── blns.txt
│   │   ├── fuzz_test_distance.py
│   │   ├── fuzz_test_fingerprint.py
│   │   ├── fuzz_test_phonetic.py
│   │   ├── fuzz_test_stemmer.py
│   │   └── fuzz_test_tokenizer.py
│   ├── phones/
│   │   ├── __init__.py
│   │   └── test_phones.py
│   ├── phonetic/
│   │   ├── __init__.py
│   │   ├── test_phonetic__phonetic.py
│   │   ├── test_phonetic_ainsworth.py
│   │   ├── test_phonetic_alpha_sis.py
│   │   ├── test_phonetic_beider_morse.py
│   │   ├── test_phonetic_caverphone.py
│   │   ├── test_phonetic_daitch_mokotoff.py
│   │   ├── test_phonetic_davidson.py
│   │   ├── test_phonetic_dolby.py
│   │   ├── test_phonetic_double_metaphone.py
│   │   ├── test_phonetic_eudex.py
│   │   ├── test_phonetic_fonem.py
│   │   ├── test_phonetic_fuzzy_soundex.py
│   │   ├── test_phonetic_haase.py
│   │   ├── test_phonetic_henry_early.py
│   │   ├── test_phonetic_koelner.py
│   │   ├── test_phonetic_lein.py
│   │   ├── test_phonetic_meta_soundex.py
│   │   ├── test_phonetic_metaphone.py
│   │   ├── test_phonetic_mra.py
│   │   ├── test_phonetic_norphone.py
│   │   ├── test_phonetic_nrl.py
│   │   ├── test_phonetic_nysiis.py
│   │   ├── test_phonetic_onca.py
│   │   ├── test_phonetic_parmar_kumbharana.py
│   │   ├── test_phonetic_phonem.py
│   │   ├── test_phonetic_phonet.py
│   │   ├── test_phonetic_phonetic_spanish.py
│   │   ├── test_phonetic_phonex.py
│   │   ├── test_phonetic_phonic.py
│   │   ├── test_phonetic_phonix.py
│   │   ├── test_phonetic_pshp_soundex_first.py
│   │   ├── test_phonetic_pshp_soundex_last.py
│   │   ├── test_phonetic_refined_soundex.py
│   │   ├── test_phonetic_reth_schek.py
│   │   ├── test_phonetic_roger_root.py
│   │   ├── test_phonetic_russell_index.py
│   │   ├── test_phonetic_sfinxbis.py
│   │   ├── test_phonetic_sound_d.py
│   │   ├── test_phonetic_soundex.py
│   │   ├── test_phonetic_soundex_br.py
│   │   ├── test_phonetic_spanish_metaphone.py
│   │   ├── test_phonetic_spfc.py
│   │   ├── test_phonetic_statistics_canada.py
│   │   └── test_phonetic_waahlin.py
│   ├── stats/
│   │   ├── __init__.py
│   │   ├── test_stats_confusion_table.py
│   │   ├── test_stats_mean.py
│   │   └── test_stats_pairwise.py
│   ├── stemmer/
│   │   ├── __init__.py
│   │   ├── test_stemmer__snowball.py
│   │   ├── test_stemmer__stemmer.py
│   │   ├── test_stemmer_caumanns.py
│   │   ├── test_stemmer_clef_german.py
│   │   ├── test_stemmer_clef_german_plus.py
│   │   ├── test_stemmer_clef_swedish.py
│   │   ├── test_stemmer_lovins.py
│   │   ├── test_stemmer_paice_husk.py
│   │   ├── test_stemmer_porter.py
│   │   ├── test_stemmer_porter2.py
│   │   ├── test_stemmer_s_stemmer.py
│   │   ├── test_stemmer_schinke.py
│   │   ├── test_stemmer_snowball_danish.py
│   │   ├── test_stemmer_snowball_dutch.py
│   │   ├── test_stemmer_snowball_german.py
│   │   ├── test_stemmer_snowball_norwegian.py
│   │   ├── test_stemmer_snowball_swedish.py
│   │   └── test_stemmer_uealite.py
│   ├── tokenizer/
│   │   ├── __init__.py
│   │   ├── test_tokenizer__tokenizer.py
│   │   ├── test_tokenizer_c_or_v_cluster.py
│   │   ├── test_tokenizer_character.py
│   │   ├── test_tokenizer_cv_cluster.py
│   │   ├── test_tokenizer_legalipy.py
│   │   ├── test_tokenizer_nltk.py
│   │   ├── test_tokenizer_q_grams.py
│   │   ├── test_tokenizer_q_skipgrams.py
│   │   ├── test_tokenizer_regexp.py
│   │   ├── test_tokenizer_saps.py
│   │   ├── test_tokenizer_sonoripy.py
│   │   ├── test_tokenizer_vc_cluster.py
│   │   ├── test_tokenizer_whitespace.py
│   │   └── test_tokenizer_wordpunct.py
│   └── util/
│       ├── __init__.py
│       ├── test_data.py
│       ├── test_ncr.py
│       └── test_prod.py
└── tox.ini
Download .txt
Showing preview only (268K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3211 symbols across 782 files)

FILE: abydos/compression/_arithmetic.py
  class Arithmetic (line 29) | class Arithmetic:
    method __init__ (line 41) | def __init__(self, text: Union[str, None] = None) -> None:
    method get_probs (line 56) | def get_probs(self) -> Dict[str, Tuple[Fraction, Fraction]]:
    method set_probs (line 70) | def set_probs(self, probs: Dict[str, Tuple[Fraction, Fraction]]) -> None:
    method train (line 84) | def train(self, text: str) -> None:
    method encode (line 152) | def encode(self, text: str) -> Tuple[int, int]:
    method decode (line 210) | def decode(self, longval: int, nbits: int) -> str:

FILE: abydos/compression/_bwt.py
  class BWT (line 25) | class BWT:
    method __init__ (line 35) | def __init__(self, terminator: str = '\0') -> None:
    method encode (line 49) | def encode(self, word: str) -> str:
    method decode (line 101) | def decode(self, code: str) -> str:

FILE: abydos/compression/_rle.py
  class RLE (line 27) | class RLE:
    method encode (line 40) | def encode(self, text: str) -> str:
    method decode (line 85) | def decode(self, text: str) -> str:

FILE: abydos/corpus/_corpus.py
  class Corpus (line 31) | class Corpus:
    method __init__ (line 42) | def __init__(
    method docs (line 112) | def docs(self) -> List[List[List[str]]]:
    method paras (line 141) | def paras(self) -> List[List[List[str]]]:
    method sents (line 172) | def sents(self) -> List[List[str]]:
    method words (line 197) | def words(self) -> List[str]:
    method docs_of_words (line 223) | def docs_of_words(self) -> List[List[str]]:
    method raw (line 254) | def raw(self) -> str:
    method idf (line 290) | def idf(

FILE: abydos/corpus/_ngram_corpus.py
  class NGramCorpus (line 31) | class NGramCorpus:
    method __init__ (line 48) | def __init__(self, corpus: Optional[Corpus] = None) -> None:
    method corpus_importer (line 86) | def corpus_importer(
    method get_count (line 143) | def get_count(
    method _add_to_ngcorpus (line 197) | def _add_to_ngcorpus(
    method gng_importer (line 223) | def gng_importer(self, corpus_file: str) -> None:

FILE: abydos/corpus/_unigram_corpus.py
  function _dd_default (line 33) | def _dd_default(*args: Any) -> Tuple[int, int]:
  class UnigramCorpus (line 37) | class UnigramCorpus:
    method __init__ (line 49) | def __init__(
    method add_document (line 93) | def add_document(self, doc: str) -> None:
    method save_corpus (line 109) | def save_corpus(self, filename: str) -> None:
    method load_corpus (line 128) | def load_corpus(self, filename: str) -> None:
    method _update_doc_count (line 148) | def _update_doc_count(self) -> None:
    method _add_word (line 156) | def _add_word(self, word: str, count: int, doc_count: int) -> None:
    method gng_importer (line 192) | def gng_importer(self, corpus_file: str) -> None:
    method idf (line 213) | def idf(self, term: str) -> float:

FILE: abydos/distance/_aline.py
  class ALINE (line 32) | class ALINE(_Distance):
    method __init__ (line 1170) | def __init__(
    method alignment (line 1234) | def alignment(self, src: str, tar: str) -> Tuple[float, str, str]:
    method alignments (line 1271) | def alignments(
    method sim_score (line 1670) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 1705) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_ample.py
  class AMPLE (line 30) | class AMPLE(_TokenDistance):
    method __init__ (line 63) | def __init__(
    method sim (line 113) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_anderberg.py
  class Anderberg (line 30) | class Anderberg(_TokenDistance):
    method __init__ (line 81) | def __init__(
    method sim_score (line 131) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 177) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_andres_marzo_delta.py
  class AndresMarzoDelta (line 30) | class AndresMarzoDelta(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method corr (line 104) | def corr(self, src: str, tar: str) -> float:
    method sim (line 152) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_average_linkage.py
  class AverageLinkage (line 31) | class AverageLinkage(_TokenDistance):
    method __init__ (line 45) | def __init__(
    method dist (line 79) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_azzoo.py
  class AZZOO (line 38) | class AZZOO(_TokenDistance):
    method __init__ (line 63) | def __init__(
    method sim_score (line 118) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 156) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_bag.py
  class Bag (line 29) | class Bag(_TokenDistance):
    method __init__ (line 42) | def __init__(
    method dist_abs (line 84) | def dist_abs(self, src: str, tar: str, normalized: bool = False) -> fl...
    method dist (line 139) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baroni_urbani_buser_i.py
  class BaroniUrbaniBuserI (line 30) | class BaroniUrbaniBuserI(_TokenDistance):
    method __init__ (line 58) | def __init__(
    method sim (line 108) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baroni_urbani_buser_ii.py
  class BaroniUrbaniBuserII (line 30) | class BaroniUrbaniBuserII(_TokenDistance):
    method __init__ (line 58) | def __init__(
    method corr (line 108) | def corr(self, src: str, tar: str) -> float:
    method sim (line 151) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_batagelj_bren.py
  class BatageljBren (line 30) | class BatageljBren(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method dist_abs (line 103) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 148) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baulieu_i.py
  class BaulieuI (line 30) | class BaulieuI(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method dist (line 104) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baulieu_ii.py
  class BaulieuII (line 30) | class BaulieuII(_TokenDistance):
    method __init__ (line 55) | def __init__(
    method sim (line 105) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baulieu_iii.py
  class BaulieuIII (line 30) | class BaulieuIII(_TokenDistance):
    method __init__ (line 66) | def __init__(
    method dist (line 116) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baulieu_iv.py
  class BaulieuIV (line 31) | class BaulieuIV(_TokenDistance):
    method __init__ (line 63) | def __init__(
    method dist_abs (line 115) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 161) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baulieu_ix.py
  class BaulieuIX (line 30) | class BaulieuIX(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method dist (line 104) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baulieu_v.py
  class BaulieuV (line 30) | class BaulieuV(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method dist (line 106) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baulieu_vi.py
  class BaulieuVI (line 30) | class BaulieuVI(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method dist (line 106) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baulieu_vii.py
  class BaulieuVII (line 30) | class BaulieuVII(_TokenDistance):
    method __init__ (line 55) | def __init__(
    method dist (line 105) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baulieu_viii.py
  class BaulieuVIII (line 30) | class BaulieuVIII(_TokenDistance):
    method __init__ (line 55) | def __init__(
    method dist (line 105) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baulieu_x.py
  class BaulieuX (line 30) | class BaulieuX(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method dist (line 106) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baulieu_xi.py
  class BaulieuXI (line 30) | class BaulieuXI(_TokenDistance):
    method __init__ (line 55) | def __init__(
    method dist (line 105) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baulieu_xii.py
  class BaulieuXII (line 30) | class BaulieuXII(_TokenDistance):
    method __init__ (line 64) | def __init__(
    method dist (line 114) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baulieu_xiii.py
  class BaulieuXIII (line 30) | class BaulieuXIII(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method dist (line 106) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baulieu_xiv.py
  class BaulieuXIV (line 30) | class BaulieuXIV(_TokenDistance):
    method __init__ (line 55) | def __init__(
    method dist (line 105) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baulieu_xv.py
  class BaulieuXV (line 30) | class BaulieuXV(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method dist (line 106) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_baystat.py
  class Baystat (line 29) | class Baystat(_Distance):
    method __init__ (line 44) | def __init__(
    method sim (line 73) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_benini_i.py
  class BeniniI (line 30) | class BeniniI(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method corr (line 103) | def corr(self, src: str, tar: str) -> float:
    method sim (line 150) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_benini_ii.py
  class BeniniII (line 30) | class BeniniII(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method corr (line 104) | def corr(self, src: str, tar: str) -> float:
    method sim (line 153) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_bennet.py
  class Bennet (line 30) | class Bennet(_TokenDistance):
    method __init__ (line 61) | def __init__(
    method corr (line 111) | def corr(self, src: str, tar: str) -> float:
    method sim (line 153) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_bhattacharyya.py
  class Bhattacharyya (line 31) | class Bhattacharyya(_TokenDistance):
    method __init__ (line 45) | def __init__(
    method dist_abs (line 70) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 109) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_bisim.py
  class BISIM (line 32) | class BISIM(_Distance):
    method __init__ (line 41) | def __init__(self, qval: int = 2, **kwargs: Any) -> None:
    method sim (line 60) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_bleu.py
  class BLEU (line 31) | class BLEU(_Distance):
    method __init__ (line 65) | def __init__(
    method sim (line 109) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_block_levenshtein.py
  class BlockLevenshtein (line 30) | class BlockLevenshtein(Levenshtein):
    method __init__ (line 41) | def __init__(
    method dist_abs (line 63) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 108) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_brainerd_robinson.py
  class BrainerdRobinson (line 30) | class BrainerdRobinson(_TokenDistance):
    method __init__ (line 45) | def __init__(
    method sim_score (line 70) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 119) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_braun_blanquet.py
  class BraunBlanquet (line 30) | class BraunBlanquet(_TokenDistance):
    method __init__ (line 51) | def __init__(
    method sim (line 101) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_canberra.py
  class Canberra (line 30) | class Canberra(_TokenDistance):
    method __init__ (line 51) | def __init__(
    method dist (line 91) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_cao.py
  class Cao (line 30) | class Cao(_TokenDistance):
    method __init__ (line 106) | def __init__(self, **kwargs: Any) -> None:
    method sim (line 120) | def sim(self, src: str, tar: str) -> float:
    method dist_abs (line 205) | def dist_abs(self, src: str, tar: str) -> float:

FILE: abydos/distance/_chao_dice.py
  class ChaoDice (line 29) | class ChaoDice(ChaoJaccard):
    method __init__ (line 37) | def __init__(self, **kwargs: Any) -> None:
    method sim (line 51) | def sim(self, src: str, tar: str) -> float:
    method sim_score (line 86) | def sim_score(self, src: str, tar: str) -> float:

FILE: abydos/distance/_chao_jaccard.py
  function choices (line 30) | def choices(population, k=1):  # type: ignore
  class ChaoJaccard (line 40) | class ChaoJaccard(_TokenDistance):
    method __init__ (line 48) | def __init__(self, **kwargs: Any) -> None:
    method sim (line 62) | def sim(self, src: str, tar: str) -> float:
    method sim_score (line 97) | def sim_score(self, src: str, tar: str) -> float:
    method _get_estimates (line 143) | def _get_estimates(self, src: str, tar: str) -> Tuple[float, float]:

FILE: abydos/distance/_chebyshev.py
  class Chebyshev (line 38) | class Chebyshev(Minkowski):
    method __init__ (line 47) | def __init__(
    method dist_abs (line 96) | def dist_abs(self, src: str, tar: str, *args: Any, **kwargs: Any) -> f...
    method sim (line 137) | def sim(self, *args: Any, **kwargs: Any) -> NoReturn:
    method dist (line 158) | def dist(self, *args: Any, **kwargs: Any) -> NoReturn:

FILE: abydos/distance/_chord.py
  class Chord (line 30) | class Chord(_TokenDistance):
    method __init__ (line 45) | def __init__(
    method dist_abs (line 85) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 136) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_clark.py
  class Clark (line 29) | class Clark(_TokenDistance):
    method __init__ (line 43) | def __init__(self, **kwargs: Any) -> None:
    method dist (line 57) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_clement.py
  class Clement (line 30) | class Clement(_TokenDistance):
    method __init__ (line 55) | def __init__(
    method sim (line 105) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_cohen_kappa.py
  class CohenKappa (line 30) | class CohenKappa(_TokenDistance):
    method __init__ (line 67) | def __init__(
    method sim (line 117) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_cole.py
  class Cole (line 30) | class Cole(_TokenDistance):
    method __init__ (line 88) | def __init__(
    method corr (line 138) | def corr(self, src: str, tar: str) -> float:
    method sim (line 190) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_complete_linkage.py
  class CompleteLinkage (line 32) | class CompleteLinkage(_TokenDistance):
    method __init__ (line 46) | def __init__(
    method dist_abs (line 80) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 125) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_consonni_todeschini_i.py
  class ConsonniTodeschiniI (line 31) | class ConsonniTodeschiniI(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method sim (line 104) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_consonni_todeschini_ii.py
  class ConsonniTodeschiniII (line 31) | class ConsonniTodeschiniII(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method sim (line 104) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_consonni_todeschini_iii.py
  class ConsonniTodeschiniIII (line 31) | class ConsonniTodeschiniIII(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method sim (line 103) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_consonni_todeschini_iv.py
  class ConsonniTodeschiniIV (line 31) | class ConsonniTodeschiniIV(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method sim (line 103) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_consonni_todeschini_v.py
  class ConsonniTodeschiniV (line 31) | class ConsonniTodeschiniV(_TokenDistance):
    method __init__ (line 55) | def __init__(
    method corr (line 105) | def corr(self, src: str, tar: str) -> float:
    method sim (line 150) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_cormode_lz.py
  class CormodeLZ (line 29) | class CormodeLZ(_Distance):
    method __init__ (line 37) | def __init__(self, **kwargs: Any) -> None:
    method dist_abs (line 51) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 98) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_cosine.py
  class Cosine (line 31) | class Cosine(_TokenDistance):
    method __init__ (line 60) | def __init__(
    method sim (line 100) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_covington.py
  class Covington (line 33) | class Covington(_Distance):
    method __init__ (line 41) | def __init__(
    method dist_abs (line 87) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 120) | def dist(self, src: str, tar: str) -> float:
    method alignment (line 158) | def alignment(self, src: str, tar: str) -> Tuple[float, str, str]:
    method alignments (line 191) | def alignments(

FILE: abydos/distance/_damerau_levenshtein.py
  class DamerauLevenshtein (line 35) | class DamerauLevenshtein(_Distance):
    method __init__ (line 44) | def __init__(
    method dist_abs (line 73) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 191) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_dennis.py
  class Dennis (line 30) | class Dennis(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method sim_score (line 106) | def sim_score(self, src: str, tar: str) -> float:
    method corr (line 155) | def corr(self, src: str, tar: str) -> float:
    method sim (line 191) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_dice.py
  class Dice (line 30) | class Dice(Tversky):
    method __init__ (line 69) | def __init__(
    method sim (line 114) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_dice_asymmetric_i.py
  class DiceAsymmetricI (line 30) | class DiceAsymmetricI(_TokenDistance):
    method __init__ (line 58) | def __init__(
    method sim (line 98) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_dice_asymmetric_ii.py
  class DiceAsymmetricII (line 30) | class DiceAsymmetricII(_TokenDistance):
    method __init__ (line 58) | def __init__(
    method sim (line 98) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_digby.py
  class Digby (line 30) | class Digby(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method corr (line 106) | def corr(self, src: str, tar: str) -> float:
    method sim (line 154) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_discounted_levenshtein.py
  class DiscountedLevenshtein (line 32) | class DiscountedLevenshtein(Levenshtein):
    method __init__ (line 42) | def __init__(
    method _log_discount (line 113) | def _log_discount(discounts: float) -> float:
    method _exp_discount (line 117) | def _exp_discount(discounts: float) -> float:
    method _alignment_matrix (line 120) | def _alignment_matrix(
    method dist_abs (line 227) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 295) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_dispersion.py
  class Dispersion (line 30) | class Dispersion(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method corr (line 104) | def corr(self, src: str, tar: str) -> float:
    method sim (line 148) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_distance.py
  class _Distance (line 26) | class _Distance:
    method __init__ (line 32) | def __init__(self, **kwargs: Any) -> None:
    method set_params (line 47) | def set_params(self, **kwargs: Any) -> None:
    method sim (line 62) | def sim(self, src: str, tar: str) -> float:
    method dist (line 83) | def dist(self, src: str, tar: str) -> float:
    method dist_abs (line 104) | def dist_abs(self, src: str, tar: str) -> float:

FILE: abydos/distance/_doolittle.py
  class Doolittle (line 30) | class Doolittle(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method sim (line 103) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_dunning.py
  class Dunning (line 31) | class Dunning(_TokenDistance):
    method __init__ (line 73) | def __init__(
    method sim_score (line 123) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 187) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_editex.py
  class Editex (line 34) | class Editex(_Distance):
    method __init__ (line 60) | def __init__(
    method _taper (line 93) | def _taper(self, pos: int, length: int) -> float:
    method dist_abs (line 102) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 238) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_euclidean.py
  class Euclidean (line 30) | class Euclidean(Minkowski):
    method __init__ (line 39) | def __init__(
    method dist_abs (line 88) | def dist_abs(self, src: str, tar: str, normalized: bool = False) -> fl...
    method dist (line 126) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_eudex.py
  class Eudex (line 39) | class Eudex(_Distance):
    method gen_fibonacci (line 48) | def gen_fibonacci() -> Generator[float, None, None]:
    method gen_exponential (line 71) | def gen_exponential(base: int = 2) -> Generator[float, None, None]:
    method __init__ (line 97) | def __init__(
    method dist_abs (line 146) | def dist_abs(self, src: str, tar: str, normalized: bool = False) -> fl...
    method dist (line 261) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_eyraud.py
  class Eyraud (line 30) | class Eyraud(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method sim_score (line 106) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 149) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_fager_mcgowan.py
  class FagerMcGowan (line 30) | class FagerMcGowan(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method sim_score (line 93) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 138) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_faith.py
  class Faith (line 30) | class Faith(_TokenDistance):
    method __init__ (line 52) | def __init__(
    method sim (line 102) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_fellegi_sunter.py
  class FellegiSunter (line 32) | class FellegiSunter(_TokenDistance):
    method __init__ (line 41) | def __init__(
    method sim_score (line 89) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 150) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_fidelity.py
  class Fidelity (line 30) | class Fidelity(_TokenDistance):
    method __init__ (line 44) | def __init__(
    method sim (line 69) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_fleiss.py
  class Fleiss (line 30) | class Fleiss(_TokenDistance):
    method __init__ (line 59) | def __init__(
    method corr (line 109) | def corr(self, src: str, tar: str) -> float:
    method sim (line 153) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_fleiss_levin_paik.py
  class FleissLevinPaik (line 30) | class FleissLevinPaik(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method sim (line 106) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_flexmetric.py
  class FlexMetric (line 43) | class FlexMetric(_Distance):
    method __init__ (line 51) | def __init__(
    method _cost (line 129) | def _cost(self, src: str, s_pos: int, tar: str, t_pos: int) -> float:
    method dist_abs (line 152) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 217) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_forbes_i.py
  class ForbesI (line 30) | class ForbesI(_TokenDistance):
    method __init__ (line 52) | def __init__(
    method sim_score (line 102) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 145) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_forbes_ii.py
  class ForbesII (line 30) | class ForbesII(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method corr (line 104) | def corr(self, src: str, tar: str) -> float:
    method sim (line 147) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_fossum.py
  class Fossum (line 30) | class Fossum(_TokenDistance):
    method __init__ (line 52) | def __init__(
    method sim_score (line 102) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 145) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_fuzzywuzzy_partial_string.py
  class FuzzyWuzzyPartialString (line 29) | class FuzzyWuzzyPartialString(_Distance):
    method sim (line 40) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_fuzzywuzzy_token_set.py
  class FuzzyWuzzyTokenSet (line 31) | class FuzzyWuzzyTokenSet(_TokenDistance):
    method __init__ (line 42) | def __init__(
    method sim (line 71) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_fuzzywuzzy_token_sort.py
  class FuzzyWuzzyTokenSort (line 31) | class FuzzyWuzzyTokenSort(_TokenDistance):
    method __init__ (line 42) | def __init__(
    method sim (line 73) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_generalized_fleiss.py
  function _agmean_prec6 (line 57) | def _agmean_prec6(nums: Sequence[float]) -> float:
  function _ghmean_prec6 (line 61) | def _ghmean_prec6(nums: Sequence[float]) -> float:
  function _aghmean_prec6 (line 65) | def _aghmean_prec6(nums: Sequence[float]) -> float:
  class GeneralizedFleiss (line 87) | class GeneralizedFleiss(_TokenDistance):
    method __init__ (line 128) | def __init__(
    method corr (line 234) | def corr(self, src: str, tar: str) -> float:
    method sim (line 294) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_gilbert.py
  class Gilbert (line 30) | class Gilbert(_TokenDistance):
    method __init__ (line 58) | def __init__(
    method corr (line 108) | def corr(self, src: str, tar: str) -> float:
    method sim (line 154) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_gilbert_wells.py
  class GilbertWells (line 34) | class GilbertWells(_TokenDistance):
    method __init__ (line 73) | def __init__(
    method sim_score (line 109) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 173) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_gini_i.py
  class GiniI (line 33) | class GiniI(_TokenDistance):
    method __init__ (line 62) | def __init__(
    method corr (line 117) | def corr(self, src: str, tar: str) -> float:
    method sim (line 160) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_gini_ii.py
  class GiniII (line 33) | class GiniII(_TokenDistance):
    method __init__ (line 62) | def __init__(
    method corr (line 117) | def corr(self, src: str, tar: str) -> float:
    method sim (line 164) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_goodall.py
  class Goodall (line 31) | class Goodall(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method sim (line 106) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_goodman_kruskal_lambda.py
  class GoodmanKruskalLambda (line 30) | class GoodmanKruskalLambda(_TokenDistance):
    method __init__ (line 60) | def __init__(
    method sim (line 110) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_goodman_kruskal_lambda_r.py
  class GoodmanKruskalLambdaR (line 30) | class GoodmanKruskalLambdaR(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method corr (line 106) | def corr(self, src: str, tar: str) -> float:
    method sim (line 159) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_goodman_kruskal_tau_a.py
  class GoodmanKruskalTauA (line 30) | class GoodmanKruskalTauA(_TokenDistance):
    method __init__ (line 63) | def __init__(
    method sim (line 118) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_goodman_kruskal_tau_b.py
  class GoodmanKruskalTauB (line 30) | class GoodmanKruskalTauB(_TokenDistance):
    method __init__ (line 63) | def __init__(
    method sim (line 118) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_gotoh.py
  class Gotoh (line 31) | class Gotoh(NeedlemanWunsch):
    method __init__ (line 40) | def __init__(
    method sim_score (line 73) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 148) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_gower_legendre.py
  class GowerLegendre (line 30) | class GowerLegendre(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method sim (line 108) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_guth.py
  class Guth (line 30) | class Guth(_Distance):
    method __init__ (line 48) | def __init__(
    method _token_at (line 79) | def _token_at(
    method sim_score (line 106) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 170) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_guttman_lambda_a.py
  class GuttmanLambdaA (line 30) | class GuttmanLambdaA(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method sim (line 104) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_guttman_lambda_b.py
  class GuttmanLambdaB (line 30) | class GuttmanLambdaB(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method sim (line 104) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_gwet_ac.py
  class GwetAC (line 30) | class GwetAC(_TokenDistance):
    method __init__ (line 68) | def __init__(
    method corr (line 118) | def corr(self, src: str, tar: str) -> float:
    method sim (line 166) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_hamann.py
  class Hamann (line 30) | class Hamann(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method corr (line 103) | def corr(self, src: str, tar: str) -> float:
    method sim (line 145) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_hamming.py
  class Hamming (line 29) | class Hamming(_Distance):
    method __init__ (line 41) | def __init__(self, diff_lens: bool = True, **kwargs: Any) -> None:
    method dist_abs (line 63) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 116) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_harris_lahey.py
  class HarrisLahey (line 30) | class HarrisLahey(_TokenDistance):
    method __init__ (line 64) | def __init__(
    method sim (line 114) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_hassanat.py
  class Hassanat (line 30) | class Hassanat(_TokenDistance):
    method __init__ (line 58) | def __init__(
    method dist_abs (line 83) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 130) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_hawkins_dotson.py
  class HawkinsDotson (line 30) | class HawkinsDotson(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method sim (line 106) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_hellinger.py
  class Hellinger (line 30) | class Hellinger(_TokenDistance):
    method __init__ (line 44) | def __init__(
    method dist_abs (line 69) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 116) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_henderson_heron.py
  class HendersonHeron (line 30) | class HendersonHeron(_TokenDistance):
    method __init__ (line 45) | def __init__(self, **kwargs: Any) -> None:
    method dist (line 59) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_higuera_mico.py
  class HigueraMico (line 31) | class HigueraMico(_Distance):
    method __init__ (line 51) | def __init__(self, **kwargs: Any) -> None:
    method dist_abs (line 65) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 143) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_horn_morisita.py
  class HornMorisita (line 29) | class HornMorisita(_TokenDistance):
    method __init__ (line 58) | def __init__(self, **kwargs: Any) -> None:
    method sim (line 72) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_hurlbert.py
  class Hurlbert (line 31) | class Hurlbert(_TokenDistance):
    method __init__ (line 74) | def __init__(
    method corr (line 124) | def corr(self, src: str, tar: str) -> float:
    method sim (line 201) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_ident.py
  class Ident (line 27) | class Ident(_Distance):
    method sim (line 33) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_inclusion.py
  class Inclusion (line 28) | class Inclusion(_Distance):
    method dist (line 50) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_indel.py
  class Indel (line 29) | class Indel(Levenshtein):
    method __init__ (line 39) | def __init__(self, **kwargs: Any) -> None:
    method dist (line 55) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_isg.py
  class ISG (line 29) | class ISG(_Distance):
    method __init__ (line 52) | def __init__(
    method _isg_i (line 74) | def _isg_i(self, src: str, tar: str) -> float:
    method sim (line 126) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_iterative_substring.py
  class IterativeSubString (line 29) | class IterativeSubString(_Distance):
    method __init__ (line 40) | def __init__(
    method corr (line 66) | def corr(self, src: str, tar: str) -> float:
    method sim (line 187) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_jaccard.py
  class Jaccard (line 31) | class Jaccard(Tversky):
    method __init__ (line 63) | def __init__(
    method sim (line 108) | def sim(self, src: str, tar: str) -> float:
    method tanimoto_coeff (line 143) | def tanimoto_coeff(self, src: str, tar: str) -> float:

FILE: abydos/distance/_jaccard_nm.py
  class JaccardNM (line 30) | class JaccardNM(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method sim_score (line 103) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 146) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_jaro_winkler.py
  class JaroWinkler (line 34) | class JaroWinkler(_Distance):
    method __init__ (line 48) | def __init__(
    method sim (line 96) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_jensen_shannon.py
  class JensenShannon (line 31) | class JensenShannon(_TokenDistance):
    method __init__ (line 50) | def __init__(
    method dist_abs (line 77) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 133) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_johnson.py
  class Johnson (line 30) | class Johnson(_TokenDistance):
    method __init__ (line 52) | def __init__(
    method sim_score (line 92) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 137) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_kendall_tau.py
  class KendallTau (line 30) | class KendallTau(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method corr (line 103) | def corr(self, src: str, tar: str) -> float:
    method sim (line 152) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_kent_foster_i.py
  class KentFosterI (line 30) | class KentFosterI(_TokenDistance):
    method __init__ (line 58) | def __init__(
    method sim_score (line 108) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 155) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_kent_foster_ii.py
  class KentFosterII (line 30) | class KentFosterII(_TokenDistance):
    method __init__ (line 62) | def __init__(
    method sim_score (line 112) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 159) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_koppen_i.py
  class KoppenI (line 30) | class KoppenI(_TokenDistance):
    method __init__ (line 76) | def __init__(
    method corr (line 131) | def corr(self, src: str, tar: str) -> float:
    method sim (line 178) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_koppen_ii.py
  class KoppenII (line 30) | class KoppenII(_TokenDistance):
    method __init__ (line 52) | def __init__(
    method sim_score (line 102) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 141) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_kuder_richardson.py
  class KuderRichardson (line 30) | class KuderRichardson(_TokenDistance):
    method __init__ (line 57) | def __init__(
    method corr (line 107) | def corr(self, src: str, tar: str) -> float:
    method sim (line 158) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_kuhns_i.py
  class KuhnsI (line 30) | class KuhnsI(_TokenDistance):
    method __init__ (line 65) | def __init__(
    method corr (line 115) | def corr(self, src: str, tar: str) -> float:
    method sim (line 163) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_kuhns_ii.py
  class KuhnsII (line 30) | class KuhnsII(_TokenDistance):
    method __init__ (line 65) | def __init__(
    method corr (line 115) | def corr(self, src: str, tar: str) -> float:
    method sim (line 163) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_kuhns_iii.py
  class KuhnsIII (line 30) | class KuhnsIII(_TokenDistance):
    method __init__ (line 74) | def __init__(
    method corr (line 124) | def corr(self, src: str, tar: str) -> float:
    method sim (line 175) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_kuhns_iv.py
  class KuhnsIV (line 30) | class KuhnsIV(_TokenDistance):
    method __init__ (line 65) | def __init__(
    method corr (line 115) | def corr(self, src: str, tar: str) -> float:
    method sim (line 163) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_kuhns_ix.py
  class KuhnsIX (line 30) | class KuhnsIX(_TokenDistance):
    method __init__ (line 67) | def __init__(
    method corr (line 117) | def corr(self, src: str, tar: str) -> float:
    method sim (line 173) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_kuhns_v.py
  class KuhnsV (line 30) | class KuhnsV(_TokenDistance):
    method __init__ (line 68) | def __init__(
    method corr (line 118) | def corr(self, src: str, tar: str) -> float:
    method sim (line 183) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_kuhns_vi.py
  class KuhnsVI (line 30) | class KuhnsVI(_TokenDistance):
    method __init__ (line 67) | def __init__(
    method corr (line 117) | def corr(self, src: str, tar: str) -> float:
    method sim (line 182) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_kuhns_vii.py
  class KuhnsVII (line 30) | class KuhnsVII(_TokenDistance):
    method __init__ (line 65) | def __init__(
    method corr (line 115) | def corr(self, src: str, tar: str) -> float:
    method sim (line 163) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_kuhns_viii.py
  class KuhnsVIII (line 30) | class KuhnsVIII(_TokenDistance):
    method __init__ (line 72) | def __init__(
    method corr (line 122) | def corr(self, src: str, tar: str) -> float:
    method sim (line 170) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_kuhns_x.py
  class KuhnsX (line 30) | class KuhnsX(_TokenDistance):
    method __init__ (line 67) | def __init__(
    method corr (line 117) | def corr(self, src: str, tar: str) -> float:
    method sim (line 172) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_kuhns_xi.py
  class KuhnsXI (line 30) | class KuhnsXI(_TokenDistance):
    method __init__ (line 67) | def __init__(
    method corr (line 117) | def corr(self, src: str, tar: str) -> float:
    method sim (line 178) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_kuhns_xii.py
  class KuhnsXII (line 30) | class KuhnsXII(_TokenDistance):
    method __init__ (line 65) | def __init__(
    method sim_score (line 115) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 163) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_kulczynski_i.py
  class KulczynskiI (line 30) | class KulczynskiI(_TokenDistance):
    method __init__ (line 52) | def __init__(
    method sim_score (line 92) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 135) | def sim(self, *args: Any, **kwargs: Any) -> NoReturn:
    method dist (line 158) | def dist(self, *args: Any, **kwargs: Any) -> NoReturn:

FILE: abydos/distance/_kulczynski_ii.py
  class KulczynskiII (line 30) | class KulczynskiII(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method sim (line 93) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_lcprefix.py
  class LCPrefix (line 30) | class LCPrefix(_Distance):
    method lcprefix (line 36) | def lcprefix(self, strings: List[str]) -> str:
    method dist_abs (line 69) | def dist_abs(self, src: str, tar: str, *args: str) -> int:
    method sim (line 116) | def sim(self, src: str, tar: str, *args: str) -> float:

FILE: abydos/distance/_lcsseq.py
  class LCSseq (line 32) | class LCSseq(_Distance):
    method __init__ (line 41) | def __init__(
    method lcsseq (line 64) | def lcsseq(self, src: str, tar: str) -> str:
    method sim (line 130) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_lcsstr.py
  class LCSstr (line 32) | class LCSstr(_Distance):
    method __init__ (line 38) | def __init__(
    method lcsstr (line 61) | def lcsstr(self, src: str, tar: str) -> str:
    method sim (line 118) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_lcsuffix.py
  class LCSuffix (line 30) | class LCSuffix(LCPrefix):
    method lcsuffix (line 36) | def lcsuffix(self, strings: List[str]) -> str:
    method dist_abs (line 70) | def dist_abs(self, src: str, tar: str, *args: str) -> int:
    method sim (line 117) | def sim(self, src: str, tar: str, *args: str) -> float:

FILE: abydos/distance/_length.py
  class Length (line 27) | class Length(_Distance):
    method sim (line 33) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_levenshtein.py
  class Levenshtein (line 36) | class Levenshtein(_Distance):
    method __init__ (line 57) | def __init__(
    method _taper (line 105) | def _taper(self, pos: int, length: int) -> float:
    method _alignment_matrix (line 112) | def _alignment_matrix(
    method alignment (line 191) | def alignment(self, src: str, tar: str) -> Tuple[float, str, str]:
    method dist_abs (line 268) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 333) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_lig3.py
  class LIG3 (line 28) | class LIG3(_Distance):
    method sim (line 49) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_lorentzian.py
  class Lorentzian (line 31) | class Lorentzian(_TokenDistance):
    method __init__ (line 50) | def __init__(
    method dist_abs (line 75) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 115) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_maarel.py
  class Maarel (line 30) | class Maarel(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method corr (line 103) | def corr(self, src: str, tar: str) -> float:
    method sim (line 147) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_manhattan.py
  class Manhattan (line 30) | class Manhattan(Minkowski):
    method __init__ (line 39) | def __init__(
    method dist_abs (line 88) | def dist_abs(self, src: str, tar: str, normalized: bool = False) -> fl...
    method dist (line 125) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_marking.py
  class Marking (line 29) | class Marking(_Distance):
    method __init__ (line 41) | def __init__(self, **kwargs: Any) -> None:
    method dist_abs (line 55) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 97) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_marking_metric.py
  class MarkingMetric (line 30) | class MarkingMetric(Marking):
    method __init__ (line 48) | def __init__(self, **kwargs: Any) -> None:
    method dist_abs (line 62) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 99) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_masi.py
  class MASI (line 30) | class MASI(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method sim (line 93) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_matusita.py
  class Matusita (line 30) | class Matusita(_TokenDistance):
    method __init__ (line 45) | def __init__(
    method dist_abs (line 70) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 123) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_maxwell_pilliner.py
  class MaxwellPilliner (line 30) | class MaxwellPilliner(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method corr (line 104) | def corr(self, src: str, tar: str) -> float:
    method sim (line 147) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_mcconnaughey.py
  class McConnaughey (line 30) | class McConnaughey(_TokenDistance):
    method __init__ (line 52) | def __init__(
    method corr (line 98) | def corr(self, src: str, tar: str) -> float:
    method sim (line 143) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_mcewen_michael.py
  class McEwenMichael (line 30) | class McEwenMichael(_TokenDistance):
    method __init__ (line 55) | def __init__(
    method corr (line 105) | def corr(self, src: str, tar: str) -> float:
    method sim (line 149) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_meta_levenshtein.py
  class MetaLevenshtein (line 45) | class MetaLevenshtein(_Distance):
    method __init__ (line 54) | def __init__(
    method dist_abs (line 106) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 197) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_michelet.py
  class Michelet (line 30) | class Michelet(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method sim (line 96) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_millar.py
  class Millar (line 30) | class Millar(_TokenDistance):
    method __init__ (line 46) | def __init__(self, **kwargs: Any) -> None:
    method dist_abs (line 60) | def dist_abs(self, src: str, tar: str) -> float:
    method sim (line 116) | def sim(self, *args: Any, **kwargs: Any) -> NoReturn:
    method dist (line 137) | def dist(self, *args: Any, **kwargs: Any) -> NoReturn:

FILE: abydos/distance/_minhash.py
  class MinHash (line 37) | class MinHash(_Distance):
    method __init__ (line 47) | def __init__(
    method sim (line 91) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_minkowski.py
  class Minkowski (line 38) | class Minkowski(_TokenDistance):
    method __init__ (line 47) | def __init__(
    method dist_abs (line 99) | def dist_abs(self, src: str, tar: str, normalized: bool = False) -> fl...
    method dist (line 164) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_mlipns.py
  class MLIPNS (line 30) | class MLIPNS(_Distance):
    method __init__ (line 43) | def __init__(
    method sim (line 67) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_monge_elkan.py
  class MongeElkan (line 31) | class MongeElkan(_Distance):
    method __init__ (line 46) | def __init__(
    method sim (line 78) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_morisita.py
  class Morisita (line 29) | class Morisita(_TokenDistance):
    method __init__ (line 55) | def __init__(self, **kwargs: Any) -> None:
    method sim_score (line 69) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 131) | def sim(self, *args: Any, **kwargs: Any) -> NoReturn:
    method dist (line 152) | def dist(self, *args: Any, **kwargs: Any) -> NoReturn:

FILE: abydos/distance/_mountford.py
  class Mountford (line 30) | class Mountford(_TokenDistance):
    method __init__ (line 51) | def __init__(
    method sim (line 91) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_mra.py
  class MRA (line 28) | class MRA(_Distance):
    method dist_abs (line 39) | def dist_abs(self, src: str, tar: str) -> float:
    method sim (line 111) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_ms_contingency.py
  class MSContingency (line 30) | class MSContingency(_TokenDistance):
    method __init__ (line 61) | def __init__(
    method corr (line 111) | def corr(self, src: str, tar: str) -> float:
    method sim (line 165) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_mutual_information.py
  class MutualInformation (line 39) | class MutualInformation(_TokenDistance):
    method __init__ (line 61) | def __init__(
    method sim_score (line 111) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 151) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_ncd_arith.py
  class NCDarith (line 31) | class NCDarith(_Distance):
    method __init__ (line 41) | def __init__(
    method dist (line 63) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_ncd_bwtrle.py
  class NCDbwtrle (line 28) | class NCDbwtrle(NCDrle):
    method dist (line 40) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_ncd_bz2.py
  class NCDbz2 (line 31) | class NCDbz2(_Distance):
    method __init__ (line 43) | def __init__(self, level: int = 9, **kwargs: Any) -> None:
    method dist (line 60) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_ncd_lzma.py
  class NCDlzma (line 32) | class NCDlzma(_Distance):
    method __init__ (line 44) | def __init__(self, level: int = 6, **kwargs: Any) -> None:
    method dist (line 59) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_ncd_lzss.py
  class NCDlzss (line 34) | class NCDlzss(_Distance):
    method dist (line 44) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_ncd_paq9a.py
  class NCDpaq9a (line 34) | class NCDpaq9a(_Distance):
    method dist (line 44) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_ncd_rle.py
  class NCDrle (line 28) | class NCDrle(_Distance):
    method dist (line 40) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_ncd_zlib.py
  class NCDzlib (line 31) | class NCDzlib(_Distance):
    method __init__ (line 41) | def __init__(
    method dist (line 58) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_needleman_wunsch.py
  class NeedlemanWunsch (line 32) | class NeedlemanWunsch(_Distance):
    method sim_matrix (line 43) | def sim_matrix(
    method __init__ (line 127) | def __init__(
    method sim_score (line 156) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 205) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_overlap.py
  class Overlap (line 30) | class Overlap(_TokenDistance):
    method __init__ (line 52) | def __init__(
    method sim (line 92) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_ozbay.py
  class Ozbay (line 29) | class Ozbay(_Distance):
    method dist_abs (line 46) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 96) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_pattern.py
  class Pattern (line 30) | class Pattern(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method dist (line 106) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_pearson_chi_squared.py
  class PearsonChiSquared (line 31) | class PearsonChiSquared(_TokenDistance):
    method __init__ (line 57) | def __init__(
    method sim_score (line 107) | def sim_score(self, src: str, tar: str) -> float:
    method corr (line 157) | def corr(self, src: str, tar: str) -> float:
    method sim (line 202) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_pearson_heron_ii.py
  class PearsonHeronII (line 31) | class PearsonHeronII(_TokenDistance):
    method __init__ (line 55) | def __init__(
    method corr (line 105) | def corr(self, src: str, tar: str) -> float:
    method sim (line 151) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_pearson_ii.py
  class PearsonII (line 30) | class PearsonII(PearsonChiSquared):
    method __init__ (line 61) | def __init__(
    method sim_score (line 111) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 147) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_pearson_iii.py
  class PearsonIII (line 31) | class PearsonIII(PearsonPhi):
    method __init__ (line 63) | def __init__(
    method corr (line 113) | def corr(self, src: str, tar: str) -> float:
    method sim (line 149) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_pearson_phi.py
  class PearsonPhi (line 30) | class PearsonPhi(_TokenDistance):
    method __init__ (line 63) | def __init__(
    method corr (line 113) | def corr(self, src: str, tar: str) -> float:
    method sim (line 161) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_peirce.py
  class Peirce (line 30) | class Peirce(_TokenDistance):
    method __init__ (line 59) | def __init__(
    method corr (line 109) | def corr(self, src: str, tar: str) -> float:
    method sim (line 155) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_phonetic_distance.py
  class PhoneticDistance (line 32) | class PhoneticDistance(_Distance):
    method __init__ (line 51) | def __init__(
    method dist_abs (line 149) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 200) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_phonetic_edit_distance.py
  class PhoneticEditDistance (line 43) | class PhoneticEditDistance(Levenshtein):
    method __init__ (line 52) | def __init__(
    method _alignment_matrix (line 119) | def _alignment_matrix(
    method dist_abs (line 205) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 263) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_positional_q_gram_dice.py
  class PositionalQGramDice (line 31) | class PositionalQGramDice(_Distance):
    method __init__ (line 39) | def __init__(
    method sim (line 82) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_positional_q_gram_jaccard.py
  class PositionalQGramJaccard (line 31) | class PositionalQGramJaccard(_Distance):
    method __init__ (line 39) | def __init__(
    method sim (line 82) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_positional_q_gram_overlap.py
  class PositionalQGramOverlap (line 31) | class PositionalQGramOverlap(_Distance):
    method __init__ (line 39) | def __init__(
    method sim (line 82) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_prefix.py
  class Prefix (line 27) | class Prefix(_Distance):
    method sim (line 33) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_q_gram.py
  class QGram (line 30) | class QGram(_TokenDistance):
    method __init__ (line 66) | def __init__(
    method dist_abs (line 113) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 153) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_quantitative_cosine.py
  class QuantitativeCosine (line 30) | class QuantitativeCosine(_TokenDistance):
    method __init__ (line 45) | def __init__(
    method sim (line 70) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_quantitative_dice.py
  class QuantitativeDice (line 30) | class QuantitativeDice(_TokenDistance):
    method __init__ (line 45) | def __init__(
    method sim (line 70) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_quantitative_jaccard.py
  class QuantitativeJaccard (line 30) | class QuantitativeJaccard(_TokenDistance):
    method __init__ (line 46) | def __init__(
    method sim (line 73) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_ratcliff_obershelp.py
  class RatcliffObershelp (line 32) | class RatcliffObershelp(_Distance):
    method sim (line 52) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_raup_crick.py
  class RaupCrick (line 30) | class RaupCrick(_TokenDistance):
    method __init__ (line 52) | def __init__(self, **kwargs: Any) -> None:
    method sim (line 66) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_rees_levenshtein.py
  class ReesLevenshtein (line 32) | class ReesLevenshtein(_Distance):
    method __init__ (line 42) | def __init__(
    method dist_abs (line 69) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 226) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_relaxed_hamming.py
  class RelaxedHamming (line 30) | class RelaxedHamming(_Distance):
    method __init__ (line 39) | def __init__(
    method dist_abs (line 81) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 161) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_roberts.py
  class Roberts (line 30) | class Roberts(_TokenDistance):
    method __init__ (line 46) | def __init__(
    method sim (line 71) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_rogers_tanimoto.py
  class RogersTanimoto (line 30) | class RogersTanimoto(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method sim (line 103) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_rogot_goldberg.py
  class RogotGoldberg (line 30) | class RogotGoldberg(_TokenDistance):
    method __init__ (line 60) | def __init__(
    method sim (line 110) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_rouge_l.py
  class RougeL (line 30) | class RougeL(_Distance):
    method __init__ (line 40) | def __init__(self, **kwargs: Any) -> None:
    method sim (line 54) | def sim(self, src: str, tar: str, beta: float = 8) -> float:

FILE: abydos/distance/_rouge_s.py
  class RougeS (line 31) | class RougeS(_Distance):
    method __init__ (line 39) | def __init__(self, qval: int = 2, **kwargs: Any) -> None:
    method sim (line 55) | def sim(self, src: str, tar: str, beta: float = 8) -> float:

FILE: abydos/distance/_rouge_su.py
  class RougeSU (line 29) | class RougeSU(RougeS):
    method __init__ (line 38) | def __init__(self, qval: int = 2, **kwargs: Any) -> None:
    method sim (line 52) | def sim(self, src: str, tar: str, beta: float = 8) -> float:

FILE: abydos/distance/_rouge_w.py
  class RougeW (line 32) | class RougeW(_Distance):
    method __init__ (line 40) | def __init__(
    method _square (line 75) | def _square(n: float) -> float:
    method _sqrt (line 79) | def _sqrt(n: float) -> float:
    method wlcs (line 82) | def wlcs(self, src: str, tar: str) -> float:
    method sim (line 145) | def sim(self, src: str, tar: str, beta: float = 8) -> float:

FILE: abydos/distance/_russell_rao.py
  class RussellRao (line 30) | class RussellRao(_TokenDistance):
    method __init__ (line 51) | def __init__(
    method sim (line 101) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_saps.py
  class SAPS (line 33) | class SAPS(_Distance):
    method __init__ (line 42) | def __init__(
    method _s (line 94) | def _s(self, src: str, tar: str) -> int:
    method _g (line 106) | def _g(self, ch: str) -> int:
    method sim_score (line 112) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 170) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_scott_pi.py
  class ScottPi (line 30) | class ScottPi(_TokenDistance):
    method __init__ (line 69) | def __init__(
    method corr (line 119) | def corr(self, src: str, tar: str) -> float:
    method sim (line 170) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_shape.py
  class Shape (line 30) | class Shape(_TokenDistance):
    method __init__ (line 61) | def __init__(
    method dist (line 111) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_shapira_storer_i.py
  class ShapiraStorerI (line 34) | class ShapiraStorerI(_Distance):
    method __init__ (line 58) | def __init__(
    method dist_abs (line 83) | def dist_abs(self, src: str, tar: str) -> float:
    method _edit_with_moves (line 132) | def _edit_with_moves(self, src: str, tar: str) -> int:
    method dist (line 214) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_sift4.py
  class Sift4 (line 29) | class Sift4(_Distance):
    method __init__ (line 38) | def __init__(
    method dist_abs (line 60) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 173) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_sift4_extended.py
  class Sift4Extended (line 31) | class Sift4Extended(_Distance):
    method __init__ (line 42) | def __init__(
    method dist_abs (line 128) | def dist_abs(self, src: str, tar: str) -> float:
    method sift4_token_matcher (line 258) | def sift4_token_matcher(src: str, tar: str) -> bool:
    method sift4_matching_evaluator (line 279) | def sift4_matching_evaluator(src: str, tar: str) -> float:
    method reward_length_evaluator (line 300) | def reward_length_evaluator(length: int) -> float:
    method reward_length_evaluator_exp (line 321) | def reward_length_evaluator_exp(length: int) -> float:
    method longer_transpositions_are_more_costly (line 340) | def longer_transpositions_are_more_costly(pos1: int, pos2: int) -> float:

FILE: abydos/distance/_sift4_simplest.py
  class Sift4Simplest (line 29) | class Sift4Simplest(Sift4):
    method __init__ (line 38) | def __init__(self, max_offset: int = 5, **kwargs: Any) -> None:
    method dist_abs (line 55) | def dist_abs(self, src: str, tar: str) -> float:

FILE: abydos/distance/_single_linkage.py
  class SingleLinkage (line 32) | class SingleLinkage(_TokenDistance):
    method __init__ (line 46) | def __init__(
    method dist_abs (line 80) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 125) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_size.py
  class Size (line 30) | class Size(_TokenDistance):
    method __init__ (line 58) | def __init__(
    method dist (line 108) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_smith_waterman.py
  class SmithWaterman (line 32) | class SmithWaterman(NeedlemanWunsch):
    method __init__ (line 42) | def __init__(
    method sim_score (line 71) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 116) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_soft_cosine.py
  class SoftCosine (line 32) | class SoftCosine(_TokenDistance):
    method __init__ (line 60) | def __init__(
    method _sim_a (line 117) | def _sim_a(self, src: str, tar: str) -> float:
    method _sim_b (line 120) | def _sim_b(self, src: str, tar: str) -> float:
    method _sim_c (line 126) | def _sim_c(self, src: str, tar: str) -> float:
    method _sim_d (line 135) | def _sim_d(self, src: str, tar: str) -> float:
    method sim (line 144) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_softtf_idf.py
  class SoftTFIDF (line 35) | class SoftTFIDF(_TokenDistance):
    method __init__ (line 67) | def __init__(
    method sim (line 109) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_sokal_michener.py
  class SokalMichener (line 30) | class SokalMichener(_TokenDistance):
    method __init__ (line 62) | def __init__(
    method sim (line 112) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_sokal_sneath_i.py
  class SokalSneathI (line 30) | class SokalSneathI(_TokenDistance):
    method __init__ (line 60) | def __init__(
    method sim (line 110) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_sokal_sneath_ii.py
  class SokalSneathII (line 30) | class SokalSneathII(_TokenDistance):
    method __init__ (line 59) | def __init__(
    method sim (line 99) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_sokal_sneath_iii.py
  class SokalSneathIII (line 30) | class SokalSneathIII(_TokenDistance):
    method __init__ (line 59) | def __init__(
    method sim_score (line 99) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 143) | def sim(self, *args: Any, **kwargs: Any) -> NoReturn:
    method dist (line 166) | def dist(self, *args: Any, **kwargs: Any) -> NoReturn:

FILE: abydos/distance/_sokal_sneath_iv.py
  class SokalSneathIV (line 30) | class SokalSneathIV(_TokenDistance):
    method __init__ (line 67) | def __init__(
    method sim (line 117) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_sokal_sneath_v.py
  class SokalSneathV (line 30) | class SokalSneathV(_TokenDistance):
    method __init__ (line 60) | def __init__(
    method sim (line 110) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_sorgenfrei.py
  class Sorgenfrei (line 30) | class Sorgenfrei(_TokenDistance):
    method __init__ (line 51) | def __init__(
    method sim (line 101) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_ssk.py
  class SSK (line 30) | class SSK(_TokenDistance):
    method __init__ (line 39) | def __init__(
    method sim_score (line 83) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 125) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_steffensen.py
  class Steffensen (line 32) | class Steffensen(_TokenDistance):
    method __init__ (line 77) | def __init__(
    method sim (line 132) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_stiles.py
  class Stiles (line 31) | class Stiles(_TokenDistance):
    method __init__ (line 59) | def __init__(
    method sim_score (line 109) | def sim_score(self, src: str, tar: str) -> float:
    method corr (line 159) | def corr(self, src: str, tar: str) -> float:
    method sim (line 194) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_strcmp95.py
  class Strcmp95 (line 30) | class Strcmp95(_Distance):
    method __init__ (line 86) | def __init__(self, long_strings: bool = False, **kwargs: Any) -> None:
    method sim (line 107) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_stuart_tau.py
  class StuartTau (line 30) | class StuartTau(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method corr (line 103) | def corr(self, src: str, tar: str) -> float:
    method sim (line 146) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_suffix.py
  class Suffix (line 27) | class Suffix(_Distance):
    method sim (line 33) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_synoname.py
  class Synoname (line 44) | class Synoname(_Distance):
    method _synoname_strip_punct (line 94) | def _synoname_strip_punct(self, word: str) -> str:
    method _synoname_word_approximation (line 125) | def _synoname_word_approximation(
    method __init__ (line 460) | def __init__(
    method dist_abs (line 503) | def dist_abs(
    method sim_type (line 533) | def sim_type(
    method dist (line 796) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_tarantula.py
  class Tarantula (line 30) | class Tarantula(_TokenDistance):
    method __init__ (line 55) | def __init__(
    method sim (line 105) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_tarwid.py
  class Tarwid (line 30) | class Tarwid(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method corr (line 103) | def corr(self, src: str, tar: str) -> float:
    method sim (line 143) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_tetrachoric.py
  class Tetrachoric (line 31) | class Tetrachoric(_TokenDistance):
    method __init__ (line 55) | def __init__(
    method corr (line 105) | def corr(self, src: str, tar: str) -> float:
    method sim (line 147) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_tf_idf.py
  class TFIDF (line 32) | class TFIDF(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method sim (line 88) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_tichy.py
  class Tichy (line 29) | class Tichy(_Distance):
    method __init__ (line 55) | def __init__(self, cost: Tuple[int, int] = (1, 1), **kwargs: Any) -> N...
    method dist_abs (line 73) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 142) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_token_distance.py
  class _TokenDistance (line 48) | class _TokenDistance(_Distance):
    method __init__ (line 79) | def __init__(
    method _norm_none (line 262) | def _norm_none(x: float, _squares: int, _pop: float) -> float:
    method _norm_proportional (line 266) | def _norm_proportional(x: float, _squares: int, pop: float) -> float:
    method _norm_log (line 270) | def _norm_log(x: float, _squares: int, _pop: float) -> float:
    method _norm_exp (line 274) | def _norm_exp(x: float, _squares: int, _pop: float) -> float:
    method _norm_laplace (line 278) | def _norm_laplace(x: float, squares: int, _pop: float) -> float:
    method _norm_inverse (line 282) | def _norm_inverse(x: float, _squares: int, pop: float) -> float:
    method _norm_complement (line 286) | def _norm_complement(x: float, _squares: int, pop: float) -> float:
    method _tokenize (line 289) | def _tokenize(
    method _get_tokens (line 353) | def _get_tokens(self) -> Tuple[TCounter[str], TCounter[str]]:
    method _src_card (line 357) | def _src_card(self) -> float:
    method _src_only (line 378) | def _src_only(self) -> TCounter[str]:
    method _src_only_card (line 392) | def _src_only_card(self) -> float:
    method _tar_card (line 400) | def _tar_card(self) -> float:
    method _tar_only (line 421) | def _tar_only(self) -> TCounter[str]:
    method _tar_only_card (line 435) | def _tar_only_card(self) -> float:
    method _symmetric_difference (line 443) | def _symmetric_difference(self) -> TCounter[str]:
    method _symmetric_difference_card (line 450) | def _symmetric_difference_card(self) -> float:
    method _total (line 458) | def _total(self) -> TCounter[str]:
    method _total_card (line 477) | def _total_card(self) -> float:
    method _total_complement_card (line 485) | def _total_complement_card(self) -> float:
    method _calc_population_card (line 509) | def _calc_population_card(self) -> float:
    method _population_card (line 520) | def _population_card(self) -> float:
    method _population_unique_card (line 526) | def _population_unique_card(self) -> float:
    method _union (line 534) | def _union(self) -> TCounter[str]:
    method _union_card (line 552) | def _union_card(self) -> float:
    method _difference (line 560) | def _difference(self) -> TCounter[str]:
    method _crisp_intersection (line 572) | def _crisp_intersection(self) -> TCounter[str]:
    method _soft_intersection (line 579) | def _soft_intersection(self) -> TCounter[str]:
    method _fuzzy_intersection (line 696) | def _fuzzy_intersection(self) -> TCounter[str]:
    method _group_linkage_intersection (line 769) | def _group_linkage_intersection(self) -> TCounter[str]:
    method _intersection_card (line 967) | def _intersection_card(self) -> float:
    method _intersection (line 975) | def _intersection(self) -> TCounter[str]:
    method _get_confusion_table (line 983) | def _get_confusion_table(self) -> ConfusionTable:

FILE: abydos/distance/_tulloss_r.py
  class TullossR (line 31) | class TullossR(_TokenDistance):
    method __init__ (line 55) | def __init__(
    method sim (line 95) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_tulloss_s.py
  class TullossS (line 31) | class TullossS(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method sim (line 94) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_tulloss_t.py
  class TullossT (line 33) | class TullossT(_TokenDistance):
    method __init__ (line 67) | def __init__(
    method sim (line 110) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_tulloss_u.py
  class TullossU (line 31) | class TullossU(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method sim (line 94) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_tversky.py
  class Tversky (line 30) | class Tversky(_TokenDistance):
    method __init__ (line 68) | def __init__(
    method sim (line 118) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_typo.py
  class Typo (line 35) | class Typo(_Distance):
    method __init__ (line 113) | def __init__(
    method dist_abs (line 156) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 345) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_unigram_subtuple.py
  class UnigramSubtuple (line 31) | class UnigramSubtuple(_TokenDistance):
    method __init__ (line 59) | def __init__(
    method sim_score (line 109) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 152) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_unknown_a.py
  class UnknownA (line 30) | class UnknownA(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method corr (line 106) | def corr(self, src: str, tar: str) -> float:
    method sim (line 152) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_unknown_b.py
  class UnknownB (line 30) | class UnknownB(_TokenDistance):
    method __init__ (line 55) | def __init__(
    method sim (line 105) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_unknown_c.py
  class UnknownC (line 30) | class UnknownC(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method sim (line 104) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_unknown_d.py
  class UnknownD (line 30) | class UnknownD(_TokenDistance):
    method __init__ (line 57) | def __init__(
    method sim (line 107) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_unknown_e.py
  class UnknownE (line 30) | class UnknownE(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method corr (line 106) | def corr(self, src: str, tar: str) -> float:
    method sim (line 152) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_unknown_f.py
  class UnknownF (line 39) | class UnknownF(_TokenDistance):
    method __init__ (line 85) | def __init__(
    method sim_score (line 135) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 186) | def sim(self, *args: Any, **kwargs: Any) -> NoReturn:
    method dist (line 207) | def dist(self, *args: Any, **kwargs: Any) -> NoReturn:

FILE: abydos/distance/_unknown_g.py
  class UnknownG (line 30) | class UnknownG(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method sim (line 94) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_unknown_h.py
  class UnknownH (line 30) | class UnknownH(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method sim_score (line 106) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 151) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_unknown_i.py
  class UnknownI (line 30) | class UnknownI(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method sim (line 93) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_unknown_j.py
  class UnknownJ (line 30) | class UnknownJ(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method sim_score (line 103) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 147) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_unknown_k.py
  class UnknownK (line 30) | class UnknownK(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method dist_abs (line 103) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 143) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_unknown_l.py
  class UnknownL (line 30) | class UnknownL(_TokenDistance):
    method __init__ (line 55) | def __init__(
    method sim (line 105) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_unknown_m.py
  class UnknownM (line 30) | class UnknownM(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method sim_score (line 104) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 150) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_upholt.py
  class Upholt (line 30) | class Upholt(_TokenDistance):
    method __init__ (line 56) | def __init__(
    method sim (line 106) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_vps.py
  class VPS (line 30) | class VPS(_Distance):
    method sim (line 38) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_warrens_i.py
  class WarrensI (line 30) | class WarrensI(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method corr (line 93) | def corr(self, src: str, tar: str) -> float:
    method sim (line 135) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_warrens_ii.py
  class WarrensII (line 30) | class WarrensII(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method sim (line 103) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_warrens_iii.py
  class WarrensIII (line 30) | class WarrensIII(_TokenDistance):
    method __init__ (line 53) | def __init__(
    method corr (line 103) | def corr(self, src: str, tar: str) -> float:
    method sim (line 148) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_warrens_iv.py
  class WarrensIV (line 30) | class WarrensIV(_TokenDistance):
    method __init__ (line 55) | def __init__(
    method sim (line 105) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_warrens_v.py
  class WarrensV (line 30) | class WarrensV(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method sim_score (line 104) | def sim_score(self, src: str, tar: str) -> float:
    method sim (line 147) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_weighted_jaccard.py
  class WeightedJaccard (line 30) | class WeightedJaccard(_TokenDistance):
    method __init__ (line 57) | def __init__(
    method sim (line 102) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_whittaker.py
  class Whittaker (line 30) | class Whittaker(_TokenDistance):
    method __init__ (line 45) | def __init__(
    method sim (line 70) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_yates_chi_squared.py
  class YatesChiSquared (line 31) | class YatesChiSquared(_TokenDistance):
    method __init__ (line 58) | def __init__(
    method sim_score (line 108) | def sim_score(self, src: str, tar: str, signed: bool = False) -> float:
    method sim (line 167) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_yjhhr.py
  class YJHHR (line 30) | class YJHHR(_TokenDistance):
    method __init__ (line 52) | def __init__(
    method dist_abs (line 106) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 147) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_yujian_bo.py
  class YujianBo (line 29) | class YujianBo(Levenshtein):
    method __init__ (line 44) | def __init__(
    method dist_abs (line 64) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 97) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_yule_q.py
  class YuleQ (line 30) | class YuleQ(_TokenDistance):
    method __init__ (line 57) | def __init__(
    method corr (line 107) | def corr(self, src: str, tar: str) -> float:
    method sim (line 150) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/distance/_yule_q_ii.py
  class YuleQII (line 30) | class YuleQII(_TokenDistance):
    method __init__ (line 54) | def __init__(
    method dist_abs (line 104) | def dist_abs(self, src: str, tar: str) -> float:
    method dist (line 146) | def dist(self, src: str, tar: str) -> float:

FILE: abydos/distance/_yule_y.py
  class YuleY (line 30) | class YuleY(_TokenDistance):
    method __init__ (line 59) | def __init__(
    method corr (line 109) | def corr(self, src: str, tar: str) -> float:
    method sim (line 152) | def sim(self, src: str, tar: str) -> float:

FILE: abydos/fingerprint/_bwtf.py
  class BWTF (line 28) | class BWTF(_Fingerprint):
    method __init__ (line 37) | def __init__(self, terminator: str = '\0') -> None:
    method fingerprint (line 52) | def fingerprint(self, word: str) -> str:

FILE: abydos/fingerprint/_bwtrlef.py
  class BWTRLEF (line 29) | class BWTRLEF(_Fingerprint):
    method __init__ (line 38) | def __init__(self, terminator: str = '\0') -> None:
    method fingerprint (line 54) | def fingerprint(self, word: str) -> str:

FILE: abydos/fingerprint/_consonant.py
  class Consonant (line 30) | class Consonant(_Fingerprint):
    method __init__ (line 39) | def __init__(
    method fingerprint (line 81) | def fingerprint(self, word: str) -> str:

FILE: abydos/fingerprint/_count.py
  class Count (line 30) | class Count(_Fingerprint):
    method __init__ (line 38) | def __init__(
    method fingerprint (line 60) | def fingerprint(self, word: str) -> str:
    method fingerprint_int (line 99) | def fingerprint_int(self, word: str) -> int:

FILE: abydos/fingerprint/_extract.py
  class Extract (line 29) | class Extract(_Fingerprint):
    method __init__ (line 38) | def __init__(self, letter_list: Union[int, Iterable[str]] = 1) -> None:
    method fingerprint (line 67) | def fingerprint(self, word: str) -> str:

FILE: abydos/fingerprint/_extract_position_frequency.py
  class ExtractPositionFrequency (line 29) | class ExtractPositionFrequency(_Fingerprint):
    method fingerprint (line 73) | def fingerprint(self, word: str) -> str:

FILE: abydos/fingerprint/_fingerprint.py
  class _Fingerprint (line 64) | class _Fingerprint:
    method fingerprint (line 70) | def fingerprint(self, word: str) -> str:

FILE: abydos/fingerprint/_lacss.py
  class LACSS (line 27) | class LACSS(_Fingerprint):
    method fingerprint (line 42) | def fingerprint(self, word: str) -> str:
    method fingerprint_int (line 77) | def fingerprint_int(self, word: str) -> int:

FILE: abydos/fingerprint/_lc_cutter.py
  class LCCutter (line 27) | class LCCutter(_Fingerprint):
    method __init__ (line 45) | def __init__(self, max_length: int = 64) -> None:
    method fingerprint (line 64) | def fingerprint(self, word: str) -> str:

FILE: abydos/fingerprint/_occurrence.py
  class Occurrence (line 29) | class Occurrence(_Fingerprint):
    method __init__ (line 37) | def __init__(
    method fingerprint (line 59) | def fingerprint(self, word: str) -> str:
    method fingerprint_int (line 98) | def fingerprint_int(self, word: str) -> int:

FILE: abydos/fingerprint/_occurrence_halved.py
  class OccurrenceHalved (line 29) | class OccurrenceHalved(_Fingerprint):
    method __init__ (line 37) | def __init__(
    method fingerprint (line 59) | def fingerprint(self, word: str) -> str:
    method fingerprint_int (line 100) | def fingerprint_int(self, word: str) -> int:

FILE: abydos/fingerprint/_omission_key.py
  class OmissionKey (line 29) | class OmissionKey(_Fingerprint):
    method fingerprint (line 40) | def fingerprint(self, word: str) -> str:

FILE: abydos/fingerprint/_phonetic.py
  class Phonetic (line 32) | class Phonetic(String):
    method __init__ (line 44) | def __init__(
    method fingerprint (line 75) | def fingerprint(self, phrase: str) -> str:

FILE: abydos/fingerprint/_position.py
  class Position (line 29) | class Position(_Fingerprint):
    method __init__ (line 37) | def __init__(
    method fingerprint (line 61) | def fingerprint(self, word: str) -> str:
    method fingerprint_int (line 100) | def fingerprint_int(self, word: str) -> int:

FILE: abydos/fingerprint/_qgram.py
  class QGram (line 30) | class QGram(_Fingerprint):
    method __init__ (line 40) | def __init__(
    method fingerprint (line 68) | def fingerprint(self, phrase: str) -> str:

FILE: abydos/fingerprint/_skeleton_key.py
  class SkeletonKey (line 29) | class SkeletonKey(_Fingerprint):
    method fingerprint (line 40) | def fingerprint(self, word: str) -> str:

FILE: abydos/fingerprint/_string.py
  class String (line 29) | class String(_Fingerprint):
    method __init__ (line 39) | def __init__(self, joiner: str = ' ') -> None:
    method fingerprint (line 54) | def fingerprint(self, phrase: str) -> str:

FILE: abydos/fingerprint/_synoname_toolcode.py
  class SynonameToolcode (line 29) | class SynonameToolcode(_Fingerprint):
    method fingerprint (line 265) | def fingerprint(
    method fingerprint_tuple (line 317) | def fingerprint_tuple(

FILE: abydos/phones/_phones.py
  function ipa_to_features (line 575) | def ipa_to_features(ipa: str) -> List[int]:
  function ipa_to_feature_dicts (line 628) | def ipa_to_feature_dicts(ipa: str) -> List[Dict[str, str]]:
  function get_feature (line 785) | def get_feature(vector: List[int], feature: str) -> List[Union[int, floa...
  function cmp_features (line 892) | def cmp_features(

FILE: abydos/phonetic/_ainsworth.py
  class Ainsworth (line 29) | class Ainsworth(_Phonetic):
    method encode (line 240) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_alpha_sis.py
  class AlphaSIS (line 30) | class AlphaSIS(_Phonetic):
    method __init__ (line 153) | def __init__(self, max_length: int = 14) -> None:
    method encode_alpha (line 171) | def encode_alpha(self, word: str) -> str:
    method encode (line 211) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_beider_morse.py
  class BeiderMorse (line 125) | class BeiderMorse(_Phonetic):
    method _language (line 135) | def _language(self, name: str, name_mode: str) -> int:
    method _redo_language (line 174) | def _redo_language(
    method _phonetic (line 225) | def _phonetic(
    method _apply_final_rules (line 408) | def _apply_final_rules(
    method _phonetic_number (line 523) | def _phonetic_number(self, phonetic: str) -> str:
    method _expand_alternates (line 547) | def _expand_alternates(self, phonetic: str) -> str:
    method _pnums_with_leading_space (line 589) | def _pnums_with_leading_space(self, phonetic: str) -> str:
    method _phonetic_numbers (line 625) | def _phonetic_numbers(self, phonetic: str) -> str:
    method _remove_dupes (line 653) | def _remove_dupes(self, phonetic: str) -> str:
    method _normalize_lang_attrs (line 683) | def _normalize_lang_attrs(self, text: str, strip: bool) -> str:
    method _apply_rule_if_compat (line 742) | def _apply_rule_if_compat(
    method _language_index_from_code (line 815) | def _language_index_from_code(self, code: int, name_mode: str) -> int:
    method __init__ (line 850) | def __init__(
    method encode (line 935) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_caverphone.py
  class Caverphone (line 27) | class Caverphone(_Phonetic):
    method __init__ (line 39) | def __init__(self, version: int = 2) -> None:
    method encode_alpha (line 53) | def encode_alpha(self, word: str) -> str:
    method encode (line 94) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_daitch_mokotoff.py
  class DaitchMokotoff (line 30) | class DaitchMokotoff(_Phonetic):
    method __init__ (line 257) | def __init__(self, max_length: int = 6, zero_pad: bool = True) -> None:
    method encode_alpha (line 280) | def encode_alpha(self, word: str) -> str:
    method encode (line 323) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_davidson.py
  class Davidson (line 27) | class Davidson(_Phonetic):
    method __init__ (line 41) | def __init__(self, omit_fname: bool = False) -> None:
    method encode (line 56) | def encode(self, lname: str, fname: str = '.') -> str:

FILE: abydos/phonetic/_dolby.py
  class Dolby (line 29) | class Dolby(_Phonetic):
    method __init__ (line 38) | def __init__(
    method encode_alpha (line 64) | def encode_alpha(self, word: str) -> str:
    method encode (line 97) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_double_metaphone.py
  class DoubleMetaphone (line 29) | class DoubleMetaphone(_Phonetic):
    method __init__ (line 38) | def __init__(self, max_length: int = -1) -> None:
    method encode_alpha (line 57) | def encode_alpha(self, word: str) -> str:
    method encode (line 90) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_eudex.py
  class Eudex (line 27) | class Eudex(_Phonetic):
    method __init__ (line 162) | def __init__(self, max_length: int = 8) -> None:
    method encode (line 176) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_fonem.py
  function _get_parts (line 31) | def _get_parts(m: Match[str]) -> str:
  class FONEM (line 35) | class FONEM(_Phonetic):
    method encode (line 198) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_fuzzy_soundex.py
  class FuzzySoundex (line 29) | class FuzzySoundex(_Phonetic):
    method __init__ (line 47) | def __init__(self, max_length: int = 5, zero_pad: bool = True) -> None:
    method encode_alpha (line 69) | def encode_alpha(self, word: str) -> str:
    method encode (line 101) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_haase.py
  class Haase (line 31) | class Haase(_Phonetic):
    method __init__ (line 45) | def __init__(self, primary_only: bool = False) -> None:
    method encode_alpha (line 59) | def encode_alpha(self, word: str) -> str:
    method encode (line 94) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_henry_early.py
  class HenryEarly (line 29) | class HenryEarly(_Phonetic):
    method __init__ (line 50) | def __init__(self, max_length: int = 3) -> None:
    method encode (line 64) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_koelner.py
  class Koelner (line 32) | class Koelner(_Phonetic):
    method encode (line 45) | def encode(self, word: str) -> str:
    method encode_alpha (line 195) | def encode_alpha(self, word: str) -> str:

FILE: abydos/phonetic/_lein.py
  class LEIN (line 29) | class LEIN(_Phonetic):
    method __init__ (line 46) | def __init__(self, max_length: int = 4, zero_pad: bool = True) -> None:
    method encode_alpha (line 64) | def encode_alpha(self, word: str) -> str:
    method encode (line 96) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_meta_soundex.py
  class MetaSoundex (line 31) | class MetaSoundex(_Phonetic):
    method __init__ (line 47) | def __init__(self, lang: str = 'en') -> None:
    method encode_alpha (line 67) | def encode_alpha(self, word: str) -> str:
    method encode (line 113) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_metaphone.py
  class Metaphone (line 27) | class Metaphone(_Phonetic):
    method __init__ (line 41) | def __init__(self, max_length: int = -1) -> None:
    method encode (line 60) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_mra.py
  class MRA (line 27) | class MRA(_Phonetic):
    method encode (line 36) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_norphone.py
  class Norphone (line 27) | class Norphone(_Phonetic):
    method encode (line 65) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_nrl.py
  class NRL (line 30) | class NRL(_Phonetic):
    method encode (line 430) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_nysiis.py
  class NYSIIS (line 28) | class NYSIIS(_Phonetic):
    method __init__ (line 40) | def __init__(self, max_length: int = 6, modified: bool = False) -> None:
    method encode (line 61) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_onca.py
  class ONCA (line 29) | class ONCA(_Phonetic):
    method __init__ (line 42) | def __init__(self, max_length: int = 4, zero_pad: bool = True) -> None:
    method encode_alpha (line 60) | def encode_alpha(self, word: str) -> str:
    method encode (line 91) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_parmar_kumbharana.py
  class ParmarKumbharana (line 27) | class ParmarKumbharana(_Phonetic):
    method encode (line 55) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_phonem.py
  class Phonem (line 29) | class Phonem(_Phonetic):
    method encode (line 73) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_phonet.py
  class Phonet (line 31) | class Phonet(_Phonetic):
    method __init__ (line 1066) | def __init__(self, mode: int = 1, lang: str = 'de') -> None:
    method encode (line 1083) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_phonetic.py
  class _Phonetic (line 27) | class _Phonetic:
    method _delete_consecutive_repeats (line 40) | def _delete_consecutive_repeats(self, word: str) -> str:
    method encode (line 72) | def encode(self, word: str) -> str:
    method encode_alpha (line 86) | def encode_alpha(self, word: str) -> str:

FILE: abydos/phonetic/_phonetic_spanish.py
  class PhoneticSpanish (line 29) | class PhoneticSpanish(_Phonetic):
    method __init__ (line 46) | def __init__(self, max_length: int = -1) -> None:
    method encode_alpha (line 60) | def encode_alpha(self, word: str) -> str:
    method encode (line 93) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_phonex.py
  class Phonex (line 29) | class Phonex(_Phonetic):
    method __init__ (line 39) | def __init__(self, max_length: int = 4, zero_pad: bool = True) -> None:
    method encode_alpha (line 61) | def encode_alpha(self, word: str) -> str:
    method encode (line 93) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_phonic.py
  class PHONIC (line 27) | class PHONIC(_Phonetic):
    method __init__ (line 68) | def __init__(
    method encode_alpha (line 100) | def encode_alpha(self, word: str) -> str:
    method encode (line 138) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_phonix.py
  class Phonix (line 30) | class Phonix(_Phonetic):
    method __init__ (line 52) | def __init__(self, max_length: int = 4, zero_pad: bool = True) -> None:
    method encode_alpha (line 193) | def encode_alpha(self, word: str) -> str:
    method encode (line 225) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_pshp_soundex_first.py
  class PSHPSoundexFirst (line 29) | class PSHPSoundexFirst(_Phonetic):
    method __init__ (line 51) | def __init__(self, max_length: int = 4, german: bool = False) -> None:
    method encode_alpha (line 68) | def encode_alpha(self, fname: str) -> str:
    method encode (line 116) | def encode(self, fname: str) -> str:

FILE: abydos/phonetic/_pshp_soundex_last.py
  class PSHPSoundexLast (line 29) | class PSHPSoundexLast(_Phonetic):
    method __init__ (line 51) | def __init__(self, max_length: int = 4, german: bool = False) -> None:
    method encode_alpha (line 68) | def encode_alpha(self, lname: str) -> str:
    method encode (line 102) | def encode(self, lname: str) -> str:

FILE: abydos/phonetic/_refined_soundex.py
  class RefinedSoundex (line 29) | class RefinedSoundex(_Phonetic):
    method __init__ (line 47) | def __init__(
    method encode_alpha (line 73) | def encode_alpha(self, word: str) -> str:
    method encode (line 105) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_reth_schek.py
  class RethSchek (line 27) | class RethSchek(_Phonetic):
    method encode (line 118) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_roger_root.py
  class RogerRoot (line 29) | class RogerRoot(_Phonetic):
    method __init__ (line 134) | def __init__(self, max_length: int = 5, zero_pad: bool = True) -> None:
    method encode_alpha (line 152) | def encode_alpha(self, word: str) -> str:
    method encode (line 186) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_russell_index.py
  class RussellIndex (line 29) | class RussellIndex(_Phonetic):
    method encode (line 51) | def encode(self, word: str) -> str:
    method encode_alpha (line 102) | def encode_alpha(self, word: str) -> str:

FILE: abydos/phonetic/_sfinx_bis.py
  class SfinxBis (line 29) | class SfinxBis(_Phonetic):
    method __init__ (line 147) | def __init__(self, max_length: int = -1) -> None:
    method encode_alpha (line 161) | def encode_alpha(self, word: str) -> str:
    method encode (line 199) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_sound_d.py
  class SoundD (line 29) | class SoundD(_Phonetic):
    method __init__ (line 46) | def __init__(self, max_length: int = 4) -> None:
    method encode_alpha (line 60) | def encode_alpha(self, word: str) -> str:
    method encode (line 93) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_soundex.py
  class Soundex (line 30) | class Soundex(_Phonetic):
    method __init__ (line 57) | def __init__(
    method encode_alpha (line 105) | def encode_alpha(self, word: str) -> str:
    method encode (line 137) | def encode(self, word: str, **kwargs: Any) -> str:

FILE: abydos/phonetic/_soundex_br.py
  class SoundexBR (line 29) | class SoundexBR(_Phonetic):
    method __init__ (line 46) | def __init__(self, max_length: int = 4, zero_pad: bool = True) -> None:
    method encode_alpha (line 64) | def encode_alpha(self, word: str) -> str:
    method encode (line 100) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_spanish_metaphone.py
  class SpanishMetaphone (line 29) | class SpanishMetaphone(_Phonetic):
    method __init__ (line 42) | def __init__(self, max_length: int = 6, modified: bool = False) -> None:
    method encode (line 60) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_spfc.py
  class SPFC (line 30) | class SPFC(_Phonetic):
    method encode_alpha (line 70) | def encode_alpha(self, word: str) -> str:
    method encode (line 117) | def encode(self, word: Union[str, Sequence[str]]) -> str:

FILE: abydos/phonetic/_statistics_canada.py
  class StatisticsCanada (line 29) | class StatisticsCanada(_Phonetic):
    method __init__ (line 44) | def __init__(self, max_length: int = 4) -> None:
    method encode (line 58) | def encode(self, word: str) -> str:

FILE: abydos/phonetic/_waahlin.py
  class Waahlin (line 30) | class Waahlin(_Phonetic):
    method __init__ (line 39) | def __init__(self, encoder: Optional[_Phonetic] = None) -> None:
    method _encode_next (line 74) | def _encode_next(self, word: str) -> Tuple[str, str]:
    method encode_alpha (line 131) | def encode_alpha(self, word: str) -> str:
    method encode (line 166) | def encode(self, word: str, alphabetic: bool = False) -> str:

FILE: abydos/stats/_confusion_table.py
  class ConfusionTable (line 58) | class ConfusionTable:
    method __init__ (line 71) | def __init__(
    method __eq__ (line 143) | def __eq__(self, other: object) -> bool:
    method __str__ (line 208) | def __str__(self) -> str:
    method __repr__ (line 230) | def __repr__(self) -> str:
    method to_tuple (line 253) | def to_tuple(self) -> Tuple[float, float, float, float]:
    method to_dict (line 273) | def to_dict(self) -> Dict[str, float]:
    method true_pos (line 294) | def true_pos(self) -> float:
    method true_neg (line 314) | def true_neg(self) -> float:
    method false_pos (line 334) | def false_pos(self) -> float:
    method false_neg (line 356) | def false_neg(self) -> float:
    method correct_pop (line 378) | def correct_pop(self) -> float:
    method error_pop (line 398) | def error_pop(self) -> float:
    method pred_pos_pop (line 418) | def pred_pos_pop(self) -> float:
    method pred_neg_pop (line 443) | def pred_neg_pop(self) -> float:
    method cond_pos_pop (line 468) | def cond_pos_pop(self) -> float:
    method cond_neg_pop (line 488) | def cond_neg_pop(self) -> float:
    method population (line 508) | def population(self) -> float:
    method precision (line 528) | def precision(self) -> float:
    method precision_gain (line 563) | def precision_gain(self) -> float:
    method recall (line 595) | def recall(self) -> float:
    method specificity (line 634) | def specificity(self) -> float:
    method fnr (line 669) | def fnr(self) -> float:
    method npv (line 699) | def npv(self) -> float:
    method false_omission_rate (line 732) | def false_omission_rate(self) -> float:
    method fallout (line 763) | def fallout(self) -> float:
    method pos_likelihood_ratio (line 793) | def pos_likelihood_ratio(self) -> float:
    method neg_likelihood_ratio (line 822) | def neg_likelihood_ratio(self) -> float:
    method diagnostic_odds_ratio (line 851) | def diagnostic_odds_ratio(self) -> float:
    method fdr (line 883) | def fdr(self) -> float:
    method accuracy (line 914) | def accuracy(self) -> float:
    method accuracy_gain (line 945) | def accuracy_gain(self) -> float:
    method balanced_accuracy (line 979) | def balanced_accuracy(self) -> float:
    method error_rate (line 1007) | def error_rate(self) -> float:
    method prevalence (line 1038) | def prevalence(self) -> float:
    method informedness (line 1069) | def informedness(self) -> float:
    method markedness (line 1101) | def markedness(self) -> float:
    method pr_amean (line 1129) | def pr_amean(self) -> float:
    method pr_gmean (line 1157) | def pr_gmean(self) -> float:
    method pr_hmean (line 1185) | def pr_hmean(self) -> float:
    method pr_qmean (line 1213) | def pr_qmean(self) -> float:
    method pr_cmean (line 1241) | def pr_cmean(self) -> float:
    method pr_lmean (line 1269) | def pr_lmean(self) -> float:
    method pr_imean (line 1307) | def pr_imean(self) -> float:
    method pr_seiffert_mean (line 1339) | def pr_seiffert_mean(self) -> float:
    method pr_lehmer_mean (line 1368) | def pr_lehmer_mean(self, exp: float = 2.0) -> float:
    method pr_heronian_mean (line 1403) | def pr_heronian_mean(self) -> float:
    method pr_hoelder_mean (line 1431) | def pr_hoelder_mean(self, exp: float = 2.0) -> float:
    method pr_agmean (line 1468) | def pr_agmean(self) -> float:
    method pr_ghmean (line 1494) | def pr_ghmean(self) -> float:
    method pr_aghmean (line 1520) | def pr_aghmean(self) -> float:
    method fbeta_score (line 1545) | def fbeta_score(self, beta: float = 1.0) -> float:
    method f2_score (line 1600) | def f2_score(self) -> float:
    method fhalf_score (line 1625) | def fhalf_score(self) -> float:
    method e_score (line 1650) | def e_score(self, beta: float = 1.0) -> float:
    method f1_score (line 1680) | def f1_score(self) -> float:
    method jaccard (line 1708) | def jaccard(self) -> float:
    method d_measure (line 1737) | def d_measure(self) -> float:
    method mcc (line 1765) | def mcc(self) -> float:
    method significance (line 1806) | def significance(self) -> float:
    method kappa_statistic (line 1849) | def kappa_statistic(self) -> float:
    method phi_coefficient (line 1889) | def phi_coefficient(self) -> float:
    method joint_entropy (line 1925) | def joint_entropy(self) -> float:
    method actual_entropy (line 1954) | def actual_entropy(self) -> float:
    method predicted_entropy (line 1986) | def predicted_entropy(self) -> float:
    method mutual_information (line 2018) | def mutual_information(self) -> float:
    method proficiency (line 2070) | def proficiency(self) -> float:
    method igr (line 2097) | def igr(self) -> float:
    method dependency (line 2121) | def dependency(self) -> float:
    method lift (line 2143) | def lift(self) -> float:

FILE: abydos/stats/_mean.py
  function amean (line 52) | def amean(nums: Sequence[float]) -> float:
  function gmean (line 88) | def gmean(nums: Sequence[float]) -> float:
  function hmean (line 124) | def hmean(nums: Sequence[float]) -> float:
  function qmean (line 184) | def qmean(nums: Sequence[float]) -> float:
  function cmean (line 220) | def cmean(nums: Sequence[float]) -> float:
  function lmean (line 256) | def lmean(nums: Sequence[float]) -> float:
  function imean (line 318) | def imean(nums: Sequence[float]) -> float:
  function seiffert_mean (line 372) | def seiffert_mean(nums: Sequence[float]) -> float:
  function lehmer_mean (line 423) | def lehmer_mean(nums: Sequence[float], exp: float = 2.0) -> float:
  function heronian_mean (line 461) | def heronian_mean(nums: Sequence[float]) -> float:
  function hoelder_mean (line 508) | def hoelder_mean(nums: Sequence[float], exp: float = 2.0) -> float:
  function agmean (line 550) | def agmean(nums: Sequence[float], prec: int = 12) -> float:
  function ghmean (line 591) | def ghmean(nums: Sequence[float], prec: int = 12) -> float:
  function aghmean (line 637) | def aghmean(nums: Sequence[float], prec: int = 12) -> float:
  function midrange (line 684) | def midrange(nums: Sequence[float]) -> float:
  function median (line 716) | def median(nums: Sequence[float]) -> float:
  function mode (line 757) | def mode(nums: Sequence[float]) -> float:
  function var (line 785) | def var(
  function std (line 831) | def std(

FILE: abydos/stats/_pairwise.py
  function mean_pairwise_similarity (line 30) | def mean_pairwise_similarity(
  function pairwise_similarity_statistics (line 108) | def pairwise_similarity_statistics(

FILE: abydos/stemmer/_caumanns.py
  class Caumanns (line 29) | class Caumanns(_Stemmer):
    method stem (line 43) | def stem(self, word: str) -> str:

FILE: abydos/stemmer/_clef_german.py
  class CLEFGerman (line 29) | class CLEFGerman(_Stemmer):
    method stem (line 39) | def stem(self, word: str) -> str:

FILE: abydos/stemmer/_clef_german_plus.py
  class CLEFGermanPlus (line 29) | class CLEFGermanPlus(_Stemmer):
    method stem (line 43) | def stem(self, word: str) -> str:

FILE: abydos/stemmer/_clef_swedish.py
  class CLEFSwedish (line 27) | class CLEFSwedish(_Stemmer):
    method stem (line 35) | def stem(self, word: str) -> str:

FILE: abydos/stemmer/_lovins.py
  class Lovins (line 30) | class Lovins(_Stemmer):
    method _cond_b (line 39) | def _cond_b(self, word: str, suffix_len: int) -> bool:
    method _cond_c (line 62) | def _cond_c(self, word: str, suffix_len: int) -> bool:
    method _cond_d (line 85) | def _cond_d(self, word: str, suffix_len: int) -> bool:
    method _cond_e (line 108) | def _cond_e(self, word: str, suffix_len: int) -> bool:
    method _cond_f (line 131) | def _cond_f(self, word: str, suffix_len: int) -> bool:
    method _cond_g (line 154) | def _cond_g(self, word: str, suffix_len: int) -> bool:
    method _cond_h (line 177) | def _cond_h(self, word: str, suffix_len: int) -> bool:
    method _cond_i (line 203) | def _cond_i(self, word: str, suffix_len: int) -> bool:
    method _cond_j (line 226) | def _cond_j(self, word: str, suffix_len: int) -> bool:
    method _cond_k (line 249) | def _cond_k(self, word: str, suffix_len: int) -> bool:
    method _cond_l (line 275) | def _cond_l(self, word: str, suffix_len: int) -> bool:
    method _cond_m (line 301) | def _cond_m(self, word: str, suffix_len: int) -> bool:
    method _cond_n (line 324) | def _cond_n(self, word: str, suffix_len: int) -> bool:
    method _cond_o (line 353) | def _cond_o(self, word: str, suffix_len: int) -> bool:
    method _cond_p (line 376) | def _cond_p(self, word: str, suffix_len: int) -> bool:
    method _cond_q (line 399) | def _cond_q(self, word: str, suffix_len: int) -> bool:
    method _cond_r (line 425) | def _cond_r(self, word: str, suffix_len: int) -> bool:
    method _cond_s (line 448) | def _cond_s(self, word: str, suffix_len: int) -> bool:
    method _cond_t (line 474) | def _cond_t(self, word: str, suffix_len: int) -> bool:
    method _cond_u (line 500) | def _cond_u(self, word: str, suffix_len: int) -> bool:
    method _cond_v (line 523) | def _cond_v(self, word: str, suffix_len: int) -> bool:
    method _cond_w (line 546) | def _cond_w(self, word: str, suffix_len: int) -> bool:
    method _cond_x (line 569) | def _cond_x(self, word: str, suffix_len: int) -> bool:
    method _cond_y (line 595) | def _cond_y(self, word: str, suffix_len: int) -> bool:
    method _cond_z (line 618) | def _cond_z(self, word: str, suffix_len: int) -> bool:
    method _cond_aa (line 641) | def _cond_aa(self, word: str, suffix_len: int) -> bool:
    method _cond_bb (line 666) | def _cond_bb(self, word: str, suffix_len: int) -> bool:
    method _cond_cc (line 693) | def _cond_cc(self, word: str, suffix_len: int) -> bool:
    method _recode9 (line 716) | def _recode9(self, stem: str) -> str:
    method _recode24 (line 739) | def _recode24(self, stem: str) -> str:
    method _recode28 (line 762) | def _recode28(self, stem: str) -> str:
    method _recode30 (line 785) | def _recode30(self, stem: str) -> str:
    method _recode32 (line 808) | def _recode32(self, stem: str) -> str:
    method __init__ (line 834) | def __init__(self) -> None:
    method stem (line 1174) | def stem(self, word: str) -> str:

FILE: abydos/stemmer/_paice_husk.py
  class PaiceHusk (line 29) | class PaiceHusk(_Stemmer):
    method _has_vowel (line 168) | def _has_vowel(self, word: str) -> bool:
    method _acceptable (line 174) | def _acceptable(self, word: str) -> bool:
    method _apply_rule (line 179) | def _apply_rule(
    method stem (line 203) | def stem(self, word: str) -> str:

FILE: abydos/stemmer/_porter.py
  class Porter (line 29) | class Porter(_Stemmer):
    method _m_degree (line 39) | def _m_degree(self, term: str) -> int:
    method _has_vowel (line 71) | def _has_vowel(self, term: str) -> bool:
    method _ends_in_doubled_cons (line 96) | def _ends_in_doubled_cons(self, term: str) -> bool:
    method _ends_in_cvc (line 122) | def _ends_in_cvc(self, term: str) -> bool:
    method __init__ (line 149) | def __init__(self, early_english: bool = False) -> None:
    method stem (line 164) | def stem(self, word: str) -> str:

FILE: abydos/stemmer/_porter2.py
  class Porter2 (line 29) | class Porter2(_Snowball):
    method __init__ (line 77) | def __init__(self, early_english: bool = False) -> None:
    method stem (line 92) | def stem(self, word: str) -> str:

FILE: abydos/stemmer/_s_stemmer.py
  class SStemmer (line 27) | class SStemmer(_Stemmer):
    method stem (line 35) | def stem(self, word: str) -> str:

FILE: abydos/stemmer/_schinke.py
  class Schinke (line 30) | class Schinke(_Stemmer):
    method stem (line 132) | def stem(self, word: str) -> str:
    method stem_dict (line 170) | def stem_dict(self, word: str) -> Dict[str, str]:

FILE: abydos/stemmer/_snowball.py
  class _Snowball (line 29) | class _Snowball(_Stemmer):
    method _sb_r1 (line 38) | def _sb_r1(
    method _sb_r2 (line 74) | def _sb_r2(
    method _sb_ends_in_short_syllable (line 100) | def _sb_ends_in_short_syllable(self, term: str) -> bool:
    method _sb_short_word (line 138) | def _sb_short_word(
    method _sb_has_vowel (line 169) | def _sb_has_vowel(self, term: str) -> bool:

FILE: abydos/stemmer/_snowball_danish.py
  class SnowballDanish (line 29) | class SnowballDanish(_Snowball):
    method stem (line 62) | def stem(self, word: str) -> str:

FILE: abydos/stemmer/_snowball_dutch.py
  class SnowballDutch (line 29) | class SnowballDutch(_Snowball):
    method _undouble (line 42) | def _undouble(self, word: str) -> str:
    method stem (line 69) | def stem(self, word: str) -> str:

FILE: abydos/stemmer/_snowball_german.py
  class SnowballGerman (line 29) | class SnowballGerman(_Snowball):
    method __init__ (line 42) | def __init__(self, alternate_vowels: bool = False) -> None:
    method stem (line 56) | def stem(self, word: str) -> str:

FILE: abydos/stemmer/_snowball_norwegian.py
  class SnowballNorwegian (line 29) | class SnowballNorwegian(_Snowball):
    method stem (line 59) | def stem(self, word: str) -> str:

FILE: abydos/stemmer/_snowball_swedish.py
  class SnowballSwedish (line 29) | class SnowballSwedish(_Snowball):
    method stem (line 59) | def stem(self, word: str) -> str:

FILE: abydos/stemmer/_stemmer.py
  class _Stemmer (line 25) | class _Stemmer:
    method stem (line 31) | def stem(self, word: str) -> str:

FILE: abydos/stemmer/_uea_lite.py
  class UEALite (line 30) | class UEALite(_Stemmer):
    method __init__ (line 612) | def __init__(
    method stem (line 641) | def stem(self, word: str) -> str:
    method _stem_and_rule (line 678) | def _stem_and_rule(self, word: str) -> Tuple[str, float]:

FILE: abydos/tokenizer/_c_or_v_cluster.py
  class COrVClusterTokenizer (line 37) | class COrVClusterTokenizer(_Tokenizer):
    method __init__ (line 43) | def __init__(
    method tokenize (line 87) | def tokenize(self, string: str) -> 'COrVClusterTokenizer':

FILE: abydos/tokenizer/_character.py
  class CharacterTokenizer (line 29) | class CharacterTokenizer(_Tokenizer):
    method __init__ (line 35) | def __init__(
    method tokenize (line 58) | def tokenize(self, string: str) -> 'CharacterTokenizer':

FILE: abydos/tokenizer/_cv_cluster.py
  class CVClusterTokenizer (line 38) | class CVClusterTokenizer(_Tokenizer):
    method __init__ (line 44) | def __init__(
    method tokenize (line 88) | def tokenize(self, string: str) -> 'CVClusterTokenizer':

FILE: abydos/tokenizer/_legalipy.py
  class LegaliPyTokenizer (line 36) | class LegaliPyTokenizer(_Tokenizer):
    method __init__ (line 42) | def __init__(
    method train_onsets (line 78) | def train_onsets(
    method tokenize (line 108) | def tokenize(self, string: str, ipa: bool = False) -> 'LegaliPyTokeniz...

FILE: abydos/tokenizer/_nltk.py
  class NLTKTokenizer (line 28) | class NLTKTokenizer(_Tokenizer):
    method __init__ (line 34) | def __init__(
    method tokenize (line 80) | def tokenize(self, string: str) -> 'NLTKTokenizer':

FILE: abydos/tokenizer/_q_grams.py
  class QGrams (line 30) | class QGrams(_Tokenizer):
    method __init__ (line 41) | def __init__(
    method tokenize (line 138) | def tokenize(self, string: str) -> 'QGrams':

FILE: abydos/tokenizer/_q_skipgrams.py
  class QSkipgrams (line 31) | class QSkipgrams(_Tokenizer):
    method __init__ (line 42) | def __init__(
    method tokenize (line 157) | def tokenize(self, string: str) -> 'QSkipgrams':

FILE: abydos/tokenizer/_regexp.py
  class RegexpTokenizer (line 30) | class RegexpTokenizer(_Tokenizer):
    method __init__ (line 36) | def __init__(
    method tokenize (line 79) | def tokenize(self, string: str) -> 'RegexpTokenizer':

FILE: abydos/tokenizer/_saps.py
  class SAPSTokenizer (line 27) | class SAPSTokenizer(_Tokenizer):
    method __init__ (line 35) | def __init__(
    method tokenize (line 63) | def tokenize(self, string: str) -> 'SAPSTokenizer':

FILE: abydos/tokenizer/_sonoripy.py
  class SonoriPyTokenizer (line 34) | class SonoriPyTokenizer(_Tokenizer):
    method __init__ (line 40) | def __init__(
    method tokenize (line 74) | def tokenize(self, string: str) -> 'SonoriPyTokenizer':

FILE: abydos/tokenizer/_tokenizer.py
  class _Tokenizer (line 39) | class _Tokenizer:
    method __init__ (line 45) | def __init__(
    method tokenize (line 84) | def tokenize(self, string: str) -> '_Tokenizer':
    method _scale_and_counterize (line 110) | def _scale_and_counterize(self) -> None:
    method count (line 149) | def count(self) -> int:
    method count_unique (line 169) | def count_unique(self) -> int:
    method get_counter (line 189) | def get_counter(self) -> TCounter[str]:
    method get_set (line 216) | def get_set(self) -> Set[str]:
    method get_list (line 236) | def get_list(self) -> List[str]:
    method __repr__ (line 256) | def __repr__(self) -> str:
    method __and__ (line 264) | def __and__(self, other: '_Tokenizer') -> TCounter[str]:
    method __add__ (line 272) | def __add__(self, other: '_Tokenizer') -> TCounter[str]:
    method __sub__ (line 280) | def __sub__(self, other: '_Tokenizer') -> TCounter[str]:

FILE: abydos/tokenizer/_vc_cluster.py
  class VCClusterTokenizer (line 38) | class VCClusterTokenizer(_Tokenizer):
    method __init__ (line 44) | def __init__(
    method tokenize (line 88) | def tokenize(self, string: str) -> 'VCClusterTokenizer':

FILE: abydos/tokenizer/_whitespace.py
  class WhitespaceTokenizer (line 29) | class WhitespaceTokenizer(RegexpTokenizer):
    method __init__ (line 42) | def __init__(

FILE: abydos/tokenizer/_wordpunct.py
  class WordpunctTokenizer (line 29) | class WordpunctTokenizer(RegexpTokenizer):
    method __init__ (line 43) | def __init__(

FILE: abydos/util/_data.py
  function package_path (line 93) | def package_path(resource_name: str) -> str:
  function list_installed_packages (line 104) | def list_installed_packages(
  function list_available_packages (line 135) | def list_available_packages(
  function _default_download_dir (line 180) | def _default_download_dir() -> Optional[str]:
  function download_package (line 213) | def download_package(

FILE: abydos/util/_ncr.py
  function _ncr (line 28) | def _ncr(n: float, r: float) -> float:

FILE: abydos/util/_prod.py
  function _prod (line 30) | def _prod(nums: Union[Sequence[float], Set[float]]) -> float:

FILE: badge_update.py
  function pylint_color (line 36) | def pylint_color(score):
  function pydocstyle_color (line 72) | def pydocstyle_color(score):
  function flake8_color (line 96) | def flake8_color(score):

FILE: data/features/features_csv_to_dict.py
  function main (line 45) | def main(argv):

FILE: helpers/bm_php2py.py
  function c2u (line 80) | def c2u(name):
  function pythonize (line 100) | def pythonize(line, fn='', subdir='gen'):
  function _run_script (line 291) | def _run_script():

FILE: helpers/call_and_write_log.py
  function _run_script (line 36) | def _run_script():

FILE: setup.py
  function readfile (line 32) | def readfile(fn):

FILE: stubs/lzss/__init__.pyi
  function encode (line 5) | def encode(data: AnyStr) -> bytes: ...

FILE: stubs/numpy/__init__.pyi
  class SupportsBytes (line 31) | class SupportsBytes: ...
  class dtype (line 88) | class dtype:
    method __init__ (line 90) | def __init__(
    method alignment (line 94) | def alignment(self) -> int: ...
    method base (line 96) | def base(self) -> dtype: ...
    method byteorder (line 98) | def byteorder(self) -> str: ...
    method char (line 100) | def char(self) -> str: ...
    method descr (line 102) | def descr(
    method fields (line 106) | def fields(
    method flags (line 112) | def flags(self) -> int: ...
    method hasobject (line 114) | def hasobject(self) -> bool: ...
    method isbuiltin (line 116) | def isbuiltin(self) -> int: ...
    method isnative (line 118) | def isnative(self) -> bool: ...
    method isalignedstruct (line 120) | def isalignedstruct(self) -> bool: ...
    method itemsize (line 122) | def itemsize(self) -> int: ...
    method kind (line 124) | def kind(self) -> str: ...
    method metadata (line 126) | def metadata(self) -> Optional[Mapping[str, Any]]: ...
    method name (line 128) | def name(self) -> str: ...
    method num (line 130) | def num(self) -> int: ...
    method shape (line 132) | def shape(self) -> _Shape: ...
    method ndim (line 134) | def ndim(self) -> int: ...
    method subdtype (line 136) | def subdtype(self) -> Optional[Tuple[dtype, _Shape]]: ...
    method newbyteorder (line 137) | def newbyteorder(self, new_order: str = ...) -> dtype: ...
    method str (line 141) | def str(self) -> builtins.str: ...
    method type (line 143) | def type(self) -> Type[generic]: ...
  class _flagsobj (line 147) | class _flagsobj:
    method behaved (line 153) | def behaved(self) -> bool: ...
    method c_contiguous (line 155) | def c_contiguous(self) -> bool: ...
    method carray (line 157) | def carray(self) -> bool: ...
    method contiguous (line 159) | def contiguous(self) -> bool: ...
    method f_contiguous (line 161) | def f_contiguous(self) -> bool: ...
    method farray (line 163) | def farray(self) -> bool: ...
    method fnc (line 165) | def fnc(self) -> bool: ...
    method forc (line 167) | def forc(self) -> bool: ...
    method fortran (line 169) | def fortran(self) -> bool: ...
    method num (line 171) | def num(self) -> int: ...
    method owndata (line 173) | def owndata(self) -> bool: ...
    method __getitem__ (line 174) | def __getitem__(self, key: str) -> bool: ...
    method __setitem__ (line 175) | def __setitem__(self, key: str, value: bool) -> None: ...
  class flatiter (line 177) | class flatiter:
    method base (line 179) | def base(self) -> ndarray: ...
    method coords (line 181) | def coords(self) -> _Shape: ...
    method index (line 183) | def index(self) -> int: ...
    method copy (line 184) | def copy(self) -> ndarray: ...
    method __iter__ (line 185) | def __iter__(self) -> flatiter: ...
    method __next__ (line 186) | def __next__(self) -> Any: ...
  class _ArrayOrScalarCommon (line 190) | class _ArrayOrScalarCommon(
    method T (line 198) | def T(self: _ArraySelf) -> _ArraySelf: ...
    method base (line 200) | def base(self) -> Optional[ndarray]: ...
    method dtype (line 202) | def dtype(self) -> _Dtype: ...
    method data (line 204) | def data(self) -> memoryview: ...
    method flags (line 206) | def flags(self) -> _flagsobj: ...
    method size (line 208) | def size(self) -> int: ...
    method itemsize (line 210) | def itemsize(self) -> int: ...
    method nbytes (line 212) | def nbytes(self) -> int: ...
    method ndim (line 214) | def ndim(self) -> int: ...
    method shape (line 216) | def shape(self) -> _Shape: ...
    method strides (line 218) | def strides(self) -> _Shape: ...
    method __int__ (line 219) | def __int__(self) -> int: ...
    method __float__ (line 220) | def __float__(self) -> float: ...
    method __complex__ (line 221) | def __complex__(self) -> complex: ...
    method __oct__ (line 223) | def __oct__(self) -> str: ...
    method __hex__ (line 224) | def __hex__(self) -> str: ...
    method __nonzero__ (line 225) | def __nonzero__(self) -> bool: ...
    method __unicode__ (line 226) | def __unicode__(self) -> Text: ...
    method __bool__ (line 228) | def __bool__(self) -> bool: ...
    method __bytes__ (line 229) | def __bytes__(self) -> bytes: ...
    method __str__ (line 230) | def __str__(self) -> str: ...
    method __repr__ (line 231) | def __repr__(self) -> str: ...
    method __copy__ (line 232) | def __copy__(self: _ArraySelf, order: str = ...) -> _ArraySelf: ...
    method __deepcopy__ (line 233) | def __deepcopy__(self: _ArraySelf, memo: dict) -> _ArraySelf: ...
    method __lt__ (line 234) | def __lt__(self, other): ...
    method __le__ (line 235) | def __le__(self, other): ...
    method __eq__ (line 236) | def __eq__(self, other): ...
    method __ne__ (line 237) | def __ne__(self, other): ...
    method __gt__ (line 238) | def __gt__(self, other): ...
    method __ge__ (line 239) | def __ge__(self, other): ...
    method __add__ (line 240) | def __add__(self, other): ...
    method __radd__ (line 241) | def __radd__(self, other): ...
    method __iadd__ (line 242) | def __iadd__(self, other): ...
    method __sub__ (line 243) | def __sub__(self, other): ...
    method __rsub__ (line 244) | def __rsub__(self, other): ...
    method __isub__ (line 245) | def __isub__(self, other): ...
    method __mul__ (line 246) | def __mul__(self, other): ...
    method __rmul__ (line 247) | def __rmul__(self, other): ...
    method __imul__ (line 248) | def __imul__(self, other): ...
    method __div__ (line 250) | def __div__(self, other): ...
    method __rdiv__ (line 251) | def __rdiv__(self, other): ...
    method __idiv__ (line 252) | def __idiv__(self, other): ...
    method __truediv__ (line 253) | def __truediv__(self, other): ...
    method __rtruediv__ (line 254) | def __rtruediv__(self, other): ...
    method __itruediv__ (line 255) | def __itruediv__(self, other): ...
    method __floordiv__ (line 256) | def __floordiv__(self, other): ...
    method __rfloordiv__ (line 257) | def __rfloordiv__(self, other): ...
    method __ifloordiv__ (line 258) | def __ifloordiv__(self, other): ...
    method __mod__ (line 259) | def __mod__(self, other): ...
    method __rmod__ (line 260) | def __rmod__(self, other): ...
    method __imod__ (line 261) | def __imod__(self, other): ...
    method __divmod__ (line 262) | def __divmod__(self, other): ...
    method __rdivmod__ (line 263) | def __rdivmod__(self, other): ...
    method __pow__ (line 265) | def __pow__(self, other): ...
    method __rpow__ (line 266) | def __rpow__(self, other): ...
    method __ipow__ (line 267) | def __ipow__(self, other): ...
    method __lshift__ (line 268) | def __lshift__(self, other): ...
    method __rlshift__ (line 269) | def __rlshift__(self, other): ...
    method __ilshift__ (line 270) | def __ilshift__(self, other): ...
    method __rshift__ (line 271) | def __rshift__(self, other): ...
    method __rrshift__ (line 272) | def __rrshift__(self, other): ...
    method __irshift__ (line 273) | def __irshift__(self, other): ...
    method __and__ (line 274) | def __and__(self, other): ...
    method __rand__ (line 275) | def __rand__(self, other): ...
    method __iand__ (line 276) | def __iand__(self, other): ...
    method __xor__ (line 277) | def __xor__(self, other): ...
    method __rxor__ (line 278) | def __rxor__(self, other): ...
    method __ixor__ (line 279) | def __ixor__(self, other): ...
    method __or__ (line 280) | def __or__(self, other): ...
    method __ror__ (line 281) | def __ror__(self, other): ...
    method __ior__ (line 282) | def __ior__(self, other): ...
    method __matmul__ (line 284) | def __matmul__(self, other): ...
    method __rmatmul__ (line 285) | def __rmatmul__(self, other): ...
    method __neg__ (line 286) | def __neg__(self: _ArraySelf) -> _ArraySelf: ...
    method __pos__ (line 287) | def __pos__(self: _ArraySelf) -> _ArraySelf: ...
    method __abs__ (line 288) | def __abs__(self: _ArraySelf) -> _ArraySelf: ...
    method __invert__ (line 289) | def __invert__(self: _ArraySelf) -> _ArraySelf: ...
    method __getattr__ (line 291) | def __getattr__(self, name) -> Any: ...
  class ndarray (line 295) | class ndarray(_ArrayOrScalarCommon, Iterable, Sized, Container):
    method __new__ (line 298) | def __new__(
    method dtype (line 308) | def dtype(self) -> _Dtype: ...
    method dtype (line 310) | def dtype(self, value: _DtypeLike): ...
    method ctypes (line 312) | def ctypes(self) -> _ctypes: ...
    method shape (line 314) | def shape(self) -> _Shape: ...
    method shape (line 316) | def shape(self, value: _ShapeLike): ...
    method flat (line 318) | def flat(self) -> flatiter: ...
    method strides (line 320) | def strides(self) -> _Shape: ...
    method strides (line 322) | def strides(self, value: _ShapeLike): ...
    method item (line 325) | def item(self, *args: int) -> Any: ...
    method item (line 327) | def item(self, args: Tuple[int, ...]) -> Any: ...
    method tolist (line 328) | def tolist(self) -> List[Any]: ...
    method itemset (line 330) | def itemset(self, __value: Any) -> None: ...
    method itemset (line 332) | def itemset(self, __item: _ShapeLike, __value: Any) -> None: ...
    method tostring (line 333) | def tostring(self, order: Optional[str] = ...) -> bytes: ...
    method tobytes (line 334) | def tobytes(self, order: Optional[str] = ...) -> bytes: ...
    method tofile (line 335) | def tofile(
    method dump (line 338) | def dump(self, file: str) -> None: ...
    method dumps (line 339) | def dumps(self) -> bytes: ...
    method astype (line 340) | def astype(
    method byteswap (line 348) | def byteswap(self, inplace: bool = ...) -> ndarray: ...
    method copy (line 349) | def copy(self, order: str = ...) -> ndarray: ...
    method view (line 351) | def view(self, dtype: Type[_NdArraySubClass]) -> _NdArraySubClass: ...
    method view (line 353) | def view(self, dtype: _DtypeLike = ...) -> ndarray: ...
    method view (line 355) | def view(
    method view (line 359) | def view(self, *, type: Type[_NdArraySubClass]) -> _NdArraySubClass: ...
    method getfield (line 360) | def getfield(
    method setflags (line 363) | def setflags(
    method fill (line 366) | def fill(self, value: Any) -> None: ...
    method reshape (line 369) | def reshape(
    method reshape (line 373) | def reshape(self, *shape: int, order: str = ...) -> ndarray: ...
    method resize (line 375) | def resize(
    method resize (line 379) | def resize(self, *new_shape: int, refcheck: bool = ...) -> None: ...
    method transpose (line 381) | def transpose(self, axes: Sequence[int]) -> ndarray: ...
    method transpose (line 383) | def transpose(self, *axes: int) -> ndarray: ...
    method swapaxes (line 384) | def swapaxes(self, axis1: int, axis2: int) -> ndarray: ...
    method flatten (line 385) | def flatten(self, order: str = ...) -> ndarray: ...
    method ravel (line 386) | def ravel(self, order: str = ...) -> ndarray: ...
    method squeeze (line 387) | def squeeze(self, axis: Union[int, Tuple[int, ...]] = ...) -> ndarray:...
    method __len__ (line 391) | def __len__(self) -> int: ...
    method __getitem__ (line 392) | def __getitem__(self, key) -> Any: ...
    method __setitem__ (line 393) | def __setitem__(self, key, value): ...
    method __iter__ (line 394) | def __iter__(self) -> Any: ...
    method __contains__ (line 395) | def __contains__(self, key) -> bool: ...
    method __index__ (line 396) | def __index__(self) -> int: ...
  class generic (line 398) | class generic(_ArrayOrScalarCommon):
    method __init__ (line 399) | def __init__(self, value: Any = ...) -> None: ...
    method base (line 401) | def base(self) -> None: ...
  class _real_generic (line 403) | class _real_generic(generic):
    method real (line 405) | def real(self: _ArraySelf) -> _ArraySelf: ...
    method imag (line 407) | def imag(self: _ArraySelf) -> _ArraySelf: ...
  class number (line 409) | class number(generic):
    method __init__ (line 410) | def __init__(
  class bool_ (line 414) | class bool_(_real_generic): ...
  class object_ (line 415) | class object_(generic): ...
  class datetime64 (line 417) | class datetime64:
    method __init__ (line 419) | def __init__(
    method __init__ (line 425) | def __init__(self, _data: int, _format: str) -> None: ...
    method __add__ (line 426) | def __add__(self, other: Union[timedelta64, int]) -> datetime64: ...
    method __sub__ (line 427) | def __sub__(
  class integer (line 431) | class integer(number, _real_generic): ...
  class signedinteger (line 432) | class signedinteger(integer): ...
  class int8 (line 433) | class int8(signedinteger): ...
  class int16 (line 434) | class int16(signedinteger): ...
  class int32 (line 435) | class int32(signedinteger): ...
  class int64 (line 436) | class int64(signedinteger): ...
  class timedelta64 (line 438) | class timedelta64(signedinteger):
    method __init__ (line 439) | def __init__(self, _data: Any = ..., _format: str = ...) -> None: ...
    method __add__ (line 441) | def __add__(self, other: Union[timedelta64, int]) -> timedelta64: ...
    method __add__ (line 443) | def __add__(self, other: datetime64) -> datetime64: ...
    method __sub__ (line 444) | def __sub__(self, other: Union[timedelta64, int]) -> timedelta64: ...
    method __div__ (line 447) | def __div__(self, other: timedelta64) -> float: ...
    method __div__ (line 449) | def __div__(self, other: float) -> timedelta64: ...
    method __truediv__ (line 451) | def __truediv__(self, other: timedelta64) -> float: ...
    method __truediv__ (line 453) | def __truediv__(self, other: float) -> timedelta64: ...
    method __mod__ (line 454) | def __mod__(self, other: timedelta64) -> timedelta64: ...
  class unsignedinteger (line 456) | class unsignedinteger(integer): ...
  class uint8 (line 457) | class uint8(unsignedinteger): ...
  class uint16 (line 458) | class uint16(unsignedinteger): ...
  class uint32 (line 459) | class uint32(unsignedinteger): ...
  class uint64 (line 460) | class uint64(unsignedinteger): ...
  class inexact (line 461) | class inexact(number): ...
  class floating (line 462) | class floating(inexact, _real_generic): ...
  class float16 (line 463) | class float16(floating): ...
  class float32 (line 464) | class float32(floating): ...
  class float64 (line 465) | class float64(floating): ...
  class complexfloating (line 467) | class complexfloating(inexact):
    method __init__ (line 468) | def __init__(
  class complex64 (line 475) | class complex64(complexfloating):
    method real (line 477) | def real(self) -> float32: ...
    method imag (line 479) | def imag(self) -> float32: ...
  class complex128 (line 481) | class complex128(complexfloating):
    method real (line 483) | def real(self) -> float64: ...
    method imag (line 485) | def imag(self) -> float64: ...
  class flexible (line 487) | class flexible(_real_generic): ...
  class void (line 488) | class void(flexible): ...
  class character (line 489) | class character(_real_generic): ...
  class bytes_ (line 490) | class bytes_(character): ...
  class str_ (line 491) | class str_(character): ...
  function array (line 501) | def array(
  function zeros (line 508) | def zeros(
  function ones (line 511) | def ones(
  function __getattr__ (line 516) | def __getattr__(name: str) -> Any: ...

FILE: stubs/numpy/core/_internal.pyi
  class _ctypes (line 5) | class _ctypes:
    method data (line 7) | def data(self) -> int: ...
    method shape (line 9) | def shape(self) -> Any: ...
    method strides (line 11) | def strides(self) -> Any: ...
    method data_as (line 12) | def data_as(self, obj: Any) -> Any: ...
    method shape_as (line 13) | def shape_as(self, obj: Any) -> Any: ...
    method strides_as (line 14) | def strides_as(self, obj: Any) -> Any: ...
    method get_data (line 15) | def get_data(self) -> int: ...
    method get_shape (line 16) | def get_shape(self) -> Any: ...
    method get_strides (line 17) | def get_strides(self) -> Any: ...
    method get_as_parameter (line 18) | def get_as_parameter(self) -> Any: ...

FILE: stubs/numpy/core/numeric.pyi
  function zeros_like (line 18) | def zeros_like(
  function ones (line 25) | def ones(
  function ones_like (line 28) | def ones_like(
  function full (line 35) | def full(
  function full_like (line 41) | def full_like(
  function count_nonzero (line 49) | def count_nonzero(
  function isfortran (line 53) | def isfortran(a: ndarray) -> bool: ...
  function argwhere (line 54) | def argwhere(a: _ArrayLike) -> ndarray: ...
  function flatnonzero (line 55) | def flatnonzero(a: _ArrayLike) -> ndarray: ...
  function correlate (line 56) | def correlate(a: _ArrayLike, v: _ArrayLike, mode: str = ...) -> ndarray:...
  function convolve (line 57) | def convolve(a: _ArrayLike, v: _ArrayLike, mode: str = ...) -> ndarray: ...
  function outer (line 58) | def outer(a: _ArrayLike, b: _ArrayLike, out: ndarray = ...) -> ndarray: ...
  function tensordot (line 59) | def tensordot(
  function roll (line 69) | def roll(
  function rollaxis (line 74) | def rollaxis(a: _ArrayLike, axis: int, start: int = ...) -> ndarray: ...
  function normalize_axis_tuple (line 75) | def normalize_axis_tuple(
  function moveaxis (line 81) | def moveaxis(
  function cross (line 86) | def cross(
  function indices (line 94) | def indices(
  function fromfunction (line 97) | def fromfunction(
  function isscalar (line 100) | def isscalar(element: Any) -> bool: ...
  function binary_repr (line 101) | def binary_repr(num: int, width: Optional[int] = ...) -> str: ...
  function base_repr (line 102) | def base_repr(number: int, base: int = ..., padding: int = ...) -> str: ...
  function identity (line 103) | def identity(n: int, dtype: Optional[dtype] = ...) -> ndarray: ...
  function allclose (line 104) | def allclose(
  function isclose (line 111) | def isclose(
  function array_equal (line 118) | def array_equal(a1: _ArrayLike, a2: _ArrayLike) -> bool: ...
  function array_equiv (line 119) | def array_equiv(a1: _ArrayLike, a2: _ArrayLike) -> bool: ...
  function extend_all (line 120) | def extend_all(module: ModuleType): ...

FILE: stubs/numpy/core/numerictypes.pyi
  function maximum_sctype (line 5) | def maximum_sctype(t: dtype) -> dtype: ...
  function issctype (line 6) | def issctype(rep: Any) -> bool: ...
  function obj2sctype (line 7) | def obj2sctype(rep: Any, default: Optional[Any] = ...) -> type: ...
  function issubclass_ (line 8) | def issubclass_(
  function issubsctype (line 11) | def issubsctype(
  function issubdtype (line 14) | def issubdtype(
  function sctype2char (line 18) | def sctype2char(sctype: Any) -> str: ...
  function find_common_type (line 19) | def find_common_type(

FILE: stubs/paq/__init__.pyi
  function compress (line 3) | def compress(data: bytes) -> bytes: ...

FILE: stubs/syllabipy/legalipy.pyi
  function LegaliPy (line 5) | def LegaliPy(word: str, onsets: List[str]) -> List[str]: ...
  function getOnsets (line 6) | def getOnsets(

FILE: stubs/syllabipy/sonoripy.pyi
  function SonoriPy (line 5) | def SonoriPy(word: str, IPA: bool = False) -> List[str]: ...

FILE: tests/__init__.py
  function _corpus_file (line 82) | def _corpus_file(name, corpora_dir=CORPORA):
  function _one_in (line 100) | def _one_in(inverse_probability):

FILE: tests/compression/test_compression_arithmetic.py
  class ArithmeticCoderTestCases (line 30) | class ArithmeticCoderTestCases(unittest.TestCase):
    method test_arithmetic_train (line 59) | def test_arithmetic_train(self):
    method test_arithmetic_encode (line 76) | def test_arithmetic_encode(self):
    method test_arithmetic_decode (line 92) | def test_arithmetic_decode(self):

FILE: tests/compression/test_compression_bwt.py
  class BWTTestCases (line 27) | class BWTTestCases(unittest.TestCase):
    method test_bwt_encode (line 34) | def test_bwt_encode(self):
    method test_bwt_decode (line 51) | def test_bwt_decode(self):
    method test_bwt_roundtripping (line 68) | def test_bwt_roundtripping(self):

FILE: tests/compression/test_compression_rle.py
  class RLETestCases (line 27) | class RLETestCases(unittest.TestCase):
    method test_rle_encode (line 35) | def test_rle_encode(self):
    method test_rle_decode (line 49) | def test_rle_decode(self):
    method test_rle_roundtripping (line 64) | def test_rle_roundtripping(self):

FILE: tests/corpus/test_corpus_corpus.py
  class CorpusTestCases (line 28) | class CorpusTestCases(unittest.TestCase):
    method test_corpus (line 70) | def test_corpus(self):
    method test_corpus_docs_raw (line 224) | def test_corpus_docs_raw(self):
    method test_corpus_sents_words (line 249) | def test_corpus_sents_words(self):
    method test_corpus_idf (line 263) | def test_corpus_idf(self):

FILE: tests/corpus/test_corpus_n_gram_corpus.py
  class NGramCorpusTestCases (line 31) | class NGramCorpusTestCases(unittest.TestCase):
    method test_init (line 93) | def test_init(self):
    method test_corpus_importer (line 99) | def test_corpus_importer(self):
    method test_gng_importer (line 183) | def test_gng_importer(self):
    method test_get_count (line 191) | def test_get_count(self):

FILE: tests/corpus/test_corpus_unigram_corpus.py
  class UnigramCorpusTestCases (line 35) | class UnigramCorpusTestCases(unittest.TestCase):
    method test_unigram_corpus_init (line 93) | def test_unigram_corpus_init(self):
    method test_unigram_corpus_gng_importer (line 98) | def test_unigram_corpus_gng_importer(self):
    method test_unigram_corpus_save_load_corpus (line 154) | def test_unigram_corpus_save_load_corpus(self):
    method test_unigram_corpus_idf (line 164) | def test_unigram_corpus_idf(self):

FILE: tests/distance/test_distance__distance.py
  class DistanceTestCases (line 27) | class DistanceTestCases(unittest.TestCase):
    method test_sim (line 36) | def test_sim(self):
    method test_dist (line 47) | def test_dist(self):
    method test_dist_abs (line 58) | def test_dist_abs(self):

FILE: tests/distance/test_distance__token_distance.py
  class TokenDistanceTestCases (line 40) | class TokenDistanceTestCases(unittest.TestCase):
    method test_crisp_jaccard_sim (line 53) | def test_crisp_jaccard_sim(self):
    method test_soft_jaccard_sim (line 80) | def test_soft_jaccard_sim(self):
    method test_fuzzy_jaccard_sim (line 119) | def test_fuzzy_jaccard_sim(self):
    method test_linkage_jaccard_sim (line 146) | def test_linkage_jaccard_sim(self):
    method test_token_distance (line 176) | def test_token_distance(self):

FILE: tests/distance/test_distance_aline.py
  class ALINETestCases (line 27) | class ALINETestCases(unittest.TestCase):
    method test_aline_alignments (line 36) | def test_aline_alignments(self):
    method test_aline_alignment (line 514) | def test_aline_alignment(self):
    method test_aline_sim (line 555) | def test_aline_sim(self):
    method test_aline_sim_score (line 605) | def test_aline_sim_score(self):

FILE: tests/distance/test_distance_ample.py
  class AMPLETestCases (line 27) | class AMPLETestCases(unittest.TestCase):
    method test_ample_sim (line 37) | def test_ample_sim(self):

FILE: tests/distance/test_distance_anderberg.py
  class AnderbergTestCases (line 27) | class AnderbergTestCases(unittest.TestCase):
    method test_anderberg_sim (line 37) | def test_anderberg_sim(self):
    method test_anderberg_sim_score (line 79) | def test_anderberg_sim_score(self):

FILE: tests/distance/test_distance_andres_marzo_delta.py
  class AndresMarzoDeltaTestCases (line 27) | class AndresMarzoDeltaTestCases(unittest.TestCase):
    method test_andres_marzo_delta_sim (line 36) | def test_andres_marzo_delta_sim(self):
    method test_andres_marzo_delta_corr (line 80) | def test_andres_marzo_delta_corr(self):

FILE: tests/distance/test_distance_average_linkage.py
  class AverageLinkageTestCases (line 28) | class AverageLinkageTestCases(unittest.TestCase):
    method test_average_linkage_dist (line 38) | def test_average_linkage_dist(self):

FILE: tests/distance/test_distance_azzoo.py
  class AZZOOTestCases (line 27) | class AZZOOTestCases(unittest.TestCase):
    method test_azzoo_sim (line 36) | def test_azzoo_sim(self):
    method test_azzoo_sim_score (line 72) | def test_azzoo_sim_score(self):

FILE: tests/distance/test_distance_bag.py
  class BagTestCases (line 28) | class BagTestCases(unittest.TestCase):
    method test_bag_dist_abs (line 36) | def test_bag_dist_abs(self):
    method test_bag_sim (line 50) | def test_bag_sim(self):
    method test_bag_dist (line 66) | def test_bag_dist(self):

FILE: tests/distance/test_distance_baroni_urbani_buser_i.py
  class BaroniUrbaniBuserITestCases (line 27) | class BaroniUrbaniBuserITestCases(unittest.TestCase):
    method test_baroni_urbani_buser_i_sim (line 36) | def test_baroni_urbani_buser_i_sim(self):
    method test_baroni_urbani_buser_i_dist (line 80) | def test_baroni_urbani_buser_i_dist(self):

FILE: tests/distance/test_distance_baroni_urbani_buser_ii.py
  class BaroniUrbaniBuserIITestCases (line 27) | class BaroniUrbaniBuserIITestCases(unittest.TestCase):
    method test_baroni_urbani_buser_ii_sim (line 36) | def test_baroni_urbani_buser_ii_sim(self):
    method test_baroni_urbani_buser_ii_dist (line 80) | def test_baroni_urbani_buser_ii_dist(self):
    method test_baroni_urbani_buser_ii_corr (line 124) | def test_baroni_urbani_buser_ii_corr(self):

FILE: tests/distance/test_distance_batagelj_bren.py
  class BatageljBrenTestCases (line 27) | class BatageljBrenTestCases(unittest.TestCase):
    method test_batagelj_bren_dist (line 36) | def test_batagelj_bren_dist(self):
    method test_batagelj_bren_sim (line 55) | def test_batagelj_bren_sim(self):
    method test_batagelj_bren_dist_abs (line 74) | def test_batagelj_bren_dist_abs(self):

FILE: tests/distance/test_distance_baulieu_i.py
  class BaulieuITestCases (line 27) | class BaulieuITestCases(unittest.TestCase):
    method test_baulieu_i_dist (line 36) | def test_baulieu_i_dist(self):
    method test_baulieu_i_sim (line 55) | def test_baulieu_i_sim(self):

FILE: tests/distance/test_distance_baulieu_ii.py
  class BaulieuIITestCases (line 27) | class BaulieuIITestCases(unittest.TestCase):
    method test_baulieu_ii_sim (line 36) | def test_baulieu_ii_sim(self):
    method test_baulieu_ii_dist (line 55) | def test_baulieu_ii_dist(self):

FILE: tests/distance/test_distance_baulieu_iii.py
  class BaulieuIIITestCases (line 27) | class BaulieuIIITestCases(unittest.TestCase):
    method test_baulieu_iii_dist (line 36) | def test_baulieu_iii_dist(self):
    method test_baulieu_iii_sim (line 80) | def test_baulieu_iii_sim(self):

FILE: tests/distance/test_distance_baulieu_iv.py
  class BaulieuIVTestCases (line 27) | class BaulieuIVTestCases(unittest.TestCase):
    method test_baulieu_iv_dist (line 36) | def test_baulieu_iv_dist(self):
    method test_baulieu_iv_sim (line 82) | def test_baulieu_iv_sim(self):
    method test_baulieu_iv_dist_abs (line 126) | def test_baulieu_iv_dist_abs(self):

FILE: tests/distance/test_distance_baulieu_ix.py
  class BaulieuIXTestCases (line 27) | class BaulieuIXTestCases(unittest.TestCase):
    method test_baulieu_ix_dist (line 36) | def test_baulieu_ix_dist(self):
    method test_baulieu_ix_sim (line 72) | def test_baulieu_ix_sim(self):

FILE: tests/distance/test_distance_baulieu_v.py
  class BaulieuVTestCases (line 27) | class BaulieuVTestCases(unittest.TestCase):
    method test_baulieu_v_dist (line 36) | def test_baulieu_v_dist(self):
    method test_baulieu_v_sim (line 55) | def test_baulieu_v_sim(self):

FILE: tests/distance/test_distance_baulieu_vi.py
  class BaulieuVITestCases (line 27) | class BaulieuVITestCases(unittest.TestCase):
    method test_baulieu_vi_dist (line 36) | def test_baulieu_vi_dist(self):
    method test_baulieu_vi_sim (line 55) | def test_baulieu_vi_sim(self):

FILE: tests/distance/test_distance_baulieu_vii.py
  class BaulieuVIITestCases (line 27) | class BaulieuVIITestCases(unittest.TestCase):
    method test_baulieu_vii_dist (line 36) | def test_baulieu_vii_dist(self):
    method test_baulieu_vii_sim (line 72) | def test_baulieu_vii_sim(self):

FILE: tests/distance/test_distance_baulieu_viii.py
  class BaulieuVIIITestCases (line 27) | class BaulieuVIIITestCases(unittest.TestCase):
    method test_baulieu_viii_dist (line 36) | def test_baulieu_viii_dist(self):
    method test_baulieu_viii_sim (line 72) | def test_baulieu_viii_sim(self):

FILE: tests/distance/test_distance_baulieu_x.py
  class BaulieuXTestCases (line 27) | class BaulieuXTestCases(unittest.TestCase):
    method test_baulieu_x_dist (line 36) | def test_baulieu_x_dist(self):
    method test_baulieu_x_sim (line 72) | def test_baulieu_x_sim(self):

FILE: tests/distance/test_distance_baulieu_xi.py
  class BaulieuXITestCases (line 27) | class BaulieuXITestCases(unittest.TestCase):
    method test_baulieu_xi_dist (line 36) | def test_baulieu_xi_dist(self):
    method test_baulieu_xi_sim (line 55) | def test_baulieu_xi_sim(self):

FILE: tests/distance/test_distance_baulieu_xii.py
  class BaulieuXIITestCases (line 27) | class BaulieuXIITestCases(unittest.TestCase):
    method test_baulieu_xii_dist (line 36) | def test_baulieu_xii_dist(self):
    method test_baulieu_xii_sim (line 55) | def test_baulieu_xii_sim(self):

FILE: tests/distance/test_distance_baulieu_xiii.py
  class BaulieuXIIITestCases (line 27) | class BaulieuXIIITestCases(unittest.TestCase):
    method test_baulieu_xiii_dist (line 36) | def test_baulieu_xiii_dist(self):
    method test_baulieu_xiii_sim (line 55) | def test_baulieu_xiii_sim(self):

FILE: tests/distance/test_distance_baulieu_xiv.py
  class BaulieuXIVTestCases (line 27) | class BaulieuXIVTestCases(unittest.TestCase):
    method test_baulieu_xiv_dist (line 36) | def test_baulieu_xiv_dist(self):
    method test_baulieu_xiv_sim (line 55) | def test_baulieu_xiv_sim(self):

FILE: tests/distance/test_distance_baulieu_xv.py
  class BaulieuXVTestCases (line 27) | class BaulieuXVTestCases(unittest.TestCase):
    method test_baulieu_xv_dist (line 36) | def test_baulieu_xv_dist(self):
    method test_baulieu_xv_sim (line 55) | def test_baulieu_xv_sim(self):

FILE: tests/distance/test_distance_baystat.py
  class BaystatTestCases (line 27) | class BaystatTestCases(unittest.TestCase):
    method test_baystat_sim (line 35) | def test_baystat_sim(self):
    method test_baystat_dist (line 66) | def test_baystat_dist(self):

FILE: tests/distance/test_distance_benini_i.py
  class BeniniITestCases (line 27) | class BeniniITestCases(unittest.TestCase):
    method test_benini_i_sim (line 36) | def test_benini_i_sim(self):
    method test_benini_i_dist (line 72) | def test_benini_i_dist(self):
    method test_benini_i_corr (line 108) | def test_benini_i_corr(self):

FILE: tests/distance/test_distance_benini_ii.py
  class BeniniIITestCases (line 27) | class BeniniIITestCases(unittest.TestCase):
    method test_benini_ii_sim (line 36) | def test_benini_ii_sim(self):
    method test_benini_ii_dist (line 72) | def test_benini_ii_dist(self):
    method test_benini_ii_corr (line 108) | def test_benini_ii_corr(self):

FILE: tests/distance/test_distance_bennet.py
  class BennetTestCases (line 27) | class BennetTestCases(unittest.TestCase):
    method test_bennet_sim (line 36) | def test_bennet_sim(self):
    method test_bennet_dist (line 80) | def test_bennet_dist(self):
    method test_bennet_corr (line 124) | def test_bennet_corr(self):

FILE: tests/distance/test_distance_bhattacharyya.py
  class BhattacharyyaTestCases (line 27) | class BhattacharyyaTestCases(unittest.TestCase):
    method test_bhattacharyya_dist (line 35) | def test_bhattacharyya_dist(self):
    method test_bhattacharyya_sim (line 54) | def test_bhattacharyya_sim(self):
    method test_bhattacharyya_dist_abs (line 73) | def test_bhattacharyya_dist_abs(self):

FILE: tests/distance/test_distance_bisim.py
  class BISIMTestCases (line 27) | class BISIMTestCases(unittest.TestCase):
    method test_bi_sim_sim (line 36) | def test_bi_sim_sim(self):

FILE: tests/distance/test_distance_bleu.py
  class BLEUTestCases (line 28) | class BLEUTestCases(unittest.TestCase):
    method test_bleu_sim (line 39) | def test_bleu_sim(self):
    method test_bleu_dist (line 62) | def test_bleu_dist(self):

FILE: tests/distance/test_distance_block_levenshtein.py
  class BlockLevenshteinTestCases (line 27) | class BlockLevenshteinTestCases(unittest.TestCase):
    method test_block_levenshtein_dist (line 35) | def test_block_levenshtein_dist(self):
    method test_block_levenshtein_sim (line 52) | def test_block_levenshtein_sim(self):
    method test_block_levenshtein_dist_abs (line 69) | def test_block_levenshtein_dist_abs(self):

FILE: tests/distance/test_distance_brainerd_robinson.py
  class BrainerdRobinsonTestCases (line 27) | class BrainerdRobinsonTestCases(unittest.TestCase):
    method test_brainerd_robinson_sim (line 35) | def test_brainerd_robinson_sim(self):
    method test_brainerd_robinson_dist (line 54) | def test_brainerd_robinson_dist(self):
    method test_brainerd_robinson_sim_score (line 73) | def test_brainerd_robinson_sim_score(self):

FILE: tests/distance/test_distance_braun_blanquet.py
  class BraunBlanquetTestCases (line 27) | class BraunBlanquetTestCases(unittest.TestCase):
    method test_braun_blanquet_sim (line 36) | def test_braun_blanquet_sim(self):
    method test_braun_blanquet_dist (line 55) | def test_braun_blanquet_dist(self):

FILE: tests/distance/test_distance_canberra.py
  class CanberraTestCases (line 27) | class CanberraTestCases(unittest.TestCase):
    method test_canberra_dist (line 35) | def test_canberra_dist(self):
    method test_canberra_sim (line 54) | def test_canberra_sim(self):

FILE: tests/distance/test_distance_cao.py
  class CaoTestCases (line 27) | class CaoTestCases(unittest.TestCase):
    method test_cao_sim (line 35) | def test_cao_sim(self):
    method test_cao_dist_abs (line 53) | def test_cao_dist_abs(self):

FILE: tests/distance/test_distance_chao_dice.py
  class ChaoDiceTestCases (line 29) | class ChaoDiceTestCases(unittest.TestCase):
    method test_chao_dice_sim (line 37) | def test_chao_dice_sim(self):
    method test_chao_dice_sim_score (line 63) | def test_chao_dice_sim_score(self):

FILE: tests/distance/test_distance_chao_jaccard.py
  class ChaoJaccardTestCases (line 29) | class ChaoJaccardTestCases(unittest.TestCase):
    method test_chao_jaccard_sim (line 37) | def test_chao_jaccard_sim(self):
    method test_chao_jaccard_sim_score (line 62) | def test_chao_jaccard_sim_score(self):

FILE: tests/distance/test_distance_chebyshev.py
  class ChebyshevTestCases (line 30) | class ChebyshevTestCases(unittest.TestCase):
    method test_chebyshev_dist_abs (line 40) | def test_chebyshev_dist_abs(self):
    method test_chebyshev_dist (line 89) | def test_chebyshev_dist(self):
    method test_chebyshev_sim (line 93) | def test_chebyshev_sim(self):

FILE: tests/distance/test_distance_chord.py
  class ChordTestCases (line 27) | class ChordTestCases(unittest.TestCase):
    method test_chord_dist (line 35) | def test_chord_dist(self):
    method test_chord_sim (line 54) | def test_chord_sim(self):
    method test_chord_dist_abs (line 73) | def test_chord_dist_abs(self):

FILE: tests/distance/test_distance_clark.py
  class ClarkTestCases (line 27) | class ClarkTestCases(unittest.TestCase):
    method test_clark_dist (line 35) | def test_clark_dist(self):

FILE: tests/distance/test_distance_clement.py
  class ClementTestCases (line 27) | class ClementTestCases(unittest.TestCase):
    method test_clement_sim (line 36) | def test_clement_sim(self):
    method test_clement_dist (line 80) | def test_clement_dist(self):

FILE: tests/distance/test_distance_cohen_kappa.py
  class CohenKappaTestCases (line 27) | class CohenKappaTestCases(unittest.TestCase):
    method test_cohen_kappa_sim (line 36) | def test_cohen_kappa_sim(self):
    method test_cohen_kappa_dist (line 57) | def test_cohen_kappa_dist(self):

FILE: tests/distance/test_distance_cole.py
  class ColeTestCases (line 27) | class ColeTestCases(unittest.TestCase):
    method test_cole_sim (line 37) | def test_cole_sim(self):
    method test_cole_dist (line 82) | def test_cole_dist(self):
    method test_cole_corr (line 118) | def test_cole_corr(self):

FILE: tests/distance/test_distance_complete_linkage.py
  class CompleteLinkageTestCases (line 28) | class CompleteLinkageTestCases(unittest.TestCase):
    method test_complete_linkage_dist (line 40) | def test_complete_linkage_dist(self):
    method test_complete_linkage_sim (line 62) | def test_complete_linkage_sim(self):
    method test_complete_linkage_dist_abs (line 79) | def test_complete_linkage_dist_abs(self):

FILE: tests/distance/test_distance_consonni_todeschini_i.py
  class ConsonniTodeschiniITestCases (line 27) | class ConsonniTodeschiniITestCases(unittest.TestCase):
    method test_consonni_todeschini_i_sim (line 36) | def test_consonni_todeschini_i_sim(self):
    method test_consonni_todeschini_i_dist (line 80) | def test_consonni_todeschini_i_dist(self):

FILE: tests/distance/test_distance_consonni_todeschini_ii.py
  class ConsonniTodeschiniIITestCases (line 27) | class ConsonniTodeschiniIITestCases(unittest.TestCase):
    method test_consonni_todeschini_ii_sim (line 36) | def test_consonni_todeschini_ii_sim(self):
    method test_consonni_todeschini_ii_dist (line 72) | def test_consonni_todeschini_ii_dist(self):

FILE: tests/distance/test_distance_consonni_todeschini_iii.py
  class ConsonniTodeschiniIIITestCases (line 27) | class ConsonniTodeschiniIIITestCases(unittest.TestCase):
    method test_consonni_todeschini_iii_sim (line 36) | def test_consonni_todeschini_iii_sim(self):
    method test_consonni_todeschini_iii_dist (line 80) | def test_consonni_todeschini_iii_dist(self):

FILE: tests/distance/test_distance_consonni_todeschini_iv.py
  class ConsonniTodeschiniIVTestCases (line 27) | class ConsonniTodeschiniIVTestCases(unittest.TestCase):
    method test_consonni_todeschini_iv_sim (line 36) | def test_consonni_todeschini_iv_sim(self):
    method test_consonni_todeschini_iv_dist (line 55) | def test_consonni_todeschini_iv_dist(self):

FILE: tests/distance/test_distance_consonni_todeschini_v.py
  class ConsonniTodeschiniVTestCases (line 27) | class ConsonniTodeschiniVTestCases(unittest.TestCase):
    method test_consonni_todeschini_v_sim (line 36) | def test_consonni_todeschini_v_sim(self):
    method test_consonni_todeschini_v_dist (line 80) | def test_consonni_todeschini_v_dist(self):
    method test_consonni_todeschini_v_corr (line 124) | def test_consonni_todeschini_v_corr(self):

FILE: tests/distance/test_distance_cormode_lz.py
  class CormodeLZTestCases (line 27) | class CormodeLZTestCases(unittest.TestCase):
    method test_cormode_lz_dist (line 35) | def test_cormode_lz_dist(self):
    method test_cormode_lz_sim (line 52) | def test_cormode_lz_sim(self):
    method test_cormode_lz_dist_abs (line 69) | def test_cormode_lz_dist_abs(self):

FILE: tests/distance/test_distance_cosine.py
  class CosineSimilarityTestCases (line 31) | class CosineSimilarityTestCases(unittest.TestCase):
    method test_cosine_sim (line 41) | def test_cosine_sim(self):
    method test_cosine_dist (line 100) | def test_cosine_dist(self):

FILE: tests/distance/test_distance_covington.py
  class CovingtonTestCases (line 27) | class CovingtonTestCases(unittest.TestCase):
    method test_covington_dist (line 35) | def test_covington_dist(self):
    method test_covington_sim (line 56) | def test_covington_sim(self):
    method test_covington_dist_abs (line 77) | def test_covington_dist_abs(self):
    method test_covington_alignments (line 96) | def test_covington_alignments(self):
    method test_covington_alignment (line 166) | def test_covington_alignment(self):

FILE: tests/distance/test_distance_damerau_levenshtein.py
  class DamerauLevenshteinTestCases (line 27) | class DamerauLevenshteinTestCases(unittest.TestCase):
    method test_damerau_levenshtein_dist_abs (line 39) | def test_damerau_levenshtein_dist_abs(self):
    method test_damerau_dist (line 55) | def test_damerau_dist(self):
    method test_damerau_sim (line 81) | def test_damerau_sim(self):

FILE: tests/distance/test_distance_dennis.py
  class DennisTestCases (line 27) | class DennisTestCases(unittest.TestCase):
    method test_dennis_sim (line 36) | def test_dennis_sim(self):
    method test_dennis_dist (line 88) | def test_dennis_dist(self):
    method test_dennis_sim_score (line 142) | def test_dennis_sim_score(self):
    method test_dennis_corr (line 192) | def test_dennis_corr(self):

FILE: tests/distance/test_distance_dice.py
  class DiceTestCases (line 30) | class DiceTestCases(unittest.TestCase):
    method test_dice_sim (line 40) | def test_dice_sim(self):
    method test_dice_dist (line 89) | def test_dice_dist(self):

FILE: tests/distance/test_distance_dice_asymmetric_i.py
  class DiceAsymmetricITestCases (line 27) | class DiceAsymmetricITestCases(unittest.TestCase):
    method test_dice_asymmetric_i_sim (line 35) | def test_dice_asymmetric_i_sim(self):
    method test_dice_asymmetric_i_dist (line 54) | def test_dice_asymmetric_i_dist(self):

FILE: tests/distance/test_distance_dice_asymmetric_ii.py
  class DiceAsymmetricIITestCases (line 27) | class DiceAsymmetricIITestCases(unittest.TestCase):
    method test_dice_asymmetric_ii_sim (line 35) | def test_dice_asymmetric_ii_sim(self):
    method test_dice_asymmetric_ii_dist (line 52) | def test_dice_asymmetric_ii_dist(self):

FILE: tests/distance/test_distance_digby.py
  class DigbyTestCases (line 27) | class DigbyTestCases(unittest.TestCase):
    method test_digby_sim (line 36) | def test_digby_sim(self):
    method test_digby_dist (line 72) | def test_digby_dist(self):
    method test_digby_corr (line 108) | def test_digby_corr(self):

FILE: tests/distance/test_distance_discounted_levenshtein.py
  class DiscountedLevenshteinTestCases (line 27) | class DiscountedLevenshteinTestCases(unittest.TestCase):
    method test_discounted_levenshtein_aligmnent (line 36) | def test_discounted_levenshtein_aligmnent(self):
    method test_discounted_levenshtein_dist_abs (line 93) | def test_discounted_levenshtein_dist_abs(self):
    method test_discounted_levenshtein_dist (line 120) | def test_discounted_levenshtein_dist(self):

FILE: tests/distance/test_distance_dispersion.py
  class DispersionTestCases (line 27) | class DispersionTestCases(unittest.TestCase):
    method test_dispersion_sim (line 36) | def test_dispersion_sim(self):
    method test_dispersion_dist (line 80) | def test_dispersion_dist(self):
    method test_dispersion_corr (line 124) | def test_dispersion_corr(self):

FILE: tests/distance/test_distance_doolittle.py
  class DoolittleTestCases (line 27) | class DoolittleTestCases(unittest.TestCase):
    method test_doolittle_sim (line 36) | def test_doolittle_sim(self):
    method test_doolittle_dist (line 72) | def test_doolittle_dist(self):

FILE: tests/distance/test_distance_dunning.py
  class DunningTestCases (line 27) | class DunningTestCases(unittest.TestCase):
    method test_dunning_sim (line 36) | def test_dunning_sim(self):
    method test_dunning_dist (line 57) | def test_dunning_dist(self):
    method test_dunning_sim_score (line 78) | def test_dunning_sim_score(self):

FILE: tests/distance/test_distance_editex.py
  class EditexTestCases (line 27) | class EditexTestCases(unittest.TestCase):
    method test_editex_dist_abs (line 37) | def test_editex_dist_abs(self):
    method test_editex_dist_abs_local (line 58) | def test_editex_dist_abs_local(self):
    method test_editex_sim (line 74) | def test_editex_sim(self):
    method test_editex_dist (line 85) | def test_editex_dist(self):

FILE: tests/distance/test_distance_euclidean.py
  class EuclideanTestCases (line 30) | class EuclideanTestCases(unittest.TestCase):
    method test_euclidean_dist_abs (line 40) | def test_euclidean_dist_abs(self):
    method test_euclidean_sim (line 97) | def test_euclidean_sim(self):
    method test_euclidean_dist (line 154) | def test_euclidean_dist(self):

FILE: tests/distance/test_distance_eudex.py
  function _yield_1 (line 27) | def _yield_1():
  class EudexTestCases (line 32) | class EudexTestCases(unittest.TestCase):
    method test_eudex_dist_abs (line 40) | def test_eudex_dist_abs(self):
    method test_eudex_dist (line 77) | def test_eudex_dist(self):
    method test_eudex_sim (line 103) | def test_eudex_sim(self):

FILE: tests/distance/test_distance_eyraud.py
  class EyraudTestCases (line 27) | class EyraudTestCases(unittest.TestCase):
    method test_eyraud_sim (line 36) | def test_eyraud_sim(self):
    method test_eyraud_dist (line 84) | def test_eyraud_dist(self):
    method test_eyraud_sim_score (line 130) | def test_eyraud_sim_score(self):

FILE: tests/distance/test_distance_fager_mcgowan.py
  class FagerMcGowanTestCases (line 27) | class FagerMcGowanTestCases(unittest.TestCase):
    method test_fager_mcgowan_sim (line 35) | def test_fager_mcgowan_sim(self):
    method test_fager_mcgowan_dist (line 54) | def test_fager_mcgowan_dist(self):
    method test_fager_mcgowan_sim_score (line 73) | def test_fager_mcgowan_sim_score(self):

FILE: tests/distance/test_distance_faith.py
  class FaithTestCases (line 27) | class FaithTestCases(unittest.TestCase):
    method test_faith_sim (line 36) | def test_faith_sim(self):
    method test_faith_dist (line 78) | def test_faith_dist(self):

FILE: tests/distance/test_distance_fellegi_sunter.py
  class FellegiSunterTestCases (line 27) | class FellegiSunterTestCases(unittest.TestCase):
    method test_fellegi_sunter_sim (line 36) | def test_fellegi_sunter_sim(self):
    method test_fellegi_sunter_dist (line 79) | def test_fellegi_sunter_dist(self):
    method test_fellegi_sunter_sim_score (line 122) | def test_fellegi_sunter_sim_score(self):

FILE: tests/distance/test_distance_fidelity.py
  class FidelityTestCases (line 27) | class FidelityTestCases(unittest.TestCase):
    method test_fidelity_sim (line 35) | def test_fidelity_sim(self):
    method test_fidelity_dist (line 54) | def test_fidelity_dist(self):

FILE: tests/distance/test_distance_fleiss.py
  class FleissTestCases (line 27) | class FleissTestCases(unittest.TestCase):
    method test_fleiss_sim (line 36) | def test_fleiss_sim(self):
    method test_fleiss_dist (line 72) | def test_fleiss_dist(self):
    method test_fleiss_corr (line 108) | def test_fleiss_corr(self):

FILE: tests/distance/test_distance_fleiss_levin_paik.py
  class FleissLevinPaikTestCases (line 27) | class FleissLevinPaikTestCases(unittest.TestCase):
    method test_fleiss_levin_paik_sim (line 36) | def test_fleiss_levin_paik_sim(self):
    method test_fleiss_levin_paik_dist (line 72) | def test_fleiss_levin_paik_dist(self):

FILE: tests/distance/test_distance_flexmetric.py
  class FlexMetricTestCases (line 27) | class FlexMetricTestCases(unittest.TestCase):
    method test_flexmetric_dist (line 39) | def test_flexmetric_dist(self):
    method test_flexmetric_sim (line 56) | def test_flexmetric_sim(self):
    method test_flexmetric_dist_abs (line 73) | def test_flexmetric_dist_abs(self):

FILE: tests/distance/test_distance_forbes_i.py
  class ForbesITestCases (line 27) | class ForbesITestCases(unittest.TestCase):
    method test_forbes_i_sim (line 36) | def test_forbes_i_sim(self):
    method test_forbes_i_dist (line 72) | def test_forbes_i_dist(self):
    method test_forbes_i_sim_score (line 108) | def test_forbes_i_sim_score(self):

FILE: tests/distance/test_distance_forbes_ii.py
  class ForbesIITestCases (line 27) | class ForbesIITestCases(unittest.TestCase):
    method test_forbes_ii_sim (line 36) | def test_forbes_ii_sim(self):
    method test_forbes_ii_dist (line 72) | def test_forbes_ii_dist(self):
    method test_forbes_ii_corr (line 108) | def test_forbes_ii_corr(self):

FILE: tests/distance/test_distance_fossum.py
  class FossumTestCases (line 27) | class FossumTestCases(unittest.TestCase):
    method test_fossum_sim (line 36) | def test_fossum_sim(self):
    method test_fossum_dist (line 82) | def test_fossum_dist(self):
    method test_fossum_sim_score (line 128) | def test_fossum_sim_score(self):

FILE: tests/distance/test_distance_fuzzywuzzy_partial_string.py
  class FuzzyWuzzyPartialStringTestCases (line 27) | class FuzzyWuzzyPartialStringTestCases(unittest.TestCase):
    method test_fuzzywuzzy_partial_string_sim (line 35) | def test_fuzzywuzzy_partial_string_sim(self):
    method test_fuzzywuzzy_partial_string_dist (line 70) | def test_fuzzywuzzy_partial_string_dist(self):

FILE: tests/distance/test_distance_fuzzywuzzy_token_set.py
  class FuzzyWuzzyTokenSetTestCases (line 28) | class FuzzyWuzzyTokenSetTestCases(unittest.TestCase):
    method test_fuzzywuzzy_token_set_sim (line 37) | def test_fuzzywuzzy_token_set_sim(self):
    method test_fuzzywuzzy_token_set_dist (line 85) | def test_fuzzywuzzy_token_set_dist(self):

FILE: tests/distance/test_distance_fuzzywuzzy_token_sort.py
  class FuzzyWuzzyTokenSortTestCases (line 28) | class FuzzyWuzzyTokenSortTestCases(unittest.TestCase):
    method test_fuzzywuzzy_token_sort_sim (line 37) | def test_fuzzywuzzy_token_sort_sim(self):
    method test_fuzzywuzzy_token_sort_dist (line 84) | def test_fuzzywuzzy_token_sort_dist(self):

FILE: tests/distance/test_distance_generalized_fleiss.py
  class GeneralizedFleissTestCases (line 27) | class GeneralizedFleissTestCases(unittest.TestCase):
    method test_generalized_fleiss_sim (line 44) | def test_generalized_fleiss_sim(self):
    method test_generalized_fleiss_dist (line 224) | def test_generalized_fleiss_dist(self):
    method test_generalized_fleiss_corr (line 260) | def test_generalized_fleiss_corr(self):

FILE: tests/distance/test_distance_gilbert.py
  class GilbertTestCases (line 27) | class GilbertTestCases(unittest.TestCase):
    method test_gilbert_sim (line 36) | def test_gilbert_sim(self):
    method test_gilbert_dist (line 74) | def test_gilbert_dist(self):
    method test_gilbert_corr (line 112) | def test_gilbert_corr(self):

FILE: tests/distance/test_distance_gilbert_wells.py
  class GilbertWellsTestCases (line 27) | class GilbertWellsTestCases(unittest.TestCase):
    method test_gilbert_wells_sim (line 36) | def test_gilbert_wells_sim(self):
    method test_gilbert_wells_dist (line 82) | def test_gilbert_wells_dist(self):
    method test_gilbert_wells_sim_score (line 128) | def test_gilbert_wells_sim_score(self):

FILE: tests/distance/test_distance_gini_i.py
  class GiniITestCases (line 27) | class GiniITestCases(unittest.TestCase):
    method test_gini_i_sim (line 36) | def test_gini_i_sim(self):
    method test_gini_i_dist (line 82) | def test_gini_i_dist(self):
    method test_gini_i_corr (line 128) | def test_gini_i_corr(self):

FILE: tests/distance/test_distance_gini_ii.py
  class GiniIITestCases (line 27) | class GiniIITestCases(unittest.TestCase):
    method test_gini_ii_sim (line 36) | def test_gini_ii_sim(self):
    method test_gini_ii_dist (line 82) | def test_gini_ii_dist(self):
    method test_gini_ii_corr (line 128) | def test_gini_ii_corr(self):

FILE: tests/distance/test_distance_goodall.py
  class GoodallTestCases (line 27) | class GoodallTestCases(unittest.TestCase):
    method test_goodall_sim (line 36) | def test_goodall_sim(self):
    method test_goodall_dist (line 80) | def test_goodall_dist(self):

FILE: tests/distance/test_distance_goodman_kruskal_lambda.py
  class GoodmanKruskalLambdaTestCases (line 27) | class GoodmanKruskalLambdaTestCases(unittest.TestCase):
    method test_goodman_kruskal_lambda_sim (line 36) | def test_goodman_kruskal_lambda_sim(self):
    method test_goodman_kruskal_lambda_dist (line 72) | def test_goodman_kruskal_lambda_dist(self):

FILE: tests/distance/test_distance_goodman_kruskal_lambda_r.py
  class GoodmanKruskalLambdaRTestCases (line 27) | class GoodmanKruskalLambdaRTestCases(unittest.TestCase):
    method test_goodman_kruskal_lambda_r_sim (line 36) | def test_goodman_kruskal_lambda_r_sim(self):
    method test_goodman_kruskal_lambda_r_dist (line 72) | def test_goodman_kruskal_lambda_r_dist(self):
    method test_goodman_kruskal_lambda_r_corr (line 108) | def test_goodman_kruskal_lambda_r_corr(self):

FILE: tests/distance/test_distance_goodman_kruskal_tau_a.py
  class GoodmanKruskalTauATestCases (line 28) | class GoodmanKruskalTauATestCases(unittest.TestCase):
    method test_goodman_kruskal_tau_a_sim (line 37) | def test_goodman_kruskal_tau_a_sim(self):
    method test_goodman_kruskal_tau_a_dist (line 98) | def test_goodman_kruskal_tau_a_dist(self):

FILE: tests/distance/test_distance_goodman_kruskal_tau_b.py
  class GoodmanKruskalTauBTestCases (line 28) | class GoodmanKruskalTauBTestCases(unittest.TestCase):
    method test_goodman_kruskal_tau_b_sim (line 37) | def test_goodman_kruskal_tau_b_sim(self):
    method test_goodman_kruskal_tau_b_dist (line 98) | def test_goodman_kruskal_tau_b_dist(self):

FILE: tests/distance/test_distance_gotoh.py
  class GotohTestCases (line 30) | class GotohTestCases(unittest.TestCase):
    method test_gotoh_sim_score (line 36) | def test_gotoh_sim_score(self):
    method test_gotoh_sim_score_nialls (line 88) | def test_gotoh_sim_score_nialls(self):
    method test_gotoh_sim (line 106) | def test_gotoh_sim(self):

FILE: tests/distance/test_distance_gower_legendre.py
  class GowerLegendreTestCases (line 27) | class GowerLegendreTestCases(unittest.TestCase):
    method test_gower_legendre_sim (line 36) | def test_gower_legendre_sim(self):
    method test_gower_legendre_dist (line 72) | def test_gower_legendre_dist(self):

FILE: tests/distance/test_distance_guth.py
  class GuthTestCases (line 27) | class GuthTestCases(unittest.TestCase):
    method test_guth_sim_score (line 35) | def test_guth_sim_score(self):
    method test_guth_sim (line 58) | def test_guth_sim(self):

FILE: tests/distance/test_distance_guttman_lambda_a.py
  class GuttmanLambdaATestCases (line 27) | class GuttmanLambdaATestCases(unittest.TestCase):
    method test_guttman_lambda_a_sim (line 36) | def test_guttman_lambda_a_sim(self):
    method test_guttman_lambda_a_dist (line 72) | def test_guttman_lambda_a_dist(self):

FILE: tests/distance/test_distance_guttman_lambda_b.py
  class GuttmanLambdaBTestCases (line 27) | class GuttmanLambdaBTestCases(unittest.TestCase):
    method test_guttman_lambda_b_sim (line 36) | def test_guttman_lambda_b_sim(self):
    method test_guttman_lambda_b_dist (line 70) | def test_guttman_lambda_b_dist(self):

FILE: tests/distance/test_distance_gwet_ac.py
  class GwetACTestCases (line 27) | class GwetACTestCases(unittest.TestCase):
    method test_gwet_ac_sim (line 36) | def test_gwet_ac_sim(self):
    method test_gwet_ac_dist (line 72) | def test_gwet_ac_dist(self):
    method test_gwet_ac_corr (line 108) | def test_gwet_ac_corr(self):

FILE: tests/distance/test_distance_hamann.py
  class HamannTestCases (line 27) | class HamannTestCases(unittest.TestCase):
    method test_hamann_sim (line 36) | def test_hamann_sim(self):
    method test_hamann_dist (line 80) | def test_hamann_dist(self):
    method test_hamann_corr (line 124) | def test_hamann_corr(self):

FILE: tests/distance/test_distance_hamming.py
  class HammingTestCases (line 27) | class HammingTestCases(unittest.TestCase):
    method test_hamming_dist_abs (line 36) | def test_hamming_dist_abs(self):
    method test_hamming_dist (line 60) | def test_hamming_dist(self):
    method test_hamming_sim (line 84) | def test_hamming_sim(self):

FILE: tests/distance/test_distance_harris_lahey.py
  class HarrisLaheyTestCases (line 27) | class HarrisLaheyTestCases(unittest.TestCase):
    method test_harris_lahey_sim (line 36) | def test_harris_lahey_sim(self):
    method test_harris_lahey_dist (line 80) | def test_harris_lahey_dist(self):

FILE: tests/distance/test_distance_hassanat.py
  class HassanatTestCases (line 29) | class HassanatTestCases(unittest.TestCase):
    method test_hassanat_dist (line 37) | def test_hassanat_dist(self):
    method test_hassanat_sim (line 54) | def test_hassanat_sim(self):
    method test_hassanat_dist_abs (line 71) | def test_hassanat_dist_abs(self):

FILE: tests/distance/test_distance_hawkins_dotson.py
  class HawkinsDotsonTestCases (line 27) | class HawkinsDotsonTestCases(unittest.TestCase):
    method test_hawkins_dotson_sim (line 36) | def test_hawkins_dotson_sim(self):
    method test_hawkins_dotson_dist (line 80) | def test_hawkins_dotson_dist(self):

FILE: tests/distance/test_distance_hellinger.py
  class HellingerTestCases (line 27) | class HellingerTestCases(unittest.TestCase):
    method test_hellinger_dist (line 35) | def test_hellinger_dist(self):
    method test_hellinger_sim (line 54) | def test_hellinger_sim(self):
    method test_hellinger_dist_abs (line 73) | def test_hellinger_dist_abs(self):

FILE: tests/distance/test_distance_henderson_heron.py
  class HendersonHeronTestCases (line 27) | class HendersonHeronTestCases(unittest.TestCase):
    method test_henderson_heron_dist (line 35) | def test_henderson_heron_dist(self):

FILE: tests/distance/test_distance_higuera_mico.py
  class HigueraMicoTestCases (line 27) | class HigueraMicoTestCases(unittest.TestCase):
    method test_higuera_mico_dist (line 35) | def test_higuera_mico_dist(self):
    method test_higuera_mico_sim (line 52) | def test_higuera_mico_sim(self):
    method test_higuera_mico_dist_abs (line 69) | def test_higuera_mico_dist_abs(self):

FILE: tests/distance/test_distance_horn_morisita.py
  class HornMorisitaTestCases (line 27) | class HornMorisitaTestCases(unittest.TestCase):
    method test_horn_morisita_sim (line 35) | def test_horn_morisita_sim(self):

FILE: tests/distance/test_distance_hurlbert.py
  class HurlbertTestCases (line 28) | class HurlbertTestCases(unittest.TestCase):
    method test_hurlbert_sim (line 37) | def test_hurlbert_sim(self):
    method test_hurlbert_dist (line 73) | def test_hurlbert_dist(self):
    method test_hurlbert_corr (line 109) | def test_hurlbert_corr(self):

FILE: tests/distance/test_distance_ident.py
  class IdentTestCases (line 27) | class IdentTestCases(unittest.TestCase):
    method test_ident_sim (line 35) | def test_ident_sim(self):
    method test_ident_dist (line 45) | def test_ident_dist(self):

FILE: tests/distance/test_distance_inclusion.py
  class InclusionTestCases (line 27) | class InclusionTestCases(unittest.TestCase):
    method test_inclusion_dist (line 35) | def test_inclusion_dist(self):

FILE: tests/distance/test_distance_indel.py
  class IndelTestCases (line 27) | class IndelTestCases(unittest.TestCase):
    method test_indel_sim (line 35) | def test_indel_sim(self):
    method test_indel_dist (line 50) | def test_indel_dist(self):
    method test_indel_dist_abs (line 65) | def test_indel_dist_abs(self):

FILE: tests/distance/test_distance_isg.py
  class ISGTestCases (line 27) | class ISGTestCases(unittest.TestCase):
    method test_isg_sim (line 36) | def test_isg_sim(self):

FILE: tests/distance/test_distance_iterative_substring.py
  class IterativeSubStringTestCases (line 27) | class IterativeSubStringTestCases(unittest.TestCase):
    method test_iterative_substring_sim (line 36) | def test_iterative_substring_sim(self):
    method test_iterative_substring_dist (line 55) | def test_iterative_substring_dist(self):
    method test_iterative_substring_corr (line 74) | def test_iterative_substring_corr(self):

FILE: tests/distance/test_distance_jaccard.py
  class JaccardTestCases (line 31) | class JaccardTestCases(unittest.TestCase):
    method test_jaccard_sim (line 41) | def test_jaccard_sim(self):
    method test_jaccard_dist (line 90) | def test_jaccard_dist(self):
  class TanimotoTestCases (line 140) | class TanimotoTestCases(unittest.TestCase):
    method test_jaccard_tanimoto_coeff (line 150) | def test_jaccard_tanimoto_coeff(self):

FILE: tests/distance/test_distance_jaccard_nm.py
  class JaccardNMTestCases (line 27) | class JaccardNMTestCases(unittest.TestCase):
    method test_jaccard_nm_sim (line 36) | def test_jaccard_nm_sim(self):
    method test_jaccard_nm_dist (line 80) | def test_jaccard_nm_dist(self):
    method test_jaccard_nm_sim_score (line 124) | def test_jaccard_nm_sim_score(self):

FILE: tests/distance/test_distance_jaro_winkler.py
  class JaroWinklerTestCases (line 27) | class JaroWinklerTestCases(unittest.TestCase):
    method test_sim_jaro_winkler (line 36) | def test_sim_jaro_winkler(self):
    method test_dist_jaro_winkler (line 98) | def test_dist_jaro_winkler(self):

FILE: tests/distance/test_distance_jensen_shannon.py
  class JensenShannonTestCases (line 27) | class JensenShannonTestCases(unittest.TestCase):
    method test_jensen_shannon_dist (line 35) | def test_jensen_shannon_dist(self):
    method test_jensen_shannon_sim (line 54) | def test_jensen_shannon_sim(self):
    method test_jensen_shannon_dist_abs (line 73) | def test_jensen_shannon_dist_abs(self):

FILE: tests/distance/test_distance_johnson.py
  class JohnsonTestCases (line 27) | class JohnsonTestCases(unittest.TestCase):
    method test_johnson_sim (line 35) | def test_johnson_sim(self):
    method test_johnson_dist (line 54) | def test_johnson_dist(self):
    method test_johnson_sim_score (line 73) | def test_johnson_sim_score(self):

FILE: tests/distance/test_distance_kendall_tau.py
  class KendallTauTestCases (line 27) | class KendallTauTestCases(unittest.TestCase):
    method test_kendall_tau_sim (line 36) | def test_kendall_tau_sim(self):
    method test_kendall_tau_dist (line 80) | def test_kendall_tau_dist(self):
    method test_kendall_tau_corr (line 126) | def test_kendall_tau_corr(self):

FILE: tests/distance/test_distance_kent_foster_i.py
  class KentFosterITestCases (line 27) | class KentFosterITestCases(unittest.TestCase):
    method test_kent_foster_i_sim (line 36) | def test_kent_foster_i_sim(self):
    method test_kent_foster_i_dist (line 55) | def test_kent_foster_i_dist(self):
    method test_kent_foster_i_sim_score (line 74) | def test_kent_foster_i_sim_score(self):

FILE: tests/distance/test_distance_kent_foster_ii.py
  class KentFosterIITestCases (line 27) | class KentFosterIITestCases(unittest.TestCase):
    method test_kent_foster_ii_sim (line 36) | def test_kent_foster_ii_sim(self):
    method test_kent_foster_ii_dist (line 80) | def test_kent_foster_ii_dist(self):
    method test_kent_foster_ii_sim_score (line 126) | def test_kent_foster_ii_sim_score(self):

FILE: tests/distance/test_distance_koppen_i.py
  class KoppenITestCases (line 27) | class KoppenITestCases(unittest.TestCase):
    method test_koppen_i_sim (line 36) | def test_koppen_i_sim(self):
    method test_koppen_i_dist (line 72) | def test_koppen_i_dist(self):
    method test_koppen_i_corr (line 108) | def test_koppen_i_corr(self):

FILE: tests/distance/test_distance_koppen_ii.py
  class KoppenIITestCases (line 27) | class KoppenIITestCases(unittest.TestCase):
    method test_koppen_ii_sim (line 36) | def test_koppen_ii_sim(self):
    method test_koppen_ii_dist (line 53) | def test_koppen_ii_dist(self):
    method test_koppen_ii_sim_score (line 70) | def test_koppen_ii_sim_score(self):

FILE: tests/distance/test_distance_kuder_richardson.py
  class KuderRichardsonTestCases (line 27) | class KuderRichardsonTestCases(unittest.TestCase):
    method test_kuder_richardson_sim (line 36) | def test_kuder_richardson_sim(self):
    method test_kuder_richardson_dist (line 72) | def test_kuder_richardson_dist(self):
    method test_kuder_richardson_corr (line 108) | def test_kuder_richardson_corr(self):

FILE: tests/distance/test_distance_kuhns_i.py
  class KuhnsITestCases (line 27) | class KuhnsITestCases(unittest.TestCase):
    method test_kuhns_i_sim (line 36) | def test_kuhns_i_sim(self):
    method test_kuhns_i_dist (line 80) | def test_kuhns_i_dist(self):
    method test_kuhns_i_corr (line 124) | def test_kuhns_i_corr(self):

FILE: tests/distance/test_distance_kuhns_ii.py
  class KuhnsIITestCases (line 27) | class KuhnsIITestCases(unittest.TestCase):
    method test_kuhns_ii_sim (line 36) | def test_kuhns_ii_sim(self):
    method test_kuhns_ii_dist (line 80) | def test_kuhns_ii_dist(self):
    method test_kuhns_ii_corr (line 124) | def test_kuhns_ii_corr(self):

FILE: tests/distance/test_distance_kuhns_iii.py
  class KuhnsIIITestCases (line 27) | class KuhnsIIITestCases(unittest.TestCase):
    method test_kuhns_iii_sim (line 36) | def test_kuhns_iii_sim(self):
    method test_kuhns_iii_dist (line 72) | def test_kuhns_iii_dist(self):
    method test_kuhns_iii_corr (line 108) | def test_kuhns_iii_corr(self):

FILE: tests/distance/test_distance_kuhns_iv.py
  class KuhnsIVTestCases (line 27) | class KuhnsIVTestCases(unittest.TestCase):
    method test_kuhns_iv_sim (line 36) | def test_kuhns_iv_sim(self):
    method test_kuhns_iv_dist (line 80) | def test_kuhns_iv_dist(self):
    method test_kuhns_iv_corr (line 124) | def test_kuhns_iv_corr(self):

FILE: tests/distance/test_distance_kuhns_ix.py
  class KuhnsIXTestCases (line 27) | class KuhnsIXTestCases(unittest.TestCase):
    method test_kuhns_ix_sim (line 36) | def test_kuhns_ix_sim(self):
    method test_kuhns_ix_dist (line 72) | def test_kuhns_ix_dist(self):
    method test_kuhns_ix_corr (line 108) | def test_kuhns_ix_corr(self):

FILE: tests/distance/test_distance_kuhns_v.py
  class KuhnsVTestCases (line 27) | class KuhnsVTestCases(unittest.TestCase):
    method test_kuhns_v_sim (line 36) | def test_kuhns_v_sim(self):
    method test_kuhns_v_dist (line 72) | def test_kuhns_v_dist(self):
    method test_kuhns_v_corr (line 110) | def test_kuhns_v_corr(self):

FILE: tests/distance/test_distance_kuhns_vi.py
  class KuhnsVITestCases (line 27) | class KuhnsVITestCases(unittest.TestCase):
    method test_kuhns_vi_sim (line 36) | def test_kuhns_vi_sim(self):
    method test_kuhns_vi_dist (line 72) | def test_kuhns_vi_dist(self):
    method test_kuhns_vi_corr (line 110) | def test_kuhns_vi_corr(self):

FILE: tests/distance/test_distance_kuhns_vii.py
  class KuhnsVIITestCases (line 27) | class KuhnsVIITestCases(unittest.TestCase):
    method test_kuhns_vii_sim (line 36) | def test_kuhns_vii_sim(self):
    method test_kuhns_vii_dist (line 80) | def test_kuhns_vii_dist(self):
    method test_kuhns_vii_corr (line 124) | def test_kuhns_vii_corr(self):

FILE: tests/distance/test_distance_kuhns_viii.py
  class KuhnsVIIITestCases (line 27) | class KuhnsVIIITestCases(unittest.TestCase):
    method test_kuhns_viii_sim (line 36) | def test_kuhns_viii_sim(self):
    method test_kuhns_viii_dist (line 80) | def test_kuhns_viii_dist(self):
    method test_kuhns_viii_corr (line 124) | def test_kuhns_viii_corr(self):

FILE: tests/distance/test_distance_kuhns_x.py
  class KuhnsXTestCases (line 27) | class KuhnsXTestCases(unittest.TestCase):
    method test_kuhns_x_sim (line 36) | def test_kuhns_x_sim(self):
    method test_kuhns_x_dist (line 72) | def test_kuhns_x_dist(self):
    method test_kuhns_x_corr (line 108) | def test_kuhns_x_corr(self):

FILE: tests/distance/test_distance_kuhns_xi.py
  class KuhnsXITestCases (line 27) | class KuhnsXITestCases(unittest.TestCase):
    method test_kuhns_xi_sim (line 36) | def test_kuhns_xi_sim(self):
    method test_kuhns_xi_dist (line 72) | def test_kuhns_xi_dist(self):
    method test_kuhns_xi_corr (line 108) | def test_kuhns_xi_corr(self):

FILE: tests/distance/test_distance_kuhns_xii.py
  class KuhnsXIITestCases (line 27) | class KuhnsXIITestCases(unittest.TestCase):
    method test_kuhns_xii_sim (line 36) | def test_kuhns_xii_sim(self):
    method test_kuhns_xii_dist (line 72) | def test_kuhns_xii_dist(self):
    method test_kuhns_xii_sim_score (line 108) | def test_kuhns_xii_sim_score(self):

FILE: tests/distance/test_distance_kulczynski_i.py
  class KulczynskiITestCases (line 27) | class KulczynskiITestCases(unittest.TestCase):
    method test_kulczynski_i_sim_score (line 35) | def test_kulczynski_i_sim_score(self):
    method test_kulczynski_i_dist (line 54) | def test_kulczynski_i_dist(self):
    method test_kulczynski_i_sim (line 58) | def test_kulczynski_i_sim(self):

FILE: tests/distance/test_distance_kulczynski_ii.py
  class KulczynskiIITestCases (line 27) | class KulczynskiIITestCases(unittest.TestCase):
    method test_kulczynski_ii_sim (line 35) | def test_kulczynski_ii_sim(self):
    method test_kulczynski_ii_dist (line 54) | def test_kulczynski_ii_dist(self):

FILE: tests/distance/test_distance_lcprefix.py
  class LCPrefixTestCases (line 27) | class LCPrefixTestCases(unittest.TestCase):
    method test_lcprefix_sim (line 35) | def test_lcprefix_sim(self):
    method test_lcprefix_dist (line 52) | def test_lcprefix_dist(self):
    method test_lcprefix_dist_abs (line 69) | def test_lcprefix_dist_abs(self):

FILE: tests/distance/test_distance_lcsseq.py
  class LCSseqTestCases (line 27) | class LCSseqTestCases(unittest.TestCase):
    method test_lcsseq (line 35) | def test_lcsseq(self):
    method test_lcsseq_sim (line 72) | def test_lcsseq_sim(self):
    method test_lcsseq_dist (line 109) | def test_lcsseq_dist(self):

FILE: tests/distance/test_distance_lcsstr.py
  class LCSstrTestCases (line 27) | class LCSstrTestCases(unittest.TestCase):
    method test_lcsstr (line 35) | def test_lcsstr(self):
    method test_lcsstr_sim (line 88) | def test_lcsstr_sim(self):
    method test_lcsstr_dist (line 125) | def test_lcsstr_dist(self):

FILE: tests/distance/test_distance_lcsuffix.py
  class LCSuffixTestCases (line 27) | class LCSuffixTestCases(unittest.TestCase):
    method test_lcsuffix_sim (line 35) | def test_lcsuffix_sim(self):
    method test_lcsuffix_dist (line 52) | def test_lcsuffix_dist(self):
    method test_lcsuffix_dist_abs (line 69) | def test_lcsuffix_dist_abs(self):

FILE: tests/distance/test_distance_length.py
  class LengthTestCases (line 27) | class LengthTestCases(unittest.TestCase):
    method test_length_sim (line 35) | def test_length_sim(self):
    method test_length_dist (line 49) | def test_length_dist(self):

FILE: tests/distance/test_distance_levenshtein.py
  class LevenshteinTestCases (line 27) | class LevenshteinTestCases(unittest.TestCase):
    method test_levenshtein_dist_abs (line 36) | def test_levenshtein_dist_abs(self):
    method test_levenshtein_dist (line 170) | def test_levenshtein_dist(self):
    method test_levenshtein_sim (line 195) | def test_levenshtein_sim(self):
    method test_levenshtein_alignment (line 209) | def test_levenshtein_alignment(self):

FILE: tests/distance/test_distance_lig3.py
  class LIG3TestCases (line 27) | class LIG3TestCases(unittest.TestCase):
    method test_lig3_sim (line 35) | def test_lig3_sim(self):

FILE: tests/distance/test_distance_lorentzian.py
  class LorentzianTestCases (line 27) | class LorentzianTestCases(unittest.TestCase):
    method test_lorentzian_dist (line 35) | def test_lorentzian_dist(self):
    method test_lorentzian_sim (line 52) | def test_lorentzian_sim(self):
    method test_lorentzian_dist_abs (line 69) | def test_lorentzian_dist_abs(self):

FILE: tests/distance/test_distance_maarel.py
  class MaarelTestCases (line 27) | class MaarelTestCases(unittest.TestCase):
    method test_maarel_sim (line 36) | def test_maarel_sim(self):
    method test_maarel_dist (line 55) | def test_maarel_dist(self):
    method test_maarel_corr (line 74) | def test_maarel_corr(self):

FILE: tests/distance/test_distance_manhattan.py
  class ManhattanTestCases (line 30) | class ManhattanTestCases(unittest.TestCase):
    method test_manhattan_dist_abs (line 40) | def test_manhattan_dist_abs(self):
    method test_manhattan_sim (line 89) | def test_manhattan_sim(self):
    method test_manhattan_dist (line 138) | def test_manhattan_dist(self):

FILE: tests/distance/test_distance_marking.py
  class MarkingTestCases (line 27) | class MarkingTestCases(unittest.TestCase):
    method test_marking_dist (line 35) | def test_marking_dist(self):
    method test_marking_sim (line 52) | def test_marking_sim(self):
    method test_marking_dist_abs (line 69) | def test_marking_dist_abs(self):

FILE: tests/distance/test_distance_marking_metric.py
  class MarkingMetricTestCases (line 29) | class MarkingMetricTestCases(unittest.TestCase):
    method test_marking_metric_dist (line 37) | def test_marking_metric_dist(self):
    method test_marking_metric_sim (line 56) | def test_marking_metric_sim(self):
    method test_marking_metric_dist_abs (line 75) | def test_marking_metric_dist_abs(self):

FILE: tests/distance/test_distance_masi.py
  class MASITestCases (line 27) | class MASITestCases(unittest.TestCase):
    method test_masi_sim (line 35) | def test_masi_sim(self):
    method test_masi_dist (line 54) | def test_masi_dist(self):

FILE: tests/distance/test_distance_matusita.py
  class MatusitaTestCases (line 27) | class MatusitaTestCases(unittest.TestCase):
    method test_matusita_dist (line 35) | def test_matusita_dist(self):
    method test_matusita_sim (line 54) | def test_matusita_sim(self):
    method test_matusita_dist_abs (line 73) | def test_matusita_dist_abs(self):

FILE: tests/distance/test_distance_maxwell_pilliner.py
  class MaxwellPillinerTestCases (line 27) | class MaxwellPillinerTestCases(unittest.TestCase):
    method test_maxwell_pilliner_sim (line 36) | def test_maxwell_pilliner_sim(self):
    method test_maxwell_pilliner_dist (line 72) | def test_maxwell_pilliner_dist(self):
    method test_maxwell_pilliner_corr (line 108) | def test_maxwell_pilliner_corr(self):

FILE: tests/distance/test_distance_mcconnaughey.py
  class McConnaugheyTestCases (line 27) | class McConnaugheyTestCases(unittest.TestCase):
    method test_mcconnaughey_sim (line 36) | def test_mcconnaughey_sim(self):
    method test_mcconnaughey_dist (line 55) | def test_mcconnaughey_dist(self):
    method test_mcconnaughey_corr (line 74) | def test_mcconnaughey_corr(self):

FILE: tests/distance/test_distance_mcewen_michael.py
  class McEwenMichaelTestCases (line 27) | class McEwenMichaelTestCases(unittest.TestCase):
    method test_mcewen_michael_sim (line 36) | def test_mcewen_michael_sim(self):
    method test_mcewen_michael_dist (line 72) | def test_mcewen_michael_dist(self):
    method test_mcewen_michael_corr (line 108) | def test_mcewen_michael_corr(self):

FILE: tests/distance/test_distance_meta_levenshtein.py
  class MetaLevenshteinTestCases (line 31) | class MetaLevenshteinTestCases(unittest.TestCase):
    method test_meta_levenshtein_dist (line 40) | def test_meta_levenshtein_dist(self):
    method test_meta_levenshtein_sim (line 59) | def test_meta_levenshtein_sim(self):
    method test_meta_levenshtein_dist_abs (line 94) | def test_meta_levenshtein_dist_abs(self):
    method test_meta_levenshtein_corpus (line 121) | def test_meta_levenshtein_corpus(self):

FILE: tests/distance/test_distance_michelet.py
  class MicheletTestCases (line 27) | class MicheletTestCases(unittest.TestCase):
    method test_michelet_sim (line 35) | def test_michelet_sim(self):
    method test_michelet_dist (line 54) | def test_michelet_dist(self):

FILE: tests/distance/test_distance_millar.py
  class MillarTestCases (line 27) | class MillarTestCases(unittest.TestCase):
    method test_millar_dist_abs (line 35) | def test_millar_dist_abs(self):
    method test_millar_dist (line 62) | def test_millar_dist(self):
    method test_millar_sim (line 66) | def test_millar_sim(self):

FILE: tests/distance/test_distance_minhash.py
  class MinHashTestCases (line 27) | class MinHashTestCases(unittest.TestCase):
    method test_minhash_sim (line 35) | def test_minhash_sim(self):
    method test_minhash_dist (line 52) | def test_minhash_dist(self):

FILE: tests/distance/test_distance_minkowski.py
  class MinkowskiTestCases (line 30) | class MinkowskiTestCases(unittest.TestCase):
    method test_minkowski_dist_abs (line 41) | def test_minkowski_dist_abs(self):
    method test_minkowski_sim (line 133) | def test_minkowski_sim(self):
    method test_minkowski_dist (line 182) | def test_minkowski_dist(self):

FILE: tests/distance/test_distance_mlipns.py
  class MLIPNSTestCases (line 27) | class MLIPNSTestCases(unittest.TestCase):
    method test_mlipns_sim (line 35) | def test_mlipns_sim(self):
    method test_mlipns_dist (line 49) | def test_mlipns_dist(self):

FILE: tests/distance/test_distance_monge_elkan.py
  class MongeElkanTestCases (line 27) | class MongeElkanTestCases(unittest.TestCase):
    method test_monge_elkan_sim (line 38) | def test_monge_elkan_sim(self):
    method test_monge_elkan_dist (line 57) | def test_monge_elkan_dist(self):

FILE: tests/distance/test_distance_morisita.py
  class MorisitaTestCases (line 27) | class MorisitaTestCases(unittest.TestCase):
    method test_morisita_sim_score (line 35) | def test_morisita_sim_score(self):
    method test_morisita_dist (line 67) | def test_morisita_dist(self):
    method test_morisita_sim (line 71) | def test_morisita_sim(self):

FILE: tests/distance/test_distance_mountford.py
  class MountfordTestCases (line 27) | class MountfordTestCases(unittest.TestCase):
    method test_mountford_sim (line 35) | def test_mountford_sim(self):
    method test_mountford_dist (line 54) | def test_mountford_dist(self):

FILE: tests/distance/test_distance_mra.py
  class MraTestCases (line 27) | class MraTestCases(unittest.TestCase):
    method test_mra_dist_abs (line 35) | def test_mra_dist_abs(self):
    method test_mra_sim (line 53) | def test_mra_sim(self):
    method test_mra_dist (line 71) | def test_mra_dist(self):

FILE: tests/distance/test_distance_ms_contingency.py
  class MSContingencyTestCases (line 27) | class MSContingencyTestCases(unittest.TestCase):
    method test_ms_contingency_sim (line 37) | def test_ms_contingency_sim(self):
    method test_ms_contingency_dist (line 81) | def test_ms_contingency_dist(self):
    method test_ms_contingency_corr (line 125) | def test_ms_contingency_corr(self):

FILE: tests/distance/test_distance_mutual_information.py
  class MutualInformationTestCases (line 27) | class MutualInformationTestCases(unittest.TestCase):
    method test_mutual_information_sim (line 36) | def test_mutual_information_sim(self):
    method test_mutual_information_dist (line 61) | def test_mutual_information_dist(self):
    method test_mutual_information_sim_score (line 82) | def test_mutual_information_sim_score(self):

FILE: tests/distance/test_distance_ncd_arith.py
  class NCDarithTestCases (line 30) | class NCDarithTestCases(unittest.TestCase):
    method test_ncd_arith_dist (line 40) | def test_ncd_arith_dist(self):
    method test_ncd_arith_sim (line 65) | def test_ncd_arith_sim(self):

FILE: tests/distance/test_distance_ncd_bwtrle.py
  class NCDbwtrleTestCases (line 27) | class NCDbwtrleTestCases(unittest.TestCase):
    method test_ncd_bwtrle_dist (line 35) | def test_ncd_bwtrle_dist(self):
    method test_ncd_bwtrle_sim (line 49) | def test_ncd_bwtrle_sim(self):

FILE: tests/distance/test_distance_ncd_bz2.py
  class CompressionTestCases (line 27) | class CompressionTestCases(unittest.TestCase):
    method test_ncd_bz2_dist (line 35) | def test_ncd_bz2_dist(self):
    method test_ncd_bz2_sim (line 41) | def test_ncd_bz2_sim(self):

FILE: tests/distance/test_distance_ncd_lzma.py
  class CompressionTestCases (line 27) | class CompressionTestCases(unittest.TestCase):
    method test_ncd_lzma_dist (line 35) | def test_ncd_lzma_dist(self):
    method test_ncd_lzma_sim (line 41) | def test_ncd_lzma_sim(self):

FILE: tests/distance/test_distance_ncd_lzss.py
  class NCDlzssTestCases (line 27) | class NCDlzssTestCases(unittest.TestCase):
    method test_ncd_lzss_dist (line 35) | def test_ncd_lzss_dist(self):
    method test_ncd_lzss_sim (line 57) | def test_ncd_lzss_sim(self):

FILE: tests/distance/test_distance_ncd_paq9a.py
  class NCDpaq9aTestCases (line 27) | class NCDpaq9aTestCases(unittest.TestCase):
    method test_ncd_paq9a_dist (line 35) | def test_ncd_paq9a_dist(self):
    method test_ncd_paq9a_sim (line 59) | def test_ncd_paq9a_sim(self):

FILE: tests/distance/test_distance_ncd_rle.py
  class CompressionTestCases (line 27) | class CompressionTestCases(unittest.TestCase):
    method test_ncd_rle_dist (line 35) | def test_ncd_rle_dist(self):
    method test_ncd_rle_sim (line 47) | def test_ncd_rle_sim(self
Copy disabled (too large) Download .json
Condensed preview — 895 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (26,679K chars).
[
  {
    "path": ".circleci/config.yml",
    "chars": 1717,
    "preview": "# Python CircleCI 2.0 configuration file\n#\n# Check https://circleci.com/docs/2.0/language-python/ for more details\n#\nver"
  },
  {
    "path": ".codeclimate.yml",
    "chars": 359,
    "preview": "---\nversion: \"2\"\nplugins:\n  sonar-python:\n    enabled: true\n  fixme:\n    enabled: true\n  pylint:\n    enabled: true\n  rad"
  },
  {
    "path": ".coveragerc",
    "chars": 151,
    "preview": "[run]\nsource = abydos\nomit =\n    */tests/*\nparallel = True\nbranch = True\n\n[report]\nexclude_lines =\n    pragma: no cover\n"
  },
  {
    "path": ".github/CODEOWNERS",
    "chars": 421,
    "preview": "# Lines starting with '#' are comments.\n# Each line is a file pattern followed by one or more owners.\n\n# These owners wi"
  },
  {
    "path": ".gitignore",
    "chars": 164,
    "preview": "build/\ncover/\ndist/\nflake8/\nmypy/\nabydos.egg-info/\nvenv/\n.settings/\n*.bak\n*.pyc\n*.log\n.coverage\n.idea/\n.mypy_cache/\n.pyr"
  },
  {
    "path": ".gitmodules",
    "chars": 115,
    "preview": "[submodule \"tests/regtests\"]\n    path = tests/regression\n    url = https://github.com/chrislit/abydos-regtests.git\n"
  },
  {
    "path": ".project",
    "chars": 360,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<projectDescription>\n\t<name>abydos</name>\n\t<comment></comment>\n\t<projects>\n\t</pro"
  },
  {
    "path": ".pypirc",
    "chars": 171,
    "preview": "[distutils]\nindex-servers=\n    pypi\n    testpypi\n\n[testpypi]\nrepository: https://test.pypi.org/legacy/\nusername: chrisli"
  },
  {
    "path": ".pyup.yml",
    "chars": 157,
    "preview": "# autogenerated pyup.io config file \n# see https://pyup.io/docs/configuration/ for all available options\nupdate: \"insecu"
  },
  {
    "path": ".travis.yml",
    "chars": 898,
    "preview": "language: python\n\njobs:\n  include:\n    - os: linux\n      arch: arm64\n      python: 3.7\n    - os: linux\n      arch: ppc64"
  },
  {
    "path": "AUTHORS.rst",
    "chars": 233,
    "preview": "\nCreator & Maintainer\n````````````````````\n\n- Christopher C. Little (`@chrislit <https://github.com/chrislit>`_) <chrisc"
  },
  {
    "path": "CODE_OF_CONDUCT.rst",
    "chars": 3362,
    "preview": "Contributor Covenant Code of Conduct\n====================================\n\nOur Pledge\n----------\n\nIn the interest of fos"
  },
  {
    "path": "CODING_STANDARDS.rst",
    "chars": 2095,
    "preview": "CODING STANDARDS\n----------------\n\n- Nosetest will be used for testing.\n- Flake8 will be used for best practice conforma"
  },
  {
    "path": "FAQ.rst",
    "chars": 4643,
    "preview": "FAQ\n===\n\n\nWhy is the library licensed under GPL3+? Can you change the license?\n-----------------------------------------"
  },
  {
    "path": "HISTORY.rst",
    "chars": 9775,
    "preview": "Release History\n---------------\n\n0.6.0 (2020-00-00) *frija*\n++++++++++++++++++++++++++\n\ndoi:10.5281/zenodo.\n\nChanges:\n\n-"
  },
  {
    "path": "LICENSE",
    "chars": 35121,
    "preview": "GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation,"
  },
  {
    "path": "MANIFEST.in",
    "chars": 33,
    "preview": "include *.rst LICENSE abydos.png\n"
  },
  {
    "path": "Pipfile",
    "chars": 196,
    "preview": "[[source]]\nname = \"pypi\"\nurl = \"https://pypi.org/simple\"\nverify_ssl = true\n\n[dev-packages]\ntox = \"*\"\nnose = \"*\"\ncoverage"
  },
  {
    "path": "README.rst",
    "chars": 14391,
    "preview": "Abydos\n======\n\n+------------------+------------------------------------------------------+\n| CI & Test Status | |travis|"
  },
  {
    "path": "VERSION.rst",
    "chars": 6,
    "preview": "0.6.0\n"
  },
  {
    "path": "abydos/__init__.py",
    "chars": 1735,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/compression/__init__.py",
    "chars": 1555,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/compression/_arithmetic.py",
    "chars": 7819,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/compression/_bwt.py",
    "chars": 4140,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/compression/_rle.py",
    "chars": 3527,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/corpus/__init__.py",
    "chars": 1853,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/corpus/_corpus.py",
    "chars": 10985,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/corpus/_ngram_corpus.py",
    "chars": 7397,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/corpus/_unigram_corpus.py",
    "chars": 7525,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/__init__.py",
    "chars": 32664,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_aline.py",
    "chars": 52441,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_ample.py",
    "chars": 5059,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_anderberg.py",
    "chars": 6463,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_andres_marzo_delta.py",
    "chars": 5478,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_average_linkage.py",
    "chars": 3658,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_azzoo.py",
    "chars": 5378,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_bag.py",
    "chars": 4957,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baroni_urbani_buser_i.py",
    "chars": 4745,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baroni_urbani_buser_ii.py",
    "chars": 5660,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_batagelj_bren.py",
    "chars": 5611,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baulieu_i.py",
    "chars": 4271,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baulieu_ii.py",
    "chars": 4475,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baulieu_iii.py",
    "chars": 4963,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baulieu_iv.py",
    "chars": 6015,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baulieu_ix.py",
    "chars": 4401,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baulieu_v.py",
    "chars": 4410,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baulieu_vi.py",
    "chars": 4480,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baulieu_vii.py",
    "chars": 4536,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baulieu_viii.py",
    "chars": 4420,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baulieu_x.py",
    "chars": 4557,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baulieu_xi.py",
    "chars": 4519,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baulieu_xii.py",
    "chars": 4700,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baulieu_xiii.py",
    "chars": 4530,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baulieu_xiv.py",
    "chars": 4423,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baulieu_xv.py",
    "chars": 4569,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_baystat.py",
    "chars": 5931,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_benini_i.py",
    "chars": 5263,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_benini_ii.py",
    "chars": 5377,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_bennet.py",
    "chars": 5183,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_bhattacharyya.py",
    "chars": 4246,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_bisim.py",
    "chars": 3270,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_bleu.py",
    "chars": 4898,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_block_levenshtein.py",
    "chars": 4101,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_brainerd_robinson.py",
    "chars": 4214,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_braun_blanquet.py",
    "chars": 4202,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_canberra.py",
    "chars": 3644,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_cao.py",
    "chars": 7435,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_chao_dice.py",
    "chars": 3135,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_chao_jaccard.py",
    "chars": 6265,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_chebyshev.py",
    "chars": 4909,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_chord.py",
    "chars": 4758,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_clark.py",
    "chars": 2713,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_clement.py",
    "chars": 4649,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_cohen_kappa.py",
    "chars": 4754,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_cole.py",
    "chars": 6553,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_complete_linkage.py",
    "chars": 4558,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_consonni_todeschini_i.py",
    "chars": 4460,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_consonni_todeschini_ii.py",
    "chars": 4486,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_consonni_todeschini_iii.py",
    "chars": 4393,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_consonni_todeschini_iv.py",
    "chars": 4411,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_consonni_todeschini_v.py",
    "chars": 5538,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_cormode_lz.py",
    "chars": 3215,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_cosine.py",
    "chars": 4101,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_covington.py",
    "chars": 9384,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_damerau_levenshtein.py",
    "chars": 7982,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_dennis.py",
    "chars": 6313,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_dice.py",
    "chars": 4356,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_dice_asymmetric_i.py",
    "chars": 3982,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_dice_asymmetric_ii.py",
    "chars": 3949,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_digby.py",
    "chars": 5488,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_discounted_levenshtein.py",
    "chars": 12069,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_dispersion.py",
    "chars": 5263,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_distance.py",
    "chars": 2823,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_doolittle.py",
    "chars": 4487,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_dunning.py",
    "chars": 6652,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_editex.py",
    "chars": 8921,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_euclidean.py",
    "chars": 4919,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_eudex.py",
    "chars": 8383,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_eyraud.py",
    "chars": 5414,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_fager_mcgowan.py",
    "chars": 4997,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_faith.py",
    "chars": 4182,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_fellegi_sunter.py",
    "chars": 5767,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_fidelity.py",
    "chars": 3258,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_fleiss.py",
    "chars": 5578,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_fleiss_levin_paik.py",
    "chars": 4461,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_flexmetric.py",
    "chars": 7934,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_forbes_i.py",
    "chars": 5190,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_forbes_ii.py",
    "chars": 5293,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_fossum.py",
    "chars": 5269,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_fuzzywuzzy_partial_string.py",
    "chars": 2552,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_fuzzywuzzy_token_set.py",
    "chars": 3720,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_fuzzywuzzy_token_sort.py",
    "chars": 3378,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_generalized_fleiss.py",
    "chars": 10404,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_gilbert.py",
    "chars": 5534,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_gilbert_wells.py",
    "chars": 6301,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_gini_i.py",
    "chars": 5981,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_gini_ii.py",
    "chars": 6028,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_goodall.py",
    "chars": 4459,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_goodman_kruskal_lambda.py",
    "chars": 5044,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_goodman_kruskal_lambda_r.py",
    "chars": 5808,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_goodman_kruskal_tau_a.py",
    "chars": 5499,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_goodman_kruskal_tau_b.py",
    "chars": 5465,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_gotoh.py",
    "chars": 5467,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_gower_legendre.py",
    "chars": 4578,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_guth.py",
    "chars": 7615,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_guttman_lambda_a.py",
    "chars": 4718,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_guttman_lambda_b.py",
    "chars": 4718,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_gwet_ac.py",
    "chars": 5595,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_hamann.py",
    "chars": 5269,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_hamming.py",
    "chars": 4766,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_harris_lahey.py",
    "chars": 5050,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_hassanat.py",
    "chars": 4391,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_hawkins_dotson.py",
    "chars": 4664,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_hellinger.py",
    "chars": 4268,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_henderson_heron.py",
    "chars": 2964,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_higuera_mico.py",
    "chars": 5352,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_horn_morisita.py",
    "chars": 3514,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_hurlbert.py",
    "chars": 6891,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_ident.py",
    "chars": 1734,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_inclusion.py",
    "chars": 3111,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_indel.py",
    "chars": 2398,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_isg.py",
    "chars": 4939,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_iterative_substring.py",
    "chars": 5962,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_jaccard.py",
    "chars": 5117,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_jaccard_nm.py",
    "chars": 5150,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_jaro_winkler.py",
    "chars": 8406,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_jensen_shannon.py",
    "chars": 4514,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_johnson.py",
    "chars": 4633,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kendall_tau.py",
    "chars": 5695,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kent_foster_i.py",
    "chars": 5676,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kent_foster_ii.py",
    "chars": 5888,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_koppen_i.py",
    "chars": 6421,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_koppen_ii.py",
    "chars": 5031,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kuder_richardson.py",
    "chars": 5899,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kuhns_i.py",
    "chars": 5447,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kuhns_ii.py",
    "chars": 5511,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kuhns_iii.py",
    "chars": 6008,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kuhns_iv.py",
    "chars": 5513,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kuhns_ix.py",
    "chars": 5952,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kuhns_v.py",
    "chars": 6139,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kuhns_vi.py",
    "chars": 6139,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kuhns_vii.py",
    "chars": 5541,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kuhns_viii.py",
    "chars": 5814,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kuhns_x.py",
    "chars": 5800,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kuhns_xi.py",
    "chars": 5973,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kuhns_xii.py",
    "chars": 5850,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kulczynski_i.py",
    "chars": 4896,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_kulczynski_ii.py",
    "chars": 3966,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_lcprefix.py",
    "chars": 4129,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_lcsseq.py",
    "chars": 5137,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_lcsstr.py",
    "chars": 4745,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_lcsuffix.py",
    "chars": 4180,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_length.py",
    "chars": 2010,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_levenshtein.py",
    "chars": 12646,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_lig3.py",
    "chars": 2424,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_lorentzian.py",
    "chars": 4266,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_maarel.py",
    "chars": 5050,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_manhattan.py",
    "chars": 4892,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_marking.py",
    "chars": 3430,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_marking_metric.py",
    "chars": 3646,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_masi.py",
    "chars": 4127,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_matusita.py",
    "chars": 4237,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_maxwell_pilliner.py",
    "chars": 5419,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_mcconnaughey.py",
    "chars": 4939,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_mcewen_michael.py",
    "chars": 5403,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_meta_levenshtein.py",
    "chars": 7892,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_michelet.py",
    "chars": 3942,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_millar.py",
    "chars": 4098,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_minhash.py",
    "chars": 4394,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_minkowski.py",
    "chars": 5963,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_mlipns.py",
    "chars": 3470,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_monge_elkan.py",
    "chars": 4185,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_morisita.py",
    "chars": 4385,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_mountford.py",
    "chars": 3854,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_mra.py",
    "chars": 4033,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_ms_contingency.py",
    "chars": 6144,
    "preview": "# Copyright 2018-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_mutual_information.py",
    "chars": 5581,
    "preview": "# Copyright 2019-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_ncd_arith.py",
    "chars": 3176,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_ncd_bwtrle.py",
    "chars": 2403,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  },
  {
    "path": "abydos/distance/_ncd_bz2.py",
    "chars": 2862,
    "preview": "# Copyright 2014-2020 by Christopher C. Little.\n# This file is part of Abydos.\n#\n# Abydos is free software: you can redi"
  }
]

// ... and 695 more files (download for full content)

About this extraction

This page contains the full source code of the chrislit/abydos GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 895 files (86.4 MB), approximately 6.4M tokens, and a symbol index with 3211 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!