3b1b-manim/getting_started/config.html
2022-06-28 01:18:08 +00:00

260 lines
No EOL
16 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html class="no-js">
<head><meta charset="utf-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<link rel="index" title="Index" href="../genindex.html" /><link rel="search" title="Search" href="../search.html" /><link rel="next" title="Manims structure" href="structure.html" /><link rel="prev" title="Example Scenes" href="example_scenes.html" />
<link rel="shortcut icon" href="../_static/icon.png"/><meta name="generator" content="sphinx-3.0.3, furo 2020.10.05.beta9"/>
<title>CONFIG dictionary - manim documentation</title>
<link rel="stylesheet" href="../_static/copybutton.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/manim-kindergarten/CDN@master/manimgl_assets/custom.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/manim-kindergarten/CDN@master/manimgl_assets/colors.css" />
<link rel="stylesheet" href="../_static/styles/default.css?f4500112feb742d4c364a720">
<link rel="stylesheet" href="../_static/pygments.css?f4500112feb742d4c364a720">
<style>
:root {
--color-code-background: #f8f8f8;
--color-code-foreground: #000000;
}
</style>
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script><script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js" defer></script>
<script src="../_static/language_data.js" defer></script>
<script src="../_static/clipboard.min.js"></script>
<script src="../_static/copybutton.js"></script><script src="../_static/scripts/main.js?f4500112feb742d4c364a720"></script></head>
<body dir="">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="svg-toc" viewBox="0 0 24 24">
<title>Contents</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke-width="1.5" stroke="#101010" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z"/>
<line x1="4" y1="6" x2="20" y2="6" />
<line x1="10" y1="12" x2="20" y2="12" />
<line x1="6" y1="18" x2="20" y2="18" />
</svg>
</symbol>
<symbol id="svg-menu" viewBox="0 0 24 24">
<title>Menu</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
class="feather feather-menu">
<line x1="3" y1="12" x2="21" y2="12"></line>
<line x1="3" y1="6" x2="21" y2="6"></line>
<line x1="3" y1="18" x2="21" y2="18"></line>
</svg>
</symbol>
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
<title>Expand</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
class="feather feather-chevron-right">
<polyline points="9 18 15 12 9 6"></polyline>
</svg>
</symbol>
</svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
<label class="overlay sidebar-overlay" for="__navigation"></label>
<label class="overlay toc-overlay" for="__toc"></label>
<div class="page">
<header class="mobile-header">
<label class="header-left nav-overlay-icon" for="__navigation">
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label>
<div class="header-center"><div class="brand">manim documentation</div></div>
<div class="header-right"></div>
</header>
<aside class="sidebar-drawer">
<div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand centered" href="../index.html">
<div class="sidebar-logo-container">
<img class="sidebar-logo" src="../_static/transparent_graph.png" alt="Logo"/>
</div>
</a><form class="sidebar-search-container" method="get" action="../search.html">
<input class="sidebar-search" placeholder="Search" name="q">
<input type="hidden" name="check_keywords" value="yes">
<input type="hidden" name="area" value="default">
</form><div class="sidebar-tree sidebar-scroll">
<p><span class="caption-text">Getting Started</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quick Start</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">CLI flags and configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="example_scenes.html">Example Scenes</a></li>
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">CONFIG dictionary</a></li>
<li class="toctree-l1"><a class="reference internal" href="structure.html">Manims structure</a></li>
<li class="toctree-l1"><a class="reference internal" href="whatsnew.html">Whats new</a></li>
</ul>
<p><span class="caption-text">Documentation</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../documentation/constants.html">constants</a></li>
<li class="toctree-l1"><a class="reference internal" href="../documentation/custom_config.html">custom_config</a></li>
</ul>
<p><span class="caption-text">Development</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../development/changelog.html">Changelog</a></li>
<li class="toctree-l1"><a class="reference internal" href="../development/contributing.html">Contributing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../development/about.html">About</a></li>
</ul>
</div>
</div>
</div>
</aside>
<main class="main">
<div class="content">
<article role="main">
<label class="toc-overlay-icon" for="__toc">
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label>
<section id="config-dictionary">
<h1>CONFIG dictionary<a class="headerlink" href="#config-dictionary" title="Permalink to this headline"></a></h1>
<section id="what-s-config">
<h2>Whats CONFIG<a class="headerlink" href="#what-s-config" title="Permalink to this headline"></a></h2>
<p><code class="docutils literal notranslate"><span class="pre">CONFIG</span></code> dictionary is a feature of manim, which facilitates the inheritance
and modification of parameters between parent and child classes.</p>
<div class="line-block">
<div class="line"><code class="docutils literal notranslate"><span class="pre">CONFIG</span></code> dictionary s processing is in <code class="docutils literal notranslate"><span class="pre">manimlib/utils/config_ops.py</span></code></div>
<div class="line">It can convert the key-value pairs in the <code class="docutils literal notranslate"><span class="pre">CONFIG</span></code> dictionary into class attributes and values</div>
</div>
<p>Generally, the first line of the <code class="docutils literal notranslate"><span class="pre">.__init__()</span></code> method in some basic class (<code class="docutils literal notranslate"><span class="pre">Mobject</span></code>, <code class="docutils literal notranslate"><span class="pre">Animation</span></code>,
etc.) will call this function <code class="docutils literal notranslate"><span class="pre">digest_config(self,</span> <span class="pre">kwargs)</span></code> to convert both
the <code class="docutils literal notranslate"><span class="pre">CONFIG</span></code> dictionary and <code class="docutils literal notranslate"><span class="pre">kwargs</span></code> into attributes. Then it can be accessed
directly through <code class="docutils literal notranslate"><span class="pre">self.</span></code>, which simplifies the handling of inheritance between classes.</p>
<p><strong>An example</strong>:</p>
<p>There are many class inheritance relationships in <code class="docutils literal notranslate"><span class="pre">manimlib/mobject/geometry.py</span></code></p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># Line 279</span>
<span class="k">class</span> <span class="nc">Circle</span><span class="p">(</span><span class="n">Arc</span><span class="p">):</span>
<span class="n">CONFIG</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">"color"</span><span class="p">:</span> <span class="n">RED</span><span class="p">,</span>
<span class="s2">"close_new_points"</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span>
<span class="s2">"anchors_span_full_range"</span><span class="p">:</span> <span class="bp">False</span>
<span class="p">}</span>
</pre></div>
</div>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># Line 304</span>
<span class="k">class</span> <span class="nc">Dot</span><span class="p">(</span><span class="n">Circle</span><span class="p">):</span>
<span class="n">CONFIG</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">"radius"</span><span class="p">:</span> <span class="n">DEFAULT_DOT_RADIUS</span><span class="p">,</span>
<span class="s2">"stroke_width"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="s2">"fill_opacity"</span><span class="p">:</span> <span class="mf">1.0</span><span class="p">,</span>
<span class="s2">"color"</span><span class="p">:</span> <span class="n">WHITE</span>
<span class="p">}</span>
</pre></div>
</div>
<p>The <code class="docutils literal notranslate"><span class="pre">Circle</span></code> class uses the key-value pair <code class="docutils literal notranslate"><span class="pre">"color":</span> <span class="pre">RED</span></code> in the <code class="docutils literal notranslate"><span class="pre">CONFIG</span></code>
dictionary to add the attribute <code class="docutils literal notranslate"><span class="pre">self.color</span></code>.</p>
<p>At the same time, the <code class="docutils literal notranslate"><span class="pre">Dot</span></code> class also contains the key <code class="docutils literal notranslate"><span class="pre">color</span></code> in the
<code class="docutils literal notranslate"><span class="pre">CONFIG</span></code> dictionary, but the value is different. At this time, the priority will
modify the attribute <code class="docutils literal notranslate"><span class="pre">self.color</span></code> to <code class="docutils literal notranslate"><span class="pre">WHITE</span></code>.</p>
</section>
<section id="config-nesting">
<h2>CONFIG nesting<a class="headerlink" href="#config-nesting" title="Permalink to this headline"></a></h2>
<p>The <code class="docutils literal notranslate"><span class="pre">CONFIG</span></code> dictionary supports nesting, that is, the value of the key is also
a dictionary, for example:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">Camera</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="n">CONFIG</span> <span class="o">=</span> <span class="p">{</span>
<span class="c1"># configs</span>
<span class="p">}</span>
</pre></div>
</div>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">Scene</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="n">CONFIG</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">"window_config"</span><span class="p">:</span> <span class="p">{},</span>
<span class="s2">"camera_class"</span><span class="p">:</span> <span class="n">Camera</span><span class="p">,</span>
<span class="s2">"camera_config"</span><span class="p">:</span> <span class="p">{},</span>
<span class="s2">"file_writer_config"</span><span class="p">:</span> <span class="p">{},</span>
<span class="c1"># other configs</span>
<span class="p">}</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">digest_config</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span>
<span class="c1"># some lines</span>
<span class="bp">self</span><span class="o">.</span><span class="n">camera</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">camera_class</span><span class="p">(</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">camera_config</span><span class="p">)</span>
</pre></div>
</div>
<p>The <code class="docutils literal notranslate"><span class="pre">CONFIG</span></code> dictionary of the <code class="docutils literal notranslate"><span class="pre">Camera</span></code> class contains many key-value pairs,
and this class needs to be instantiated in the <code class="docutils literal notranslate"><span class="pre">Scene</span></code> class. For more convenient
control, there is a special key-value pair in the Scene class <code class="docutils literal notranslate"><span class="pre">"camera_config":</span> <span class="pre">{}</span></code>,
Its value is a dictionary, passed in as <code class="docutils literal notranslate"><span class="pre">kwargs</span></code> when initializing the <code class="docutils literal notranslate"><span class="pre">Camera</span></code> class
to modify the value of the properties of the <code class="docutils literal notranslate"><span class="pre">Camera</span></code> class.</p>
<p>So the nesting of the <code class="docutils literal notranslate"><span class="pre">CONFIG</span></code> dictionary <strong>essentially</strong> passes in the value as <code class="docutils literal notranslate"><span class="pre">kwargs</span></code>.</p>
</section>
</section>
</article>
<footer>
<div class="related-pages">
<a class="next-page" href="structure.html">
<div class="page-info">
<div class="context">
<span>Next</span>
</div>
<div class="title">Manims structure</div>
</div>
<svg><use href="#svg-arrow-right"></use></svg>
</a>
<a class="prev-page" href="example_scenes.html">
<svg><use href="#svg-arrow-right"></use></svg>
<div class="page-info">
<div class="context">
<span>Previous</span>
</div>
<div class="title">Example Scenes</div>
</div>
</a>
</div>
<div class="related-information">
<span class="copyright">Copyright &copy; - This document has been placed in the public domain.</span> |
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using
<a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
<a href="https://github.com/pradyunsg/furo">Furo theme</a>.
</div>
</footer>
</div>
<aside class="toc-drawer">
<div class="toc-sticky toc-scroll">
<div class="toc-title-container">
<span class="toc-title">
Contents
</span>
</div>
<div class="toc-tree">
<ul>
<li><a class="reference internal" href="#">CONFIG dictionary</a><ul>
<li><a class="reference internal" href="#what-s-config">Whats CONFIG</a></li>
<li><a class="reference internal" href="#config-nesting">CONFIG nesting</a></li>
</ul>
</li>
</ul>
</div>
</div>
</aside>
</main>
</div>
</body>
</html>