Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

manim: remove old manim(lib) package and init at 0.15.2 #120479

Merged
merged 6 commits into from
Jun 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
152 changes: 111 additions & 41 deletions pkgs/applications/video/manim/default.nix
Original file line number Diff line number Diff line change
@@ -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
{ lib
, fetchFromGitHub

, cairo
, ffmpeg
, texlive

, python3
}:
buildPythonApplication rec {

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";
version = "0.1.10";
format = "pyproject";
version = "0.15.2";
disabled = python3.pythonOlder "3.8";

src = fetchPypi {
pname = "manimlib";
inherit version;
sha256 = "0vg9b3rwypq5zir74pi0pmj47yqlcg7hrvscwrpjzjbqq2yihn49";
src = fetchFromGitHub {
owner = "ManimCommunity";
repo = pname;
rev = "v${version}";
sha256 = "l5JiFWCMQbGnwRRtYzCHBXdVzWBrTNPdcIYaAt/wRNA=";
};

patches = [ ./remove-dependency-constraints.patch ];
nativeBuildInputs = [
python3.pkgs.poetry-core
];

nativeBuildInputs = [ pbr ];
postPatch = ''
substituteInPlace pyproject.toml \
--replace 'cloup = "^0.13.0"' 'cloup = "*"' \
--replace 'mapbox-earcut = "^0.12.10"' 'mapbox-earcut = "*"' \
'';

propagatedBuildInputs = [
buildInputs = [ cairo ];

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
progressbar
scipy
tqdm
opencv
pycairo
pydub
pygments
pysrt
rich
scipy
screeninfo
skia-pathops
srt
tqdm
watchdog
];

cairo sox ffmpeg xdg-utils
makeWrapperArgs = [
"--prefix" "PATH" ":" (lib.makeBinPath [
ffmpeg
(texlive.combine manim-tinytex)
])
];

# 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
'';

disabled = pythonOlder "3.7";
checkInputs = [
python3.pkgs.pytest-cov
mofrim marked this conversation as resolved.
Show resolved Hide resolved
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 = {
description = "Animation engine for explanatory math videos";
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 ];
};
}
74 changes: 74 additions & 0 deletions pkgs/applications/video/manim/failing_tests.nix
Original file line number Diff line number Diff line change
@@ -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"
]
26 changes: 0 additions & 26 deletions pkgs/applications/video/manim/remove-dependency-constraints.patch

This file was deleted.

44 changes: 44 additions & 0 deletions pkgs/development/python-modules/cloup/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{ lib
, buildPythonPackage
, fetchPypi
, pytestCheckHook
, click
, setuptools-scm
, pythonOlder
}:

buildPythonPackage rec {
mofrim marked this conversation as resolved.
Show resolved Hide resolved
pname = "cloup";
version = "0.14.0";

disabled = pythonOlder "3.6";

src = fetchPypi {
inherit pname version;
sha256 = "4dec7e43905b7771884cda4f13ab8b7537bceaee467a92655e7660797ab08c47";
};

nativeBuildInputs = [
setuptools-scm
];

propagatedBuildInputs = [
click
mofrim marked this conversation as resolved.
Show resolved Hide resolved
];

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;
mofrim marked this conversation as resolved.
Show resolved Hide resolved
maintainers = with maintainers; [ friedelino ];
};
}
36 changes: 36 additions & 0 deletions pkgs/development/python-modules/isosurfaces/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{ lib
, buildPythonPackage
, fetchPypi
, numpy
}:

buildPythonPackage rec {
mofrim marked this conversation as resolved.
Show resolved Hide resolved
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;
mofrim marked this conversation as resolved.
Show resolved Hide resolved
maintainers = with maintainers; [ friedelino ];
};
}
Loading