From 9c3e9279495ba48e37e999ee0d3cc3731d6f0b6c Mon Sep 17 00:00:00 2001 From: Frido Friedemann Date: Tue, 24 May 2022 13:03:12 +0200 Subject: [PATCH 1/6] manim: remove to be replaced by ManimCE Existing manim package has been incorrectly named manim, although on PyPi it is called manimlib. It is now developed under the name manimgl, so the PyPi package manimlib will receive no further updates. The new manim package in nixpkgs is now the Manim Community Edition. --- pkgs/applications/video/manim/default.nix | 64 ------------------- .../manim/remove-dependency-constraints.patch | 26 -------- pkgs/top-level/all-packages.nix | 4 -- 3 files changed, 94 deletions(-) delete mode 100644 pkgs/applications/video/manim/default.nix delete mode 100644 pkgs/applications/video/manim/remove-dependency-constraints.patch diff --git a/pkgs/applications/video/manim/default.nix b/pkgs/applications/video/manim/default.nix deleted file mode 100644 index 5da81eff50e6..000000000000 --- a/pkgs/applications/video/manim/default.nix +++ /dev/null @@ -1,64 +0,0 @@ -{ 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"; - - src = fetchPypi { - pname = "manimlib"; - inherit version; - sha256 = "0vg9b3rwypq5zir74pi0pmj47yqlcg7hrvscwrpjzjbqq2yihn49"; - }; - - patches = [ ./remove-dependency-constraints.patch ]; - - nativeBuildInputs = [ pbr ]; - - propagatedBuildInputs = [ - colour - numpy - pillow - progressbar - scipy - tqdm - opencv - pycairo - pydub - - cairo sox ffmpeg xdg-utils - ]; - - # 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"; - - meta = { - description = "Animation engine for explanatory math videos"; - 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. - ''; - homepage = "https://github.com/3b1b/manim"; - license = lib.licenses.mit; - maintainers = with lib.maintainers; [ johnazoidberg ]; - }; -} diff --git a/pkgs/applications/video/manim/remove-dependency-constraints.patch b/pkgs/applications/video/manim/remove-dependency-constraints.patch deleted file mode 100644 index 4a7da45d0f57..000000000000 --- a/pkgs/applications/video/manim/remove-dependency-constraints.patch +++ /dev/null @@ -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' diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index dc5b53ab2925..be21b37ac762 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -26739,10 +26739,6 @@ with pkgs; m32edit = callPackage ../applications/audio/midas/m32edit.nix {}; - manim = python3Packages.callPackage ../applications/video/manim { - opencv = python3Packages.opencv3; - }; - manuskript = libsForQt5.callPackage ../applications/editors/manuskript { }; manul = callPackage ../development/tools/manul { }; From c2755427d67bbcdf0e05609d52e8674d1ea0c1e9 Mon Sep 17 00:00:00 2001 From: Frido Friedemann Date: Fri, 23 Apr 2021 00:06:04 +0200 Subject: [PATCH 2/6] python3Packages.mapbox-earcut: init at 2.2.2 --- .../python-modules/mapbox-earcut/default.nix | 41 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 43 insertions(+) create mode 100644 pkgs/development/python-modules/mapbox-earcut/default.nix diff --git a/pkgs/development/python-modules/mapbox-earcut/default.nix b/pkgs/development/python-modules/mapbox-earcut/default.nix new file mode 100644 index 000000000000..009bf2ed653c --- /dev/null +++ b/pkgs/development/python-modules/mapbox-earcut/default.nix @@ -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 ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 34a318a6e077..5011f51be687 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -5121,6 +5121,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 { }; From 6ab6d7f9f66ec353c03610fc40d49f88d84084ec Mon Sep 17 00:00:00 2001 From: Frido Friedemann Date: Tue, 28 Dec 2021 22:39:58 +0100 Subject: [PATCH 3/6] python3Packages.cloup: init at 0.14.0 --- .../python-modules/cloup/default.nix | 44 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 46 insertions(+) create mode 100644 pkgs/development/python-modules/cloup/default.nix diff --git a/pkgs/development/python-modules/cloup/default.nix b/pkgs/development/python-modules/cloup/default.nix new file mode 100644 index 000000000000..92ccba675e0c --- /dev/null +++ b/pkgs/development/python-modules/cloup/default.nix @@ -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 ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 5011f51be687..f19623c93a74 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -1757,6 +1757,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 { }; From d37086b4bf4612d0658f1a4786a4bd37bdbe378a Mon Sep 17 00:00:00 2001 From: Frido Friedemann Date: Thu, 30 Dec 2021 00:53:42 +0100 Subject: [PATCH 4/6] python3Packages.isosurfaces: init at 0.1.0 --- .../python-modules/isosurfaces/default.nix | 36 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 38 insertions(+) create mode 100644 pkgs/development/python-modules/isosurfaces/default.nix diff --git a/pkgs/development/python-modules/isosurfaces/default.nix b/pkgs/development/python-modules/isosurfaces/default.nix new file mode 100644 index 000000000000..49f3fb90b296 --- /dev/null +++ b/pkgs/development/python-modules/isosurfaces/default.nix @@ -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 ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index f19623c93a74..d38627e7e75c 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4303,6 +4303,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 { }; From 00bcf6729290ce4d155e057beb3c1f264ad09228 Mon Sep 17 00:00:00 2001 From: Frido Friedemann Date: Tue, 17 May 2022 19:25:47 +0200 Subject: [PATCH 5/6] python3Packages.srt: init at 3.5.2 --- .../python-modules/srt/default.nix | 33 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 35 insertions(+) create mode 100644 pkgs/development/python-modules/srt/default.nix diff --git a/pkgs/development/python-modules/srt/default.nix b/pkgs/development/python-modules/srt/default.nix new file mode 100644 index 000000000000..b6a5f4df097d --- /dev/null +++ b/pkgs/development/python-modules/srt/default.nix @@ -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 ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index d38627e7e75c..92d4f527a687 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -9915,6 +9915,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 { From 81c384a4c02f59134566d555b3776aaefb1216ed Mon Sep 17 00:00:00 2001 From: Frido Friedemann Date: Tue, 24 May 2022 13:19:46 +0200 Subject: [PATCH 6/6] manim: init at 0.15.2 --- pkgs/applications/video/manim/default.nix | 134 ++++++++++++++++++ .../video/manim/failing_tests.nix | 74 ++++++++++ pkgs/top-level/all-packages.nix | 2 + 3 files changed, 210 insertions(+) create mode 100644 pkgs/applications/video/manim/default.nix create mode 100644 pkgs/applications/video/manim/failing_tests.nix diff --git a/pkgs/applications/video/manim/default.nix b/pkgs/applications/video/manim/default.nix new file mode 100644 index 000000000000..edc084ef6a0f --- /dev/null +++ b/pkgs/applications/video/manim/default.nix @@ -0,0 +1,134 @@ +{ lib +, fetchFromGitHub + +, 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="; + }; + + nativeBuildInputs = [ + python3.pkgs.poetry-core + ]; + + postPatch = '' + substituteInPlace pyproject.toml \ + --replace 'cloup = "^0.13.0"' 'cloup = "*"' \ + --replace 'mapbox-earcut = "^0.12.10"' 'mapbox-earcut = "*"' \ + ''; + + 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 + 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. This is the community maintained version of + manim. + ''; + homepage = "https://github.com/ManimCommunity/manim"; + license = licenses.mit; + maintainers = with maintainers; [ friedelino ]; + }; +} diff --git a/pkgs/applications/video/manim/failing_tests.nix b/pkgs/applications/video/manim/failing_tests.nix new file mode 100644 index 000000000000..a1f82a98dc16 --- /dev/null +++ b/pkgs/applications/video/manim/failing_tests.nix @@ -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" +] diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index be21b37ac762..2edcae1efbb0 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -26739,6 +26739,8 @@ with pkgs; m32edit = callPackage ../applications/audio/midas/m32edit.nix {}; + manim = callPackage ../applications/video/manim { }; + manuskript = libsForQt5.callPackage ../applications/editors/manuskript { }; manul = callPackage ../development/tools/manul { };