biome: 1.9.2 -> 1.9.3 (#349335)
[NixPkgs.git] / pkgs / development / python-modules / manim / default.nix
blobd96b03dfd35afb50d42f937bfba6ecf459c77dca
2   lib,
3   buildPythonPackage,
4   fetchFromGitHub,
5   poetry-core,
6   pytest-xdist,
7   pytestCheckHook,
8   pythonOlder,
10   cairo,
11   ffmpeg,
12   texliveInfraOnly,
14   click,
15   click-default-group,
16   cloup,
17   colour,
18   grpcio,
19   grpcio-tools,
20   importlib-metadata,
21   isosurfaces,
22   jupyterlab,
23   manimpango,
24   mapbox-earcut,
25   moderngl,
26   moderngl-window,
27   networkx,
28   numpy,
29   pillow,
30   pycairo,
31   pydub,
32   pygments,
33   rich,
34   scipy,
35   screeninfo,
36   skia-pathops,
37   srt,
38   svgelements,
39   tqdm,
40   watchdog,
43 let
44   # According to ManimCommunity documentation manim uses tex-packages packaged
45   # in a custom distribution called "manim-latex",
46   #
47   #   https://community.chocolatey.org/packages/manim-latex#files
48   #
49   # which includes another cutom distribution called tinytex, for which the
50   # package list can be found at
51   #
52   #   https://github.com/yihui/tinytex/blob/master/tools/pkgs-custom.txt
53   #
54   # these two combined add up to:
55   manim-tinytex = texliveInfraOnly.withPackages (
56     ps: with ps; [
58       # tinytex
59       amsfonts
60       amsmath
61       atbegshi
62       atveryend
63       auxhook
64       babel
65       bibtex
66       bigintcalc
67       bitset
68       booktabs
69       cm
70       dehyph
71       dvipdfmx
72       dvips
73       ec
74       epstopdf-pkg
75       etex
76       etexcmds
77       etoolbox
78       euenc
79       everyshi
80       fancyvrb
81       filehook
82       firstaid
83       float
84       fontspec
85       framed
86       geometry
87       gettitlestring
88       glyphlist
89       graphics
90       graphics-cfg
91       graphics-def
92       grffile
93       helvetic
94       hycolor
95       hyperref
96       hyph-utf8
97       iftex
98       inconsolata
99       infwarerr
100       intcalc
101       knuth-lib
102       kvdefinekeys
103       kvoptions
104       kvsetkeys
105       l3backend
106       l3kernel
107       l3packages
108       latex
109       latex-amsmath-dev
110       latex-bin
111       latex-fonts
112       latex-tools-dev
113       latexconfig
114       latexmk
115       letltxmacro
116       lm
117       lm-math
118       ltxcmds
119       lua-alt-getopt
120       luahbtex
121       lualatex-math
122       lualibs
123       luaotfload
124       luatex
125       mdwtools
126       metafont
127       mfware
128       natbib
129       pdfescape
130       pdftex
131       pdftexcmds
132       plain
133       psnfss
134       refcount
135       rerunfilecheck
136       stringenc
137       tex
138       tex-ini-files
139       times
140       tipa
141       tools
142       unicode-data
143       unicode-math
144       uniquecounter
145       url
146       xcolor
147       xetex
148       xetexconfig
149       xkeyval
150       xunicode
151       zapfding
153       # manim-latex
154       standalone
155       everysel
156       preview
157       doublestroke
158       ms
159       setspace
160       rsfs
161       relsize
162       ragged2e
163       fundus-calligra
164       microtype
165       wasysym
166       physics
167       dvisvgm
168       jknapltx
169       wasy
170       cm-super
171       babel-english
172       gnu-freefont
173       mathastext
174       cbfonts-fd
175     ]
176   );
178 buildPythonPackage rec {
179   pname = "manim";
180   pyproject = true;
181   version = "0.18.1";
182   disabled = pythonOlder "3.9";
184   src = fetchFromGitHub {
185     owner = "ManimCommunity";
186     repo = "manim";
187     rev = "refs/tags/v${version}";
188     hash = "sha256-o+Wl3NMK6yopcsRVFtZuUE9c1GABa5d8rbQNHDJ4OiQ=";
189   };
191   nativeBuildInputs = [
192     poetry-core
193   ];
195   pythonRelaxDeps = [
196     "cloup"
197     "isosurfaces"
198     "pillow"
199     "skia-pathops"
200     "watchdog"
201   ];
203   patches = [ ./pytest-report-header.patch ];
205   postPatch = ''
206     substituteInPlace pyproject.toml \
207       --replace "--no-cov-on-fail --cov=manim --cov-report xml --cov-report term" ""
208   '';
210   buildInputs = [ cairo ];
212   propagatedBuildInputs = [
213     click
214     click-default-group
215     cloup
216     colour
217     grpcio
218     grpcio-tools
219     importlib-metadata
220     isosurfaces
221     jupyterlab
222     manimpango
223     mapbox-earcut
224     moderngl
225     moderngl-window
226     networkx
227     numpy
228     pillow
229     pycairo
230     pydub
231     pygments
232     rich
233     scipy
234     screeninfo
235     skia-pathops
236     srt
237     svgelements
238     tqdm
239     watchdog
240   ];
242   makeWrapperArgs = [
243     "--prefix"
244     "PATH"
245     ":"
246     (lib.makeBinPath [
247       ffmpeg
248       manim-tinytex
249     ])
250   ];
252   nativeCheckInputs = [
253     ffmpeg
254     manim-tinytex
255     pytest-xdist
256     pytestCheckHook
257   ];
259   # about 55 of ~600 tests failing mostly due to demand for display
260   disabledTests = import ./failing_tests.nix;
262   pythonImportsCheck = [ "manim" ];
264   meta = with lib; {
265     description = "Animation engine for explanatory math videos - Community version";
266     longDescription = ''
267       Manim is an animation engine for explanatory math videos. It's used to
268       create precise animations programmatically, as seen in the videos of
269       3Blue1Brown on YouTube. This is the community maintained version of
270       manim.
271     '';
272     homepage = "https://github.com/ManimCommunity/manim";
273     license = licenses.mit;
274     maintainers = [ ];
275   };