1{
2 lib,
3 buildPythonPackage,
4 callPackage,
5 fetchFromGitHub,
6
7 # build-system
8 setuptools,
9
10 # dependencies
11 babel,
12 dateparser,
13 gruut-ipa,
14 jsonlines,
15 networkx,
16 num2words,
17 numpy,
18 python-crfsuite,
19
20 # optional dependencies
21 pydub,
22 rapidfuzz,
23
24 # checks
25 glibcLocales,
26 pytestCheckHook,
27}:
28
29let
30 langPkgs = [
31 "ar"
32 "ca"
33 "cs"
34 "de"
35 "en"
36 "es"
37 "fa"
38 "fr"
39 "it"
40 "lb"
41 "nl"
42 "pt"
43 "ru"
44 "sv"
45 "sw"
46 ];
47in
48buildPythonPackage rec {
49 pname = "gruut";
50 version = "2.4.0";
51 pyproject = true;
52
53 src = fetchFromGitHub {
54 owner = "rhasspy";
55 repo = "gruut";
56 rev = "refs/tags/v${version}";
57 hash = "sha256-iwde6elsAbICZ+Rc7CPgcZTOux1hweVZc/gf4K+hP9M=";
58 };
59
60 pythonRelaxDeps = true;
61
62 build-system = [ setuptools ];
63
64 dependencies = [
65 babel
66 dateparser
67 gruut-ipa
68 jsonlines
69 networkx
70 num2words
71 numpy
72 python-crfsuite
73 ] ++ optional-dependencies.en;
74
75 optional-dependencies =
76 {
77 train = [
78 pydub
79 rapidfuzz
80 ];
81 }
82 // lib.genAttrs langPkgs (lang: [
83 (callPackage ./language-pack.nix {
84 inherit
85 lang
86 version
87 src
88 build-system
89 ;
90 })
91 ]);
92
93 nativeCheckInputs = [
94 glibcLocales
95 pytestCheckHook
96 ] ++ lib.flatten (lib.attrValues optional-dependencies);
97
98 disabledTests = [
99 # https://github.com/rhasspy/gruut/issues/25
100 "test_lexicon_external"
101
102 # requires mishkal library
103 "test_fa"
104 "test_ar"
105 ];
106
107 preCheck = ''
108 export LC_ALL=en_US.utf-8
109 '';
110
111 pythonImportsCheck = [ "gruut" ];
112
113 meta = with lib; {
114 description = "Tokenizer, text cleaner, and phonemizer for many human languages";
115 mainProgram = "gruut";
116 homepage = "https://github.com/rhasspy/gruut";
117 license = licenses.mit;
118 maintainers = teams.tts.members;
119 };
120}