Merge pull request #120479 from friedelino/add-manim-com

manim: remove old manim(lib) package and init at 0.15.2
This commit is contained in:
Sandro 2022-06-01 17:01:57 +02:00 committed by GitHub
commit 461c077f0e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 357 additions and 79 deletions

View File

@ -1,64 +1,134 @@
{ lib, buildPythonApplication, fetchFromGitHub, pythonOlder, file, fetchpatch
, cairo, ffmpeg, sox, xdg-utils, texlive
, colour, numpy, pillow, progressbar, scipy, tqdm, opencv , pycairo, pydub
, pbr, fetchPypi
}:
buildPythonApplication rec {
pname = "manim";
version = "0.1.10";
{ lib
, fetchFromGitHub
src = fetchPypi {
pname = "manimlib";
inherit version;
sha256 = "0vg9b3rwypq5zir74pi0pmj47yqlcg7hrvscwrpjzjbqq2yihn49";
, cairo
, ffmpeg
, texlive
, python3
}:
let
# According to ManimCommunity documentation manim uses tex-packages packaged
# in a custom distribution called "manim-latex",
#
# https://community.chocolatey.org/packages/manim-latex#files
#
# which includes another cutom distribution called tinytex, for which the
# package list can be found at
#
# https://github.com/yihui/tinytex/blob/master/tools/pkgs-custom.txt
#
# these two combined add up to:
manim-tinytex = {
inherit (texlive)
# tinytex
scheme-infraonly amsfonts amsmath atbegshi atveryend auxhook babel bibtex
bigintcalc bitset booktabs cm dehyph dvipdfmx dvips ec epstopdf-pkg etex
etexcmds etoolbox euenc everyshi fancyvrb filehook firstaid float fontspec
framed geometry gettitlestring glyphlist graphics graphics-cfg graphics-def
grffile helvetic hycolor hyperref hyph-utf8 iftex inconsolata infwarerr
intcalc knuth-lib kvdefinekeys kvoptions kvsetkeys l3backend l3kernel
l3packages latex latex-amsmath-dev latex-bin latex-fonts latex-tools-dev
latexconfig latexmk letltxmacro lm lm-math ltxcmds lua-alt-getopt luahbtex
lualatex-math lualibs luaotfload luatex mdwtools metafont mfware natbib
pdfescape pdftex pdftexcmds plain psnfss refcount rerunfilecheck stringenc
tex tex-ini-files times tipa tools unicode-data unicode-math uniquecounter
url xcolor xetex xetexconfig xkeyval xunicode zapfding
# manim-latex
standalone everysel preview doublestroke ms setspace rsfs relsize ragged2e
fundus-calligra microtype wasysym physics dvisvgm jknapltx wasy cm-super
babel-english gnu-freefont mathastext cbfonts-fd;
};
in python3.pkgs.buildPythonApplication rec {
pname = "manim";
format = "pyproject";
version = "0.15.2";
disabled = python3.pythonOlder "3.8";
src = fetchFromGitHub {
owner = "ManimCommunity";
repo = pname;
rev = "v${version}";
sha256 = "l5JiFWCMQbGnwRRtYzCHBXdVzWBrTNPdcIYaAt/wRNA=";
};
patches = [ ./remove-dependency-constraints.patch ];
nativeBuildInputs = [ pbr ];
propagatedBuildInputs = [
colour
numpy
pillow
progressbar
scipy
tqdm
opencv
pycairo
pydub
cairo sox ffmpeg xdg-utils
nativeBuildInputs = [
python3.pkgs.poetry-core
];
# Test with texlive to see whether it works but don't propagate
# because it's huge and optional
# TODO: Use smaller TexLive distribution
# Doesn't need everything but it's hard to figure out what it needs
checkInputs = [ cairo sox ffmpeg xdg-utils texlive.combined.scheme-full ];
# Simple test and complex test with LaTeX
checkPhase = ''
for scene in SquareToCircle OpeningManimExample
do
python3 manim.py example_scenes.py $scene -l
tail -n 20 files/Tex/*.log # Print potential LaTeX erorrs
${file}/bin/file videos/example_scenes/480p15/$scene.mp4 \
| tee | grep -F "ISO Media, MP4 Base Media v1 [ISO 14496-12:2003]"
done
postPatch = ''
substituteInPlace pyproject.toml \
--replace 'cloup = "^0.13.0"' 'cloup = "*"' \
--replace 'mapbox-earcut = "^0.12.10"' 'mapbox-earcut = "*"' \
'';
disabled = pythonOlder "3.7";
buildInputs = [ cairo ];
meta = {
description = "Animation engine for explanatory math videos";
propagatedBuildInputs = with python3.pkgs; [
click
click-default-group
cloup
colour
grpcio
grpcio-tools
importlib-metadata
isosurfaces
jupyterlab
manimpango
mapbox-earcut
moderngl
moderngl-window
networkx
numpy
pillow
pycairo
pydub
pygments
pysrt
rich
scipy
screeninfo
skia-pathops
srt
tqdm
watchdog
];
makeWrapperArgs = [
"--prefix" "PATH" ":" (lib.makeBinPath [
ffmpeg
(texlive.combine manim-tinytex)
])
];
checkInputs = [
python3.pkgs.pytest-cov
python3.pkgs.pytest-xdist
python3.pkgs.pytestCheckHook
ffmpeg
(texlive.combine manim-tinytex)
];
# about 55 of ~600 tests failing mostly due to demand for display
disabledTests = import ./failing_tests.nix;
pythonImportsCheck = [ "manim" ];
meta = with lib; {
description = "Animation engine for explanatory math videos - Community version";
longDescription = ''
Manim is an animation engine for explanatory math videos. It's used to
create precise animations programmatically, as seen in the videos of
3Blue1Brown on YouTube.
3Blue1Brown on YouTube. This is the community maintained version of
manim.
'';
homepage = "https://github.com/3b1b/manim";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ johnazoidberg ];
homepage = "https://github.com/ManimCommunity/manim";
license = licenses.mit;
maintainers = with maintainers; [ friedelino ];
};
}

View File

@ -0,0 +1,74 @@
# reason for failure: tests try to open display
[
"test_background_color"
"test_scene_add_remove"
"test_Circle"
"test_wait_skip"
"test_basic_scene_with_default_values"
"test_dry_run_with_png_format"
"test_dry_run_with_png_format_skipped_animations"
"test_FixedMobjects3D"
"test_basic_scene_l_flag"
"test_n_flag"
"test_s_flag_opengl_renderer"
"test_s_flag_no_animations"
"test_image_output_for_static_scene"
"test_no_image_output_with_interactive_embed"
"test_no_default_image_output_with_non_static_scene"
"test_image_output_for_static_scene_with_write_to_movie"
"test_s_flag"
"test_r_flag"
"test_play_skip"
"test_write_to_movie_disables_window"
"test_a_flag"
"test_pixel_coords_to_space_coords"
"test_t_values"
"test_custom_folders"
"test_t_values[15]"
"test_t_values[30]"
"test_t_values[60]"
"test_dash_as_filename"
"test_images_are_created_when_png_format_set_for_opengl"
"test_t_values_with_skip_animations"
"test_static_wait_detection"
"test_non_static_wait_detection"
"test_frozen_frame"
"test_gif_format_output"
"test_animate_with_changed_custom_attribute"
"test_images_are_zero_padded_when_zero_pad_set_for_opengl"
"test_mp4_format_output"
"test_videos_not_created_when_png_format_set"
"test_images_are_created_when_png_format_set"
"test_images_are_zero_padded_when_zero_pad_set"
"test_webm_format_output"
"test_default_format_output_for_transparent_flag"
"test_mov_can_be_set_as_output_format"
"test_force_window_opengl_render_with_format"
"test_get_frame_with_preview_disabled"
"test_get_frame_with_preview_enabled"
] ++
# reason for failure: tests try to reach network
[
"test_logging_to_file"
"test_plugin_function_like"
"test_plugin_no_all"
"test_plugin_with_all"
] ++
# failing with:
# E AssertionError:
# E Not equal to tolerance rtol=1e-07, atol=1.01
# E Frame no -1. You can use --show_diff to visually show the difference.
# E Mismatched elements: 18525 / 1639680 (1.13%)
# E Max absolute difference: 255
# E Max relative difference: 255.
[
"test_Text2Color"
] ++
# failing with:
# TypeError: __init__() got an unexpected keyword argument 'msg' - maybe you meant pytest.mark.skipif?
[
"test_force_window_opengl_render_with_movies"
]

View File

@ -1,26 +0,0 @@
diff --git i/requirements.txt w/requirements.txt
index 556122ad..11fd49d5 100644
--- i/requirements.txt
+++ w/requirements.txt
@@ -1,11 +1,10 @@
-argparse==1.4.0
-colour==0.1.5
-numpy==1.15.0
-Pillow==5.2.0
-progressbar==2.5
-scipy==1.1.0
-tqdm==4.24.0
-opencv-python==3.4.2.17
-pycairo==1.17.1; sys_platform == 'linux'
-pycairo>=1.18.0; sys_platform == 'win32'
-pydub==0.23.0
+colour
+numpy
+Pillow
+progressbar
+scipy
+tqdm
+pycairo
+pycairo>=1.18.1; sys_platform == 'win32'
+pydub
+pyreadline==2.1; sys_platform == 'win32'

View File

@ -0,0 +1,44 @@
{ lib
, buildPythonPackage
, fetchPypi
, pytestCheckHook
, click
, setuptools-scm
, pythonOlder
}:
buildPythonPackage rec {
pname = "cloup";
version = "0.14.0";
disabled = pythonOlder "3.6";
src = fetchPypi {
inherit pname version;
sha256 = "4dec7e43905b7771884cda4f13ab8b7537bceaee467a92655e7660797ab08c47";
};
nativeBuildInputs = [
setuptools-scm
];
propagatedBuildInputs = [
click
];
checkInputs = [
pytestCheckHook
];
pythonImportsCheck = [ "cloup" ];
meta = with lib; {
homepage = "https://github.com/janLuke/cloup";
description = "Click extended with option groups, constraints, aliases, help themes";
longDescription = ''
Enriches Click with option groups, constraints, command aliases, help sections for subcommands, themes for --help and other stuff.
'';
license = licenses.bsd3;
maintainers = with maintainers; [ friedelino ];
};
}

View File

@ -0,0 +1,36 @@
{ lib
, buildPythonPackage
, fetchPypi
, numpy
}:
buildPythonPackage rec {
pname = "isosurfaces";
version = "0.1.0";
src = fetchPypi {
inherit pname version;
sha256 = "fa1b44e5e59d2f429add49289ab89e36f8dcda49b7badd99e0beea273be331f4";
};
propagatedBuildInputs = [ numpy ];
# no tests defined upstream
doCheck = false;
pythonImportsCheck = [ "isosurfaces" ];
meta = with lib; {
homepage = "https://github.com/jared-hughes/isosurfaces";
description = "Construct isolines/isosurfaces of a 2D/3D scalar field defined by a function";
longDescription = ''
Construct isolines/isosurfaces of a 2D/3D scalar field defined by a
function, i.e. curves over which f(x,y)=0 or surfaces over which
f(x,y,z)=0. Most similar libraries use marching squares or similar over a
uniform grid, but this uses a quadtree to avoid wasting time sampling
many far from the implicit surface.
'';
license = licenses.mit;
maintainers = with maintainers; [ friedelino ];
};
}

View File

@ -0,0 +1,41 @@
{ lib
, buildPythonPackage
, fetchPypi
, fetchFromGitHub
, numpy
, pybind11
, pytestCheckHook
, setuptools
}:
buildPythonPackage rec {
pname = "mapbox-earcut";
version = "1.0.0";
src = fetchFromGitHub {
owner = "skogler";
repo = "mapbox_earcut_python";
rev = "v${version}";
sha256 = "m4q2qTL55fkdi3hm75C3/XV9SUQkpJS+B5SEgpPEctk=";
};
nativeBuildInputs = [ setuptools pybind11 ];
propagatedBuildInputs = [ numpy ];
checkInputs = [ pytestCheckHook ];
pythonImportsCheck = [ "mapbox_earcut" ];
meta = with lib; {
homepage = "https://github.com/skogler/mapbox_earcut_python";
license = licenses.isc;
description = "Mapbox-earcut fast triangulation of 2D-polygons";
longDescription = ''
Python bindings for the C++ implementation of the Mapbox Earcut
library, which provides very fast and quite robust triangulation of 2D
polygons.
'';
maintainers = with maintainers; [ friedelino ];
};
}

View File

@ -0,0 +1,33 @@
{ lib
, buildPythonPackage
, fetchPypi
, hypothesis
, pytestCheckHook
, pythonOlder
}:
buildPythonPackage rec {
pname = "srt";
version = "3.5.2";
disabled = pythonOlder "2.7";
src = fetchPypi {
inherit pname version;
sha256 = "7aa4ad5ce4126d3f53b3e7bc4edaa86653d0378bf1c0b1ab8c59f5ab41384450";
};
checkInputs = [
hypothesis
pytestCheckHook
];
pythonImportsCheck = [ "srt" ];
meta = with lib; {
homepage = "https://github.com/cdown/srt";
description = "A tiny but featureful Python library for parsing, modifying, and composing SRT files";
license = licenses.bsd3;
maintainers = with maintainers; [ friedelino ];
};
}

View File

@ -26807,9 +26807,7 @@ with pkgs;
m32edit = callPackage ../applications/audio/midas/m32edit.nix {};
manim = python3Packages.callPackage ../applications/video/manim {
opencv = python3Packages.opencv3;
};
manim = callPackage ../applications/video/manim { };
manuskript = libsForQt5.callPackage ../applications/editors/manuskript { };

View File

@ -1763,6 +1763,8 @@ in {
cloudsplaining = callPackage ../development/python-modules/cloudsplaining { };
cloup = callPackage ../development/python-modules/cloup { };
clustershell = callPackage ../development/python-modules/clustershell { };
clvm = callPackage ../development/python-modules/clvm { };
@ -4343,6 +4345,8 @@ in {
isort = callPackage ../development/python-modules/isort { };
isosurfaces = callPackage ../development/python-modules/isosurfaces { };
isounidecode = callPackage ../development/python-modules/isounidecode { };
isoweek = callPackage ../development/python-modules/isoweek { };
@ -5166,6 +5170,8 @@ in {
mapbox = callPackage ../development/python-modules/mapbox { };
mapbox-earcut = callPackage ../development/python-modules/mapbox-earcut { };
mariadb = callPackage ../development/python-modules/mariadb { };
marisa-trie = callPackage ../development/python-modules/marisa-trie { };
@ -9969,6 +9975,8 @@ in {
srsly = callPackage ../development/python-modules/srsly { };
srt = callPackage ../development/python-modules/srt { };
srvlookup = callPackage ../development/python-modules/srvlookup { };
ssdeep = callPackage ../development/python-modules/ssdeep {