Remove docs/build
BIN
docs/build/doctrees/api.doctree
vendored
BIN
docs/build/doctrees/environment.pickle
vendored
BIN
docs/build/doctrees/envs/dmc.doctree
vendored
BIN
docs/build/doctrees/envs/fancy/airhockey.doctree
vendored
BIN
docs/build/doctrees/envs/fancy/index.doctree
vendored
BIN
docs/build/doctrees/envs/fancy/mujoco.doctree
vendored
BIN
docs/build/doctrees/envs/meta.doctree
vendored
BIN
docs/build/doctrees/envs/open_ai.doctree
vendored
BIN
docs/build/doctrees/examples/dmc.doctree
vendored
BIN
docs/build/doctrees/examples/general.doctree
vendored
BIN
docs/build/doctrees/examples/metaworld.doctree
vendored
BIN
docs/build/doctrees/examples/open_ai.doctree
vendored
BIN
docs/build/doctrees/examples/replanning_envs.doctree
vendored
BIN
docs/build/doctrees/generated/fancy_gym.envs.doctree
vendored
BIN
docs/build/doctrees/guide/basic_usage.doctree
vendored
BIN
docs/build/doctrees/guide/episodic_rl.doctree
vendored
BIN
docs/build/doctrees/guide/installation.doctree
vendored
BIN
docs/build/doctrees/guide/upgrading_envs.doctree
vendored
BIN
docs/build/doctrees/index.doctree
vendored
4
docs/build/html/.buildinfo
vendored
@ -1,4 +0,0 @@
|
||||
# Sphinx build info version 1
|
||||
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
|
||||
config: 28ec069496fc0ad05c8b9641549626a6
|
||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
@ -1,444 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="en" >
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>fancy_gym.envs.registry — Fancy Gym 0.2 documentation</title>
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/style.css" type="text/css" />
|
||||
<link rel="shortcut icon" href="../../../_static/icon.svg"/>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="../../../_static/js/html5shiv.min.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
|
||||
<script src="../../../_static/jquery.js"></script>
|
||||
<script src="../../../_static/underscore.js"></script>
|
||||
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
|
||||
<script src="../../../_static/doctools.js"></script>
|
||||
<script src="../../../_static/sphinx_highlight.js"></script>
|
||||
<script src="../../../_static/js/theme.js"></script>
|
||||
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../../search.html" />
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body class="wy-body-for-nav">
|
||||
<div class="wy-grid-for-nav">
|
||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||
<div class="wy-side-scroll">
|
||||
<div class="wy-side-nav-search" >
|
||||
|
||||
|
||||
|
||||
<a href="../../../index.html" class="icon icon-home">
|
||||
Fancy Gym
|
||||
<img src="../../../_static/icon.svg" class="logo" alt="Logo"/>
|
||||
</a>
|
||||
<div class="version">
|
||||
0.2
|
||||
</div>
|
||||
<div role="search">
|
||||
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
||||
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
</div>
|
||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../guide/installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../guide/episodic_rl.html">What is Episodic RL?</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../guide/basic_usage.html">Basic Usage</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../guide/upgrading_envs.html">Creating new MP Environments</a></li>
|
||||
</ul>
|
||||
<p class="caption" role="heading"><span class="caption-text">Environments</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../envs/fancy/index.html">Fancy</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../envs/dmc.html">DeepMind Control (DMC)</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../envs/meta.html">Metaworld</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../envs/open_ai.html">Gymnasium</a></li>
|
||||
</ul>
|
||||
<p class="caption" role="heading"><span class="caption-text">Examples</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../examples/general.html">General Usage Examples</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../examples/dmc.html">DeepMind Control Examples</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../examples/metaworld.html">Metaworld Examples</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../examples/open_ai.html">OpenAI Envs Examples</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../examples/movement_primitives.html">Movement Primitives Examples</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../examples/mp_params_tuning.html">MP Params Tuning Example</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../examples/pd_control_gain_tuning.html">PD Control Gain Tuning Example</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../examples/replanning_envs.html">Replanning Example</a></li>
|
||||
</ul>
|
||||
<p class="caption" role="heading"><span class="caption-text">API</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../../../api.html">API</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||
<a href="../../../index.html">Fancy Gym</a>
|
||||
</nav>
|
||||
|
||||
<div class="wy-nav-content">
|
||||
<div class="rst-content">
|
||||
<div role="navigation" aria-label="Page navigation">
|
||||
<ul class="wy-breadcrumbs">
|
||||
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
|
||||
<li class="breadcrumb-item"><a href="../../index.html">Module code</a></li>
|
||||
<li class="breadcrumb-item active">fancy_gym.envs.registry</li>
|
||||
<li class="wy-breadcrumbs-aside">
|
||||
</li>
|
||||
</ul>
|
||||
<hr/>
|
||||
</div>
|
||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||
<div itemprop="articleBody">
|
||||
|
||||
<h1>Source code for fancy_gym.envs.registry</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Tuple</span><span class="p">,</span> <span class="n">Union</span><span class="p">,</span> <span class="n">Callable</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Optional</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">copy</span>
|
||||
<span class="kn">import</span> <span class="nn">importlib</span>
|
||||
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
||||
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">defaultdict</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">collections.abc</span> <span class="kn">import</span> <span class="n">Mapping</span><span class="p">,</span> <span class="n">MutableMapping</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">fancy_gym.utils.make_env_helpers</span> <span class="kn">import</span> <span class="n">make_bb</span>
|
||||
<span class="kn">from</span> <span class="nn">fancy_gym.black_box.raw_interface_wrapper</span> <span class="kn">import</span> <span class="n">RawInterfaceWrapper</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">gymnasium</span> <span class="kn">import</span> <span class="n">register</span> <span class="k">as</span> <span class="n">gym_register</span>
|
||||
<span class="kn">from</span> <span class="nn">gymnasium</span> <span class="kn">import</span> <span class="n">make</span> <span class="k">as</span> <span class="n">gym_make</span>
|
||||
<span class="kn">from</span> <span class="nn">gymnasium.envs.registration</span> <span class="kn">import</span> <span class="n">registry</span> <span class="k">as</span> <span class="n">gym_registry</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">DefaultMPWrapper</span><span class="p">(</span><span class="n">RawInterfaceWrapper</span><span class="p">):</span>
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">context_mask</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Returns boolean mask of the same shape as the observation space.</span>
|
||||
<span class="sd"> It determines whether the observation is returned for the contextual case or not.</span>
|
||||
<span class="sd"> This effectively allows to filter unwanted or unnecessary observations from the full step-based case.</span>
|
||||
<span class="sd"> E.g. Velocities starting at 0 are only changing after the first action. Given we only receive the</span>
|
||||
<span class="sd"> context/part of the first observation, the velocities are not necessary in the observation for the task.</span>
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> bool array representing the indices of the observations</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># If the env already defines a context_mask, we will use that</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">,</span> <span class="s1">'context_mask'</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">context_mask</span>
|
||||
|
||||
<span class="c1"># Otherwise we will use the whole observation as the context. (Write a custom MPWrapper to change this behavior)</span>
|
||||
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">full</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">observation_space</span><span class="o">.</span><span class="n">shape</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">current_pos</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Union</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Returns the current position of the action/control dimension.</span>
|
||||
<span class="sd"> The dimensionality has to match the action/control dimension.</span>
|
||||
<span class="sd"> This is not required when exclusively using velocity control,</span>
|
||||
<span class="sd"> it should, however, be implemented regardless.</span>
|
||||
<span class="sd"> E.g. The joint positions that are directly or indirectly controlled by the action.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">assert</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">,</span> <span class="s1">'current_pos'</span><span class="p">),</span> <span class="s1">'DefaultMPWrapper was unable to access env.current_pos. Please write a custom MPWrapper (recommended) or expose this attribute directly.'</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">current_pos</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">current_vel</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">Union</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">]:</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Returns the current velocity of the action/control dimension.</span>
|
||||
<span class="sd"> The dimensionality has to match the action/control dimension.</span>
|
||||
<span class="sd"> This is not required when exclusively using position control,</span>
|
||||
<span class="sd"> it should, however, be implemented regardless.</span>
|
||||
<span class="sd"> E.g. The joint velocities that are directly or indirectly controlled by the action.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">assert</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">,</span> <span class="s1">'current_vel'</span><span class="p">),</span> <span class="s1">'DefaultMPWrapper was unable to access env.current_vel. Please write a custom MPWrapper (recommended) or expose this attribute directly.'</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">current_vel</span>
|
||||
|
||||
|
||||
<span class="n">_BB_DEFAULTS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s1">'ProMP'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s1">'wrappers'</span><span class="p">:</span> <span class="p">[],</span>
|
||||
<span class="s1">'trajectory_generator_kwargs'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s1">'trajectory_generator_type'</span><span class="p">:</span> <span class="s1">'promp'</span>
|
||||
<span class="p">},</span>
|
||||
<span class="s1">'phase_generator_kwargs'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s1">'phase_generator_type'</span><span class="p">:</span> <span class="s1">'linear'</span>
|
||||
<span class="p">},</span>
|
||||
<span class="s1">'controller_kwargs'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s1">'controller_type'</span><span class="p">:</span> <span class="s1">'motor'</span><span class="p">,</span>
|
||||
<span class="s1">'p_gains'</span><span class="p">:</span> <span class="mf">1.0</span><span class="p">,</span>
|
||||
<span class="s1">'d_gains'</span><span class="p">:</span> <span class="mf">0.1</span><span class="p">,</span>
|
||||
<span class="p">},</span>
|
||||
<span class="s1">'basis_generator_kwargs'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s1">'basis_generator_type'</span><span class="p">:</span> <span class="s1">'zero_rbf'</span><span class="p">,</span>
|
||||
<span class="s1">'num_basis'</span><span class="p">:</span> <span class="mi">5</span><span class="p">,</span>
|
||||
<span class="s1">'num_basis_zero_start'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="s1">'basis_bandwidth_factor'</span><span class="p">:</span> <span class="mf">3.0</span><span class="p">,</span>
|
||||
<span class="p">},</span>
|
||||
<span class="s1">'black_box_kwargs'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">},</span>
|
||||
<span class="s1">'DMP'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s1">'wrappers'</span><span class="p">:</span> <span class="p">[],</span>
|
||||
<span class="s1">'trajectory_generator_kwargs'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s1">'trajectory_generator_type'</span><span class="p">:</span> <span class="s1">'dmp'</span>
|
||||
<span class="p">},</span>
|
||||
<span class="s1">'phase_generator_kwargs'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s1">'phase_generator_type'</span><span class="p">:</span> <span class="s1">'exp'</span>
|
||||
<span class="p">},</span>
|
||||
<span class="s1">'controller_kwargs'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s1">'controller_type'</span><span class="p">:</span> <span class="s1">'motor'</span><span class="p">,</span>
|
||||
<span class="s1">'p_gains'</span><span class="p">:</span> <span class="mf">1.0</span><span class="p">,</span>
|
||||
<span class="s1">'d_gains'</span><span class="p">:</span> <span class="mf">0.1</span><span class="p">,</span>
|
||||
<span class="p">},</span>
|
||||
<span class="s1">'basis_generator_kwargs'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s1">'basis_generator_type'</span><span class="p">:</span> <span class="s1">'rbf'</span><span class="p">,</span>
|
||||
<span class="s1">'num_basis'</span><span class="p">:</span> <span class="mi">5</span>
|
||||
<span class="p">},</span>
|
||||
<span class="s1">'black_box_kwargs'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">},</span>
|
||||
<span class="s1">'ProDMP'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s1">'wrappers'</span><span class="p">:</span> <span class="p">[],</span>
|
||||
<span class="s1">'trajectory_generator_kwargs'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s1">'trajectory_generator_type'</span><span class="p">:</span> <span class="s1">'prodmp'</span><span class="p">,</span>
|
||||
<span class="s1">'duration'</span><span class="p">:</span> <span class="mf">2.0</span><span class="p">,</span>
|
||||
<span class="s1">'weights_scale'</span><span class="p">:</span> <span class="mf">1.0</span><span class="p">,</span>
|
||||
<span class="p">},</span>
|
||||
<span class="s1">'phase_generator_kwargs'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s1">'phase_generator_type'</span><span class="p">:</span> <span class="s1">'exp'</span><span class="p">,</span>
|
||||
<span class="s1">'tau'</span><span class="p">:</span> <span class="mf">1.5</span><span class="p">,</span>
|
||||
<span class="p">},</span>
|
||||
<span class="s1">'controller_kwargs'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s1">'controller_type'</span><span class="p">:</span> <span class="s1">'motor'</span><span class="p">,</span>
|
||||
<span class="s1">'p_gains'</span><span class="p">:</span> <span class="mf">1.0</span><span class="p">,</span>
|
||||
<span class="s1">'d_gains'</span><span class="p">:</span> <span class="mf">0.1</span><span class="p">,</span>
|
||||
<span class="p">},</span>
|
||||
<span class="s1">'basis_generator_kwargs'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s1">'basis_generator_type'</span><span class="p">:</span> <span class="s1">'prodmp'</span><span class="p">,</span>
|
||||
<span class="s1">'alpha'</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
|
||||
<span class="s1">'num_basis'</span><span class="p">:</span> <span class="mi">5</span><span class="p">,</span>
|
||||
<span class="p">},</span>
|
||||
<span class="s1">'black_box_kwargs'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="n">KNOWN_MPS</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">_BB_DEFAULTS</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
|
||||
<span class="n">_KNOWN_MPS_PLUS_ALL</span> <span class="o">=</span> <span class="n">KNOWN_MPS</span> <span class="o">+</span> <span class="p">[</span><span class="s1">'all'</span><span class="p">]</span>
|
||||
<span class="n">ALL_MOVEMENT_PRIMITIVE_ENVIRONMENTS</span> <span class="o">=</span> <span class="p">{</span><span class="n">mp_type</span><span class="p">:</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">mp_type</span> <span class="ow">in</span> <span class="n">_KNOWN_MPS_PLUS_ALL</span><span class="p">}</span>
|
||||
<span class="n">MOVEMENT_PRIMITIVE_ENVIRONMENTS_FOR_NS</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="register"><a class="viewcode-back" href="../../../generated/fancy_gym.register.html#fancy_gym.register">[docs]</a><span class="k">def</span> <span class="nf">register</span><span class="p">(</span>
|
||||
<span class="nb">id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||
<span class="n">entry_point</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="n">Callable</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">mp_wrapper</span><span class="p">:</span> <span class="n">RawInterfaceWrapper</span> <span class="o">=</span> <span class="n">DefaultMPWrapper</span><span class="p">,</span>
|
||||
<span class="n">register_step_based</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span> <span class="c1"># TODO: Detect</span>
|
||||
<span class="n">add_mp_types</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">KNOWN_MPS</span><span class="p">,</span>
|
||||
<span class="n">mp_config_override</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{},</span>
|
||||
<span class="o">**</span><span class="n">kwargs</span>
|
||||
<span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Registers a Gymnasium environment, including Movement Primitives (MP) versions.</span>
|
||||
<span class="sd"> If you only want to register MP versions for an already registered environment, use fancy_gym.upgrade instead.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> id (str): The unique identifier for the environment.</span>
|
||||
<span class="sd"> entry_point (Optional[Union[Callable, str]]): The entry point for creating the environment.</span>
|
||||
<span class="sd"> mp_wrapper (RawInterfaceWrapper): The MP wrapper for the environment.</span>
|
||||
<span class="sd"> register_step_based (bool): Whether to also register the raw srtep-based version of the environment (default True).</span>
|
||||
<span class="sd"> add_mp_types (List[str]): List of additional MP types to register.</span>
|
||||
<span class="sd"> mp_config_override (Dict[str, Any]): Dictionary for overriding MP configuration.</span>
|
||||
<span class="sd"> **kwargs: Additional keyword arguments which are passed to the environment constructor.</span>
|
||||
|
||||
<span class="sd"> Notes:</span>
|
||||
<span class="sd"> - When `register_step_based` is True, the raw environment will also be registered to gymnasium otherwise only mp-versions will be registered.</span>
|
||||
<span class="sd"> - `entry_point` can be given as a string, allowing the same notation as gymnasium.</span>
|
||||
<span class="sd"> - If `id` already exists in the Gymnasium registry and `register_step_based` is True,</span>
|
||||
<span class="sd"> a warning message will be printed, suggesting to set `register_step_based=False` or use `fancy_gym.upgrade`.</span>
|
||||
|
||||
<span class="sd"> Example:</span>
|
||||
<span class="sd"> To register a step-based environment with Movement Primitive versions (will use default mp_wrapper):</span>
|
||||
<span class="sd"> >>> register("MyEnv-v0", MyEnvClass"my_module:MyEnvClass")</span>
|
||||
|
||||
<span class="sd"> The entry point can also be provided as a string:</span>
|
||||
<span class="sd"> >>> register("MyEnv-v0", "my_module:MyEnvClass")</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">register_step_based</span> <span class="ow">and</span> <span class="nb">id</span> <span class="ow">in</span> <span class="n">gym_registry</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">'[Info] Gymnasium env with id "</span><span class="si">{</span><span class="nb">id</span><span class="si">}</span><span class="s1">" already exists. You should supply register_step_based=False or use fancy_gym.upgrade if you only want to register mp versions of an existing env.'</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">register_step_based</span><span class="p">:</span>
|
||||
<span class="k">assert</span> <span class="n">entry_point</span> <span class="o">!=</span> <span class="kc">None</span><span class="p">,</span> <span class="s1">'You need to provide an entry-point, when registering step-based.'</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">callable</span><span class="p">(</span><span class="n">mp_wrapper</span><span class="p">):</span> <span class="c1"># mp_wrapper can be given as a String (same notation as for entry_point)</span>
|
||||
<span class="n">mod_name</span><span class="p">,</span> <span class="n">attr_name</span> <span class="o">=</span> <span class="n">mp_wrapper</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">':'</span><span class="p">)</span>
|
||||
<span class="n">mod</span> <span class="o">=</span> <span class="n">importlib</span><span class="o">.</span><span class="n">import_module</span><span class="p">(</span><span class="n">mod_name</span><span class="p">)</span>
|
||||
<span class="n">mp_wrapper</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="n">attr_name</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">register_step_based</span><span class="p">:</span>
|
||||
<span class="n">gym_register</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="nb">id</span><span class="p">,</span> <span class="n">entry_point</span><span class="o">=</span><span class="n">entry_point</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
<span class="n">upgrade</span><span class="p">(</span><span class="nb">id</span><span class="p">,</span> <span class="n">mp_wrapper</span><span class="p">,</span> <span class="n">add_mp_types</span><span class="p">,</span> <span class="n">mp_config_override</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="upgrade"><a class="viewcode-back" href="../../../generated/fancy_gym.upgrade.html#fancy_gym.upgrade">[docs]</a><span class="k">def</span> <span class="nf">upgrade</span><span class="p">(</span>
|
||||
<span class="nb">id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
||||
<span class="n">mp_wrapper</span><span class="p">:</span> <span class="n">RawInterfaceWrapper</span> <span class="o">=</span> <span class="n">DefaultMPWrapper</span><span class="p">,</span>
|
||||
<span class="n">add_mp_types</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">KNOWN_MPS</span><span class="p">,</span>
|
||||
<span class="n">base_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">mp_config_override</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{},</span>
|
||||
<span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Upgrades an existing Gymnasium environment to include Movement Primitives (MP) versions.</span>
|
||||
<span class="sd"> We expect the raw step-based env to be already registered with gymnasium. Otherwise please use fancy_gym.register instead.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> id (str): The unique identifier for the environment.</span>
|
||||
<span class="sd"> mp_wrapper (RawInterfaceWrapper): The MP wrapper for the environment (default is DefaultMPWrapper).</span>
|
||||
<span class="sd"> add_mp_types (List[str]): List of additional MP types to register (default is KNOWN_MPS).</span>
|
||||
<span class="sd"> base_id (Optional[str]): The unique identifier for the environment to upgrade. Will use id if non is provided. Can be defined to allow multiple registrations of different versions for the same step-based environment.</span>
|
||||
<span class="sd"> mp_config_override (Dict[str, Any]): Dictionary for overriding MP configuration.</span>
|
||||
|
||||
<span class="sd"> Notes:</span>
|
||||
<span class="sd"> - The `id` parameter should match the ID of the existing Gymnasium environment you wish to upgrade. You can also pick a new one, but then `base_id` needs to be provided.</span>
|
||||
<span class="sd"> - The `mp_wrapper` parameter specifies the MP wrapper to use, allowing for customization.</span>
|
||||
<span class="sd"> - `add_mp_types` can be used to specify additional MP types to register alongside the base environment.</span>
|
||||
<span class="sd"> - The `base_id` parameter should match the ID of the existing Gymnasium environment you wish to upgrade.</span>
|
||||
<span class="sd"> - `mp_config_override` allows for customizing MP configuration if needed.</span>
|
||||
|
||||
<span class="sd"> Example:</span>
|
||||
<span class="sd"> To upgrade an existing environment with MP versions:</span>
|
||||
<span class="sd"> >>> upgrade("MyEnv-v0", mp_wrapper=CustomMPWrapper)</span>
|
||||
|
||||
<span class="sd"> To upgrade an existing environment with custom MP types and configuration:</span>
|
||||
<span class="sd"> >>> upgrade("MyEnv-v0", mp_wrapper=CustomMPWrapper, add_mp_types=["ProDMP", "DMP"], mp_config_override={"param": 42})</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">base_id</span><span class="p">:</span>
|
||||
<span class="n">base_id</span> <span class="o">=</span> <span class="nb">id</span>
|
||||
<span class="n">register_mps</span><span class="p">(</span><span class="nb">id</span><span class="p">,</span> <span class="n">base_id</span><span class="p">,</span> <span class="n">mp_wrapper</span><span class="p">,</span> <span class="n">add_mp_types</span><span class="p">,</span> <span class="n">mp_config_override</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">register_mps</span><span class="p">(</span><span class="nb">id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">base_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">mp_wrapper</span><span class="p">:</span> <span class="n">RawInterfaceWrapper</span><span class="p">,</span> <span class="n">add_mp_types</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="n">KNOWN_MPS</span><span class="p">,</span> <span class="n">mp_config_override</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}):</span>
|
||||
<span class="k">for</span> <span class="n">mp_type</span> <span class="ow">in</span> <span class="n">add_mp_types</span><span class="p">:</span>
|
||||
<span class="n">register_mp</span><span class="p">(</span><span class="nb">id</span><span class="p">,</span> <span class="n">base_id</span><span class="p">,</span> <span class="n">mp_wrapper</span><span class="p">,</span> <span class="n">mp_type</span><span class="p">,</span> <span class="n">mp_config_override</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">mp_type</span><span class="p">,</span> <span class="p">{}))</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">register_mp</span><span class="p">(</span><span class="nb">id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">base_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">mp_wrapper</span><span class="p">:</span> <span class="n">RawInterfaceWrapper</span><span class="p">,</span> <span class="n">mp_type</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="n">mp_config_override</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}):</span>
|
||||
<span class="k">assert</span> <span class="n">mp_type</span> <span class="ow">in</span> <span class="n">KNOWN_MPS</span><span class="p">,</span> <span class="s1">'Unknown mp_type'</span>
|
||||
<span class="k">assert</span> <span class="nb">id</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">ALL_MOVEMENT_PRIMITIVE_ENVIRONMENTS</span><span class="p">[</span><span class="n">mp_type</span><span class="p">],</span> <span class="sa">f</span><span class="s1">'The environment </span><span class="si">{</span><span class="nb">id</span><span class="si">}</span><span class="s1"> is already registered for </span><span class="si">{</span><span class="n">mp_type</span><span class="si">}</span><span class="s1">.'</span>
|
||||
|
||||
<span class="n">parts</span> <span class="o">=</span> <span class="nb">id</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="n">ns</span><span class="p">,</span> <span class="n">name</span> <span class="o">=</span> <span class="s1">'gym'</span><span class="p">,</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
|
||||
<span class="n">ns</span><span class="p">,</span> <span class="n">name</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'env id can not contain multiple "/".'</span><span class="p">)</span>
|
||||
|
||||
<span class="n">parts</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'-'</span><span class="p">)</span>
|
||||
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">2</span> <span class="ow">and</span> <span class="n">parts</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'v'</span><span class="p">),</span> <span class="s1">'Malformed env id, must end in -v</span><span class="si">{int}</span><span class="s1">.'</span>
|
||||
|
||||
<span class="n">fancy_id</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="n">ns</span><span class="si">}</span><span class="s1">_</span><span class="si">{</span><span class="n">mp_type</span><span class="si">}</span><span class="s1">/</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s1">'</span>
|
||||
|
||||
<span class="n">gym_register</span><span class="p">(</span>
|
||||
<span class="nb">id</span><span class="o">=</span><span class="n">fancy_id</span><span class="p">,</span>
|
||||
<span class="n">entry_point</span><span class="o">=</span><span class="n">bb_env_constructor</span><span class="p">,</span>
|
||||
<span class="n">kwargs</span><span class="o">=</span><span class="p">{</span>
|
||||
<span class="s1">'underlying_id'</span><span class="p">:</span> <span class="n">base_id</span><span class="p">,</span>
|
||||
<span class="s1">'mp_wrapper'</span><span class="p">:</span> <span class="n">mp_wrapper</span><span class="p">,</span>
|
||||
<span class="s1">'mp_type'</span><span class="p">:</span> <span class="n">mp_type</span><span class="p">,</span>
|
||||
<span class="s1">'_mp_config_override_register'</span><span class="p">:</span> <span class="n">mp_config_override</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">ALL_MOVEMENT_PRIMITIVE_ENVIRONMENTS</span><span class="p">[</span><span class="n">mp_type</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fancy_id</span><span class="p">)</span>
|
||||
<span class="n">ALL_MOVEMENT_PRIMITIVE_ENVIRONMENTS</span><span class="p">[</span><span class="s1">'all'</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fancy_id</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">ns</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">MOVEMENT_PRIMITIVE_ENVIRONMENTS_FOR_NS</span><span class="p">:</span>
|
||||
<span class="n">MOVEMENT_PRIMITIVE_ENVIRONMENTS_FOR_NS</span><span class="p">[</span><span class="n">ns</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="n">mp_type</span><span class="p">:</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">mp_type</span> <span class="ow">in</span> <span class="n">_KNOWN_MPS_PLUS_ALL</span><span class="p">}</span>
|
||||
<span class="n">MOVEMENT_PRIMITIVE_ENVIRONMENTS_FOR_NS</span><span class="p">[</span><span class="n">ns</span><span class="p">][</span><span class="n">mp_type</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fancy_id</span><span class="p">)</span>
|
||||
<span class="n">MOVEMENT_PRIMITIVE_ENVIRONMENTS_FOR_NS</span><span class="p">[</span><span class="n">ns</span><span class="p">][</span><span class="s1">'all'</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fancy_id</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">nested_update</span><span class="p">(</span><span class="n">base</span><span class="p">:</span> <span class="n">MutableMapping</span><span class="p">,</span> <span class="n">update</span><span class="p">):</span>
|
||||
<span class="w"> </span><span class="sd">"""</span>
|
||||
<span class="sd"> Updated method for nested Mappings</span>
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> base: main Mapping to be updated</span>
|
||||
<span class="sd"> update: updated values for base Mapping</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">any</span><span class="p">([</span><span class="n">item</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">'_type'</span><span class="p">)</span> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">update</span><span class="p">]):</span>
|
||||
<span class="n">base</span> <span class="o">=</span> <span class="n">update</span>
|
||||
<span class="k">return</span> <span class="n">base</span>
|
||||
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">update</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||
<span class="n">base</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">nested_update</span><span class="p">(</span><span class="n">base</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="p">{}),</span> <span class="n">v</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">Mapping</span><span class="p">)</span> <span class="k">else</span> <span class="n">v</span>
|
||||
<span class="k">return</span> <span class="n">base</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">bb_env_constructor</span><span class="p">(</span><span class="n">underlying_id</span><span class="p">,</span> <span class="n">mp_wrapper</span><span class="p">,</span> <span class="n">mp_type</span><span class="p">,</span> <span class="n">mp_config_override</span><span class="o">=</span><span class="p">{},</span> <span class="n">_mp_config_override_register</span><span class="o">=</span><span class="p">{},</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="n">raw_underlying_env</span> <span class="o">=</span> <span class="n">gym_make</span><span class="p">(</span><span class="n">underlying_id</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
<span class="n">underlying_env</span> <span class="o">=</span> <span class="n">mp_wrapper</span><span class="p">(</span><span class="n">raw_underlying_env</span><span class="p">)</span>
|
||||
|
||||
<span class="n">mp_config</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">underlying_env</span><span class="p">,</span> <span class="s1">'mp_config'</span><span class="p">)</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">underlying_env</span><span class="p">,</span> <span class="s1">'mp_config'</span><span class="p">)</span> <span class="k">else</span> <span class="p">{}</span>
|
||||
<span class="n">active_mp_config</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">mp_config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">mp_type</span><span class="p">,</span> <span class="p">{}))</span>
|
||||
<span class="n">global_inherit_defaults</span> <span class="o">=</span> <span class="n">mp_config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'inherit_defaults'</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">inherit_defaults</span> <span class="o">=</span> <span class="n">active_mp_config</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'inherit_defaults'</span><span class="p">,</span> <span class="n">global_inherit_defaults</span><span class="p">)</span>
|
||||
|
||||
<span class="n">config</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">_BB_DEFAULTS</span><span class="p">[</span><span class="n">mp_type</span><span class="p">])</span> <span class="k">if</span> <span class="n">inherit_defaults</span> <span class="k">else</span> <span class="p">{}</span>
|
||||
<span class="n">nested_update</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">active_mp_config</span><span class="p">)</span>
|
||||
<span class="n">nested_update</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">_mp_config_override_register</span><span class="p">)</span>
|
||||
<span class="n">nested_update</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">mp_config_override</span><span class="p">)</span>
|
||||
|
||||
<span class="n">wrappers</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'wrappers'</span><span class="p">)</span>
|
||||
|
||||
<span class="n">traj_gen_kwargs</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'trajectory_generator_kwargs'</span><span class="p">,</span> <span class="p">{})</span>
|
||||
<span class="n">black_box_kwargs</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'black_box_kwargs'</span><span class="p">,</span> <span class="p">{})</span>
|
||||
<span class="n">contr_kwargs</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'controller_kwargs'</span><span class="p">,</span> <span class="p">{})</span>
|
||||
<span class="n">phase_kwargs</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'phase_generator_kwargs'</span><span class="p">,</span> <span class="p">{})</span>
|
||||
<span class="n">basis_kwargs</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'basis_generator_kwargs'</span><span class="p">,</span> <span class="p">{})</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">make_bb</span><span class="p">(</span><span class="n">underlying_env</span><span class="p">,</span>
|
||||
<span class="n">wrappers</span><span class="o">=</span><span class="n">wrappers</span><span class="p">,</span>
|
||||
<span class="n">black_box_kwargs</span><span class="o">=</span><span class="n">black_box_kwargs</span><span class="p">,</span>
|
||||
<span class="n">traj_gen_kwargs</span><span class="o">=</span><span class="n">traj_gen_kwargs</span><span class="p">,</span>
|
||||
<span class="n">controller_kwargs</span><span class="o">=</span><span class="n">contr_kwargs</span><span class="p">,</span>
|
||||
<span class="n">phase_kwargs</span><span class="o">=</span><span class="n">phase_kwargs</span><span class="p">,</span>
|
||||
<span class="n">basis_kwargs</span><span class="o">=</span><span class="n">basis_kwargs</span><span class="p">,</span>
|
||||
<span class="o">**</span><span class="n">config</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<hr/>
|
||||
|
||||
<div role="contentinfo">
|
||||
<p>© Copyright 2020-2024, Fabian Otto, Onur Celik, Dominik Roth, Hongyi Zhou.</p>
|
||||
</div>
|
||||
|
||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<script>
|
||||
jQuery(function () {
|
||||
SphinxRtdTheme.Navigation.enable(true);
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
135
docs/build/html/_modules/index.html
vendored
@ -1,135 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="en" >
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Overview: module code — Fancy Gym 0.2 documentation</title>
|
||||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../_static/style.css" type="text/css" />
|
||||
<link rel="shortcut icon" href="../_static/icon.svg"/>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="../_static/js/html5shiv.min.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
|
||||
<script src="../_static/jquery.js"></script>
|
||||
<script src="../_static/underscore.js"></script>
|
||||
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
|
||||
<script src="../_static/doctools.js"></script>
|
||||
<script src="../_static/sphinx_highlight.js"></script>
|
||||
<script src="../_static/js/theme.js"></script>
|
||||
<link rel="index" title="Index" href="../genindex.html" />
|
||||
<link rel="search" title="Search" href="../search.html" />
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body class="wy-body-for-nav">
|
||||
<div class="wy-grid-for-nav">
|
||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||
<div class="wy-side-scroll">
|
||||
<div class="wy-side-nav-search" >
|
||||
|
||||
|
||||
|
||||
<a href="../index.html" class="icon icon-home">
|
||||
Fancy Gym
|
||||
<img src="../_static/icon.svg" class="logo" alt="Logo"/>
|
||||
</a>
|
||||
<div class="version">
|
||||
0.2
|
||||
</div>
|
||||
<div role="search">
|
||||
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||||
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
</div>
|
||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../guide/installation.html">Installation</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../guide/episodic_rl.html">What is Episodic RL?</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../guide/basic_usage.html">Basic Usage</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../guide/upgrading_envs.html">Creating new MP Environments</a></li>
|
||||
</ul>
|
||||
<p class="caption" role="heading"><span class="caption-text">Environments</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../envs/fancy/index.html">Fancy</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../envs/dmc.html">DeepMind Control (DMC)</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../envs/meta.html">Metaworld</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../envs/open_ai.html">Gymnasium</a></li>
|
||||
</ul>
|
||||
<p class="caption" role="heading"><span class="caption-text">Examples</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../examples/general.html">General Usage Examples</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../examples/dmc.html">DeepMind Control Examples</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../examples/metaworld.html">Metaworld Examples</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../examples/open_ai.html">OpenAI Envs Examples</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../examples/movement_primitives.html">Movement Primitives Examples</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../examples/mp_params_tuning.html">MP Params Tuning Example</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../examples/pd_control_gain_tuning.html">PD Control Gain Tuning Example</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../examples/replanning_envs.html">Replanning Example</a></li>
|
||||
</ul>
|
||||
<p class="caption" role="heading"><span class="caption-text">API</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../api.html">API</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||
<a href="../index.html">Fancy Gym</a>
|
||||
</nav>
|
||||
|
||||
<div class="wy-nav-content">
|
||||
<div class="rst-content">
|
||||
<div role="navigation" aria-label="Page navigation">
|
||||
<ul class="wy-breadcrumbs">
|
||||
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
|
||||
<li class="breadcrumb-item active">Overview: module code</li>
|
||||
<li class="wy-breadcrumbs-aside">
|
||||
</li>
|
||||
</ul>
|
||||
<hr/>
|
||||
</div>
|
||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||
<div itemprop="articleBody">
|
||||
|
||||
<h1>All modules for which code is available</h1>
|
||||
<ul><li><a href="fancy_gym/envs/registry.html">fancy_gym.envs.registry</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<footer>
|
||||
|
||||
<hr/>
|
||||
|
||||
<div role="contentinfo">
|
||||
<p>© Copyright 2020-2024, Fabian Otto, Onur Celik, Dominik Roth, Hongyi Zhou.</p>
|
||||
</div>
|
||||
|
||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<script>
|
||||
jQuery(function () {
|
||||
SphinxRtdTheme.Navigation.enable(true);
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
8
docs/build/html/_sources/api.rst.txt
vendored
@ -1,8 +0,0 @@
|
||||
API
|
||||
===
|
||||
|
||||
.. autosummary::
|
||||
:toctree: generated
|
||||
|
||||
fancy_gym.register
|
||||
fancy_gym.upgrade
|
79
docs/build/html/_sources/envs/dmc.md.txt
vendored
@ -1,79 +0,0 @@
|
||||
# DeepMind Control (DMC)
|
||||
|
||||
<!-- TODO: Add Vid -->
|
||||
|
||||
These are the Environment Wrappers for selected
|
||||
[DeepMind Control](https://github.com/google-deepmind/dm_control)
|
||||
environments in order to use our Motion Primitive gym interface with them.
|
||||
|
||||
## Step-Based Environments
|
||||
|
||||
When installing fancy_gym with the optional dmc extra (e.g. `pip install fancy_gym[dmc]`), all regular dmc tasks are avaible via [Shimmy](https://github.com/Farama-Foundation/Shimmy).
|
||||
|
||||
| Name | Description | Action Dim | Observation Dim |
|
||||
| --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ---------- | --------------- |
|
||||
| `dm_control/acrobot-swingup-v0` | Underactuated double pendulum (Acrobot) with torque applied to the second joint to swing up and balance. | 1 | 6 |
|
||||
| `dm_control/acrobot-swingup_sparse-v0` | Similar to `acrobot-swingup-v0`, but with sparse rewards for achieving the swingup task. | 1 | 6 |
|
||||
| `dm_control/ball_in_cup-catch-v0` | Planar ball-in-cup task where a receptacle must swing to catch a ball. Sparse reward for catching. | 2 | 8 |
|
||||
| `dm_control/cartpole-balance-v0` | Cart-pole task where the goal is to balance an unactuated pole by moving a cart, starting near upright. | 1 | 5 |
|
||||
| `dm_control/cartpole-balance_sparse-v0` | Similar to `cartpole-balance-v0`, but with sparse rewards. | 1 | 5 |
|
||||
| `dm_control/cartpole-swingup-v0` | Cart-pole task with the pole starting downward, requiring swinging up and balancing. | 1 | 5 |
|
||||
| `dm_control/cartpole-swingup_sparse-v0` | Similar to `cartpole-swingup-v0`, but with sparse rewards for the swingup task. | 1 | 5 |
|
||||
| `dm_control/cartpole-two_poles-v0` | Extension of the Cart-pole domain with two serially connected poles, increasing the balancing challenge. | 1 | 8 |
|
||||
| `dm_control/cartpole-three_poles-v0` | Extension of the Cart-pole domain with three serially connected poles, further increasing the challenge. | 1 | 11 |
|
||||
| `dm_control/cheetah-run-v0` | Planar bipedal cheetah robot tasked with running. The reward is proportional to forward velocity up to a maximum speed. | 6 | 17 |
|
||||
| `dm_control/dog-stand-v0` | Dog robot task focusing on achieving a standing posture. | 38 | 223 |
|
||||
| `dm_control/dog-walk-v0` | Dog robot tasked with walking, requiring coordination of movements. | 38 | 223 |
|
||||
| `dm_control/dog-trot-v0` | Dog robot performing a trotting gait. | 38 | 223 |
|
||||
| `dm_control/dog-run-v0` | Dog robot tasked with running, combining speed with stability. | 38 | 223 |
|
||||
| `dm_control/dog-fetch-v0` | Dog robot playing fetch, involving locomotion and object interaction. | 38 | 232 |
|
||||
| `dm_control/finger-spin-v0` | Finger robot required to rotate an unactuated body on a hinge. | 2 | 9 |
|
||||
| `dm_control/finger-turn_easy-v0` | Finger robot task to align the tip of a free body with a target, easier version with a larger target. | 2 | 12 |
|
||||
| `dm_control/finger-turn_hard-v0` | Similar to `finger-turn_easy-v0`, but with a smaller target for increased difficulty. | 2 | 12 |
|
||||
| `dm_control/fish-upright-v0` | Fish robot task focused on righting itself in a fluid environment. | 5 | 21 |
|
||||
| `dm_control/fish-swim-v0` | Fish robot swimming to a target, incorporating fluid dynamics. | 5 | 24 |
|
||||
| `dm_control/hopper-stand-v0` | One-legged hopper robot tasked with achieving a minimal torso height. | 4 | 15 |
|
||||
| `dm_control/hopper-hop-v0` | One-legged hopper robot required to hop, combining height and forward velocity. | 4 | 15 |
|
||||
| `dm_control/humanoid-stand-v0` | Simplified humanoid robot maintaining a standing posture. | 21 | 67 |
|
||||
| `dm_control/humanoid-walk-v0` | Simplified humanoid robot walking at a specified speed. | 21 | 67 |
|
||||
| `dm_control/humanoid-run-v0` | Simplified humanoid robot running, aiming for a high horizontal speed. | 21 | 67 |
|
||||
| `dm_control/humanoid-run_pure_state-v0` | Simplified humanoid robot running with a focus on pure state control. | 21 | 55 |
|
||||
| `dm_control/humanoid_CMU-stand-v0` | Advanced humanoid robot (CMU model) maintaining a standing posture. | 56 | 137 |
|
||||
| `dm_control/humanoid_CMU-walk-v0` | Advanced humanoid robot (CMU model) walking. | 56 | 137 |
|
||||
| `dm_control/humanoid_CMU-run-v0` | Advanced humanoid robot (CMU model) running. | 56 | 137 |
|
||||
| `dm_control/lqr-lqr_2_1-v0` | Linear quadratic regulator (LQR) task with 2 masses and 1 actuator, focusing on position and control optimization. | 1 | 4 |
|
||||
| `dm_control/lqr-lqr_6_2-v0` | Linear quadratic regulator (LQR) task with 6 masses and 2 actuators, more complex control optimization challenge. | 2 | 12 |
|
||||
| `dm_control/manipulator-bring_ball-v0` | Planar manipulator robot bringing a ball to a target location, with object initialization variations. | 5 | 44 |
|
||||
| `dm_control/manipulator-bring_peg-v0` | Planar manipulator task of bringing a peg to a target peg. | 5 | 44 |
|
||||
| `dm_control/manipulator-insert_ball-v0` | Planar manipulator task requiring inserting a ball into a basket. | 5 | 44 |
|
||||
| `dm_control/manipulator-insert_peg-v0` | Planar manipulator challenge of inserting a peg into a slot. | 5 | 44 |
|
||||
| `dm_control/pendulum-swingup-v0` | Classic inverted pendulum task with a torque-limited actuator, requiring multiple swings to swing up and balance. | 1 | 3 |
|
||||
| `dm_control/point_mass-easy-v0` | Planar point mass in an easy task, with actuators corresponding to global x and y axes | 2 | 4 |
|
||||
| `dm_control/point_mass-hard-v0` | Planar point mass in a hard task, with randomized control gains per episode, challenging memoryless agents. | 2 | 4 |
|
||||
| `dm_control/quadruped-walk-v0` | Four-legged robot (Quadruped) tasked with walking. | 12 | 78 |
|
||||
| `dm_control/quadruped-run-v0` | Quadruped robot required to run, balancing speed and stability. | 12 | 78 |
|
||||
| `dm_control/quadruped-escape-v0` | Quadruped robot in an escape task, combining locomotion with environmental interaction. | 12 | 101 |
|
||||
| `dm_control/quadruped-fetch-v0` | Quadruped robot playing fetch, involving complex movements and object interaction. | 12 | 90 |
|
||||
| `dm_control/reacher-easy-v0` | Two-link planar reacher with a randomized target, easier version with a larger target sphere. | 2 | 6 |
|
||||
| `dm_control/reacher-hard-v0` | Similar to `reacher-easy-v0`, but with a smaller target sphere for increased difficulty. | 2 | 6 |
|
||||
| `dm_control/stacker-stack_2-v0` | Stacker task requiring stacking of 2 boxes, with rewards for correct placement and gripper positioning. | 5 | 49 |
|
||||
| `dm_control/stacker-stack_4-v0` | More complex stacker task with 4 boxes, increasing the stacking challenge. | 5 | 63 |
|
||||
| `dm_control/swimmer-swimmer6-v0` | Six-link planar swimmer in fluid dynamics, rewarded for positioning the nose inside a target. | 5 | 25 |
|
||||
| `dm_control/swimmer-swimmer15-v0` | Fifteen-link planar swimmer, a more complex version of the swimmer task with extended dynamics. | 14 | 61 |
|
||||
| `dm_control/walker-stand-v0` | Planar walker robot tasked with maintaining an upright torso and minimal height. | 6 | 24 |
|
||||
| `dm_control/walker-walk-v0` | Planar walker robot walking task, focusing on forward velocity and stability. | 6 | 24 |
|
||||
| `dm_control/walker-run-v0` | Planar walker robot running task, aiming for high speed and balance. | 6 | 24 |
|
||||
|
||||
## MP Environments
|
||||
|
||||
[//]: <> (These environments are wrapped-versions of their Deep Mind Control Suite (DMC) counterparts. Given most task can be)
|
||||
[//]: <> (solved in shorter horizon lengths than the original 1000 steps, we often shorten the episodes for those task.)
|
||||
|
||||
| Name | Description | Trajectory Horizon | Action Dimension | Context Dimension |
|
||||
| ---------------------------------------- | ------------------------------------------------------------------------------ | ------------------ | ---------------- | ----------------- |
|
||||
| `dm_control_ProDMP/ball_in_cup-catch-v0` | A ProMP wrapped version of the "catch" task for the "ball_in_cup" environment. | 1000 | 10 | 2 |
|
||||
| `dm_control_DMP/ball_in_cup-catch-v0` | A DMP wrapped version of the "catch" task for the "ball_in_cup" environment. | 1000 | 10 | 2 |
|
||||
| `dm_control_ProDMP/reacher-easy-v0` | A ProMP wrapped version of the "easy" task for the "reacher" environment. | 1000 | 10 | 4 |
|
||||
| `dm_control_DMP/reacher-easy-v0` | A DMP wrapped version of the "easy" task for the "reacher" environment. | 1000 | 10 | 4 |
|
||||
| `dm_control_ProDMP/reacher-hard-v0` | A ProMP wrapped version of the "hard" task for the "reacher" environment. | 1000 | 10 | 4 |
|
||||
| `dm_control_DMP/reacher-hard-v0` | A DMP wrapped version of the "hard" task for the "reacher" environment. | 1000 | 10 | 4 |
|
@ -1,18 +0,0 @@
|
||||
AirHockey
|
||||
=========
|
||||
|
||||
Fancy Gym provides access to a range of environments for the `Robot Air Hockey Challenge <https://air-hockey-challenge.robot-learning.net/>`_. The challenge aims to close the gap between simulated learning and real-world application by focusing on various aspects of robotic operation, such as dealing with disturbances, observation noise, safety, and actuator limitations.
|
||||
|
||||
The environments available through Fancy Gym allow for the development of agents capable of performing tasks with different levels of complexity. These tasks include hitting and defending in air hockey with both three degrees of freedom (3 DoF) and seven degrees of freedom (7 DoF) configurations. The 7 DoF tasks are based on the KUKA iiwa14 robot model, which is used in the simulations to represent a higher level of control complexity akin to real-world settings.
|
||||
|
||||
Participants in the challenge are required to develop strategies that enable their robots to react and adapt within these dynamic environments. The final phase of the challenge involves a tournament where the developed agents will be tested in a comprehensive game scenario, both in simulation and, for the top teams, on actual robotic systems.
|
||||
|
||||
For detailed information on the challenge, including rules, stages, and submission requirements, please visit the `official Robot Air Hockey Challenge website <https://air-hockey-challenge.robot-learning.net/>`_.
|
||||
|
||||
The available environments are as follows:
|
||||
- fancy/AirHockey-7dof-hit-v0
|
||||
- fancy/AirHockey-7dof-defend-v0
|
||||
- fancy/AirHockey-3dof-hit-v0
|
||||
- fancy/AirHockey-3dof-defend-v0
|
||||
- fancy/AirHockey-7dof-hit-airhockit2023-v0
|
||||
- fancy/AirHockey-7dof-defend-airhockit2023-v0
|
@ -1,22 +0,0 @@
|
||||
# Classic Control
|
||||
|
||||
Classic Control environments provide a foundational platform for exploring and experimenting with RL algorithms. These environments are designed to be simple, allowing researchers and practitioners to focus on the fundamental principles of control without the complexities of high-dimensional and physics-based simulations.
|
||||
|
||||
## Step-Based Environments
|
||||
|
||||
| Name | Description | Horizon | Action Dimension | Observation Dimension |
|
||||
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ---------------- | --------------------- |
|
||||
| `fancy/SimpleReacher-v0` | Simple reaching task (2 links) without any physics simulation. Provides no reward until 150 time steps. This allows the agent to explore the space, but requires precise actions towards the end of the trajectory. | 200 | 2 | 9 |
|
||||
| `fancy/LongSimpleReacher-v0` | Simple reaching task (5 links) without any physics simulation. Provides no reward until 150 time steps. This allows the agent to explore the space, but requires precise actions towards the end of the trajectory. | 200 | 5 | 18 |
|
||||
| `fancy/ViaPointReacher-v0` | Simple reaching task leveraging a via point, which supports self collision detection. Provides a reward only at 100 and 199 for reaching the viapoint and goal point, respectively. | 200 | 5 | 18 |
|
||||
| `fancy/HoleReacher-v0` | 5 link reaching task where the end-effector needs to reach into a narrow hole without collding with itself or walls. | 200 | 5 | 18 |
|
||||
|
||||
## MP Environments
|
||||
|
||||
| Name | Description | Horizon | Action Dimension | Context Dimension |
|
||||
| ----------------------------------- | -------------------------------------------------------------------------------------------------------- | ------- | ---------------- | ----------------- |
|
||||
| `fancy_DMP/ViaPointReacher-v0` | A DMP provides a trajectory for the `fancy/ViaPointReacher-v0` task. | 200 | 25 |
|
||||
| `fancy_DMP/HoleReacherFixedGoal-v0` | A DMP provides a trajectory for the `fancy/HoleReacher-v0` task with a fixed goal attractor. | 200 | 25 |
|
||||
| `fancy_DMP/HoleReacher-v0` | A DMP provides a trajectory for the `fancy/HoleReacher-v0` task. The goal attractor needs to be learned. | 200 | 30 |
|
||||
|
||||
[//]: |`fancy/HoleReacherProMPP-v0`|
|
@ -1,17 +0,0 @@
|
||||
Fancy
|
||||
=====
|
||||
|
||||
Fancy Gym adds a couple new environments. Some of these are adaptations of existing environments while others were designed and build by us from the ground up.
|
||||
|
||||
.. raw:: html
|
||||
|
||||
<div class='center'>
|
||||
<img src="../../_static/imgs/env_gifs/Box_Pushing.gif" style="margin: 5%; width: 45%;">
|
||||
<p>Box Pushing Task (<a href="./mujoco.html#box-pushing">fancy/BoxPushingDense-v0</a>)</p>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
.. toctree::
|
||||
mujoco.md
|
||||
airhockey
|
||||
classic_control.md
|
114
docs/build/html/_sources/envs/fancy/mujoco.md.txt
vendored
@ -1,114 +0,0 @@
|
||||
# Mujoco
|
||||
|
||||
## Step-Based Environments
|
||||
|
||||
### Box Pushing
|
||||
|
||||
<div class='center'>
|
||||
<img src="../../_static/imgs/env_gifs/Box_Pushing.gif" style="margin: 5%; width: 45%;">
|
||||
</div>
|
||||
|
||||
The box-pushing task presents an advanced environment for reinforcement learning (RL) systems, utilizing the versatile Franka Emika Panda robotic arm, which boasts seven degrees of freedom (DoFs). The objective of this task is to precisely manipulate a box to a specified goal location and orientation.
|
||||
|
||||
This environment defines its context space with a goal position constrained within a certain range along the x and y axes and a goal orientation that encompasses the full 360-degree range on the z-axis. The robot's mission is to achieve positional accuracy within 5 centimeters and an orientation accuracy within 0.5 radians of the specified goal.
|
||||
|
||||
The observation space includes the sine and cosine values of the robotic joint angles, their velocities, and quaternion orientations for the end-effector and the box. The action space describes the applied torques for each joint.
|
||||
|
||||
A composite reward function serves as the performance metric for the RL system. It accounts for the distance to the goal, the box's orientation, maintaining a rod within the box, achieving the rod's desired orientation, and includes penalties for joint position and velocity limit violations, as well as an action cost for energy expenditure.
|
||||
|
||||
Variations of this environment are available, differing in reward structures and the optionality of randomizing the box's initial position. These variations are purposefully designed to challenge RL algorithms, enhancing their generalization and adaptation capabilities. Temporally sparse environments only provide a reward at the last timestep. Spatially sparse environments only provide a reward, if the goal is almost reached, the box is close enought to the goal and somewhat correctly aligned.
|
||||
|
||||
| Name | Description | Horizon | Action Dimension | Observation Dimension |
|
||||
| ------------------------------------------ | -------------------------------------------------------------------- | ------- | ---------------- | --------------------- |
|
||||
| `fancy/BoxPushingDense-v0` | Custom Box-pushing task with dense rewards | 100 | 3 | 13 |
|
||||
| `fancy/BoxPushingTemporalSparse-v0` | Custom Box-pushing task with temporally sparse rewards | 100 | 3 | 13 |
|
||||
| `fancy/BoxPushingTemporalSpatialSparse-v0` | Custom Box-pushing task with temporally and spatially sparse rewards | 100 | 3 | 13 |
|
||||
|
||||
---
|
||||
|
||||
### Table Tennis
|
||||
|
||||
<div class='center'>
|
||||
<img src="../../_static/imgs/env_gifs/Table_Tennis.gif" style="margin: 5%; width: 45%;">
|
||||
</div>
|
||||
|
||||
The table tennis task offers a robotic arm equipped with seven degrees of freedom (DoFs). The task is to respond to incoming balls and return them accurately to a specified goal location on the opponent's side of the table.
|
||||
|
||||
The context space for this environment includes the initial ball position, with x-coordinates ranging from -1 to -0.2 meters and y-coordinates from -0.65 to 0.65 meters, and the goal position with x-coordinates between -1.2 to -0.2 meters and y-coordinates from -0.6 to 0.6 meters. The full observation space comprises the sine and cosine values of the joint angles, the joint velocities, and the ball's velocity, providing comprehensive information for the RL system to base its decisions on.
|
||||
|
||||
A task is considered successfully completed when the returned ball not only lands on the opponent's side of the table but also within a tight margin of 20 centimeters from the goal location. The reward function is designed to reflect various conditions of play, including whether the ball was hit, if it landed on the table, and the proximity of the ball's landing position to the goal location.
|
||||
|
||||
Variations of the table tennis environment are available to cater to different research needs. These variations maintain the foundational challenge of precise ball return while providing additional complexity for RL algorithms to overcome.
|
||||
|
||||
| Name | Description | Horizon | Action Dimension | Observation Dimension |
|
||||
| ----------------------------------- | -------------------------------------------------------------------------------------------------- | ------- | ---------------- | --------------------- |
|
||||
| `fancy/TableTennis2D-v0` | Table Tennis task with 2D context, based on a custom environment for table tennis | 350 | 7 | 19 |
|
||||
| `fancy/TableTennis2DReplan-v0` | Table Tennis task with 2D context and replanning, based on a custom environment for table tennis | 350 | 7 | 19 |
|
||||
| `fancy/TableTennis4D-v0` | Table Tennis task with 4D context, based on a custom environment for table tennis | 350 | 7 | 22 |
|
||||
| `fancy/TableTennis4DReplan-v0` | Table Tennis task with 4D context and replanning, based on a custom environment for table tennis | 350 | 7 | 22 |
|
||||
| `fancy/TableTennisWind-v0` | Table Tennis task with wind effects, based on a custom environment for table tennis | 350 | 7 | 19 |
|
||||
| `fancy/TableTennisGoalSwitching-v0` | Table Tennis task with goal switching, based on a custom environment for table tennis | 350 | 7 | 19 |
|
||||
| `fancy/TableTennisWindReplan-v0` | Table Tennis task with wind effects and replanning, based on a custom environment for table tennis | 350 | 7 | 19 |
|
||||
|
||||
---
|
||||
|
||||
### Beer Pong
|
||||
|
||||
<div class='center'>
|
||||
<img src="../../_static/imgs/env_gifs/Beer_Pong.gif" style="margin: 5%; width: 45%;">
|
||||
</div>
|
||||
<!-- TODO: Vid is ugly and unsuccessful. Replace. -->
|
||||
|
||||
The Beer Pong task is based upon a robotic system with seven Degrees of Freedom (DoF), challenging the robot to throw a ball into a cup placed on a large table. The environment's context is established by the cup's location, defined within a range of x-coordinates from -1.42 to 1.42 meters and y-coordinates from -4.05 to -1.25 meters.
|
||||
|
||||
The observation space includes the cosine and sine of the robot's joint angles, the angular velocities, and distances of the ball relative to the top and bottom of the cup, along with the cup's position and the current timestep. The action space for the robot is defined by the torques applied to each joint. For episode-based methods, the parameter space is expanded to 15 dimensions, which includes two weights for the basis functions per joint and the duration of the throw, namely the ball release time.
|
||||
|
||||
Action penalties are implemented in the form of squared torque sums applied across all joints, penalizing excessive force and encouraging efficient motion. The reward function at each timestep t before the final timestep T penalizes the action penalty, while at t=T, a non-Markovian reward based on the ball's position relative to the cup and the action penalty is considered.
|
||||
|
||||
An additional reward component at the final timestep T assesses the chosen ball release time to ensure it falls within a reasonable range. The overall return for an episode is the sum of the rewards at each timestep, the task-specific reward, and the release time reward.
|
||||
|
||||
A successful throw in this task is determined by the ball landing in the cup at the episode's conclusion, showcasing the robot's ability to accurately predict and execute the complex motion required for this popular party game.
|
||||
|
||||
| Name | Description | Horizon | Action Dimension | Observation Dimension |
|
||||
| ------------------------------- | ---------------------------------------------------------------------------------------------- | ------- | ---------------- | --------------------- |
|
||||
| `fancy/BeerPong-v0` | Beer Pong task, based on a custom environment with multiple task variations | 300 | 3 | 29 |
|
||||
| `fancy/BeerPongStepBased-v0` | Step-based rewards for the Beer Pong task, based on a custom environment with episodic rewards | 300 | 3 | 29 |
|
||||
| `fancy/BeerPongFixedRelease-v0` | Beer Pong with fixed release, based on a custom environment with episodic rewards | 300 | 3 | 29 |
|
||||
|
||||
---
|
||||
|
||||
### Variations of existing environments
|
||||
|
||||
| Name | Description | Horizon | Action Dimension | Observation Dimension |
|
||||
| ------------------------------ | ------------------------------------------------------------------------------------------------ | ------- | ---------------- | --------------------- |
|
||||
| `fancy/Reacher-v0` | Modified (5 links) gymnasiums's mujoco `Reacher-v2` (2 links) | 200 | 5 | 21 |
|
||||
| `fancy/ReacherSparse-v0` | Same as `fancy/Reacher-v0`, but the distance penalty is only provided in the last time step. | 200 | 5 | 21 |
|
||||
| `fancy/LongReacher-v0` | Modified (7 links) gymnasiums's mujoco `Reacher-v2` (2 links) | 200 | 7 | 27 |
|
||||
| `fancy/LongReacherSparse-v0` | Same as `fancy/LongReacher-v0`, but the distance penalty is only provided in the last time step. | 200 | 7 | 27 |
|
||||
| `fancy/Reacher5d-v0` | Reacher task with 5 links, based on Gymnasium's `gym.envs.mujoco.ReacherEnv` | 200 | 5 | 20 |
|
||||
| `fancy/Reacher5dSparse-v0` | Sparse Reacher task with 5 links, based on Gymnasium's `gym.envs.mujoco.ReacherEnv` | 200 | 5 | 20 |
|
||||
| `fancy/Reacher7d-v0` | Reacher task with 7 links, based on Gymnasium's `gym.envs.mujoco.ReacherEnv` | 200 | 7 | 22 |
|
||||
| `fancy/Reacher7dSparse-v0` | Sparse Reacher task with 7 links, based on Gymnasium's `gym.envs.mujoco.ReacherEnv` | 200 | 7 | 22 |
|
||||
| `fancy/HopperJumpSparse-v0` | Hopper Jump task with sparse rewards, based on Gymnasium's `gym.envs.mujoco.Hopper` | 250 | 3 | 15 / 16\* |
|
||||
| `fancy/HopperJump-v0` | Hopper Jump task with continuous rewards, based on Gymnasium's `gym.envs.mujoco.Hopper` | 250 | 3 | 15 / 16\* |
|
||||
| `fancy/AntJump-v0` | Ant Jump task, based on Gymnasium's `gym.envs.mujoco.Ant` | 200 | 8 | 119 |
|
||||
| `fancy/HalfCheetahJump-v0` | HalfCheetah Jump task, based on Gymnasium's `gym.envs.mujoco.HalfCheetah` | 100 | 6 | 112 |
|
||||
| `fancy/HopperJumpOnBox-v0` | Hopper Jump on Box task, based on Gymnasium's `gym.envs.mujoco.Hopper` | 250 | 4 | 16 / 100\* |
|
||||
| `fancy/HopperThrow-v0` | Hopper Throw task, based on Gymnasium's `gym.envs.mujoco.Hopper` | 250 | 3 | 18 / 100\* |
|
||||
| `fancy/HopperThrowInBasket-v0` | Hopper Throw in Basket task, based on Gymnasium's `gym.envs.mujoco.Hopper` | 250 | 3 | 18 / 100\* |
|
||||
| `fancy/Walker2DJump-v0` | Walker 2D Jump task, based on Gymnasium's `gym.envs.mujoco.Walker2d` | 300 | 6 | 18 / 19\* |
|
||||
|
||||
\*Observation dimensions depend on configuration.
|
||||
|
||||
<!--
|
||||
No longer used?
|
||||
| Name | Description | Horizon | Action Dimension | Observation Dimension |
|
||||
| --------------------------- | --------------------------------------------------------------------------------------------------- | ------- | ---------------- | --------------------- |
|
||||
| `fancy/BallInACupSimple-v0` | Ball-in-a-cup task where a robot needs to catch a ball attached to a cup at its end-effector. | 4000 | 3 | wip |
|
||||
| `fancy/BallInACup-v0` | Ball-in-a-cup task where a robot needs to catch a ball attached to a cup at its end-effector | 4000 | 7 | wip |
|
||||
| `fancy/BallInACupGoal-v0` | Similar to `fancy/BallInACupSimple-v0` but the ball needs to be caught at a specified goal position | 4000 | 7 | wip |
|
||||
-->
|
||||
|
||||
## MP Environments
|
||||
|
||||
Most of these envs also exist as MP-variants. Refer to them using `fancy_DMP/<name>` `fancy_ProMP/<name>` or `fancy_ProDMP/<name>`.
|
70
docs/build/html/_sources/envs/meta.md.txt
vendored
@ -1,70 +0,0 @@
|
||||
# Metaworld
|
||||
|
||||
<div class='center'>
|
||||
<img src="../_static/imgs/env_gifs/Metaworld.gif" style="margin: 5%; width: 45%;">
|
||||
<p>Metaworld Dial Turn Task (metaworld/dial-turn-v2)</p>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
[Metaworld](https://meta-world.github.io/) is an open-source simulated benchmark designed to advance meta-reinforcement learning and multi-task learning, comprising 50 diverse robotic manipulation tasks. The benchmark features a universal tabletop environment equipped with a simulated Sawyer arm and a variety of everyday objects. This shared environment is pivotal for reusing structured learning and efficiently acquiring related tasks.
|
||||
|
||||
## Step-Based Environments
|
||||
|
||||
`fancy_gym` makes all metaworld ML1 tasks avaible via the standard gym interface.
|
||||
|
||||
| Name | Description | Horizon | Action Dimension | Observation Dimension | Context Dimension |
|
||||
| ---------------------------------------- | ------------------------------------------------------------------------------------- | ------- | ---------------- | --------------------- | ----------------- |
|
||||
| `metaworld/assembly-v2` | A task where the robot must assemble components. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/basketball-v2` | A task where the robot must play a game of basketball. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/bin-picking-v2` | A task involving the robot picking objects from a bin. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/box-close-v2` | A task requiring the robot to close a box. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/button-press-topdown-v2` | A task where the robot must press a button from a top-down perspective. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/button-press-topdown-wall-v2` | A task involving the robot pressing a button with a wall from a top-down perspective. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/button-press-v2` | A task where the robot must press a button. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/button-press-wall-v2` | A task involving the robot pressing a button with a wall. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/coffee-button-v2` | A task where the robot must press a button on a coffee machine. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/coffee-pull-v2` | A task involving the robot pulling a lever on a coffee machine. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/coffee-push-v2` | A task involving the robot pushing a component on a coffee machine. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/dial-turn-v2` | A task where the robot must turn a dial. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/disassemble-v2` | A task requiring the robot to disassemble an object. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/door-close-v2` | A task where the robot must close a door. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/door-lock-v2` | A task involving the robot locking a door. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/door-open-v2` | A task where the robot must open a door. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/door-unlock-v2` | A task involving the robot unlocking a door. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/hand-insert-v2` | A task requiring the robot to insert a hand into an object. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/drawer-close-v2` | A task where the robot must close a drawer. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/drawer-open-v2` | A task involving the robot opening a drawer. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/faucet-open-v2` | A task requiring the robot to open a faucet. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/faucet-close-v2` | A task where the robot must close a faucet. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/hammer-v2` | A task where the robot must use a hammer. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/handle-press-side-v2` | A task involving the robot pressing a handle from the side. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/handle-press-v2` | A task where the robot must press a handle. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/handle-pull-side-v2` | A task requiring the robot to pull a handle from the side. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/handle-pull-v2` | A task where the robot must pull a handle. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/lever-pull-v2` | A task involving the robot pulling a lever. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/peg-insert-side-v2` | A task requiring the robot to insert a peg from the side. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/pick-place-wall-v2` | A task involving the robot picking and placing an object with a wall. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/pick-out-of-hole-v2` | A task where the robot must pick an object out of a hole. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/reach-v2` | A task where the robot must reach an object. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/push-back-v2` | A task involving the robot pushing an object backward. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/push-v2` | A task where the robot must push an object. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/pick-place-v2` | A task involving the robot picking up and placing an object. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/plate-slide-v2` | A task requiring the robot to slide a plate. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/plate-slide-side-v2` | A task involving the robot sliding a plate from the side. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/plate-slide-back-v2` | A task where the robot must slide a plate backward. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/plate-slide-back-side-v2` | A task involving the robot sliding a plate backward from the side. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/peg-unplug-side-v2` | A task where the robot must unplug a peg from the side. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/soccer-v2` | A task where the robot must play soccer. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/stick-push-v2` | A task involving the robot pushing a stick. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/stick-pull-v2` | A task where the robot must pull a stick. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/push-wall-v2` | A task involving the robot pushing against a wall. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/reach-wall-v2` | A task where the robot must reach an object with a wall. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/shelf-place-v2` | A task involving the robot placing an object on a shelf. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/sweep-into-v2` | A task where the robot must sweep objects into a container. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/sweep-v2` | A task requiring the robot to sweep. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/window-open-v2` | A task where the robot must open a window. | 150 | 4 | 39 | 6 |
|
||||
| `metaworld/window-close-v2` | A task involving the robot closing a window. | 150 | 4 | 39 | 6 |
|
||||
|
||||
## MP Environments
|
||||
|
||||
All envs also exist in MP-variants. Refer to them using `metaworld_ProMP/<name-v2>` or `metaworld_ProDMP/<name-v2>` (DMP is currently not supported as of now).
|
24
docs/build/html/_sources/envs/open_ai.md.txt
vendored
@ -1,24 +0,0 @@
|
||||
# Gymnasium
|
||||
|
||||
<div class='center'>
|
||||
<img src="../_static/imgs/env_gifs/Lunar_Lander.gif" style="margin: 5%; width: 60%;">
|
||||
<p>Lunar Lander Task (LunarLander-v2)</p>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
We provide MP versions for selected [Farama Gymnasium](https://gymnasium.farama.org/) (previously OpenAI Gym) environments.
|
||||
|
||||
## Step-Based Environments
|
||||
|
||||
We refer to the [Gymnasium docs](https://gymnasium.farama.org/content/basic_usage/) for an overview of step-based environments provided by them.
|
||||
|
||||
## MP Environments
|
||||
|
||||
These environments are wrapped-versions of their Gymnasium counterparts.
|
||||
|
||||
| Name | Description | Trajectory Horizon | Action Dimension |
|
||||
| ------------------------------------ | -------------------------------------------------------------------- | ------------------ | ---------------- |
|
||||
| `gym_ProMP/ContinuousMountainCar-v0` | A ProMP wrapped version of the ContinuousMountainCar-v0 environment. | 100 | 1 |
|
||||
| `gym_ProMP/Reacher-v2` | A ProMP wrapped version of the Reacher-v2 environment. | 50 | 2 |
|
||||
| `gym_ProMP/FetchSlideDense-v1` | A ProMP wrapped version of the FetchSlideDense-v1 environment. | 50 | 4 |
|
||||
| `gym_ProMP/FetchReachDense-v1` | A ProMP wrapped version of the FetchReachDense-v1 environment. | 50 | 4 |
|
@ -1,6 +0,0 @@
|
||||
DeepMind Control Examples
|
||||
=========================
|
||||
|
||||
.. literalinclude:: ../../../fancy_gym/examples/examples_dmc.py
|
||||
:language: python
|
||||
:linenos:
|
@ -1,8 +0,0 @@
|
||||
.. _example-general:
|
||||
|
||||
General Usage Examples
|
||||
======================
|
||||
|
||||
.. literalinclude:: ../../../fancy_gym/examples/examples_general.py
|
||||
:language: python
|
||||
:linenos:
|
@ -1,6 +0,0 @@
|
||||
Metaworld Examples
|
||||
==================
|
||||
|
||||
.. literalinclude:: ../../../fancy_gym/examples/examples_metaworld.py
|
||||
:language: python
|
||||
:linenos:
|
@ -1,9 +0,0 @@
|
||||
.. _example-mp:
|
||||
|
||||
|
||||
Movement Primitives Examples
|
||||
============================
|
||||
|
||||
.. literalinclude:: ../../../fancy_gym/examples/examples_movement_primitives.py
|
||||
:language: python
|
||||
:linenos:
|
@ -1,6 +0,0 @@
|
||||
MP Params Tuning Example
|
||||
========================
|
||||
|
||||
.. literalinclude:: ../../../fancy_gym/examples/mp_params_tuning.py
|
||||
:language: python
|
||||
:linenos:
|
@ -1,6 +0,0 @@
|
||||
OpenAI Envs Examples
|
||||
====================
|
||||
|
||||
.. literalinclude:: ../../../fancy_gym/examples/examples_open_ai.py
|
||||
:language: python
|
||||
:linenos:
|
@ -1,6 +0,0 @@
|
||||
PD Control Gain Tuning Example
|
||||
==============================
|
||||
|
||||
.. literalinclude:: ../../../fancy_gym/examples/pd_control_gain_tuning.py
|
||||
:language: python
|
||||
:linenos:
|
@ -1,6 +0,0 @@
|
||||
Replanning Example
|
||||
==================
|
||||
|
||||
.. literalinclude:: ../../../fancy_gym/examples/example_replanning_envs.py
|
||||
:language: python
|
||||
:linenos:
|
@ -1,23 +0,0 @@
|
||||
fancy\_gym.envs
|
||||
===============
|
||||
|
||||
.. automodule:: fancy_gym.envs
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,6 +0,0 @@
|
||||
fancy\_gym.register
|
||||
===================
|
||||
|
||||
.. currentmodule:: fancy_gym
|
||||
|
||||
.. autofunction:: register
|
@ -1,6 +0,0 @@
|
||||
fancy\_gym.upgrade
|
||||
==================
|
||||
|
||||
.. currentmodule:: fancy_gym
|
||||
|
||||
.. autofunction:: upgrade
|
125
docs/build/html/_sources/guide/basic_usage.rst.txt
vendored
@ -1,125 +0,0 @@
|
||||
Basic Usage
|
||||
-----------
|
||||
|
||||
We will only show the basics here and prepared :ref:`multiple examples <example-general>` for a more detailed look.
|
||||
|
||||
Step-Based Environments
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Regular step based environments added by Fancy Gym are added into the
|
||||
``fancy/`` namespace.
|
||||
|
||||
.. note::
|
||||
Legacy versions of Fancy Gym used ``fancy_gym.make(...)``. This is no longer supported and will raise an Exception on new versions.
|
||||
|
||||
.. code:: python
|
||||
|
||||
import gymnasium as gym
|
||||
import fancy_gym
|
||||
|
||||
env = gym.make('fancy/Reacher5d-v0')
|
||||
# or env = gym.make('metaworld/reach-v2') # fancy_gym allows access to all metaworld ML1 tasks via the metaworld/ NS
|
||||
# or env = gym.make('dm_control/ball_in_cup-catch-v0')
|
||||
# or env = gym.make('Reacher-v2')
|
||||
observation = env.reset(seed=1)
|
||||
|
||||
for i in range(1000):
|
||||
action = env.action_space.sample()
|
||||
observation, reward, terminated, truncated, info = env.step(action)
|
||||
if i % 5 == 0:
|
||||
env.render()
|
||||
|
||||
if terminated or truncated:
|
||||
observation, info = env.reset()
|
||||
|
||||
Black-Box Environments
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
All environments provide by default the cumulative episode reward, this
|
||||
can however be changed if necessary. Optionally, each environment
|
||||
returns all collected information from each step as part of the infos.
|
||||
This information is, however, mainly meant for debugging as well as
|
||||
logging and not for training.
|
||||
|
||||
+---------------------+--------------------------------------------------------------------------------------------------------------------------------------------+----------+
|
||||
| Key | Description | Type |
|
||||
+=====================+============================================================================================================================================+==========+
|
||||
| `positions` | Generated trajectory from MP | Optional |
|
||||
+---------------------+--------------------------------------------------------------------------------------------------------------------------------------------+----------+
|
||||
| `velocities` | Generated trajectory from MP | Optional |
|
||||
+---------------------+--------------------------------------------------------------------------------------------------------------------------------------------+----------+
|
||||
| `step_actions` | Step-wise executed action based on controller output | Optional |
|
||||
+---------------------+--------------------------------------------------------------------------------------------------------------------------------------------+----------+
|
||||
| `step_observations` | Step-wise intermediate observations | Optional |
|
||||
+---------------------+--------------------------------------------------------------------------------------------------------------------------------------------+----------+
|
||||
| `step_rewards` | Step-wise rewards | Optional |
|
||||
+---------------------+--------------------------------------------------------------------------------------------------------------------------------------------+----------+
|
||||
| `trajectory_length` | Total number of environment interactions | Always |
|
||||
+---------------------+--------------------------------------------------------------------------------------------------------------------------------------------+----------+
|
||||
| `other` | All other information from the underlying environment are returned as a list with length `trajectory_length` maintaining the original key. | Always |
|
||||
| | In case some information are not provided every time step, the missing values are filled with `None`. | |
|
||||
+---------------------+--------------------------------------------------------------------------------------------------------------------------------------------+----------+
|
||||
|
||||
Existing MP tasks can be created the same way as above. The namespace of
|
||||
a MP-variant of an environment is given by
|
||||
``<original namespace>_<MP name>/``. Just keep in mind, calling
|
||||
``step()`` executes a full trajectory.
|
||||
|
||||
.. note::
|
||||
Currently, we are also in the process of enabling replanning as
|
||||
well as learning of sub-trajectories. This allows to split the
|
||||
episode into multiple trajectories and is a hybrid setting between
|
||||
step-based and black-box leaning. While this is already
|
||||
implemented, it is still in beta and requires further testing. Feel
|
||||
free to try it and open an issue with any problems that occur.
|
||||
|
||||
.. code:: python
|
||||
|
||||
import gymnasium as gym
|
||||
import fancy_gym
|
||||
|
||||
env = gym.make('fancy_ProMP/Reacher5d-v0')
|
||||
# or env = gym.make('metaworld_ProDMP/reach-v2')
|
||||
# or env = gym.make('dm_control_DMP/ball_in_cup-catch-v0')
|
||||
# or env = gym.make('gym_ProMP/Reacher-v2') # mp versions of envs added directly by gymnasium are in the gym_<MP-type> NS
|
||||
|
||||
# render() can be called once in the beginning with all necessary arguments.
|
||||
# To turn it of again just call render() without any arguments.
|
||||
env.render(mode='human')
|
||||
|
||||
# This returns the context information, not the full state observation
|
||||
observation, info = env.reset(seed=1)
|
||||
|
||||
for i in range(5):
|
||||
action = env.action_space.sample()
|
||||
observation, reward, terminated, truncated, info = env.step(action)
|
||||
|
||||
# terminated or truncated is always True as we are working on the episode level, hence we always reset()
|
||||
observation, info = env.reset()
|
||||
|
||||
To show all available environments, we provide some additional
|
||||
convenience variables. All of them return a dictionary with the keys
|
||||
``DMP``, ``ProMP``, ``ProDMP`` and ``all`` that store a list of
|
||||
available environment ids.
|
||||
|
||||
.. code:: python
|
||||
|
||||
import fancy_gym
|
||||
|
||||
print("All Black-box tasks:")
|
||||
print(fancy_gym.ALL_MOVEMENT_PRIMITIVE_ENVIRONMENTS)
|
||||
|
||||
print("Fancy Black-box tasks:")
|
||||
print(fancy_gym.ALL_FANCY_MOVEMENT_PRIMITIVE_ENVIRONMENTS)
|
||||
|
||||
print("OpenAI Gym Black-box tasks:")
|
||||
print(fancy_gym.ALL_GYM_MOVEMENT_PRIMITIVE_ENVIRONMENTS)
|
||||
|
||||
print("Deepmind Control Black-box tasks:")
|
||||
print(fancy_gym.ALL_DMC_MOVEMENT_PRIMITIVE_ENVIRONMENTS)
|
||||
|
||||
print("MetaWorld Black-box tasks:")
|
||||
print(fancy_gym.ALL_METAWORLD_MOVEMENT_PRIMITIVE_ENVIRONMENTS)
|
||||
|
||||
print("If you add custom envs, their mp versions will be found in:")
|
||||
print(fancy_gym.MOVEMENT_PRIMITIVE_ENVIRONMENTS_FOR_NS['<my_custom_namespace>'])
|
@ -1,36 +0,0 @@
|
||||
What is Episodic RL?
|
||||
--------------------
|
||||
|
||||
.. raw:: html
|
||||
|
||||
<div class="justify">
|
||||
|
||||
Movement primitive (MP) environments differ from traditional step-based
|
||||
environments. They align more with concepts from stochastic search,
|
||||
black-box optimization, and methods commonly found in classical robotics
|
||||
and control. Instead of individual steps, MP environments operate on an
|
||||
episode basis, executing complete trajectories. These trajectories are
|
||||
produced by trajectory generators like Dynamic Movement Primitives
|
||||
(DMP), Probabilistic Movement Primitives (ProMP) or Probabilistic
|
||||
Dynamic Movement Primitives (ProDMP).
|
||||
|
||||
|
||||
Once generated, these trajectories are converted into step-by-step
|
||||
actions using a trajectory tracking controller. The specific controller
|
||||
chosen depends on the environment’s requirements. Currently, we support
|
||||
position, velocity, and PD-Controllers tailored for position, velocity,
|
||||
and torque control. Additionally, we have a specialized controller
|
||||
designed for the MetaWorld control suite.
|
||||
|
||||
|
||||
While the overarching objective of MP environments remains the learning
|
||||
of an optimal policy, the actions here represent the parametrization of
|
||||
motion primitives to craft the right trajectory. Our framework further
|
||||
enhances this by accommodating a contextual setting. At the episode’s
|
||||
onset, we present the context space—a subset of the observation space.
|
||||
This demands the prediction of a new action or MP parametrization for
|
||||
every unique context.
|
||||
|
||||
.. raw:: html
|
||||
|
||||
</div>
|
@ -1,73 +0,0 @@
|
||||
Installation
|
||||
------------
|
||||
|
||||
.. note::
|
||||
We recommend installing ``fancy_gym`` into a virtual environment as
|
||||
provided by `venv <https://docs.python.org/3/library/venv.html>`__. 3rd
|
||||
party alternatives to venv like `Poetry <https://python-poetry.org/>`__
|
||||
or `Conda <https://docs.conda.io/en/latest/>`__ can also be used.
|
||||
|
||||
Installation from PyPI (recommended)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Install ``fancy_gym`` via
|
||||
|
||||
.. code:: bash
|
||||
|
||||
pip install fancy_gym
|
||||
|
||||
We have a few optional dependencies. If you also want to install those
|
||||
use
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# to install all optional dependencies
|
||||
pip install 'fancy_gym[all]'
|
||||
|
||||
# or choose only those you want
|
||||
pip install 'fancy_gym[dmc,box2d,mujoco-legacy,jax,testing]'
|
||||
|
||||
Pip can not automatically install up-to-date versions of metaworld,
|
||||
since they are not avaible on PyPI yet. Install metaworld via
|
||||
|
||||
.. code:: bash
|
||||
|
||||
pip install metaworld@git+https://github.com/Farama-Foundation/Metaworld.git@d155d0051630bb365ea6a824e02c66c068947439#egg=metaworld
|
||||
|
||||
Installation from master
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
1. Clone the repository
|
||||
|
||||
.. code:: bash
|
||||
|
||||
git clone git@github.com:ALRhub/fancy_gym.git
|
||||
|
||||
2. Go to the folder
|
||||
|
||||
.. code:: bash
|
||||
|
||||
cd fancy_gym
|
||||
|
||||
3. Install with
|
||||
|
||||
.. code:: bash
|
||||
|
||||
pip install -e .
|
||||
|
||||
We have a few optional dependencies. If you also want to install those
|
||||
use
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# to install all optional dependencies
|
||||
pip install -e '.[all]'
|
||||
|
||||
# or choose only those you want
|
||||
pip install -e '.[dmc,box2d,mujoco-legacy,jax,testing]'
|
||||
|
||||
Metaworld has to be installed manually with
|
||||
|
||||
.. code:: bash
|
||||
|
||||
pip install metaworld@git+https://github.com/Farama-Foundation/Metaworld.git@d155d0051630bb365ea6a824e02c66c068947439#egg=metaworld
|
@ -1,138 +0,0 @@
|
||||
Creating new MP Environments
|
||||
----------------------------
|
||||
|
||||
This guide will explain to you how to upgrade an existing step-based Gymnasium environment into one, that supports Movement Primitives (MPs). If you are looking for a guide to build such a Gymnasium environment instead, please have a look at `this guide <https://gymnasium.farama.org/tutorials/gymnasium_basics/environment_creation/>`__.
|
||||
|
||||
In case a required task is not supported yet in the MP framework, it can
|
||||
be created relatively easy. For the task at hand, the following
|
||||
`interface <https://github.com/ALRhub/fancy_gym/tree/master/fancy_gym/black_box/raw_interface_wrapper.py>`__
|
||||
needs to be implemented.
|
||||
|
||||
.. code:: python
|
||||
|
||||
from abc import abstractmethod
|
||||
from typing import Union, Tuple
|
||||
|
||||
import gymnasium as gym
|
||||
import numpy as np
|
||||
|
||||
|
||||
class RawInterfaceWrapper(gym.Wrapper):
|
||||
mp_config = {
|
||||
'ProMP': {},
|
||||
'DMP': {},
|
||||
'ProDMP': {},
|
||||
}
|
||||
|
||||
@property
|
||||
def context_mask(self) -> np.ndarray:
|
||||
"""
|
||||
Returns boolean mask of the same shape as the observation space.
|
||||
It determines whether the observation is returned for the contextual case or not.
|
||||
This effectively allows to filter unwanted or unnecessary observations from the full step-based case.
|
||||
E.g. Velocities starting at 0 are only changing after the first action. Given we only receive the
|
||||
context/part of the first observation, the velocities are not necessary in the observation for the task.
|
||||
Returns:
|
||||
bool array representing the indices of the observations
|
||||
"""
|
||||
return np.ones(self.env.observation_space.shape[0], dtype=bool)
|
||||
|
||||
@property
|
||||
@abstractmethod
|
||||
def current_pos(self) -> Union[float, int, np.ndarray, Tuple]:
|
||||
"""
|
||||
Returns the current position of the action/control dimension.
|
||||
The dimensionality has to match the action/control dimension.
|
||||
This is not required when exclusively using velocity control,
|
||||
it should, however, be implemented regardless.
|
||||
E.g. The joint positions that are directly or indirectly controlled by the action.
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
@property
|
||||
@abstractmethod
|
||||
def current_vel(self) -> Union[float, int, np.ndarray, Tuple]:
|
||||
"""
|
||||
Returns the current velocity of the action/control dimension.
|
||||
The dimensionality has to match the action/control dimension.
|
||||
This is not required when exclusively using position control,
|
||||
it should, however, be implemented regardless.
|
||||
E.g. The joint velocities that are directly or indirectly controlled by the action.
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
Default configurations for MPs can be overitten by defining attributes
|
||||
in mp_config. Available parameters are documented in the `MP_PyTorch
|
||||
Userguide <https://github.com/ALRhub/MP_PyTorch/blob/main/doc/README.md>`__.
|
||||
|
||||
.. code:: python
|
||||
|
||||
class RawInterfaceWrapper(gym.Wrapper):
|
||||
mp_config = {
|
||||
'ProMP': {
|
||||
'phase_generator_kwargs': {
|
||||
'phase_generator_type': 'linear'
|
||||
# When selecting another generator type, the default configuration will not be merged for the attribute.
|
||||
},
|
||||
'controller_kwargs': {
|
||||
'p_gains': 0.5 * np.array([1.0, 4.0, 2.0, 4.0, 1.0, 4.0, 1.0]),
|
||||
'd_gains': 0.5 * np.array([0.1, 0.4, 0.2, 0.4, 0.1, 0.4, 0.1]),
|
||||
},
|
||||
'basis_generator_kwargs': {
|
||||
'num_basis': 3,
|
||||
'num_basis_zero_start': 1,
|
||||
'num_basis_zero_goal': 1,
|
||||
},
|
||||
},
|
||||
'DMP': {},
|
||||
'ProDMP': {}.
|
||||
}
|
||||
|
||||
[...]
|
||||
|
||||
If you created a new task wrapper, feel free to open a PR, so we can
|
||||
integrate it for others to use as well. Without the integration the task
|
||||
can still be used. A rough outline can be shown here, for more details
|
||||
we recommend having a look at the
|
||||
:ref:`multiple examples <example-mp>`.
|
||||
|
||||
If the step-based is already registered with gym, you can simply do the
|
||||
following:
|
||||
|
||||
.. code:: python
|
||||
|
||||
fancy_gym.upgrade(
|
||||
id='custom/cool_new_env-v0',
|
||||
mp_wrapper=my_custom_MPWrapper
|
||||
)
|
||||
|
||||
If the step-based is not yet registered with gym we can add both the
|
||||
step-based and MP-versions via
|
||||
|
||||
.. code:: python
|
||||
|
||||
fancy_gym.register(
|
||||
id='custom/cool_new_env-v0',
|
||||
entry_point=my_custom_env,
|
||||
mp_wrapper=my_custom_MPWrapper
|
||||
)
|
||||
|
||||
From this point on, you can access MP-version of your environments via
|
||||
|
||||
.. code:: python
|
||||
|
||||
env = gym.make('custom_ProDMP/cool_new_env-v0')
|
||||
|
||||
rewards = 0
|
||||
observation, info = env.reset()
|
||||
|
||||
# number of samples/full trajectories (multiple environment steps)
|
||||
for i in range(5):
|
||||
ac = env.action_space.sample()
|
||||
observation, reward, terminated, truncated, info = env.step(ac)
|
||||
rewards += reward
|
||||
|
||||
if terminated or truncated:
|
||||
print(rewards)
|
||||
rewards = 0
|
||||
observation, info = env.reset()
|
166
docs/build/html/_sources/index.rst.txt
vendored
@ -1,166 +0,0 @@
|
||||
Fancy Gym
|
||||
=========
|
||||
|
||||
.. raw:: html
|
||||
|
||||
<div style="text-align: center;">
|
||||
<img src="_static/imgs/fancy_namelogo.svg" style="margin: 5%; width: 80%;"></a>
|
||||
</div>
|
||||
<style>
|
||||
/* Little Hack: We don't want to show the title (ugly), but need to define it since it also sets the pages metadata (for titlebar and stuff) */
|
||||
h1 {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
Built upon the foundation of
|
||||
`Gymnasium <https://gymnasium.farama.org/>`__ (a maintained fork of
|
||||
OpenAI’s renowned Gym library) ``fancy_gym`` offers a comprehensive
|
||||
collection of reinforcement learning environments.
|
||||
|
||||
Key Features
|
||||
------------
|
||||
|
||||
- **New Challenging Environments**: ``fancy_gym`` includes several new
|
||||
environments (`Panda Box Pushing <envs/fancy/mujoco.html#box-pushing>`_,
|
||||
`Table Tennis <envs/fancy/mujoco.html#table-tennis>`_,
|
||||
`etc. <envs/fancy/index.html>`_) that present a higher degree of
|
||||
difficulty, pushing the boundaries of reinforcement learning research.
|
||||
- **Support for Movement Primitives**: ``fancy_gym`` supports a range
|
||||
of movement primitives (MPs), including Dynamic Movement Primitives
|
||||
(DMPs), Probabilistic Movement Primitives (ProMP), and Probabilistic
|
||||
Dynamic Movement Primitives (ProDMP).
|
||||
- **Upgrade to Movement Primitives**: With our framework, it’s
|
||||
straightforward to transform standard Gymnasium environments into
|
||||
environments that support movement primitives.
|
||||
- **Benchmark Suite Compatibility**: ``fancy_gym`` makes it easy to
|
||||
access renowned benchmark suites such as `DeepMind
|
||||
Control <envs/dmc.html>`__
|
||||
and `Metaworld <envs/meta.html>`__, whether you want
|
||||
to use them in the regular step-based setting or using MPs.
|
||||
- **Contribute Your Own Environments**: If you’re inspired to create
|
||||
custom gym environments, both step-based and with movement
|
||||
primitives, this
|
||||
`guide <guide/upgrading_envs.html>`__
|
||||
will assist you. We encourage and highly appreciate submissions via
|
||||
PRs to integrate these environments into ``fancy_gym``.
|
||||
|
||||
Quickstart Guide
|
||||
----------------
|
||||
|
||||
Install via pip (`or use an alternative installation method <guide/installation.html>`__)
|
||||
|
||||
.. code:: bash
|
||||
|
||||
pip install 'fancy_gym[all]'
|
||||
|
||||
|
||||
Try out one of our step-based environments (`or explore our other envs <envs/fancy/index.html>`__)
|
||||
|
||||
.. code:: python
|
||||
|
||||
import gymnasium as gym
|
||||
import fancy_gym
|
||||
import time
|
||||
|
||||
env = gym.make('fancy/BoxPushingDense-v0', render_mode='human')
|
||||
observation = env.reset()
|
||||
env.render()
|
||||
|
||||
for i in range(1000):
|
||||
action = env.action_space.sample() # Randomly sample an action
|
||||
observation, reward, terminated, truncated, info = env.step(action)
|
||||
time.sleep(1/env.metadata['render_fps'])
|
||||
|
||||
if terminated or truncated:
|
||||
observation, info = env.reset()
|
||||
|
||||
|
||||
Explore the MP-based variant (`or learn more about Movement Primitives (MPs) <guide/episodic_rl.html>`__)
|
||||
|
||||
.. code:: python
|
||||
|
||||
import gymnasium as gym
|
||||
import fancy_gym
|
||||
|
||||
env = gym.make('fancy_ProMP/BoxPushingDense-v0', render_mode='human')
|
||||
env.reset()
|
||||
env.render()
|
||||
|
||||
for i in range(10):
|
||||
action = env.action_space.sample() # Randomly sample MP parameters
|
||||
observation, reward, terminated, truncated, info = env.step(action) # Will execute full trajectory, based on MP
|
||||
observation = env.reset()
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 3
|
||||
:caption: User Guide
|
||||
|
||||
guide/installation
|
||||
guide/episodic_rl
|
||||
guide/basic_usage
|
||||
guide/upgrading_envs
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 3
|
||||
:caption: Environments
|
||||
|
||||
envs/fancy/index
|
||||
envs/dmc
|
||||
envs/meta
|
||||
envs/open_ai
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 3
|
||||
:caption: Examples
|
||||
|
||||
examples/general
|
||||
examples/dmc
|
||||
examples/metaworld
|
||||
examples/open_ai
|
||||
examples/movement_primitives
|
||||
examples/mp_params_tuning
|
||||
examples/pd_control_gain_tuning
|
||||
examples/replanning_envs
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 3
|
||||
:caption: API
|
||||
|
||||
api
|
||||
|
||||
Citing the Project
|
||||
------------------
|
||||
|
||||
To cite `fancy_gym` in publications:
|
||||
|
||||
.. code:: bibtex
|
||||
|
||||
@software{fancy_gym,
|
||||
title = {Fancy Gym},
|
||||
author = {Otto, Fabian and Celik, Onur and Roth, Dominik and Zhou, Hongyi},
|
||||
abstract = {Fancy Gym: Unifying interface for various RL benchmarks with support for Black Box approaches.},
|
||||
url = {https://github.com/ALRhub/fancy_gym},
|
||||
organization = {Autonomous Learning Robots Lab (ALR) at KIT},
|
||||
}
|
||||
|
||||
Icon Attribution
|
||||
----------------
|
||||
|
||||
The icon is based on the
|
||||
`Gymnasium <https://github.com/Farama-Foundation/Gymnasium>`__ icon as
|
||||
can be found
|
||||
`here <https://gymnasium.farama.org/_static/img/gymnasium_black.svg>`__.
|
||||
|
||||
=================
|
||||
|
||||
.. raw:: html
|
||||
|
||||
<div style="text-align: center; background: #f8f8f8; border-radius: 10px;">
|
||||
<a href="https://alr.iar.kit.edu/"><img src="_static/imgs/alr.svg" style="margin: 5%; width: 20%;"></a>
|
||||
<a href="https://www.kit.edu/"><img src="_static/imgs/kit.svg" style="margin: 5%; width: 20%;"></a>
|
||||
<a href="https://uni-tuebingen.de/"><img src="_static/imgs/uni_tuebingen.svg" style="margin: 5%; width: 20%;"></a>
|
||||
</div>
|
||||
<br>
|
@ -1,134 +0,0 @@
|
||||
/*
|
||||
* _sphinx_javascript_frameworks_compat.js
|
||||
* ~~~~~~~~~~
|
||||
*
|
||||
* Compatability shim for jQuery and underscores.js.
|
||||
*
|
||||
* WILL BE REMOVED IN Sphinx 6.0
|
||||
* xref RemovedInSphinx60Warning
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* select a different prefix for underscore
|
||||
*/
|
||||
$u = _.noConflict();
|
||||
|
||||
|
||||
/**
|
||||
* small helper function to urldecode strings
|
||||
*
|
||||
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
|
||||
*/
|
||||
jQuery.urldecode = function(x) {
|
||||
if (!x) {
|
||||
return x
|
||||
}
|
||||
return decodeURIComponent(x.replace(/\+/g, ' '));
|
||||
};
|
||||
|
||||
/**
|
||||
* small helper function to urlencode strings
|
||||
*/
|
||||
jQuery.urlencode = encodeURIComponent;
|
||||
|
||||
/**
|
||||
* This function returns the parsed url parameters of the
|
||||
* current request. Multiple values per key are supported,
|
||||
* it will always return arrays of strings for the value parts.
|
||||
*/
|
||||
jQuery.getQueryParameters = function(s) {
|
||||
if (typeof s === 'undefined')
|
||||
s = document.location.search;
|
||||
var parts = s.substr(s.indexOf('?') + 1).split('&');
|
||||
var result = {};
|
||||
for (var i = 0; i < parts.length; i++) {
|
||||
var tmp = parts[i].split('=', 2);
|
||||
var key = jQuery.urldecode(tmp[0]);
|
||||
var value = jQuery.urldecode(tmp[1]);
|
||||
if (key in result)
|
||||
result[key].push(value);
|
||||
else
|
||||
result[key] = [value];
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
/**
|
||||
* highlight a given string on a jquery object by wrapping it in
|
||||
* span elements with the given class name.
|
||||
*/
|
||||
jQuery.fn.highlightText = function(text, className) {
|
||||
function highlight(node, addItems) {
|
||||
if (node.nodeType === 3) {
|
||||
var val = node.nodeValue;
|
||||
var pos = val.toLowerCase().indexOf(text);
|
||||
if (pos >= 0 &&
|
||||
!jQuery(node.parentNode).hasClass(className) &&
|
||||
!jQuery(node.parentNode).hasClass("nohighlight")) {
|
||||
var span;
|
||||
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
|
||||
if (isInSVG) {
|
||||
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
|
||||
} else {
|
||||
span = document.createElement("span");
|
||||
span.className = className;
|
||||
}
|
||||
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
|
||||
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
|
||||
document.createTextNode(val.substr(pos + text.length)),
|
||||
node.nextSibling));
|
||||
node.nodeValue = val.substr(0, pos);
|
||||
if (isInSVG) {
|
||||
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
|
||||
var bbox = node.parentElement.getBBox();
|
||||
rect.x.baseVal.value = bbox.x;
|
||||
rect.y.baseVal.value = bbox.y;
|
||||
rect.width.baseVal.value = bbox.width;
|
||||
rect.height.baseVal.value = bbox.height;
|
||||
rect.setAttribute('class', className);
|
||||
addItems.push({
|
||||
"parent": node.parentNode,
|
||||
"target": rect});
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!jQuery(node).is("button, select, textarea")) {
|
||||
jQuery.each(node.childNodes, function() {
|
||||
highlight(this, addItems);
|
||||
});
|
||||
}
|
||||
}
|
||||
var addItems = [];
|
||||
var result = this.each(function() {
|
||||
highlight(this, addItems);
|
||||
});
|
||||
for (var i = 0; i < addItems.length; ++i) {
|
||||
jQuery(addItems[i].parent).before(addItems[i].target);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
/*
|
||||
* backward compatibility for jQuery.browser
|
||||
* This will be supported until firefox bug is fixed.
|
||||
*/
|
||||
if (!jQuery.browser) {
|
||||
jQuery.uaMatch = function(ua) {
|
||||
ua = ua.toLowerCase();
|
||||
|
||||
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
|
||||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
|
||||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
|
||||
/(msie) ([\w.]+)/.exec(ua) ||
|
||||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
|
||||
[];
|
||||
|
||||
return {
|
||||
browser: match[ 1 ] || "",
|
||||
version: match[ 2 ] || "0"
|
||||
};
|
||||
};
|
||||
jQuery.browser = {};
|
||||
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
|
||||
}
|
900
docs/build/html/_static/basic.css
vendored
@ -1,900 +0,0 @@
|
||||
/*
|
||||
* basic.css
|
||||
* ~~~~~~~~~
|
||||
*
|
||||
* Sphinx stylesheet -- basic theme.
|
||||
*
|
||||
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
/* -- main layout ----------------------------------------------------------- */
|
||||
|
||||
div.clearer {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
div.section::after {
|
||||
display: block;
|
||||
content: '';
|
||||
clear: left;
|
||||
}
|
||||
|
||||
/* -- relbar ---------------------------------------------------------------- */
|
||||
|
||||
div.related {
|
||||
width: 100%;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
div.related h3 {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.related ul {
|
||||
margin: 0;
|
||||
padding: 0 0 0 10px;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
div.related li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
div.related li.right {
|
||||
float: right;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
/* -- sidebar --------------------------------------------------------------- */
|
||||
|
||||
div.sphinxsidebarwrapper {
|
||||
padding: 10px 5px 0 10px;
|
||||
}
|
||||
|
||||
div.sphinxsidebar {
|
||||
float: left;
|
||||
width: 230px;
|
||||
margin-left: -100%;
|
||||
font-size: 90%;
|
||||
word-wrap: break-word;
|
||||
overflow-wrap : break-word;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul ul,
|
||||
div.sphinxsidebar ul.want-points {
|
||||
margin-left: 20px;
|
||||
list-style: square;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul ul {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
div.sphinxsidebar form {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
div.sphinxsidebar input {
|
||||
border: 1px solid #98dbcc;
|
||||
font-family: sans-serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
div.sphinxsidebar #searchbox form.search {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
div.sphinxsidebar #searchbox input[type="text"] {
|
||||
float: left;
|
||||
width: 80%;
|
||||
padding: 0.25em;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
div.sphinxsidebar #searchbox input[type="submit"] {
|
||||
float: left;
|
||||
width: 20%;
|
||||
border-left: none;
|
||||
padding: 0.25em;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
/* -- search page ----------------------------------------------------------- */
|
||||
|
||||
ul.search {
|
||||
margin: 10px 0 0 20px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul.search li {
|
||||
padding: 5px 0 5px 20px;
|
||||
background-image: url(file.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 7px;
|
||||
}
|
||||
|
||||
ul.search li a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
ul.search li p.context {
|
||||
color: #888;
|
||||
margin: 2px 0 0 30px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
ul.keywordmatches li.goodmatch a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* -- index page ------------------------------------------------------------ */
|
||||
|
||||
table.contentstable {
|
||||
width: 90%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.contentstable p.biglink {
|
||||
line-height: 150%;
|
||||
}
|
||||
|
||||
a.biglink {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
span.linkdescr {
|
||||
font-style: italic;
|
||||
padding-top: 5px;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
/* -- general index --------------------------------------------------------- */
|
||||
|
||||
table.indextable {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
table.indextable td {
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
table.indextable ul {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
table.indextable > tbody > tr > td > ul {
|
||||
padding-left: 0em;
|
||||
}
|
||||
|
||||
table.indextable tr.pcap {
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
table.indextable tr.cap {
|
||||
margin-top: 10px;
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
img.toggler {
|
||||
margin-right: 3px;
|
||||
margin-top: 3px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div.modindex-jumpbox {
|
||||
border-top: 1px solid #ddd;
|
||||
border-bottom: 1px solid #ddd;
|
||||
margin: 1em 0 1em 0;
|
||||
padding: 0.4em;
|
||||
}
|
||||
|
||||
div.genindex-jumpbox {
|
||||
border-top: 1px solid #ddd;
|
||||
border-bottom: 1px solid #ddd;
|
||||
margin: 1em 0 1em 0;
|
||||
padding: 0.4em;
|
||||
}
|
||||
|
||||
/* -- domain module index --------------------------------------------------- */
|
||||
|
||||
table.modindextable td {
|
||||
padding: 2px;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
/* -- general body styles --------------------------------------------------- */
|
||||
|
||||
div.body {
|
||||
min-width: 360px;
|
||||
max-width: 800px;
|
||||
}
|
||||
|
||||
div.body p, div.body dd, div.body li, div.body blockquote {
|
||||
-moz-hyphens: auto;
|
||||
-ms-hyphens: auto;
|
||||
-webkit-hyphens: auto;
|
||||
hyphens: auto;
|
||||
}
|
||||
|
||||
a.headerlink {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
h1:hover > a.headerlink,
|
||||
h2:hover > a.headerlink,
|
||||
h3:hover > a.headerlink,
|
||||
h4:hover > a.headerlink,
|
||||
h5:hover > a.headerlink,
|
||||
h6:hover > a.headerlink,
|
||||
dt:hover > a.headerlink,
|
||||
caption:hover > a.headerlink,
|
||||
p.caption:hover > a.headerlink,
|
||||
div.code-block-caption:hover > a.headerlink {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
div.body p.caption {
|
||||
text-align: inherit;
|
||||
}
|
||||
|
||||
div.body td {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.first {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
|
||||
p.rubric {
|
||||
margin-top: 30px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
img.align-left, figure.align-left, .figure.align-left, object.align-left {
|
||||
clear: left;
|
||||
float: left;
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
img.align-right, figure.align-right, .figure.align-right, object.align-right {
|
||||
clear: right;
|
||||
float: right;
|
||||
margin-left: 1em;
|
||||
}
|
||||
|
||||
img.align-center, figure.align-center, .figure.align-center, object.align-center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
img.align-default, figure.align-default, .figure.align-default {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.align-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.align-default {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.align-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* -- sidebars -------------------------------------------------------------- */
|
||||
|
||||
div.sidebar,
|
||||
aside.sidebar {
|
||||
margin: 0 0 0.5em 1em;
|
||||
border: 1px solid #ddb;
|
||||
padding: 7px;
|
||||
background-color: #ffe;
|
||||
width: 40%;
|
||||
float: right;
|
||||
clear: right;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
p.sidebar-title {
|
||||
font-weight: bold;
|
||||
}
|
||||
nav.contents,
|
||||
aside.topic,
|
||||
div.admonition, div.topic, blockquote {
|
||||
clear: left;
|
||||
}
|
||||
|
||||
/* -- topics ---------------------------------------------------------------- */
|
||||
nav.contents,
|
||||
aside.topic,
|
||||
div.topic {
|
||||
border: 1px solid #ccc;
|
||||
padding: 7px;
|
||||
margin: 10px 0 10px 0;
|
||||
}
|
||||
|
||||
p.topic-title {
|
||||
font-size: 1.1em;
|
||||
font-weight: bold;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
/* -- admonitions ----------------------------------------------------------- */
|
||||
|
||||
div.admonition {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
padding: 7px;
|
||||
}
|
||||
|
||||
div.admonition dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
p.admonition-title {
|
||||
margin: 0px 10px 5px 0px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.body p.centered {
|
||||
text-align: center;
|
||||
margin-top: 25px;
|
||||
}
|
||||
|
||||
/* -- content of sidebars/topics/admonitions -------------------------------- */
|
||||
|
||||
div.sidebar > :last-child,
|
||||
aside.sidebar > :last-child,
|
||||
nav.contents > :last-child,
|
||||
aside.topic > :last-child,
|
||||
div.topic > :last-child,
|
||||
div.admonition > :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
div.sidebar::after,
|
||||
aside.sidebar::after,
|
||||
nav.contents::after,
|
||||
aside.topic::after,
|
||||
div.topic::after,
|
||||
div.admonition::after,
|
||||
blockquote::after {
|
||||
display: block;
|
||||
content: '';
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* -- tables ---------------------------------------------------------------- */
|
||||
|
||||
table.docutils {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
border: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
table.align-center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.align-default {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table caption span.caption-number {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
table caption span.caption-text {
|
||||
}
|
||||
|
||||
table.docutils td, table.docutils th {
|
||||
padding: 1px 8px 1px 5px;
|
||||
border-top: 0;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
border-bottom: 1px solid #aaa;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: left;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
table.citation {
|
||||
border-left: solid 1px gray;
|
||||
margin-left: 1px;
|
||||
}
|
||||
|
||||
table.citation td {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
th > :first-child,
|
||||
td > :first-child {
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
th > :last-child,
|
||||
td > :last-child {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
/* -- figures --------------------------------------------------------------- */
|
||||
|
||||
div.figure, figure {
|
||||
margin: 0.5em;
|
||||
padding: 0.5em;
|
||||
}
|
||||
|
||||
div.figure p.caption, figcaption {
|
||||
padding: 0.3em;
|
||||
}
|
||||
|
||||
div.figure p.caption span.caption-number,
|
||||
figcaption span.caption-number {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
div.figure p.caption span.caption-text,
|
||||
figcaption span.caption-text {
|
||||
}
|
||||
|
||||
/* -- field list styles ----------------------------------------------------- */
|
||||
|
||||
table.field-list td, table.field-list th {
|
||||
border: 0 !important;
|
||||
}
|
||||
|
||||
.field-list ul {
|
||||
margin: 0;
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
.field-list p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.field-name {
|
||||
-moz-hyphens: manual;
|
||||
-ms-hyphens: manual;
|
||||
-webkit-hyphens: manual;
|
||||
hyphens: manual;
|
||||
}
|
||||
|
||||
/* -- hlist styles ---------------------------------------------------------- */
|
||||
|
||||
table.hlist {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
table.hlist td {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
/* -- object description styles --------------------------------------------- */
|
||||
|
||||
.sig {
|
||||
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
|
||||
}
|
||||
|
||||
.sig-name, code.descname {
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.sig-name {
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
code.descname {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
.sig-prename, code.descclassname {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.optional {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
.sig-paren {
|
||||
font-size: larger;
|
||||
}
|
||||
|
||||
.sig-param.n {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* C++ specific styling */
|
||||
|
||||
.sig-inline.c-texpr,
|
||||
.sig-inline.cpp-texpr {
|
||||
font-family: unset;
|
||||
}
|
||||
|
||||
.sig.c .k, .sig.c .kt,
|
||||
.sig.cpp .k, .sig.cpp .kt {
|
||||
color: #0033B3;
|
||||
}
|
||||
|
||||
.sig.c .m,
|
||||
.sig.cpp .m {
|
||||
color: #1750EB;
|
||||
}
|
||||
|
||||
.sig.c .s, .sig.c .sc,
|
||||
.sig.cpp .s, .sig.cpp .sc {
|
||||
color: #067D17;
|
||||
}
|
||||
|
||||
|
||||
/* -- other body styles ----------------------------------------------------- */
|
||||
|
||||
ol.arabic {
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
ol.loweralpha {
|
||||
list-style: lower-alpha;
|
||||
}
|
||||
|
||||
ol.upperalpha {
|
||||
list-style: upper-alpha;
|
||||
}
|
||||
|
||||
ol.lowerroman {
|
||||
list-style: lower-roman;
|
||||
}
|
||||
|
||||
ol.upperroman {
|
||||
list-style: upper-roman;
|
||||
}
|
||||
|
||||
:not(li) > ol > li:first-child > :first-child,
|
||||
:not(li) > ul > li:first-child > :first-child {
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
:not(li) > ol > li:last-child > :last-child,
|
||||
:not(li) > ul > li:last-child > :last-child {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
ol.simple ol p,
|
||||
ol.simple ul p,
|
||||
ul.simple ol p,
|
||||
ul.simple ul p {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
ol.simple > li:not(:first-child) > p,
|
||||
ul.simple > li:not(:first-child) > p {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
ol.simple p,
|
||||
ul.simple p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
aside.footnote > span,
|
||||
div.citation > span {
|
||||
float: left;
|
||||
}
|
||||
aside.footnote > span:last-of-type,
|
||||
div.citation > span:last-of-type {
|
||||
padding-right: 0.5em;
|
||||
}
|
||||
aside.footnote > p {
|
||||
margin-left: 2em;
|
||||
}
|
||||
div.citation > p {
|
||||
margin-left: 4em;
|
||||
}
|
||||
aside.footnote > p:last-of-type,
|
||||
div.citation > p:last-of-type {
|
||||
margin-bottom: 0em;
|
||||
}
|
||||
aside.footnote > p:last-of-type:after,
|
||||
div.citation > p:last-of-type:after {
|
||||
content: "";
|
||||
clear: both;
|
||||
}
|
||||
|
||||
dl.field-list {
|
||||
display: grid;
|
||||
grid-template-columns: fit-content(30%) auto;
|
||||
}
|
||||
|
||||
dl.field-list > dt {
|
||||
font-weight: bold;
|
||||
word-break: break-word;
|
||||
padding-left: 0.5em;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
dl.field-list > dd {
|
||||
padding-left: 0.5em;
|
||||
margin-top: 0em;
|
||||
margin-left: 0em;
|
||||
margin-bottom: 0em;
|
||||
}
|
||||
|
||||
dl {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
dd > :first-child {
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
dd ul, dd table {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-top: 3px;
|
||||
margin-bottom: 10px;
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
dl > dd:last-child,
|
||||
dl > dd:last-child > :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
dt:target, span.highlighted {
|
||||
background-color: #fbe54e;
|
||||
}
|
||||
|
||||
rect.highlighted {
|
||||
fill: #fbe54e;
|
||||
}
|
||||
|
||||
dl.glossary dt {
|
||||
font-weight: bold;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
.versionmodified {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.system-message {
|
||||
background-color: #fda;
|
||||
padding: 5px;
|
||||
border: 3px solid red;
|
||||
}
|
||||
|
||||
.footnote:target {
|
||||
background-color: #ffa;
|
||||
}
|
||||
|
||||
.line-block {
|
||||
display: block;
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.line-block .line-block {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
margin-left: 1.5em;
|
||||
}
|
||||
|
||||
.guilabel, .menuselection {
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
.accelerator {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.classifier {
|
||||
font-style: oblique;
|
||||
}
|
||||
|
||||
.classifier:before {
|
||||
font-style: normal;
|
||||
margin: 0 0.5em;
|
||||
content: ":";
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
abbr, acronym {
|
||||
border-bottom: dotted 1px;
|
||||
cursor: help;
|
||||
}
|
||||
|
||||
/* -- code displays --------------------------------------------------------- */
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
overflow-y: hidden; /* fixes display issues on Chrome browsers */
|
||||
}
|
||||
|
||||
pre, div[class*="highlight-"] {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
span.pre {
|
||||
-moz-hyphens: none;
|
||||
-ms-hyphens: none;
|
||||
-webkit-hyphens: none;
|
||||
hyphens: none;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
div[class*="highlight-"] {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
td.linenos pre {
|
||||
border: 0;
|
||||
background-color: transparent;
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
table.highlighttable {
|
||||
display: block;
|
||||
}
|
||||
|
||||
table.highlighttable tbody {
|
||||
display: block;
|
||||
}
|
||||
|
||||
table.highlighttable tr {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
table.highlighttable td {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
table.highlighttable td.linenos {
|
||||
padding-right: 0.5em;
|
||||
}
|
||||
|
||||
table.highlighttable td.code {
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.highlight .hll {
|
||||
display: block;
|
||||
}
|
||||
|
||||
div.highlight pre,
|
||||
table.highlighttable pre {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
div.code-block-caption + div {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
div.code-block-caption {
|
||||
margin-top: 1em;
|
||||
padding: 2px 5px;
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
div.code-block-caption code {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
table.highlighttable td.linenos,
|
||||
span.linenos,
|
||||
div.highlight span.gp { /* gp: Generic.Prompt */
|
||||
user-select: none;
|
||||
-webkit-user-select: text; /* Safari fallback only */
|
||||
-webkit-user-select: none; /* Chrome/Safari */
|
||||
-moz-user-select: none; /* Firefox */
|
||||
-ms-user-select: none; /* IE10+ */
|
||||
}
|
||||
|
||||
div.code-block-caption span.caption-number {
|
||||
padding: 0.1em 0.3em;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
div.code-block-caption span.caption-text {
|
||||
}
|
||||
|
||||
div.literal-block-wrapper {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
code.xref, a code {
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.viewcode-link {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.viewcode-back {
|
||||
float: right;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
div.viewcode-block:target {
|
||||
margin: -1px -10px;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
/* -- math display ---------------------------------------------------------- */
|
||||
|
||||
img.math {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
div.body div.math p {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
span.eqno {
|
||||
float: right;
|
||||
}
|
||||
|
||||
span.eqno a.headerlink {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
div.math:hover a.headerlink {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
/* -- printout stylesheet --------------------------------------------------- */
|
||||
|
||||
@media print {
|
||||
div.document,
|
||||
div.documentwrapper,
|
||||
div.bodywrapper {
|
||||
margin: 0 !important;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
div.sphinxsidebar,
|
||||
div.related,
|
||||
div.footer,
|
||||
#top-link {
|
||||
display: none;
|
||||
}
|
||||
}
|
1
docs/build/html/_static/css/badge_only.css
vendored
@ -1 +0,0 @@
|
||||
.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}
|
Before Width: | Height: | Size: 434 KiB |
BIN
docs/build/html/_static/css/fonts/lato-bold.woff
vendored
BIN
docs/build/html/_static/css/fonts/lato-bold.woff2
vendored
BIN
docs/build/html/_static/css/fonts/lato-normal.woff
vendored
BIN
docs/build/html/_static/css/fonts/lato-normal.woff2
vendored
4
docs/build/html/_static/css/theme.css
vendored
156
docs/build/html/_static/doctools.js
vendored
@ -1,156 +0,0 @@
|
||||
/*
|
||||
* doctools.js
|
||||
* ~~~~~~~~~~~
|
||||
*
|
||||
* Base JavaScript utilities for all Sphinx HTML documentation.
|
||||
*
|
||||
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
"use strict";
|
||||
|
||||
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
|
||||
"TEXTAREA",
|
||||
"INPUT",
|
||||
"SELECT",
|
||||
"BUTTON",
|
||||
]);
|
||||
|
||||
const _ready = (callback) => {
|
||||
if (document.readyState !== "loading") {
|
||||
callback();
|
||||
} else {
|
||||
document.addEventListener("DOMContentLoaded", callback);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Small JavaScript module for the documentation.
|
||||
*/
|
||||
const Documentation = {
|
||||
init: () => {
|
||||
Documentation.initDomainIndexTable();
|
||||
Documentation.initOnKeyListeners();
|
||||
},
|
||||
|
||||
/**
|
||||
* i18n support
|
||||
*/
|
||||
TRANSLATIONS: {},
|
||||
PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
|
||||
LOCALE: "unknown",
|
||||
|
||||
// gettext and ngettext don't access this so that the functions
|
||||
// can safely bound to a different name (_ = Documentation.gettext)
|
||||
gettext: (string) => {
|
||||
const translated = Documentation.TRANSLATIONS[string];
|
||||
switch (typeof translated) {
|
||||
case "undefined":
|
||||
return string; // no translation
|
||||
case "string":
|
||||
return translated; // translation exists
|
||||
default:
|
||||
return translated[0]; // (singular, plural) translation tuple exists
|
||||
}
|
||||
},
|
||||
|
||||
ngettext: (singular, plural, n) => {
|
||||
const translated = Documentation.TRANSLATIONS[singular];
|
||||
if (typeof translated !== "undefined")
|
||||
return translated[Documentation.PLURAL_EXPR(n)];
|
||||
return n === 1 ? singular : plural;
|
||||
},
|
||||
|
||||
addTranslations: (catalog) => {
|
||||
Object.assign(Documentation.TRANSLATIONS, catalog.messages);
|
||||
Documentation.PLURAL_EXPR = new Function(
|
||||
"n",
|
||||
`return (${catalog.plural_expr})`
|
||||
);
|
||||
Documentation.LOCALE = catalog.locale;
|
||||
},
|
||||
|
||||
/**
|
||||
* helper function to focus on search bar
|
||||
*/
|
||||
focusSearchBar: () => {
|
||||
document.querySelectorAll("input[name=q]")[0]?.focus();
|
||||
},
|
||||
|
||||
/**
|
||||
* Initialise the domain index toggle buttons
|
||||
*/
|
||||
initDomainIndexTable: () => {
|
||||
const toggler = (el) => {
|
||||
const idNumber = el.id.substr(7);
|
||||
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
|
||||
if (el.src.substr(-9) === "minus.png") {
|
||||
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
|
||||
toggledRows.forEach((el) => (el.style.display = "none"));
|
||||
} else {
|
||||
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
|
||||
toggledRows.forEach((el) => (el.style.display = ""));
|
||||
}
|
||||
};
|
||||
|
||||
const togglerElements = document.querySelectorAll("img.toggler");
|
||||
togglerElements.forEach((el) =>
|
||||
el.addEventListener("click", (event) => toggler(event.currentTarget))
|
||||
);
|
||||
togglerElements.forEach((el) => (el.style.display = ""));
|
||||
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
|
||||
},
|
||||
|
||||
initOnKeyListeners: () => {
|
||||
// only install a listener if it is really needed
|
||||
if (
|
||||
!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
|
||||
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
|
||||
)
|
||||
return;
|
||||
|
||||
document.addEventListener("keydown", (event) => {
|
||||
// bail for input elements
|
||||
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
|
||||
// bail with special keys
|
||||
if (event.altKey || event.ctrlKey || event.metaKey) return;
|
||||
|
||||
if (!event.shiftKey) {
|
||||
switch (event.key) {
|
||||
case "ArrowLeft":
|
||||
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
|
||||
|
||||
const prevLink = document.querySelector('link[rel="prev"]');
|
||||
if (prevLink && prevLink.href) {
|
||||
window.location.href = prevLink.href;
|
||||
event.preventDefault();
|
||||
}
|
||||
break;
|
||||
case "ArrowRight":
|
||||
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
|
||||
|
||||
const nextLink = document.querySelector('link[rel="next"]');
|
||||
if (nextLink && nextLink.href) {
|
||||
window.location.href = nextLink.href;
|
||||
event.preventDefault();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// some keyboard layouts may need Shift to get /
|
||||
switch (event.key) {
|
||||
case "/":
|
||||
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
|
||||
Documentation.focusSearchBar();
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
// quick alias for translations
|
||||
const _ = Documentation.gettext;
|
||||
|
||||
_ready(Documentation.init);
|
14
docs/build/html/_static/documentation_options.js
vendored
@ -1,14 +0,0 @@
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
|
||||
VERSION: '0.2',
|
||||
LANGUAGE: 'en',
|
||||
COLLAPSE_INDEX: false,
|
||||
BUILDER: 'html',
|
||||
FILE_SUFFIX: '.html',
|
||||
LINK_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
SOURCELINK_SUFFIX: '.txt',
|
||||
NAVIGATION_WITH_KEYS: false,
|
||||
SHOW_SEARCH_SUMMARY: true,
|
||||
ENABLE_SEARCH_SHORTCUTS: true,
|
||||
};
|
BIN
docs/build/html/_static/file.png
vendored
Before Width: | Height: | Size: 286 B |
101
docs/build/html/_static/icon.svg
vendored
Before Width: | Height: | Size: 114 KiB |
281
docs/build/html/_static/imgs/alr.svg
vendored
Before Width: | Height: | Size: 24 KiB |
BIN
docs/build/html/_static/imgs/env_gifs/Beer_Pong.gif
vendored
Before Width: | Height: | Size: 18 MiB |
Before Width: | Height: | Size: 2.2 MiB |
Before Width: | Height: | Size: 695 KiB |
BIN
docs/build/html/_static/imgs/env_gifs/Metaworld.gif
vendored
Before Width: | Height: | Size: 4.4 MiB |
Before Width: | Height: | Size: 629 KiB |
157
docs/build/html/_static/imgs/fancy_namelogo.svg
vendored
Before Width: | Height: | Size: 118 KiB |
101
docs/build/html/_static/imgs/icon.svg
vendored
Before Width: | Height: | Size: 114 KiB |
23
docs/build/html/_static/imgs/kit.svg
vendored
Before Width: | Height: | Size: 12 KiB |
568
docs/build/html/_static/imgs/uni_tuebingen.svg
vendored
@ -1,568 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="269px" height="70px" viewBox="0 0 269 70" enable-background="new 0 0 269 70" xml:space="preserve">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#A11E3B" d="M139.13,2.989c0.438-0.005,1.4-0.078,2.172,0.708
|
||||
c0.773,0.787,0.816,1.763,0.816,2.243c0,1.339-1.1,2.343-2.513,2.343c-0.584,0-1.228-0.1-1.44-0.228
|
||||
c-0.07-0.043-0.099-0.1-0.099-0.17V3.244c0-0.085,0.042-0.142,0.112-0.17C138.322,3.031,138.704,2.994,139.13,2.989 M140.775,8.418
|
||||
c1.48-0.406,2.479-1.644,2.479-3.321c0-0.773-0.408-1.429-0.728-1.734c-0.232-0.218-0.889-0.83-2.709-0.83
|
||||
c-0.67,0-1.905,0.045-2.291,0.045c-0.167,0-0.966-0.043-1.604-0.043c-0.155,0-0.227,0.029-0.227,0.114
|
||||
c0,0.057,0.057,0.085,0.114,0.085c0.128,0,0.369,0.015,0.481,0.043c0.47,0.1,0.583,0.326,0.611,0.809
|
||||
c0.027,0.454,0.027,0.852,0.027,3.065v2.499c0,1.362,0,2.483-0.069,3.08c-0.059,0.411-0.129,0.724-0.412,0.78
|
||||
c-0.129,0.028-0.299,0.057-0.426,0.057c-0.085,0-0.113,0.042-0.113,0.085c0,0.086,0.07,0.113,0.227,0.113
|
||||
c0.425,0,1.319-0.042,1.334-0.042c0.07,0,0.964,0.042,1.745,0.042c0.156,0,0.229-0.042,0.229-0.113c0-0.043-0.029-0.085-0.114-0.085
|
||||
c-0.129,0-0.44-0.028-0.639-0.057c-0.426-0.057-0.512-0.369-0.555-0.78c-0.069-0.597-0.069-1.718-0.069-3.08V8.808
|
||||
c0-0.07,0.028-0.113,0.099-0.113l1.378,0.022c0.085,0,0.16,0.033,0.188,0.091c0.214,0.473,0.513,1.27,0.941,2.148
|
||||
c0.587,1.202,0.688,1.733,1.298,2.061c0.369,0.199,0.756,0.248,1.551,0.248h0.684c0.256,0,0.342-0.027,0.342-0.113
|
||||
c0-0.043-0.058-0.087-0.129-0.085c-0.14,0.003-0.375-0.036-0.645-0.084c-0.23-0.04-0.902-0.203-1.316-0.98
|
||||
C141.938,11.03,141.341,9.615,140.775,8.418 M147.781,6.65c0-2.214,0-2.611,0.027-3.065c0.028-0.497,0.142-0.737,0.554-0.809
|
||||
c0.171-0.028,0.369-0.043,0.468-0.043c0.057,0,0.112-0.028,0.112-0.085c0-0.085-0.069-0.114-0.226-0.114
|
||||
c-0.427,0-1.462,0.044-1.532,0.044c-0.072,0-0.966-0.044-1.604-0.044c-0.157,0-0.228,0.029-0.228,0.114
|
||||
c0,0.057,0.057,0.085,0.113,0.085c0.129,0,0.369,0.015,0.483,0.043c0.468,0.1,0.582,0.326,0.609,0.809
|
||||
c0.029,0.454,0.029,0.852,0.029,3.065v2.499c0,1.362,0,2.483-0.071,3.08c-0.057,0.411-0.128,0.724-0.411,0.78
|
||||
c-0.128,0.028-0.298,0.057-0.426,0.057c-0.085,0-0.114,0.042-0.114,0.085c0,0.086,0.072,0.113,0.228,0.113
|
||||
c0.213,0,0.525-0.014,0.809-0.027c0.284,0,0.526-0.015,0.583-0.015c0.41,0,0.852,0.015,1.448,0.042
|
||||
c0.595,0.015,1.333,0.043,2.354,0.043c0.752,0,0.795-0.057,0.894-0.384c0.114-0.412,0.214-1.263,0.214-1.418
|
||||
c0-0.157-0.014-0.214-0.084-0.214c-0.086,0-0.114,0.071-0.13,0.185c-0.043,0.27-0.185,0.625-0.369,0.852
|
||||
c-0.34,0.412-0.965,0.426-1.718,0.426c-1.105,0-1.475-0.1-1.702-0.326c-0.255-0.256-0.311-1.164-0.311-3.251V6.65z M155.006,13.464
|
||||
c0.767,0,1.532-0.171,2.143-0.596c0.979-0.696,1.206-1.774,1.206-2.356c0-1.136-0.396-2.016-2.072-3.335l-0.396-0.313
|
||||
c-1.362-1.065-1.731-1.576-1.731-2.386c0-1.036,0.766-1.646,1.745-1.646c1.307,0,1.689,0.597,1.774,0.752
|
||||
c0.085,0.156,0.169,0.539,0.186,0.71c0.013,0.113,0.028,0.184,0.114,0.184c0.069,0,0.099-0.098,0.099-0.325
|
||||
c0-0.966,0.056-1.435,0.056-1.505s-0.028-0.1-0.142-0.1c-0.114,0-0.228-0.015-0.497-0.07c-0.354-0.085-0.767-0.143-1.32-0.143
|
||||
c-1.803,0-2.938,1.036-2.938,2.555c0,0.966,0.342,1.846,1.848,3.08l0.639,0.525c1.218,1.008,1.631,1.576,1.631,2.555
|
||||
c0,0.909-0.667,1.888-2.031,1.888c-0.95,0-1.887-0.397-2.099-1.448c-0.044-0.198-0.044-0.396-0.044-0.524
|
||||
c0-0.114-0.014-0.156-0.099-0.156c-0.071,0-0.1,0.071-0.114,0.227c-0.014,0.228-0.07,0.795-0.07,1.505
|
||||
c0,0.383,0.015,0.44,0.212,0.54C153.686,13.364,154.338,13.464,155.006,13.464 M127.632,13.265c0.127,0,0.213-0.028,0.213-0.113
|
||||
c0-0.058-0.042-0.085-0.143-0.085h-0.142c-0.24,0-0.539-0.128-0.539-0.412c0-0.255,0.071-0.596,0.198-0.951l0.853-2.512
|
||||
c0.028-0.07,0.069-0.114,0.142-0.114h3.051c0.072,0,0.1,0.029,0.129,0.086l1.318,3.491c0.086,0.228,0,0.355-0.084,0.384
|
||||
c-0.056,0.015-0.1,0.043-0.1,0.1c0,0.085,0.156,0.085,0.427,0.099c0.979,0.028,2.015,0.028,2.228,0.028
|
||||
c0.156,0,0.284-0.028,0.284-0.113c0-0.07-0.058-0.085-0.142-0.085c-0.143,0-0.355-0.014-0.569-0.085
|
||||
c-0.298-0.086-0.71-0.313-1.22-1.575c-0.866-2.158-3.094-8.02-3.308-8.56c-0.17-0.439-0.227-0.511-0.312-0.511
|
||||
s-0.143,0.085-0.313,0.554l-3.221,8.813c-0.213,0.59-0.444,1.061-0.89,1.253c-0.37-0.124-0.739-0.406-1.208-0.932
|
||||
c-1.066-1.198-3.283-4.028-3.81-4.748c0.299-0.356,2.784-2.783,3.139-3.123c0.639-0.611,0.951-0.966,1.534-1.221
|
||||
c0.283-0.128,0.581-0.199,0.794-0.199c0.113,0,0.143-0.028,0.143-0.1c0-0.07-0.057-0.1-0.214-0.1c-0.355,0-1.291,0.044-1.361,0.044
|
||||
c-0.342,0-0.781-0.044-1.065-0.044c-0.099,0-0.17,0.029-0.17,0.1c0,0.057,0.056,0.085,0.128,0.114
|
||||
c0.113,0.042,0.184,0.128,0.184,0.298c0,0.241-0.369,0.61-0.766,1.021c-0.512,0.554-3.081,3.165-3.32,3.435l-0.058-0.852
|
||||
c0-2.214,0-2.611,0.027-3.065c0.03-0.497,0.143-0.738,0.525-0.809c0.171-0.028,0.256-0.043,0.356-0.043
|
||||
c0.057,0,0.112-0.028,0.112-0.085c0-0.085-0.071-0.114-0.228-0.114c-0.425,0-1.248,0.044-1.376,0.044
|
||||
c-0.085,0-0.923-0.044-1.562-0.044c-0.156,0-0.228,0.029-0.228,0.114c0,0.057,0.058,0.085,0.114,0.085
|
||||
c0.127,0,0.369,0.015,0.482,0.043c0.468,0.1,0.581,0.326,0.61,0.809c0.028,0.454,0.028,0.852,0.028,3.065v2.499
|
||||
c0,1.362,0,2.483-0.07,3.08c-0.058,0.411-0.128,0.724-0.413,0.78c-0.128,0.028-0.298,0.057-0.425,0.057
|
||||
c-0.086,0-0.114,0.042-0.114,0.085c0,0.085,0.071,0.113,0.229,0.113c0.425,0,1.248-0.042,1.362-0.042
|
||||
c0.113,0,0.937,0.042,1.632,0.042c0.155,0,0.227-0.042,0.227-0.113c0-0.043-0.028-0.085-0.112-0.085
|
||||
c-0.129,0-0.356-0.028-0.555-0.057c-0.426-0.057-0.511-0.369-0.554-0.78c-0.07-0.597-0.07-1.718-0.07-3.08l0.007-1.381
|
||||
c0.319,0.442,1.632,2.193,2.501,3.293c0.755,0.956,1.319,1.632,1.925,1.966c0.259,0.141,0.392,0.24,1.051,0.24
|
||||
c0,0,0.933-0.047,1.43-0.047C126.829,13.221,127.291,13.265,127.632,13.265 M128.369,8.567c-0.042,0-0.07-0.029-0.042-0.1
|
||||
l1.249-3.833c0.07-0.212,0.143-0.212,0.214,0l1.347,3.833c0.015,0.057,0.015,0.1-0.057,0.1H128.369z M82.699,11.703
|
||||
c-0.256,0.71-0.54,1.25-1.192,1.335c-0.113,0.015-0.313,0.028-0.412,0.028c-0.07,0-0.127,0.027-0.127,0.085
|
||||
c0,0.086,0.085,0.113,0.27,0.113c0.667,0,1.447-0.042,1.604-0.042c0.157,0,0.767,0.042,1.107,0.042c0.127,0,0.213-0.027,0.213-0.113
|
||||
c0-0.058-0.042-0.085-0.142-0.085h-0.143c-0.241,0-0.539-0.128-0.539-0.412c0-0.255,0.07-0.596,0.199-0.951l0.852-2.512
|
||||
c0.027-0.07,0.07-0.114,0.141-0.114h3.053c0.071,0,0.099,0.029,0.127,0.086l1.32,3.491c0.085,0.228,0,0.355-0.085,0.384
|
||||
c-0.057,0.015-0.1,0.043-0.1,0.1c0,0.085,0.157,0.085,0.427,0.1c0.979,0.027,2.015,0.027,2.228,0.027
|
||||
c0.156,0,0.284-0.027,0.284-0.113c0-0.07-0.057-0.085-0.143-0.085c-0.142,0-0.354-0.014-0.567-0.085
|
||||
c-0.299-0.086-0.71-0.313-1.221-1.575c-0.866-2.158-3.095-8.02-3.308-8.559c-0.169-0.44-0.226-0.512-0.312-0.512
|
||||
c-0.085,0-0.143,0.085-0.313,0.554L82.699,11.703z M84.686,8.567c-0.042,0-0.07-0.029-0.042-0.1l1.25-3.833
|
||||
c0.069-0.212,0.141-0.212,0.213,0l1.347,3.833c0.015,0.057,0.015,0.1-0.056,0.1H84.686z M63.874,2.989
|
||||
c0.439-0.005,1.402-0.078,2.173,0.708c0.772,0.787,0.815,1.763,0.815,2.243c0,1.339-1.1,2.343-2.512,2.343
|
||||
c-0.584,0-1.229-0.1-1.441-0.228c-0.071-0.043-0.099-0.1-0.099-0.17V3.244c0-0.085,0.042-0.142,0.113-0.17
|
||||
C63.065,3.031,63.448,2.994,63.874,2.989 M65.519,8.418c1.482-0.406,2.48-1.644,2.48-3.321c0-0.773-0.408-1.429-0.729-1.734
|
||||
c-0.232-0.218-0.889-0.83-2.708-0.83c-0.671,0-1.906,0.045-2.292,0.045c-0.167,0-0.965-0.043-1.604-0.043
|
||||
c-0.155,0-0.226,0.029-0.226,0.114c0,0.057,0.056,0.085,0.113,0.085c0.127,0,0.368,0.015,0.481,0.043
|
||||
c0.469,0.1,0.583,0.326,0.611,0.809c0.028,0.454,0.028,0.852,0.028,3.065v2.499c0,1.362,0,2.483-0.071,3.08
|
||||
c-0.057,0.411-0.127,0.724-0.412,0.78c-0.128,0.028-0.297,0.057-0.426,0.057c-0.085,0-0.113,0.042-0.113,0.085
|
||||
c0,0.086,0.071,0.113,0.228,0.113c0.426,0,1.319-0.042,1.334-0.042c0.071,0,0.965,0.042,1.746,0.042
|
||||
c0.155,0,0.227-0.042,0.227-0.113c0-0.043-0.027-0.085-0.113-0.085c-0.127,0-0.44-0.028-0.639-0.057
|
||||
c-0.426-0.057-0.511-0.369-0.554-0.78c-0.07-0.597-0.07-1.718-0.07-3.08V8.808c0-0.07,0.027-0.113,0.099-0.113l1.377,0.022
|
||||
c0.086,0,0.162,0.033,0.188,0.091c0.216,0.473,0.515,1.27,0.943,2.148c0.586,1.202,0.688,1.733,1.298,2.061
|
||||
c0.369,0.199,0.756,0.248,1.551,0.248h0.684c0.256,0,0.342-0.027,0.342-0.113c0-0.043-0.057-0.087-0.128-0.085
|
||||
c-0.141,0.003-0.376-0.036-0.646-0.084c-0.229-0.04-0.901-0.203-1.316-0.98C66.683,11.03,66.086,9.615,65.519,8.418 M102.369,9.149
|
||||
c0,1.362,0,2.483-0.071,3.08c-0.057,0.411-0.128,0.724-0.412,0.78c-0.128,0.028-0.297,0.057-0.425,0.057
|
||||
c-0.085,0-0.114,0.042-0.114,0.085c0,0.086,0.071,0.113,0.227,0.113c0.213,0,0.539-0.027,0.824-0.027
|
||||
c0.297-0.015,0.539-0.015,0.566-0.015c0.072,0,0.555,0.042,1.179,0.085c0.611,0.043,1.363,0.085,1.974,0.085
|
||||
c2.412,0,3.689-0.993,4.3-1.633c0.795-0.836,1.533-2.214,1.533-4.001c0-1.69-0.667-2.868-1.377-3.605
|
||||
c-1.688-1.746-4.286-1.619-5.691-1.619c-0.852,0-1.746,0.044-1.917,0.044c-0.07,0-0.965-0.044-1.604-0.044
|
||||
c-0.156,0-0.227,0.029-0.227,0.114c0,0.057,0.057,0.085,0.113,0.085c0.129,0,0.369,0.015,0.482,0.043
|
||||
c0.469,0.1,0.582,0.326,0.611,0.809c0.028,0.454,0.028,0.852,0.028,3.065V9.149z M103.561,6.424c0-1.093,0-2.541,0.016-3.023
|
||||
c0-0.156,0.041-0.228,0.169-0.283c0.114-0.057,0.639-0.1,0.923-0.1c1.689,0,3.307,0.198,4.642,1.604
|
||||
c0.582,0.61,1.362,1.774,1.362,3.577c0,1.306-0.397,2.668-1.136,3.392c-0.838,0.838-2.058,1.321-3.378,1.321
|
||||
c-1.674,0-2.229-0.299-2.413-0.569c-0.112-0.155-0.142-0.724-0.155-1.078c-0.014-0.27-0.029-1.575-0.029-3.08V6.424z M95.334,2.989
|
||||
c0.438-0.005,1.401-0.078,2.173,0.708c0.772,0.787,0.815,1.763,0.815,2.243c0,1.339-1.101,2.343-2.513,2.343
|
||||
c-0.583,0-1.228-0.1-1.44-0.228c-0.071-0.043-0.1-0.1-0.1-0.17V3.244c0-0.085,0.043-0.142,0.114-0.17
|
||||
C94.525,3.031,94.909,2.994,95.334,2.989 M96.979,8.418c1.483-0.406,2.479-1.644,2.479-3.321c0-0.773-0.407-1.429-0.727-1.734
|
||||
c-0.234-0.218-0.889-0.83-2.71-0.83c-0.669,0-1.905,0.045-2.29,0.045c-0.168,0-0.966-0.043-1.605-0.043
|
||||
c-0.155,0-0.227,0.029-0.227,0.114c0,0.057,0.058,0.085,0.114,0.085c0.127,0,0.369,0.015,0.482,0.043
|
||||
c0.468,0.1,0.581,0.326,0.609,0.809c0.029,0.454,0.029,0.852,0.029,3.065v2.499c0,1.362,0,2.483-0.071,3.08
|
||||
c-0.057,0.411-0.128,0.724-0.411,0.78c-0.128,0.028-0.299,0.057-0.426,0.057c-0.086,0-0.114,0.042-0.114,0.085
|
||||
c0,0.086,0.071,0.113,0.228,0.113c0.426,0,1.319-0.042,1.335-0.042c0.069,0,0.965,0.042,1.745,0.042
|
||||
c0.156,0,0.227-0.042,0.227-0.113c0-0.043-0.028-0.085-0.113-0.085c-0.128,0-0.44-0.028-0.639-0.057
|
||||
c-0.426-0.057-0.511-0.369-0.554-0.78c-0.071-0.597-0.071-1.718-0.071-3.08V8.808c0-0.07,0.028-0.113,0.1-0.113l1.378,0.022
|
||||
c0.084,0,0.16,0.033,0.188,0.091c0.215,0.473,0.513,1.27,0.943,2.148c0.585,1.202,0.687,1.733,1.297,2.061
|
||||
c0.368,0.199,0.756,0.248,1.551,0.248h0.686c0.254,0,0.339-0.027,0.339-0.113c0-0.043-0.057-0.087-0.127-0.085
|
||||
c-0.141,0.003-0.376-0.036-0.646-0.084c-0.229-0.04-0.9-0.203-1.317-0.98C98.143,11.03,97.545,9.615,96.979,8.418 M79.32,6.65
|
||||
c0-2.214,0-2.611,0.028-3.065c0.028-0.497,0.142-0.737,0.525-0.809c0.17-0.028,0.255-0.043,0.354-0.043
|
||||
c0.057,0,0.113-0.028,0.113-0.085c0-0.085-0.071-0.114-0.228-0.114c-0.426,0-1.319,0.044-1.391,0.044
|
||||
c-0.07,0-0.965-0.044-1.604-0.044c-0.156,0-0.228,0.029-0.228,0.114c0,0.057,0.057,0.085,0.114,0.085
|
||||
c0.127,0,0.369,0.015,0.481,0.043c0.469,0.1,0.583,0.326,0.611,0.809c0.028,0.454,0.028,0.852,0.028,3.065v0.299
|
||||
c0,0.07-0.043,0.085-0.086,0.085h-6.018c-0.043,0-0.085-0.015-0.085-0.085V6.65c0-2.214,0-2.611,0.028-3.065
|
||||
c0.028-0.497,0.143-0.737,0.525-0.809c0.17-0.028,0.256-0.043,0.354-0.043c0.058,0,0.114-0.028,0.114-0.085
|
||||
c0-0.085-0.072-0.114-0.229-0.114c-0.426,0-1.318,0.044-1.391,0.044c-0.07,0-0.965-0.044-1.604-0.044
|
||||
c-0.156,0-0.227,0.029-0.227,0.114c0,0.057,0.057,0.085,0.113,0.085c0.128,0,0.369,0.015,0.482,0.043
|
||||
c0.469,0.1,0.582,0.326,0.61,0.809c0.028,0.454,0.028,0.852,0.028,3.065v2.499c0,1.362,0,2.483-0.071,3.08
|
||||
c-0.057,0.411-0.127,0.724-0.411,0.78c-0.128,0.028-0.298,0.057-0.426,0.057c-0.085,0-0.113,0.042-0.113,0.085
|
||||
c0,0.086,0.071,0.113,0.227,0.113c0.426,0,1.32-0.042,1.391-0.042c0.072,0,0.965,0.042,1.746,0.042c0.156,0,0.228-0.042,0.228-0.113
|
||||
c0-0.043-0.028-0.085-0.114-0.085c-0.127,0-0.439-0.028-0.639-0.057c-0.426-0.057-0.51-0.369-0.554-0.78
|
||||
c-0.07-0.597-0.07-1.718-0.07-3.08V7.658c0-0.07,0.042-0.085,0.085-0.085h6.018c0.043,0,0.086,0.028,0.086,0.085v1.491
|
||||
c0,1.362,0,2.483-0.07,3.08c-0.058,0.411-0.128,0.724-0.412,0.78c-0.128,0.028-0.299,0.057-0.427,0.057
|
||||
c-0.085,0-0.113,0.042-0.113,0.085c0,0.086,0.071,0.113,0.228,0.113c0.426,0,1.32-0.042,1.391-0.042
|
||||
c0.071,0,0.965,0.042,1.747,0.042c0.155,0,0.226-0.042,0.226-0.113c0-0.043-0.028-0.085-0.112-0.085c-0.129,0-0.44-0.028-0.64-0.057
|
||||
c-0.426-0.057-0.511-0.369-0.554-0.78c-0.07-0.597-0.07-1.718-0.07-3.08V6.65z M46.516,7.658c0-0.07,0.027-0.099,0.085-0.099
|
||||
c0.213,0,0.922,0,1.107,0.028c0.34,0.043,0.695,0.085,1.177,0.412c1.094,0.752,1.378,1.986,1.378,2.838
|
||||
c0,1.604-1.235,2.016-2.002,2.016c-0.255,0-0.865-0.028-1.249-0.213c-0.439-0.213-0.439-0.411-0.482-1.107
|
||||
c-0.014-0.213-0.014-1.973-0.014-3.065V7.658z M46.516,3.159c0-0.085,0.042-0.128,0.17-0.156c0.228-0.057,0.525-0.07,0.681-0.07
|
||||
c1.392,0,1.917,1.263,1.917,2.441c0,0.582-0.213,1.092-0.511,1.434c-0.299,0.34-0.497,0.369-1.292,0.369
|
||||
c-0.525,0-0.781-0.043-0.866-0.058c-0.071-0.028-0.099-0.057-0.099-0.156V3.159z M45.38,9.149c0,1.362,0,2.483-0.071,3.08
|
||||
c-0.057,0.411-0.127,0.724-0.412,0.78c-0.127,0.028-0.297,0.057-0.426,0.057c-0.085,0-0.112,0.042-0.112,0.085
|
||||
c0,0.086,0.07,0.113,0.227,0.113c0.213,0,0.54-0.027,0.823-0.027c0.298-0.015,0.539-0.015,0.567-0.015
|
||||
c0.058,0,0.454,0.015,0.866,0.042c0.411,0.015,0.866,0.043,1.022,0.043c2.426,0,3.619-1.575,3.619-3.095
|
||||
c0-1.66-1.405-2.667-2.456-2.994c0.667-0.695,1.334-1.391,1.334-2.556c0-0.709-0.511-2.129-2.839-2.129
|
||||
c-0.652,0-1.206,0.044-1.547,0.044c-0.07,0-0.965-0.044-1.604-0.044c-0.156,0-0.228,0.029-0.228,0.114
|
||||
c0,0.057,0.057,0.085,0.114,0.085c0.127,0,0.368,0.015,0.481,0.043c0.47,0.1,0.583,0.326,0.611,0.809
|
||||
C45.38,4.039,45.38,4.437,45.38,6.65V9.149z M37.294,9.149c0,1.362,0,2.483-0.07,3.08c-0.057,0.411-0.128,0.724-0.412,0.78
|
||||
c-0.128,0.028-0.298,0.057-0.426,0.057c-0.085,0-0.113,0.042-0.113,0.085c0,0.086,0.071,0.113,0.227,0.113
|
||||
c0.213,0,0.539-0.027,0.823-0.027c0.298-0.015,0.54-0.015,0.567-0.015c0.213,0,0.555,0.015,1.107,0.042
|
||||
c0.554,0.015,1.334,0.043,2.399,0.043c0.553,0,0.667,0,0.766-0.369c0.071-0.298,0.185-1.263,0.185-1.377
|
||||
c0-0.099,0-0.213-0.085-0.213c-0.07,0-0.1,0.058-0.128,0.213c-0.099,0.582-0.27,0.866-0.638,1.022
|
||||
c-0.369,0.156-0.994,0.156-1.363,0.156c-1.391,0-1.604-0.185-1.646-1.164c-0.014-0.298,0-1.944,0-2.427V7.9
|
||||
c0-0.058,0.028-0.1,0.099-0.1c0.242,0,1.647,0.028,2.03,0.07c0.554,0.058,0.682,0.299,0.738,0.497
|
||||
c0.057,0.185,0.057,0.326,0.057,0.469c0,0.07,0.028,0.128,0.1,0.128c0.1,0,0.1-0.157,0.1-0.271c0-0.1,0.027-0.624,0.057-0.908
|
||||
c0.042-0.468,0.113-0.709,0.113-0.795c0-0.084-0.028-0.113-0.071-0.113c-0.056,0-0.113,0.071-0.212,0.185
|
||||
c-0.129,0.142-0.327,0.17-0.668,0.198c-0.326,0.028-2.072,0.028-2.257,0.028c-0.07,0-0.085-0.042-0.085-0.142V3.23
|
||||
c0-0.1,0.028-0.143,0.085-0.143c0.156,0,1.704,0.015,1.944,0.043c0.768,0.085,0.909,0.256,1.008,0.482
|
||||
c0.071,0.171,0.086,0.412,0.086,0.511c0,0.114,0.027,0.185,0.113,0.185c0.057,0,0.085-0.085,0.1-0.155
|
||||
c0.028-0.171,0.057-0.795,0.07-0.938c0.043-0.397,0.114-0.567,0.114-0.667c0-0.07-0.015-0.128-0.058-0.128
|
||||
c-0.07,0-0.127,0.058-0.198,0.07c-0.114,0.029-0.341,0.058-0.61,0.072c-0.326,0.015-3.151,0.015-3.251,0.015l-0.581-0.029
|
||||
c-0.313-0.015-0.695-0.015-1.022-0.015c-0.155,0-0.227,0.029-0.227,0.114c0,0.057,0.057,0.085,0.113,0.085
|
||||
c0.128,0,0.369,0.015,0.482,0.043c0.469,0.1,0.582,0.326,0.61,0.809c0.028,0.454,0.028,0.852,0.028,3.065V9.149z M54.173,9.149
|
||||
c0,1.362,0,2.483-0.07,3.08c-0.057,0.411-0.128,0.724-0.412,0.78c-0.128,0.028-0.298,0.057-0.426,0.057
|
||||
c-0.085,0-0.113,0.042-0.113,0.085c0,0.086,0.071,0.113,0.227,0.113c0.214,0,0.54-0.027,0.823-0.027
|
||||
c0.299-0.015,0.54-0.015,0.568-0.015c0.213,0,0.554,0.015,1.107,0.042c0.553,0.015,1.334,0.043,2.398,0.043
|
||||
c0.554,0,0.667,0,0.767-0.369c0.07-0.298,0.185-1.263,0.185-1.377c0-0.099,0-0.213-0.085-0.213c-0.071,0-0.1,0.058-0.128,0.213
|
||||
c-0.1,0.582-0.27,0.866-0.639,1.022s-0.993,0.156-1.363,0.156c-1.391,0-1.604-0.185-1.646-1.164c-0.014-0.298,0-1.944,0-2.427V7.9
|
||||
c0-0.058,0.029-0.1,0.1-0.1c0.241,0,1.647,0.028,2.03,0.07c0.554,0.058,0.681,0.299,0.738,0.497
|
||||
c0.057,0.185,0.057,0.326,0.057,0.469c0,0.07,0.028,0.128,0.099,0.128c0.1,0,0.1-0.157,0.1-0.271c0-0.1,0.028-0.624,0.057-0.908
|
||||
c0.043-0.468,0.113-0.709,0.113-0.795c0-0.084-0.028-0.113-0.07-0.113c-0.057,0-0.113,0.071-0.213,0.185
|
||||
c-0.128,0.142-0.326,0.17-0.667,0.198c-0.326,0.028-2.072,0.028-2.256,0.028c-0.072,0-0.087-0.042-0.087-0.142V3.23
|
||||
c0-0.1,0.029-0.143,0.087-0.143c0.155,0,1.702,0.015,1.943,0.043c0.767,0.085,0.908,0.256,1.008,0.482
|
||||
c0.071,0.171,0.085,0.412,0.085,0.511c0,0.114,0.028,0.185,0.113,0.185c0.057,0,0.085-0.085,0.1-0.155
|
||||
c0.028-0.171,0.057-0.795,0.071-0.938c0.042-0.397,0.113-0.567,0.113-0.667c0-0.07-0.015-0.128-0.057-0.128
|
||||
c-0.071,0-0.128,0.058-0.199,0.07c-0.113,0.029-0.34,0.058-0.609,0.072c-0.327,0.015-3.151,0.015-3.251,0.015l-0.582-0.029
|
||||
c-0.313-0.015-0.695-0.015-1.021-0.015c-0.156,0-0.228,0.029-0.228,0.114c0,0.057,0.057,0.085,0.113,0.085
|
||||
c0.128,0,0.369,0.015,0.482,0.043c0.47,0.1,0.582,0.326,0.611,0.809c0.027,0.454,0.027,0.852,0.027,3.065V9.149z M67.401,56.393
|
||||
c0-0.144,0.057-0.199,0.17-0.199c0.427,0,1.846,0,2.214,0.056c0.682,0.086,1.392,0.171,2.356,0.824
|
||||
c2.186,1.504,2.754,3.975,2.754,5.677c0,3.209-2.47,4.031-4.002,4.031c-0.512,0-1.732-0.057-2.499-0.426
|
||||
c-0.88-0.426-0.88-0.824-0.965-2.215c-0.028-0.425-0.028-3.944-0.028-6.131V56.393z M67.401,47.394c0-0.17,0.085-0.256,0.341-0.313
|
||||
c0.454-0.114,1.051-0.142,1.362-0.142c2.782,0,3.832,2.526,3.832,4.883c0,1.163-0.426,2.185-1.021,2.867
|
||||
c-0.596,0.682-0.993,0.737-2.583,0.737c-1.051,0-1.562-0.086-1.732-0.113c-0.142-0.057-0.198-0.114-0.198-0.312V47.394z
|
||||
M65.131,59.372c0,2.726,0,4.969-0.142,6.159c-0.114,0.824-0.257,1.449-0.824,1.563c-0.256,0.057-0.596,0.113-0.852,0.113
|
||||
c-0.17,0-0.227,0.085-0.227,0.171c0,0.171,0.141,0.228,0.454,0.228c0.426,0,1.079-0.057,1.646-0.057
|
||||
c0.597-0.03,1.079-0.03,1.136-0.03c0.114,0,0.908,0.03,1.731,0.087c0.824,0.027,1.731,0.084,2.044,0.084
|
||||
c4.854,0,7.239-3.15,7.239-6.188c0-3.32-2.811-5.336-4.911-5.99c1.334-1.39,2.668-2.781,2.668-5.108
|
||||
c0-1.419-1.021-4.259-5.677-4.259c-1.306,0-2.413,0.086-3.095,0.086c-0.142,0-1.931-0.086-3.207-0.086
|
||||
c-0.313,0-0.454,0.058-0.454,0.229c0,0.113,0.113,0.17,0.227,0.17c0.256,0,0.738,0.028,0.965,0.085
|
||||
c0.938,0.198,1.164,0.653,1.221,1.618c0.058,0.908,0.058,1.703,0.058,6.131V59.372z M84.098,54.376c0-4.428,0-5.223,0.057-6.131
|
||||
c0.057-0.994,0.283-1.477,1.05-1.618c0.342-0.057,0.511-0.085,0.71-0.085c0.114,0,0.227-0.057,0.227-0.17
|
||||
c0-0.171-0.142-0.229-0.454-0.229c-0.852,0-2.64,0.086-2.781,0.086c-0.143,0-1.931-0.086-2.867-0.086
|
||||
c-0.313,0-0.454,0.058-0.454,0.229c0,0.113,0.113,0.17,0.227,0.17c0.199,0,0.567,0.028,0.88,0.113
|
||||
c0.625,0.142,0.908,0.625,0.965,1.59c0.058,0.908,0.058,1.703,0.058,6.131v4.996c0,2.726,0,4.969-0.142,6.159
|
||||
c-0.114,0.824-0.256,1.449-0.823,1.563c-0.256,0.057-0.597,0.113-0.853,0.113c-0.17,0-0.227,0.085-0.227,0.171
|
||||
c0,0.171,0.142,0.228,0.454,0.228c0.852,0,2.64-0.087,2.782-0.087c0.142,0,1.93,0.087,3.491,0.087c0.313,0,0.454-0.087,0.454-0.228
|
||||
c0-0.086-0.057-0.171-0.228-0.171c-0.255,0-0.88-0.057-1.277-0.113c-0.851-0.113-1.021-0.738-1.106-1.563
|
||||
c-0.142-1.19-0.142-3.434-0.142-6.159V54.376z M92.693,50.146c0.908,1.022,4.111,4.599,7.398,8.146
|
||||
c3.004,3.237,7.085,7.409,7.396,7.693c1.508,1.505,1.852,1.817,2.08,1.817c0.201,0,0.258-0.143,0.258-2.017l0.057-16.634
|
||||
c0-1.703,0.113-2.328,1.051-2.526c0.34-0.085,0.54-0.085,0.682-0.085c0.198,0,0.312-0.085,0.312-0.199
|
||||
c0-0.17-0.199-0.199-0.511-0.199c-1.164,0-2.104,0.086-2.42,0.086c-0.314,0-1.679-0.086-2.953-0.086
|
||||
c-0.341,0-0.566,0.029-0.566,0.199c0,0.114,0.028,0.199,0.226,0.199c0.229,0,0.879,0.028,1.39,0.142
|
||||
c0.878,0.228,1.076,0.852,1.105,2.697l0.313,14.42c-0.908-0.937-3.997-4.399-6.804-7.408c-4.363-4.685-8.586-9.255-9.013-9.737
|
||||
c-0.286-0.283-0.772-0.908-1.002-0.908c-0.228,0-0.313,0.313-0.313,1.419l-0.029,16.267c0,2.582-0.142,3.405-0.852,3.604
|
||||
c-0.426,0.144-0.936,0.171-1.164,0.171c-0.142,0-0.227,0.058-0.227,0.171c0,0.197,0.17,0.228,0.455,0.228
|
||||
c1.277,0,2.474-0.087,2.731-0.087c0.257,0,1.394,0.087,3.01,0.087c0.34,0,0.51-0.057,0.51-0.228c0-0.113-0.085-0.171-0.227-0.171
|
||||
c-0.256,0-0.879-0.027-1.417-0.171c-0.765-0.226-1.049-0.965-1.105-3.292L92.693,50.146z M130.306,65.19
|
||||
c0,0.482-0.199,0.794-0.567,0.993c-0.737,0.426-2.214,0.596-3.236,0.596c-2.61,0-5.194-0.852-7.437-3.037
|
||||
c-0.994-0.965-3.01-3.86-3.01-7.864c0-3.32,1.164-5.904,2.812-7.21c2.156-1.702,4.286-1.873,6.073-1.873
|
||||
c3.663,0,5.962,1.221,6.671,2.3c0.427,0.682,0.568,1.476,0.596,1.874c0.028,0.254,0.058,0.425,0.199,0.425
|
||||
c0.199,0,0.256-0.142,0.256-0.596c0-2.839,0.199-3.634,0.199-4.03c0-0.114-0.057-0.228-0.341-0.257
|
||||
c-0.71-0.027-1.704-0.142-2.3-0.283c-0.539-0.113-2.554-0.482-4.344-0.482c-2.185,0-4.995,0.198-7.55,1.788
|
||||
c-2.526,1.59-4.74,4.797-4.74,9.34c0,3.548,1.646,6.585,3.378,8.089c3.15,2.754,7.182,3.038,9.339,3.038
|
||||
c1.646,0,4.202-0.313,6.019-1.276c0.34-0.199,0.368-0.257,0.368-1.533v-3.18c0-1.192,0-2.044,0.057-2.953
|
||||
c0.058-0.992,0.284-1.476,1.051-1.617c0.34-0.058,0.512-0.085,0.709-0.085c0.113,0,0.228-0.058,0.228-0.171
|
||||
c0-0.171-0.141-0.228-0.454-0.228c-0.852,0-2.64,0.086-2.782,0.086c-0.142,0-1.93-0.086-3.207-0.086
|
||||
c-0.313,0-0.455,0.057-0.455,0.228c0,0.113,0.114,0.171,0.228,0.171c0.255,0,0.738,0.027,0.966,0.085
|
||||
c1.135,0.312,1.276,0.625,1.276,2.924V65.19z M139.192,59.372c0,2.726,0,4.969-0.143,6.159c-0.113,0.824-0.256,1.449-0.822,1.563
|
||||
c-0.257,0.057-0.598,0.113-0.854,0.113c-0.169,0-0.227,0.085-0.227,0.171c0,0.171,0.142,0.228,0.454,0.228
|
||||
c0.425,0,1.079-0.057,1.647-0.057c0.596-0.03,1.078-0.03,1.135-0.03c0.426,0,1.107,0.03,2.215,0.087
|
||||
c1.106,0.027,2.667,0.084,4.797,0.084c1.106,0,1.335,0,1.532-0.738c0.143-0.596,0.37-2.525,0.37-2.754c0-0.197,0-0.426-0.171-0.426
|
||||
c-0.143,0-0.199,0.114-0.256,0.426c-0.198,1.165-0.539,1.732-1.277,2.045c-0.737,0.312-1.987,0.312-2.725,0.312
|
||||
c-2.781,0-3.208-0.369-3.293-2.327c-0.028-0.596,0-3.89,0-4.854v-2.497c0-0.114,0.057-0.199,0.198-0.199
|
||||
c0.482,0,3.294,0.056,4.061,0.142c1.105,0.114,1.362,0.597,1.476,0.994c0.113,0.369,0.113,0.652,0.113,0.937
|
||||
c0,0.142,0.056,0.255,0.198,0.255c0.199,0,0.199-0.313,0.199-0.539c0-0.198,0.057-1.249,0.114-1.816
|
||||
c0.083-0.937,0.226-1.42,0.226-1.59s-0.056-0.228-0.143-0.228c-0.112,0-0.227,0.143-0.425,0.369
|
||||
c-0.255,0.284-0.653,0.342-1.334,0.397c-0.653,0.058-4.145,0.058-4.515,0.058c-0.141,0-0.169-0.086-0.169-0.283v-7.836
|
||||
c0-0.199,0.057-0.284,0.169-0.284c0.313,0,3.407,0.029,3.891,0.085c1.532,0.171,1.816,0.512,2.015,0.966
|
||||
c0.142,0.341,0.171,0.822,0.171,1.021c0,0.228,0.057,0.369,0.227,0.369c0.113,0,0.171-0.17,0.199-0.312
|
||||
c0.057-0.342,0.115-1.59,0.142-1.874c0.085-0.795,0.228-1.135,0.228-1.334c0-0.143-0.028-0.255-0.114-0.255
|
||||
c-0.14,0-0.255,0.112-0.396,0.142c-0.228,0.057-0.682,0.113-1.221,0.142c-0.653,0.028-6.302,0.028-6.501,0.028l-1.164-0.057
|
||||
c-0.624-0.029-1.391-0.029-2.044-0.029c-0.313,0-0.453,0.058-0.453,0.229c0,0.113,0.113,0.17,0.226,0.17
|
||||
c0.257,0,0.739,0.028,0.966,0.085c0.936,0.198,1.164,0.653,1.221,1.618c0.058,0.908,0.058,1.703,0.058,6.131V59.372z
|
||||
M155.766,50.146c0.908,1.022,4.11,4.599,7.397,8.146c3.004,3.237,7.085,7.409,7.397,7.693c1.508,1.505,1.851,1.817,2.079,1.817
|
||||
c0.201,0,0.259-0.143,0.259-2.017l0.057-16.634c0-1.703,0.114-2.328,1.051-2.526c0.34-0.085,0.539-0.085,0.681-0.085
|
||||
c0.199,0,0.313-0.085,0.313-0.199c0-0.17-0.199-0.199-0.512-0.199c-1.164,0-2.104,0.086-2.419,0.086s-1.679-0.086-2.953-0.086
|
||||
c-0.341,0-0.567,0.029-0.567,0.199c0,0.114,0.028,0.199,0.227,0.199c0.227,0,0.88,0.028,1.389,0.142
|
||||
c0.879,0.228,1.076,0.852,1.105,2.697l0.314,14.42c-0.909-0.937-3.999-4.399-6.804-7.408c-4.364-4.685-8.587-9.255-9.014-9.737
|
||||
c-0.286-0.283-0.773-0.908-1.002-0.908s-0.313,0.313-0.313,1.419l-0.029,16.267c0,2.582-0.143,3.405-0.852,3.604
|
||||
c-0.427,0.144-0.938,0.171-1.165,0.171c-0.141,0-0.227,0.058-0.227,0.171c0,0.197,0.171,0.228,0.454,0.228
|
||||
c1.277,0,2.476-0.087,2.732-0.087c0.258,0,1.395,0.087,3.01,0.087c0.34,0,0.51-0.057,0.51-0.228c0-0.113-0.085-0.171-0.228-0.171
|
||||
c-0.254,0-0.876-0.027-1.416-0.171c-0.766-0.226-1.048-0.965-1.105-3.292L155.766,50.146z M29.806,47.365l3.569,0.057
|
||||
c2.721,0.057,3.4,0.71,3.485,1.562l0.029,0.312c0.029,0.397,0.087,0.482,0.231,0.482c0.116,0,0.204-0.113,0.204-0.369
|
||||
c0-0.312,0.086-2.271,0.086-3.122c0-0.17,0-0.341-0.145-0.341c-0.116,0-0.377,0.085-0.803,0.143
|
||||
c-0.453,0.085-1.104,0.142-2.012,0.142H23.815c-0.34,0-1.419-0.057-2.242-0.142c-0.767-0.058-1.051-0.341-1.249-0.341
|
||||
c-0.114,0-0.228,0.369-0.284,0.539c-0.057,0.227-0.625,2.668-0.625,2.952c0,0.17,0.057,0.256,0.143,0.256
|
||||
c0.113,0,0.199-0.057,0.283-0.284c0.086-0.198,0.172-0.397,0.483-0.879c0.454-0.682,1.136-0.881,2.896-0.909l4.201-0.057v12.007
|
||||
c0,2.726,0,4.969-0.143,6.159c-0.112,0.824-0.255,1.449-0.823,1.563c-0.255,0.057-0.596,0.113-0.852,0.113
|
||||
c-0.17,0-0.227,0.085-0.227,0.171c0,0.171,0.143,0.228,0.454,0.228c0.852,0,2.64-0.087,2.782-0.087c0.142,0,1.929,0.087,3.487,0.087
|
||||
c0.312,0,0.453-0.087,0.453-0.228c0-0.086-0.057-0.171-0.226-0.171c-0.256,0-0.879-0.057-1.275-0.113
|
||||
c-0.851-0.113-1.021-0.738-1.105-1.563c-0.142-1.19-0.142-3.434-0.142-6.159V47.365z M41.755,58.519c0,4.145,1.079,6.132,2.47,7.466
|
||||
c2.016,1.9,4.883,2.015,5.848,2.015c1.676,0,3.804-0.284,5.848-2.101c2.271-2.015,2.611-5.423,2.611-8.487v-3.038
|
||||
c0-4.428,0-5.223,0.058-6.131c0.057-0.993,0.283-1.448,1.051-1.618c0.339-0.057,0.511-0.085,0.709-0.085
|
||||
c0.113,0,0.228-0.057,0.228-0.17c0-0.171-0.143-0.229-0.455-0.229c-0.852,0-2.186,0.086-2.385,0.086
|
||||
c-0.17,0-1.731-0.086-3.009-0.086c-0.313,0-0.453,0.058-0.453,0.229c0,0.113,0.112,0.17,0.226,0.17c0.257,0,0.739,0.028,0.966,0.085
|
||||
c0.937,0.198,1.164,0.653,1.221,1.618c0.057,0.908,0.057,1.703,0.057,6.131v3.549c0,2.924-0.341,5.337-1.646,6.954
|
||||
c-1.022,1.222-2.725,2.045-4.457,2.045c-1.617,0-2.895-0.256-4.286-1.563c-1.221-1.163-2.129-2.923-2.129-7.011v-3.975
|
||||
c0-4.428,0-5.223,0.057-6.131c0.057-0.993,0.284-1.504,1.051-1.618c0.341-0.057,0.511-0.085,0.709-0.085
|
||||
c0.114,0,0.228-0.057,0.228-0.17c0-0.171-0.142-0.229-0.454-0.229c-0.852,0-2.555,0.086-2.811,0.086
|
||||
c-0.255,0-1.987-0.086-3.265-0.086c-0.313,0-0.454,0.058-0.454,0.229c0,0.113,0.114,0.17,0.228,0.17
|
||||
c0.256,0,0.738,0.028,0.965,0.085c0.938,0.198,1.164,0.653,1.221,1.618c0.057,0.908,0.057,1.703,0.057,6.131V58.519z M51.902,53.502
|
||||
c0-0.767-0.568-1.248-1.306-1.248c-0.71,0-1.136,0.539-1.136,1.22c0,0.88,0.71,1.221,1.221,1.221
|
||||
C51.221,54.694,51.902,54.354,51.902,53.502 M51.902,47.797c0-0.767-0.568-1.249-1.306-1.249c-0.71,0-1.136,0.54-1.136,1.221
|
||||
c0,0.88,0.71,1.22,1.221,1.22C51.221,48.988,51.902,48.648,51.902,47.797 M106.209,30.812c2.97-0.814,4.97-3.294,4.97-6.658
|
||||
c0-1.547-0.817-2.86-1.46-3.473c-0.466-0.438-1.779-1.664-5.427-1.664c-1.344,0-3.82,0.09-4.593,0.09
|
||||
c-0.335,0-1.935-0.085-3.215-0.085c-0.313,0-0.455,0.057-0.455,0.228c0,0.114,0.114,0.171,0.228,0.171
|
||||
c0.257,0,0.739,0.028,0.968,0.085c0.938,0.199,1.165,0.654,1.223,1.621c0.057,0.91,0.057,1.708,0.057,6.145v5.007
|
||||
c0,2.731,0,4.978-0.141,6.172c-0.114,0.825-0.258,1.452-0.826,1.564c-0.257,0.058-0.598,0.114-0.854,0.114
|
||||
c-0.17,0-0.228,0.085-0.228,0.17c0,0.172,0.143,0.229,0.455,0.229c0.854,0,2.646-0.085,2.674-0.085c0.142,0,1.935,0.085,3.499,0.085
|
||||
c0.313,0,0.455-0.085,0.455-0.229c0-0.085-0.057-0.17-0.229-0.17c-0.255,0-0.881-0.057-1.278-0.114
|
||||
c-0.854-0.112-1.024-0.739-1.11-1.564c-0.143-1.194-0.143-3.44-0.143-6.172v-0.683c0-0.143,0.057-0.228,0.2-0.228l2.76,0.042
|
||||
c0.171,0,0.321,0.067,0.376,0.186c0.432,0.944,1.029,2.54,1.89,4.303c1.175,2.409,1.378,3.476,2.602,4.13
|
||||
c0.739,0.399,1.515,0.499,3.107,0.499h1.371c0.512,0,0.684-0.057,0.684-0.229c0-0.085-0.114-0.173-0.257-0.17
|
||||
c-0.281,0.008-0.753-0.071-1.292-0.167c-0.462-0.082-1.808-0.408-2.639-1.966C108.541,36.046,107.344,33.212,106.209,30.812
|
||||
M4.476,31.418c0,4.155,1.081,6.147,2.477,7.485c2.02,1.906,4.895,2.021,5.862,2.021c1.679,0,3.813-0.284,5.863-2.105
|
||||
c2.277-2.021,2.618-5.438,2.618-8.511v-3.045c0-4.44,0-5.237,0.058-6.147c0.057-0.997,0.284-1.451,1.052-1.622
|
||||
c0.343-0.058,0.514-0.086,0.713-0.086c0.113,0,0.228-0.057,0.228-0.171c0-0.171-0.143-0.228-0.456-0.228
|
||||
c-0.854,0-2.191,0.085-2.391,0.085c-0.171,0-1.736-0.085-3.017-0.085c-0.313,0-0.455,0.057-0.455,0.228
|
||||
c0,0.114,0.113,0.171,0.227,0.171c0.257,0,0.741,0.028,0.969,0.086c0.939,0.198,1.166,0.654,1.224,1.622
|
||||
c0.057,0.91,0.057,1.707,0.057,6.147v3.558c0,2.932-0.341,5.351-1.651,6.973c-1.023,1.224-2.731,2.049-4.468,2.049
|
||||
c-1.622,0-2.903-0.256-4.298-1.565c-1.224-1.167-2.134-2.931-2.134-7.029v-3.984c0-4.44,0-5.237,0.057-6.147
|
||||
c0.057-0.997,0.284-1.509,1.054-1.622c0.341-0.058,0.512-0.086,0.711-0.086c0.113,0,0.228-0.057,0.228-0.171
|
||||
c0-0.171-0.143-0.228-0.455-0.228c-0.854,0-2.562,0.085-2.818,0.085c-0.256,0-1.992-0.085-3.272-0.085
|
||||
C2.142,19.009,2,19.065,2,19.236c0,0.114,0.113,0.171,0.228,0.171c0.256,0,0.739,0.028,0.968,0.086
|
||||
c0.939,0.198,1.166,0.654,1.223,1.622c0.058,0.91,0.058,1.707,0.058,6.147V31.418z M27.707,23.021
|
||||
c0.911,1.025,4.121,4.611,7.418,8.17c3.012,3.243,7.104,7.428,7.415,7.712c1.513,1.508,1.856,1.821,2.086,1.821
|
||||
c0.202,0,0.259-0.143,0.259-2.021l0.057-16.679c0-1.708,0.114-2.334,1.054-2.532c0.341-0.086,0.54-0.086,0.684-0.086
|
||||
c0.198,0,0.313-0.086,0.313-0.199c0-0.171-0.199-0.199-0.513-0.199c-1.167,0-2.11,0.085-2.426,0.085
|
||||
c-0.316,0-1.683-0.085-2.961-0.085c-0.342,0-0.568,0.028-0.568,0.199c0,0.113,0.028,0.199,0.227,0.199
|
||||
c0.228,0,0.882,0.028,1.393,0.143c0.881,0.228,1.08,0.854,1.108,2.704l0.313,14.457c-0.91-0.938-4.007-4.411-6.82-7.428
|
||||
c-4.376-4.696-8.608-9.278-9.037-9.762c-0.286-0.285-0.774-0.911-1.004-0.911s-0.315,0.313-0.315,1.424l-0.028,16.307
|
||||
c0,2.591-0.143,3.416-0.854,3.615c-0.427,0.143-0.938,0.17-1.167,0.17c-0.142,0-0.228,0.059-0.228,0.171
|
||||
c0,0.2,0.171,0.229,0.456,0.229c1.28,0,2.481-0.086,2.739-0.086s1.397,0.086,3.018,0.086c0.341,0,0.511-0.057,0.511-0.229
|
||||
c0-0.112-0.085-0.171-0.227-0.171c-0.256,0-0.881-0.027-1.421-0.17c-0.768-0.228-1.051-0.967-1.108-3.301L27.707,23.021z
|
||||
M53.576,27.263c0-4.44,0-5.237,0.057-6.147c0.058-0.997,0.285-1.48,1.053-1.622c0.343-0.058,0.514-0.086,0.712-0.086
|
||||
c0.114,0,0.229-0.057,0.229-0.171c0-0.171-0.144-0.228-0.456-0.228c-0.854,0-2.646,0.085-2.788,0.085
|
||||
c-0.144,0-1.937-0.085-2.875-0.085c-0.313,0-0.456,0.057-0.456,0.228c0,0.114,0.114,0.171,0.228,0.171
|
||||
c0.199,0,0.569,0.028,0.883,0.114c0.626,0.143,0.91,0.626,0.968,1.594c0.057,0.91,0.057,1.707,0.057,6.147v5.01
|
||||
c0,2.731,0,4.98-0.143,6.176c-0.113,0.825-0.256,1.451-0.824,1.565c-0.258,0.057-0.598,0.112-0.854,0.112
|
||||
c-0.171,0-0.228,0.086-0.228,0.171c0,0.172,0.142,0.229,0.455,0.229c0.854,0,2.646-0.086,2.79-0.086c0.142,0,1.935,0.086,3.5,0.086
|
||||
c0.313,0,0.454-0.086,0.454-0.229c0-0.085-0.056-0.171-0.227-0.171c-0.257,0-0.883-0.056-1.281-0.112
|
||||
c-0.854-0.114-1.024-0.74-1.109-1.565c-0.143-1.195-0.143-3.444-0.143-6.176V27.263z M162.65,21.653c0.77,0,1.254-0.569,1.254-1.309
|
||||
c0-0.712-0.542-1.139-1.226-1.139c-0.881,0-1.224,0.711-1.224,1.223C161.455,20.97,161.798,21.653,162.65,21.653 M169.952,21.653
|
||||
c0.77,0,1.253-0.569,1.253-1.309c0-0.712-0.54-1.139-1.224-1.139c-0.883,0-1.224,0.711-1.224,1.223
|
||||
C168.758,20.97,169.099,21.653,169.952,21.653 M163.043,31.104c-0.086,0-0.143-0.057-0.086-0.199l2.506-7.684
|
||||
c0.142-0.427,0.284-0.427,0.427,0l2.703,7.684c0.029,0.114,0.029,0.199-0.113,0.199H163.043z M159.06,37.395
|
||||
c-0.514,1.424-1.083,2.505-2.392,2.676c-0.228,0.028-0.625,0.056-0.826,0.056c-0.142,0-0.257,0.059-0.257,0.171
|
||||
c0,0.172,0.173,0.229,0.542,0.229c1.338,0,2.903-0.086,3.218-0.086c0.312,0,1.535,0.086,2.219,0.086
|
||||
c0.257,0,0.427-0.057,0.427-0.229c0-0.112-0.086-0.171-0.284-0.171h-0.285c-0.484,0-1.082-0.255-1.082-0.824
|
||||
c0-0.513,0.143-1.195,0.399-1.907l1.707-5.038c0.058-0.142,0.144-0.228,0.284-0.228h6.119c0.143,0,0.2,0.058,0.257,0.171
|
||||
l2.646,7.002c0.171,0.455,0,0.712-0.169,0.769c-0.114,0.028-0.2,0.085-0.2,0.199c0,0.17,0.313,0.17,0.853,0.199
|
||||
c1.965,0.057,4.042,0.057,4.47,0.057c0.312,0,0.568-0.057,0.568-0.229c0-0.142-0.113-0.171-0.284-0.171
|
||||
c-0.284,0-0.712-0.027-1.139-0.17c-0.598-0.171-1.424-0.626-2.448-3.159c-1.735-4.326-6.204-16.08-6.631-17.162
|
||||
c-0.341-0.882-0.455-1.024-0.627-1.024c-0.17,0-0.284,0.171-0.625,1.11L159.06,37.395z M63.469,22.481
|
||||
c-0.427-1.11-0.769-1.992-0.769-2.363c0-0.198,0.057-0.427,0.37-0.568c0.257-0.114,0.769-0.143,1.081-0.143
|
||||
c0.199,0,0.285-0.057,0.285-0.199s-0.257-0.199-0.769-0.199c-1.082,0-2.362,0.085-2.647,0.085c-0.341,0-1.964-0.085-3.329-0.085
|
||||
c-0.456,0-0.74,0.028-0.74,0.199c0,0.113,0.057,0.199,0.228,0.199s0.655,0,1.082,0.114c0.996,0.284,1.423,0.597,2.049,2.19
|
||||
l6.973,17.447c0.541,1.366,0.683,1.765,1.025,1.765c0.283,0,0.397-0.455,1.194-2.163c0.655-1.396,1.936-4.468,3.673-8.623
|
||||
c1.45-3.501,2.874-6.916,3.187-7.713c0.77-1.936,1.196-2.42,1.565-2.677c0.541-0.341,1.167-0.341,1.366-0.341
|
||||
c0.228,0,0.341-0.057,0.341-0.199s-0.17-0.199-0.483-0.199c-0.824,0-2.049,0.085-2.22,0.085c-0.341,0-1.651-0.085-2.789-0.085
|
||||
c-0.456,0-0.626,0.057-0.626,0.228c0,0.143,0.142,0.171,0.313,0.171c0.313,0,0.739,0,1.081,0.114
|
||||
c0.284,0.143,0.369,0.426,0.369,0.654c0,0.256-0.113,0.655-0.256,1.081c-0.625,2.05-4.439,11.982-6.091,15.797L63.469,22.481z
|
||||
M83.183,32.272c0,2.731,0,4.98-0.143,6.176c-0.113,0.825-0.256,1.451-0.825,1.565c-0.256,0.057-0.598,0.112-0.854,0.112
|
||||
c-0.171,0-0.228,0.086-0.228,0.171c0,0.172,0.142,0.229,0.455,0.229c0.427,0,1.082-0.057,1.65-0.057
|
||||
c0.598-0.029,1.082-0.029,1.139-0.029c0.427,0,1.11,0.029,2.22,0.086c1.111,0.029,2.676,0.085,4.81,0.085
|
||||
c1.11,0,1.339,0,1.537-0.739c0.143-0.598,0.37-2.532,0.37-2.762c0-0.198,0-0.426-0.171-0.426c-0.143,0-0.199,0.113-0.256,0.426
|
||||
c-0.199,1.167-0.541,1.736-1.28,2.05c-0.74,0.313-1.992,0.313-2.732,0.313c-2.789,0-3.217-0.369-3.302-2.333
|
||||
c-0.027-0.598,0-3.899,0-4.866v-2.505c0-0.114,0.057-0.199,0.199-0.199c0.483,0,3.302,0.056,4.07,0.142
|
||||
c1.11,0.114,1.366,0.598,1.479,0.997c0.114,0.37,0.114,0.654,0.114,0.938c0,0.143,0.057,0.257,0.199,0.257
|
||||
c0.199,0,0.199-0.313,0.199-0.541c0-0.199,0.056-1.253,0.113-1.822c0.086-0.939,0.229-1.422,0.229-1.593s-0.058-0.229-0.143-0.229
|
||||
c-0.114,0-0.228,0.142-0.427,0.37c-0.257,0.285-0.654,0.342-1.338,0.398c-0.654,0.057-4.155,0.057-4.525,0.057
|
||||
c-0.143,0-0.171-0.085-0.171-0.284v-7.854c0-0.199,0.057-0.286,0.171-0.286c0.313,0,3.415,0.029,3.899,0.087
|
||||
c1.536,0.17,1.821,0.512,2.02,0.967c0.144,0.342,0.172,0.825,0.172,1.024c0,0.229,0.056,0.37,0.228,0.37
|
||||
c0.114,0,0.171-0.171,0.198-0.313c0.058-0.342,0.115-1.595,0.144-1.879c0.085-0.797,0.228-1.139,0.228-1.338
|
||||
c0-0.142-0.028-0.256-0.114-0.256c-0.142,0-0.257,0.114-0.398,0.143c-0.229,0.057-0.683,0.113-1.224,0.142
|
||||
c-0.654,0.028-6.318,0.028-6.518,0.028l-1.166-0.057c-0.628-0.028-1.396-0.028-2.051-0.028c-0.313,0-0.455,0.057-0.455,0.228
|
||||
c0,0.114,0.114,0.171,0.229,0.171c0.256,0,0.739,0.028,0.967,0.086c0.939,0.198,1.167,0.654,1.224,1.622
|
||||
c0.058,0.91,0.058,1.707,0.058,6.147V32.272z M120.217,40.924c1.535,0,3.071-0.342,4.296-1.195c1.964-1.395,2.419-3.558,2.419-4.725
|
||||
c0-2.276-0.798-4.041-4.155-6.688l-0.797-0.627c-2.731-2.134-3.472-3.159-3.472-4.781c0-2.077,1.537-3.302,3.5-3.302
|
||||
c2.619,0,3.388,1.195,3.559,1.509c0.17,0.313,0.341,1.081,0.37,1.423c0.027,0.228,0.057,0.37,0.228,0.37
|
||||
c0.143,0,0.199-0.2,0.199-0.654c0-1.937,0.113-2.875,0.113-3.018s-0.058-0.199-0.285-0.199s-0.455-0.028-0.995-0.142
|
||||
c-0.712-0.171-1.538-0.285-2.647-0.285c-3.614,0-5.891,2.077-5.891,5.123c0,1.936,0.683,3.7,3.699,6.176l1.28,1.054
|
||||
c2.448,2.021,3.273,3.159,3.273,5.122c0,1.821-1.338,3.786-4.07,3.786c-1.906,0-3.785-0.797-4.212-2.902
|
||||
c-0.085-0.399-0.085-0.798-0.085-1.054c0-0.228-0.029-0.313-0.199-0.313c-0.143,0-0.199,0.143-0.228,0.455
|
||||
c-0.028,0.456-0.143,1.594-0.143,3.018c0,0.768,0.029,0.882,0.427,1.081C117.568,40.725,118.878,40.924,120.217,40.924
|
||||
M135.028,27.263c0-4.44,0-5.237,0.058-6.147c0.058-0.997,0.285-1.48,1.055-1.622c0.34-0.058,0.511-0.086,0.71-0.086
|
||||
c0.114,0,0.228-0.057,0.228-0.171c0-0.171-0.142-0.228-0.456-0.228c-0.853,0-2.646,0.085-2.788,0.085
|
||||
c-0.142,0-1.936-0.085-2.874-0.085c-0.313,0-0.456,0.057-0.456,0.228c0,0.114,0.114,0.171,0.228,0.171
|
||||
c0.2,0,0.569,0.028,0.883,0.114c0.627,0.143,0.91,0.626,0.968,1.594c0.057,0.91,0.057,1.707,0.057,6.147v5.01
|
||||
c0,2.731,0,4.98-0.143,6.176c-0.114,0.825-0.255,1.451-0.826,1.565c-0.255,0.057-0.597,0.112-0.854,0.112
|
||||
c-0.17,0-0.227,0.086-0.227,0.171c0,0.172,0.142,0.229,0.456,0.229c0.853,0,2.646-0.086,2.788-0.086
|
||||
c0.143,0,1.936,0.086,3.501,0.086c0.313,0,0.455-0.086,0.455-0.229c0-0.085-0.058-0.171-0.228-0.171
|
||||
c-0.257,0-0.882-0.056-1.281-0.112c-0.853-0.114-1.023-0.74-1.11-1.565c-0.143-1.195-0.143-3.444-0.143-6.176V27.263z
|
||||
M149.724,20.232l3.579,0.057c2.726,0.058,3.409,0.712,3.495,1.565l0.026,0.313c0.031,0.398,0.09,0.483,0.233,0.483
|
||||
c0.116,0,0.204-0.113,0.204-0.369c0-0.313,0.087-2.277,0.087-3.131c0-0.171,0-0.342-0.146-0.342c-0.115,0-0.379,0.086-0.805,0.142
|
||||
c-0.454,0.086-1.106,0.143-2.016,0.143h-10.666c-0.341,0-1.423-0.057-2.246-0.143c-0.77-0.056-1.055-0.341-1.254-0.341
|
||||
c-0.113,0-0.228,0.37-0.286,0.541c-0.056,0.228-0.625,2.675-0.625,2.96c0,0.171,0.057,0.256,0.142,0.256
|
||||
c0.114,0,0.2-0.057,0.286-0.284c0.086-0.2,0.172-0.398,0.483-0.882c0.455-0.684,1.139-0.884,2.903-0.912l4.212-0.057v12.04
|
||||
c0,2.731,0,4.98-0.143,6.176c-0.114,0.825-0.256,1.451-0.824,1.565c-0.258,0.057-0.599,0.112-0.855,0.112
|
||||
c-0.171,0-0.227,0.086-0.227,0.171c0,0.172,0.143,0.229,0.455,0.229c0.854,0,2.646-0.086,2.789-0.086s1.934,0.086,3.496,0.086
|
||||
c0.313,0,0.454-0.086,0.454-0.229c0-0.085-0.057-0.171-0.227-0.171c-0.256,0-0.88-0.056-1.278-0.112
|
||||
c-0.852-0.114-1.022-0.74-1.106-1.565c-0.143-1.195-0.143-3.444-0.143-6.176V20.232z M184.798,20.232l3.581,0.057
|
||||
c2.726,0.058,3.407,0.712,3.493,1.565l0.028,0.313c0.029,0.398,0.087,0.483,0.233,0.483c0.116,0,0.203-0.113,0.203-0.369
|
||||
c0-0.313,0.087-2.277,0.087-3.131c0-0.171,0-0.342-0.145-0.342c-0.116,0-0.379,0.086-0.805,0.142
|
||||
c-0.455,0.086-1.108,0.143-2.017,0.143h-10.666c-0.341,0-1.422-0.057-2.246-0.143c-0.77-0.056-1.055-0.341-1.253-0.341
|
||||
c-0.116,0-0.229,0.37-0.286,0.541c-0.057,0.228-0.625,2.675-0.625,2.96c0,0.171,0.056,0.256,0.141,0.256
|
||||
c0.115,0,0.2-0.057,0.286-0.284c0.085-0.2,0.172-0.398,0.484-0.882c0.455-0.684,1.138-0.884,2.902-0.912l4.212-0.057v12.04
|
||||
c0,2.731,0,4.98-0.143,6.176c-0.113,0.825-0.255,1.451-0.826,1.565c-0.255,0.057-0.597,0.112-0.854,0.112
|
||||
c-0.17,0-0.228,0.086-0.228,0.171c0,0.172,0.144,0.229,0.457,0.229c0.853,0,2.646-0.086,2.788-0.086
|
||||
c0.144,0,1.935,0.086,3.496,0.086c0.313,0,0.454-0.086,0.454-0.229c0-0.085-0.056-0.171-0.226-0.171c-0.256,0-0.88-0.056-1.28-0.112
|
||||
c-0.852-0.114-1.022-0.74-1.105-1.565c-0.144-1.195-0.144-3.444-0.144-6.176V20.232z M102.913,19.932
|
||||
c0.878-0.01,2.808-0.156,4.354,1.42c1.548,1.576,1.636,3.531,1.636,4.495c0,2.685-2.206,4.695-5.037,4.695
|
||||
c-1.17,0-2.461-0.199-2.887-0.455c-0.144-0.085-0.2-0.199-0.2-0.341v-9.303c0-0.171,0.086-0.284,0.229-0.341
|
||||
C101.292,20.017,102.06,19.941,102.913,19.932"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#A11E3B" d="M237.585,63.408c0.547-0.123,0.857-0.265,1.308-0.6
|
||||
c0.647-0.48,0.959-0.907,1.218-1.67c0.091,0.906-0.058,1.772-0.874,2.215C238.669,63.66,238.165,63.591,237.585,63.408
|
||||
M235.53,56.925c1.341-1.311,1.729-2.884,1.153-4.668c-0.354-1.097-0.819-1.717-1.771-2.365c0.273-0.301,0.439-0.461,0.746-0.728
|
||||
c0.259-0.225,0.41-0.345,0.69-0.542l0.335,0.9c0.428,1.151,1.082,1.86,1.113,2.947C237.852,54.414,236.641,56.05,235.53,56.925
|
||||
M255.319,31.198c-2.092,3.557-4.832,5.294-6.18,5.27c0.247-0.381,0.328-0.903,0.305-1.211c-1.206,0.023-2.019-0.567-2.625-1.603
|
||||
c-0.489-0.832-0.348-2.451-0.348-2.451c-1.101-0.154-1.735,0.975-1.735,2.018v10.386c0,0.782,0.086,1.302,0.367,1.852
|
||||
c1.129,2.202,3.647,3.552,5.753,3.273c-0.928,1.021-1.864,1.732-3.36,1.893c-0.849,0.09-1.37,0.027-2.172-0.263
|
||||
c1.033,0.938,2.068,1.421,3.476,1.167c1.439-0.258,2.259-1.53,3.002-1.736c0.453-0.126,0.846-0.053,1.37,0.048
|
||||
c-0.652,0.072-1.124,0.431-1.448,0.86c-0.268,0.356-0.336,0.984-0.355,1.362c0.472,0.113,0.993,0.142,1.563-0.078
|
||||
c0.427-0.163,0.661-0.324,0.967-0.666c0.646,0.424,1.07,1.515,1.07,1.515c-0.625-0.264-1.287-0.287-1.873-0.088
|
||||
c-1.785,0.607-2.51,1.759-5.909,1.16c-1.491-0.262-1.966-1.322-3.172-1.506c0.405,0.242,0.645,0.587,0.817,1.089
|
||||
c0.128,0.369,0.154,0.608,0.107,0.996c1.94-0.475,3.137,0.638,4.431,0.722c1.725,0.112,1.938-1.39,4.682-1.359
|
||||
c0.856,0.01,2.065,0.609,2.44,1.553c-0.915-0.433-2.268-0.307-2.992-0.105c-1.123,0.311-1.794,0.685-2.587,1.556
|
||||
c0.811,0.319,1.33,0.409,2.202,0.384c0.737-0.021,1.166-0.108,1.854-0.374c-0.967,0.925-1.898,1.438-3.413,1.954
|
||||
c-1.017,0.346-1.686,0.227-2.726,0.005c0.307-0.165,0.473-0.465,0.473-0.465c-1.542-0.267-1.679-1.193-2.926-1.448
|
||||
c-0.331-0.066-0.521-0.092-0.858-0.114c1.255,2.354,4.11,3.707,6.381,3.176c1.091-0.255,2.524-0.711,3.629-1.854
|
||||
c-0.33,1.621-0.938,2.472-2.268,3.061c-1.778,0.787-3.157,0.925-4.98,0.238c0.81,0.715,1.737,1.014,2.973,1.235
|
||||
c0.811,0.146,1.292,0.164,2.111,0.078c-2.111,1.284-5.568,0.598-7.846-1.093c-1.621-1.205-2.52-2.41-3.215-4.389
|
||||
c0.252,2.153,0.727,4.495,2.878,5.85c1.015,0.639,1.986,1.062,2.924,0.944c-0.783,0.541-1.911,0.678-2.819,0.678
|
||||
c-1.814,0-3.503-1.699-4.285-3.698c0.164,2.238-0.718,3.698-2.282,3.698c-0.882,0-1.338-0.386-2.186-0.396
|
||||
c-0.53-0.006-0.91,0.11-1.448,0.326c0.25-0.553,0.357-0.92,0.802-1.332c0.916-0.848,2.672-0.854,3.318-2.287
|
||||
c0.416-0.92,0.35-1.552,0.224-2.577c-0.656,1.843-1.854,2.693-3.891,3.628c-1.113,0.512-1.679,1.604-1.931,2.539
|
||||
c-0.098-1.251-0.029-2.087,0.627-3.156c0.783-1.274,2.665-1.64,3.438-2.953c0.6-1.019,0.736-1.76,0.734-2.942
|
||||
c-0.407,1.391-1.015,2.394-1.739,2.895c-1.557,1.077-3.212,1.526-3.976,2.858c-0.618,1.08-0.653,1.918-0.443,3.135
|
||||
c-0.832-0.786-1.129-1.646-0.956-2.778c0.147-0.973,0.529-1.581,1.342-2.135c-1.152,0.117-1.955,0.769-2.307,1.872
|
||||
c-0.284,0.895-0.174,1.61,0.367,2.378c-1.961-0.515-1.819-3.238-0.579-4.576c2.124-2.297,5.889-2.126,4.313-6.323
|
||||
c-0.185,1.575-0.455,2.498-1.64,3.332c-1.883,1.321-4.787,1.186-5.312,4.314c-0.151-2.404,0.586-3.184,1.98-4.5
|
||||
c0.86-0.812,2.49-1.207,2.383-3.531c-0.539,1.274-1.304,1.785-2.363,2.248c-1.228,0.534-1.979,0.29-2.992,1.574
|
||||
c-0.049-0.938,0.272-1.813,1.159-2.338c0.811-0.481,1.678-0.376,2.295-1.301c0,0-0.702-0.271-1.717,0.123
|
||||
c0.967-1.216,1.678-0.904,2.635-1.368c0.59-0.284,0.828-0.533,1.255-0.977c-0.839-0.097-1.632-0.108-2.49,0.097
|
||||
c-1.012,0.243-2.095,1.1-2.095,1.1c0.618-1.733,3.044-3.195,5.434-3.871c3.24-0.914,4.555-1.244,5.159-2.365
|
||||
c0.414-0.768,0.488-1.021,0.488-2.795V32.367c0-1.172-1.859-0.811-2.407-0.264c-0.495,0.495-0.656,1.094-0.272,1.887
|
||||
c-2.332,0.031-2.955-1.805-2.955-1.805c-0.016,0.203-0.02,0.414-0.018,0.635c-0.826-0.402-1.266-0.803-1.743-1.589
|
||||
c-0.302-0.497-0.426-0.82-0.534-1.392c-0.726,0.575-2.65,0.76-2.961,0.533c-0.788-0.576-1.245-2.045-1.448-3.513
|
||||
c-0.187-1.357-0.105-2.2,0.34-3.495c-1.107-1.979-1.352-4.262-1.352-6.582c0-1.938,1.182-4.409,2.799-5.984
|
||||
c0.657-3.239,4.154-5.18,6.711-5.18c2.428,0,4.431,1.393,5.62,3.986c1.104-2.554,3.739-3.986,6.433-3.986
|
||||
c2.519,0,4.267,0.954,5.707,3.02c1.179,0.247,1.919,0.531,2.752,1.4c1.103,1.153,1.894,2.224,1.943,4.159
|
||||
c0.015,0.534-0.231,0.818-0.52,1.269c0.962,1.363,1.386,2.377,1.386,4.045c0,1.704-0.154,2.584-0.916,3.985
|
||||
c0.083,0.162,0.12,0.261,0.165,0.437c0.064,0.254,0.08,0.406,0.066,0.668c-0.548,0.181-1.151,0.144-1.302,0.699
|
||||
C255.97,25.787,256.999,28.176,255.319,31.198 M245.106,30.978c0.112-1.009,0.563-1.955,1.197-2.678
|
||||
c0.331,0.091,0.583,0.222,0.908,0.46c0.238,0.174,0.39,0.311,0.545,0.505C246.68,29.453,245.608,30.124,245.106,30.978
|
||||
M251.367,29.599c0.16,1.255-0.09,2.697-0.701,3.717c0.139-0.857,0.091-1.853-0.22-2.645c0.35-0.176,0.562-0.389,0.771-0.759
|
||||
C251.282,29.798,251.33,29.698,251.367,29.599 M249.261,26.957c0.118,0.013,0.235,0.035,0.353,0.065
|
||||
c0.705,0.184,1.194,0.742,1.483,1.479c-0.426,0.197-0.702,0.402-1.064,0.775c-0.131,0.135-0.219,0.235-0.308,0.354
|
||||
c-0.182-0.144-0.39-0.253-0.626-0.321c-0.135-0.038-0.273-0.065-0.414-0.082c0.02-0.572,0.09-0.941,0.277-1.522
|
||||
C249.061,27.401,249.142,27.195,249.261,26.957 M247.431,27.37c0.48-0.272,0.999-0.428,1.52-0.431
|
||||
c-0.158,0.18-0.274,0.367-0.403,0.635c-0.09,0.186-0.131,0.298-0.187,0.496c-0.147-0.23-0.266-0.35-0.497-0.496
|
||||
C247.708,27.476,247.573,27.409,247.431,27.37 M232.526,22.254c0.15-0.109,0.301-0.209,0.456-0.302
|
||||
c0.104,0.145,0.165,0.252,0.252,0.431c0.189,0.388,0.276,0.666,0.312,1.044c-0.378,0.167-0.717,0.395-1.017,0.666
|
||||
c-0.095-0.211-0.137-0.379-0.168-0.64C232.306,22.979,232.348,22.641,232.526,22.254 M233.201,21.828
|
||||
c0.762-0.41,1.6-0.609,2.598-0.464l0.082,0.013c-0.21,0.359-0.387,0.603-0.688,0.961c-0.226,0.268-0.362,0.41-0.618,0.647
|
||||
c-0.271-0.246-0.426-0.382-0.707-0.617C233.606,22.148,233.437,22.011,233.201,21.828 M236.473,21.51
|
||||
c0.733,0.209,1.409,0.585,1.995,1.113c-0.077,0.343-0.147,0.699-0.188,1.01c-0.063,0.486-0.09,0.822-0.094,1.229
|
||||
c-0.667-0.807-1.431-1.406-2.322-1.641L236.473,21.51z M238.876,23.031c0.728,0.813,1.272,1.898,1.546,3.229
|
||||
c-0.227-0.199-0.452-0.315-0.787-0.424c-0.313-0.102-0.547-0.139-0.822-0.12l-0.211-0.311c0.105-0.318,0.164-0.587,0.223-0.983
|
||||
C238.904,23.876,238.92,23.514,238.876,23.031 M240.463,26.478c0.147,0.827,0.191,1.743,0.113,2.744
|
||||
c-0.373-0.897-0.785-1.814-1.253-2.656L240.463,26.478z M232.019,24.641c-0.075,0.095-0.147,0.192-0.216,0.293l-0.697-0.861
|
||||
l-0.692-0.297c0.102-0.255,0.333-0.717,0.488-0.893c-0.285-0.124-0.639-0.867-0.77-1.251c0.368,0.06,0.586,0.066,0.958,0.028
|
||||
c0.25-0.023,0.392-0.05,0.633-0.118l-0.662-2.337c0.597,0.178,0.927,0.329,1.452,0.662c0.438,0.277,0.828,0.359,1.035,0.834
|
||||
c0.053,0.125,0.08,0.215,0.099,0.329c-0.765,0.351-1.381,0.916-1.702,1.685c-0.045,0.333-0.056,0.524-0.049,0.858
|
||||
C231.903,23.997,231.932,24.254,232.019,24.641 M231.282,25.868c-0.522,1.156-0.729,2.479-0.672,3.56
|
||||
c-0.713-0.374-1.285-0.838-1.71-1.392c0.198-0.054,0.362-0.108,0.597-0.194c0.332-0.121,0.516-0.199,0.833-0.355
|
||||
c-0.048-0.49-0.135-0.775-0.368-1.21c-0.151-0.282-0.369-0.366-0.478-0.669c-0.071-0.196-0.091-0.319-0.09-0.528
|
||||
c0.278-0.042,0.45-0.03,0.72,0.051c0.234,0.07,0.347,0.165,0.555,0.293C230.925,25.579,231.078,25.689,231.282,25.868
|
||||
M228.604,27.601c-0.385-0.652-0.595-1.407-0.623-2.254c0.385,0.228,0.624,0.436,0.944,0.811c0.304,0.355,0.448,0.589,0.633,1.019
|
||||
c-0.146,0.104-0.233,0.157-0.396,0.231C228.957,27.503,228.783,27.565,228.604,27.601 M228,24.581
|
||||
c0.046-0.548,0.153-0.935,0.403-1.495c0-0.603,0.146-1.252,0.371-1.873l0.947,1.612l-0.401,0.92
|
||||
c-0.326,0.179-0.508,0.287-0.82,0.491C228.298,24.368,228.167,24.459,228,24.581 M228.902,20.887
|
||||
c0.384-0.922,0.926-1.746,1.403-2.216c0.068,0.363,0.124,0.631,0.235,1.048c0.133,0.499,0.229,0.775,0.431,1.251
|
||||
c-0.306-0.061-0.485-0.073-0.796-0.061c-0.278,0.013-0.429,0.122-0.708,0.104C229.239,21,229.08,20.966,228.902,20.887
|
||||
M230.978,18.107c0.764-0.544,1.676-0.911,2.636-1.069c-0.1,0.642-0.161,1.059-0.26,1.75l-0.119,0.856l-0.439-0.044
|
||||
c-0.253-0.162-0.393-0.259-0.633-0.44C231.661,18.782,231.367,18.523,230.978,18.107 M234.352,16.959
|
||||
c0.741-0.037,1.492,0.051,2.213,0.279c-0.139-0.186-0.315-0.369-0.52-0.537l0.011-0.719c0.06-0.245,0.088-0.384,0.134-0.633
|
||||
c0.038-0.211,0.062-0.349,0.086-0.53l0.093,0.013c0.223,0.035,0.439,0.079,0.647,0.129c0.146,0.332,0.408,0.908,0.558,1.082
|
||||
c0.121,0.142,0.194,0.219,0.327,0.35c0,0-0.306,0.547-0.356,0.794c-0.106,0.505-0.052,0.981,0.147,1.355l-0.972-0.692
|
||||
c-0.085,0.276-0.173,0.552-0.145,0.692c0.115,0.558,0.171,0.887,0.128,1.453c-0.021,0.273-0.047,0.453-0.102,0.681
|
||||
c-0.958-0.154-1.938-0.06-2.766,0.272c-0.045-0.3-0.042-0.524,0.001-0.865c0.051-0.395,0.227-0.587,0.283-0.982
|
||||
c0.042-0.296-0.017-0.471,0.029-0.766C234.183,18.118,234.269,17.39,234.352,16.959 M235.523,16.35
|
||||
c-0.226-0.122-0.466-0.215-0.714-0.265c-0.181-0.037-0.358-0.065-0.531-0.085c0.043-0.196,0.053-0.374,0.044-0.62
|
||||
c-0.011-0.229-0.031-0.393-0.082-0.573c0.278-0.039,0.565-0.062,0.855-0.065l0.506,0.505c0.082,0.324,0.082,0.532,0,0.854
|
||||
C235.577,16.197,235.553,16.275,235.523,16.35 M233.769,15.965c-1.202-0.026-2.173,0.352-3.027,0.837
|
||||
c0.66-0.966,1.721-1.609,2.958-1.896c0.067,0.171,0.096,0.318,0.108,0.533C233.82,15.647,233.812,15.796,233.769,15.965
|
||||
M238.683,15.604c0.937,0.537,1.639,1.323,2.112,2.385c-0.055,0.153-0.141,0.295-0.267,0.45c-0.089,0.11-0.148,0.168-0.261,0.253
|
||||
l-0.96-0.84c0.053-0.304,0-0.522-0.188-0.767c-0.146-0.193-0.279-0.284-0.513-0.351c-0.028-0.269-0.028-0.424,0-0.691
|
||||
C238.627,15.867,238.647,15.739,238.683,15.604 M241.53,21.729c0.007,0.185,0.01,0.374,0.01,0.566c0,0.94,0.02,1.759,0.04,2.555
|
||||
l-0.982-0.364c-0.118-0.329-0.243-0.629-0.372-0.903c0.043-0.259,0.092-0.454,0.184-0.745c0.137-0.434,0.24-0.674,0.461-1.072
|
||||
L241.53,21.729z M241.598,25.539c0.028,1.077,0.05,2.165,0.024,3.518c-0.194-1.417-0.432-2.592-0.705-3.565L241.598,25.539z
|
||||
M239.831,22.845c-0.413-0.674-0.867-1.138-1.35-1.464c0.366-0.386,0.608-0.61,1.034-0.97c0.331-0.278,0.525-0.429,0.879-0.678
|
||||
c-0.063,0.64-0.114,0.999-0.231,1.631C240.055,21.955,239.975,22.313,239.831,22.845 M238.16,21.186
|
||||
c-0.254-0.138-0.515-0.243-0.782-0.327c-0.09-0.306-0.136-0.534-0.184-0.894c-0.051-0.363-0.063-0.572-0.061-0.938
|
||||
c0.209,0.104,0.325,0.175,0.514,0.313c0.144,0.104,0.221,0.169,0.351,0.291c0.294-0.127,0.491-0.16,0.811-0.134
|
||||
c0.249,0.021,0.394,0.06,0.618,0.171c-0.357,0.276-0.542,0.461-0.819,0.818C238.405,20.746,238.294,20.919,238.16,21.186
|
||||
M228.436,19.074c0.018-1.903,0.399-3.186,1.424-4.628l0.286,0.093c0.057,0.293,0.114,0.458,0.253,0.723
|
||||
c0.127,0.24,0.225,0.379,0.4,0.563C229.748,16.735,228.94,17.898,228.436,19.074 M230.253,13.922
|
||||
c0.485-0.611,0.982-1.137,1.511-1.575c0.086,0.274,0.149,0.508,0.199,0.741l0.922,0.893l0.288,0.44
|
||||
c-0.716,0.252-1.374,0.621-1.965,1.071c-0.172-0.259-0.457-0.685-0.492-0.841c-0.035-0.154-0.251-0.54-0.453-0.725L230.253,13.922z
|
||||
M232.407,11.865c1.102-0.734,2.34-1.117,3.812-1.117c0.503,0,0.967,0.054,1.393,0.155l0.007,0.286
|
||||
c-0.072,0.473-0.151,0.74-0.351,1.177c-0.143,0.313-0.243,0.485-0.446,0.766c-0.167-0.145-1.782-1.352-2.001-1.354
|
||||
c-0.151,0.458-0.786,2.051-1.094,2.476l-0.115,0.03c-0.119-0.444-0.267-0.712-0.584-1.068c-0.264-0.296-0.453-0.439-0.806-0.618
|
||||
l0.119-0.351L232.407,11.865z M238.555,11.226c0.941,0.433,1.634,1.125,2.096,1.929c-0.057,0.087-0.114,0.167-0.196,0.271
|
||||
c-0.116,0.148-0.188,0.23-0.32,0.365c-0.149-0.099-0.228-0.168-0.343-0.306c-0.267-0.32-0.768-1.442-0.967-1.765
|
||||
C238.707,11.533,238.626,11.384,238.555,11.226 M240.985,13.85c0.419,1.068,0.487,2.244,0.241,3.239
|
||||
c-1.111-1.561-2.38-2.469-4.025-2.841l0.669-2.456c0.558,0.436,0.839,0.745,1.222,1.34c0.255,0.397,0.68,1.305,0.996,2.101
|
||||
c0.054-0.173,0.131-0.344,0.238-0.545C240.526,14.316,240.696,14.095,240.985,13.85 M236.504,14.125
|
||||
c-0.333-0.044-0.68-0.068-1.043-0.074c-0.449-0.008-0.884,0.029-1.303,0.106l0.686-1.18l0.356-0.454
|
||||
c0.328,0.262,0.498,0.432,0.761,0.76C236.208,13.594,236.35,13.809,236.504,14.125 M238.97,29.362
|
||||
c-0.226-0.26-0.492-0.474-0.779-0.646c-0.193-0.658-0.485-1.4-0.591-1.605c-0.166-0.324-0.348-0.501-0.579-0.715
|
||||
c-0.29,0.155-0.484,0.252-0.733,0.503c-0.168,0.166-0.575,0.508-0.686,0.717c-0.133-0.259-0.22-0.399-0.396-0.632
|
||||
c-0.354-0.475-0.608-0.715-1.101-1.043c-0.149,0.134-0.218,0.245-0.269,0.44c-0.037,0.146-0.041,0.237-0.014,0.385
|
||||
c-0.368-0.028-0.58-0.087-0.91-0.252c-0.309-0.156-0.508-0.299-0.704-0.522c0.169-0.21,0.362-0.398,0.584-0.559
|
||||
C236.211,22.962,239.052,26.224,238.97,29.362 M234.97,28.304c-0.061,0.021-0.119,0.045-0.176,0.069
|
||||
c-0.527,0.235-0.97,0.55-1.32,0.923l-2.056,0.263c-0.141-0.888-0.058-1.865,0.286-2.696c0.728,0.073,1.181,0.205,1.872,0.53
|
||||
C234.171,27.673,234.515,27.895,234.97,28.304 M232.963,29.987c-0.3,0.53-0.459,1.131-0.467,1.764
|
||||
c-0.417-0.351-0.729-0.888-0.921-1.512L232.963,29.987z M227.299,20.293c-0.372-0.69-0.652-1.364-0.815-2.03
|
||||
c0.154-0.063,0.289-0.1,0.485-0.137c0.276-0.051,0.473-0.064,0.708-0.039C227.518,18.748,227.403,19.458,227.299,20.293
|
||||
M226.382,17.753c-0.18-1.155,0.01-2.3,0.688-3.488c0.058-0.103,0.119-0.206,0.188-0.308c0.099,0.249,0.205,0.428,0.389,0.679
|
||||
c0.167,0.228,0.719,0.557,1.053,0.785c-0.361,0.685-0.624,1.31-0.824,1.956L226.382,17.753z M227.673,13.386
|
||||
c0.519-0.644,1.17-1.243,1.853-1.743c0.02,0.108,0.049,0.218,0.092,0.352c0.065,0.207,0.356,0.735,0.54,1.059
|
||||
c-0.365,0.517-0.696,1.044-1.021,1.591c-0.278-0.268-0.471-0.448-0.785-0.736C228.238,13.802,227.872,13.54,227.673,13.386
|
||||
M230.386,11.075c0.863-0.508,1.714-0.826,2.357-0.847c-0.801,0.68-1.442,1.353-1.994,2.039c-0.014-0.164-0.035-0.306-0.074-0.505
|
||||
C230.648,11.633,230.506,11.332,230.386,11.075 M244.364,30.745c-0.232-0.436-0.454-0.71-0.403-1.202
|
||||
c0.031-0.296,0.093-0.634,0.187-0.992c0.082,0.082,0.162,0.144,0.281,0.221c0.191,0.124,0.337,0.191,0.524,0.237
|
||||
C244.656,29.658,244.496,30.305,244.364,30.745 M244.256,28.167c0.211-0.68,0.528-1.415,0.958-2.1
|
||||
c0.856-1.366,1.903-2.493,3.303-3.007c0.123,0.483,0.577,1.678,0.577,1.678c-0.02,0.214-0.034,0.867-0.027,1.257
|
||||
c-1.38-0.093-2.374,0.736-3.368,1.843c-0.17,0.19-0.318,0.396-0.447,0.606c-0.263,0.043-0.48,0.003-0.751-0.126
|
||||
C244.398,28.268,244.334,28.23,244.256,28.167 M249.109,22.885c0.429-0.097,0.889-0.141,1.383-0.12
|
||||
c0.883,0.035,1.821,0.433,2.564,1.019c0.04,0.258,0.091,0.444-0.018,0.801c-0.125,0.413-0.198,0.719-0.444,1.15
|
||||
c-0.175-0.566-0.446-1.434-0.584-1.44c-0.204-0.01-1.237,0.372-1.626,0.435c0.031,0.187,0.069,0.381,0.118,0.613
|
||||
c0.23-0.07,0.984-0.314,1.235-0.4c0.13,0.35,0.476,1.468,0.496,1.909c0.268-0.146,0.278-0.152,0.583-0.174
|
||||
c0.175-0.014,0.494,0.021,0.668,0.051c-0.103,0.227-0.126,0.501-0.238,0.724c-0.2,0.396-0.378,0.619-0.716,0.907
|
||||
c-0.115,0.098-0.199,0.155-0.315,0.212l-0.043-0.18c-0.357-1.384-1.264-2.035-2.56-2.314c0.045-0.629,0.026-1.017-0.079-1.659
|
||||
C249.434,23.798,249.332,23.426,249.109,22.885 M255.184,28.248c-0.016,0.205-0.044,0.414-0.087,0.628
|
||||
c-0.207,1.028-0.761,2.091-1.434,3.061c-0.087-0.413-0.26-1.069-0.59-1.673c-0.216-0.397-0.499-0.593-0.729-0.721
|
||||
c-0.01-0.194-0.028-0.384-0.056-0.568c0.498-0.391,0.896-0.566,1.551-0.697C254.358,28.172,254.695,28.163,255.184,28.248
|
||||
M252.969,32.855c-0.748,0.919-1.547,1.692-2.147,2.181c0.708-1.074,1.008-1.782,1.285-3.039c0.123-0.556,0.201-1.086,0.231-1.586
|
||||
c0.281,0.211,0.441,0.448,0.563,0.821c0.127,0.376,0.013,0.62,0.031,1.017C252.944,32.488,252.954,32.668,252.969,32.855
|
||||
M242.379,27.525c-0.081-0.695-0.152-1.362-0.204-2.019l0.902-0.094C242.795,26.288,242.573,27.046,242.379,27.525 M242.154,25.216
|
||||
c-0.046-0.663-0.068-1.317-0.06-1.982c0.32,0.105,0.512,0.223,0.771,0.463c0.183,0.171,0.275,0.285,0.4,0.503
|
||||
c-0.129,0.209-0.218,0.319-0.391,0.494C242.627,24.943,242.441,25.08,242.154,25.216 M242.206,21.425
|
||||
c0.02-0.175,0.042-0.352,0.067-0.529c0.194-1.417,1.63-3.766,3.143-4.917c0.212,0.043,0.384,0.097,0.63,0.189
|
||||
c0.368,0.141,0.569,0.244,0.895,0.464c0.016-0.324,0.014-0.509-0.011-0.833c-0.02-0.277-0.04-0.458-0.084-0.692
|
||||
c0.393-0.199,0.788-0.366,1.188-0.5c0.184,0.086,0.339,0.181,0.544,0.326c0.304,0.216,0.462,0.363,0.7,0.648l0.511-1.331
|
||||
l0.188-0.011c0.047,0.59,0.031,0.965-0.062,1.58c-0.065,0.437-0.122,0.682-0.256,1.103l-1.729-1.256l-0.331,1.738
|
||||
c-0.441-0.107-0.693-0.156-1.144-0.227c-0.459-0.071-0.721-0.101-1.184-0.133c0.005,0.313,0.015,0.49,0.041,0.803
|
||||
c0.025,0.31,0.047,0.484,0.095,0.792c-0.404,0.232-0.649,0.341-1.093,0.483c-0.384,0.124-0.609,0.175-1.01,0.227
|
||||
c-0.082,0.185,0.156,0.279,0.434,0.463c0.195,0.131,0.234,0.3,0.361,0.505c-0.012,0.118,0.021,0.24-0.084,0.29
|
||||
c-0.39,0.185-0.577,0.264-0.946,0.431L242.206,21.425z M250.252,14.23c0.804-0.011,1.656,0.109,2.579,0.372l0.266,0.081l0.362,0.32
|
||||
c-0.398,0.246-0.611,0.41-0.948,0.733c-0.348,0.333-0.525,0.546-0.792,0.946c-0.343-0.504-0.526-0.794-0.835-1.317
|
||||
C250.621,14.922,250.462,14.637,250.252,14.23 M254.002,15.058c0.938,0.481,1.645,1.168,2.194,2.027
|
||||
c-0.096,0.191-0.207,0.375-0.327,0.547c-0.267,0.376-0.46,0.568-0.836,0.833c0.017-0.339-0.147-0.644-0.243-0.969
|
||||
c-0.118-0.398-0.202-0.45-0.365-0.833C254.169,16.061,254.062,15.663,254.002,15.058 M256.571,17.75
|
||||
c0.178,0.349,0.335,0.719,0.477,1.11c0.608,1.674,0.726,2.8-0.312,4.555c-0.172-1.063-0.476-1.883-0.997-2.603
|
||||
c0.009-0.351,0.05-0.678,0.13-1.112C255.978,19.103,256.306,18.351,256.571,17.75 M254.571,19.615l-0.241-0.186
|
||||
c-0.371-0.28-0.743-0.512-1.12-0.696c-0.021-0.29-0.073-0.521-0.184-0.845c-0.115-0.339-0.207-0.524-0.403-0.823
|
||||
c-0.098,0.355-0.159,0.555-0.276,0.905l-0.133,0.381c-1.317-0.365-2.687-0.211-4.175,0.368c-1.194,0.465-2.107,1.208-2.788,2.046
|
||||
c-0.235-0.138-0.375-0.249-0.576-0.458c-0.262-0.271-0.388-0.458-0.544-0.803c0.403-0.15,0.644-0.211,1.068-0.269
|
||||
c0.321-0.044,0.504-0.052,0.827-0.041c-0.024-0.269-0.036-0.42-0.053-0.689c-0.017-0.276-0.023-0.434-0.033-0.71
|
||||
c0.395-0.016,0.621-0.003,1.011,0.062c0.345,0.058,0.538,0.107,0.866,0.226c0.103-0.228,0.318-1.535,0.337-1.707
|
||||
c0.185,0.148,1.563,1.265,1.823,1.338c-0.002-0.278,0.01-0.436,0.052-0.71c0.075-0.494,0.16-0.773,0.372-1.225
|
||||
c0.201,0.212,0.307,0.343,0.472,0.586c0.199,0.295,0.508,1.046,0.535,1.205c0.289-0.303,0.45-0.476,0.732-0.784
|
||||
c0.276-0.302,0.432-0.474,0.7-0.782c0.309,0.225,0.83,0.881,1.007,1.218C254.073,17.654,254.504,19.355,254.571,19.615
|
||||
M245.165,20.872c-0.341,0.438-0.623,0.898-0.85,1.356c-0.247,0.502-0.468,1.021-0.664,1.536l-1.106-0.884l0.308-0.576l0.691-0.297
|
||||
l-0.371-0.577c0.324-0.207,0.522-0.304,0.884-0.434c0.309-0.11,0.491-0.249,0.815-0.205
|
||||
C244.991,20.809,245.071,20.829,245.165,20.872 M251.711,21.998c-0.996-0.269-1.973-0.229-2.888,0.056
|
||||
c-0.259-0.335-0.913-0.634-0.913-0.634c-0.251-0.132-1.037-0.445-1.474-0.585c0.701-0.691,1.486-1.21,2.325-1.521
|
||||
c0.214,0.106,0.374,0.22,0.588,0.407c0.288,0.252,0.43,0.429,0.618,0.762c0.143-0.305,0.218-0.479,0.342-0.792
|
||||
c0.11-0.281,0.179-0.472,0.257-0.713c0.2-0.001,0.402,0.008,0.604,0.031c0.263,0.547,0.583,1.337,0.583,1.337l0.603,1.898
|
||||
C252.15,22.143,251.936,22.059,251.711,21.998 M247.845,22.456c-1.078,0.561-2.046,1.457-2.834,2.561l-0.785-0.694
|
||||
c0.447-1.16,1.046-2.172,1.752-2.994L247.845,22.456z M244.824,25.288c-0.629,0.939-1.129,2.015-1.464,3.15
|
||||
c0.075-1.296,0.312-2.507,0.679-3.601L244.824,25.288z M251.84,19.124c0.202,0.048,0.402,0.108,0.604,0.181
|
||||
c0.954,0.343,1.747,0.995,2.297,1.798c-0.105,0.175-0.215,0.314-0.385,0.499c-0.425,0.463-0.784,0.729-1.358,1.04
|
||||
c-0.09-0.067-0.181-0.131-0.275-0.19c-0.009-0.44-0.017-0.863-0.116-1.304C252.418,20.314,252.229,19.804,251.84,19.124
|
||||
M255.133,21.781c0.563,1.185,0.636,2.566,0.014,3.742c-0.343-0.804-0.971-1.875-1.857-2.646L255.133,21.781z M227.117,27.986
|
||||
c0.552,0.421,0.887,0.633,1.503,0.954c0.557,0.29,0.887,0.431,1.481,0.633c-0.574,0.207-0.931,0.271-1.541,0.275
|
||||
c-0.288,0.002-0.452-0.01-0.736-0.053C227.824,29.796,227.131,28.999,227.117,27.986 M242.206,17.205
|
||||
c-0.153-0.53-0.248-1.119-0.269-1.721l0.669,0.182c-0.012-0.226-0.021-0.353-0.041-0.576c-0.037-0.403-0.067-0.631-0.134-1.031
|
||||
c0.508,0.13,0.796,0.198,1.308,0.308c0.314,0.067,0.512,0.107,0.793,0.158C243.643,15.192,242.877,16.08,242.206,17.205
|
||||
M242.13,13.614c0.219-0.838,0.629-1.603,1.279-2.149c0.712-0.601,1.565-1.123,2.513-1.509c0.004,0.415,0.047,0.698,0.165,1.138
|
||||
c0.075,0.278,0.156,0.424,0.247,0.699c0.124,0.386,0.188,0.606,0.289,1c-0.625-0.222-0.988-0.323-1.638-0.454
|
||||
c-0.442-0.089-0.695-0.128-1.144-0.174c-0.023,0.188-0.023,0.297,0,0.483c0.05,0.392,0.364,0.543,0.382,0.937
|
||||
c0.01,0.222-0.009,0.355-0.082,0.565L242.13,13.614z M246.491,9.744c1.317-0.442,2.783-0.616,4.283-0.378
|
||||
c-0.324,0.145-0.557,0.318-0.848,0.614c-0.289,0.296-0.402,0.513-0.597,0.877c-0.159,0.296-0.235,0.474-0.342,0.792l-0.628-0.464
|
||||
c-0.484-0.357-0.776-0.537-1.245-0.915C246.861,10.066,246.701,9.931,246.491,9.744 M251.321,9.471
|
||||
c0.392,0.089,0.782,0.206,1.173,0.354c0.533,0.202,1.033,0.479,1.483,0.811c-0.386,0.357-0.656,0.58-1.116,0.921
|
||||
c-0.205,0.153-0.322,0.236-0.536,0.38c-0.429-0.548-0.62-0.918-0.822-1.584C251.4,10.011,251.352,9.785,251.321,9.471
|
||||
M254.384,10.961c1.413,1.235,2.192,3.047,1.652,4.745c-0.69-0.735-1.381-1.31-2.114-1.738c-0.213-0.365-0.291-0.667-0.306-1.127
|
||||
C253.592,12.048,253.83,11.457,254.384,10.961 M252.572,13.355c-0.653-0.218-1.352-0.344-2.114-0.386
|
||||
c0.006-0.265,0.005-0.438-0.002-0.724c-0.012-0.454-0.027-0.711-0.071-1.164c0.352,0.081,0.55,0.163,0.856,0.355
|
||||
c0.398,0.252,0.59,0.467,0.856,0.857C252.355,12.672,252.474,12.935,252.572,13.355 M248.946,12.984
|
||||
c-0.667,0.049-1.291,0.151-1.875,0.311c0.004-0.201,0.001-0.374-0.011-0.621c-0.032-0.626-0.079-0.98-0.216-1.592
|
||||
c0.421,0.252,0.649,0.417,1.021,0.738C248.343,12.232,248.62,12.528,248.946,12.984 M246.436,13.497
|
||||
c-0.616,0.225-1.185,0.519-1.712,0.889c-0.207-0.73-0.302-1.492-0.134-1.569c0.425-0.059,0.695-0.022,1.092,0.143
|
||||
C246.02,13.102,246.222,13.243,246.436,13.497 M243.563,7.423c0.464-0.338,1-0.553,1.591-0.676c0.226,0.168,0.469,0.476,0.6,0.606
|
||||
c0.309,0.307,0.506,0.562,0.499,0.995c-0.003,0.161-0.025,0.294-0.071,0.416l-0.404,0.18c-0.188-0.257-0.378-0.424-0.688-0.619
|
||||
C244.865,8.186,243.938,7.644,243.563,7.423 M245.934,6.641c0.271-0.021,0.55-0.026,0.836-0.02c1.446,0.034,2.377,0.413,3.435,1.4
|
||||
c-0.94-0.011-1.691,0.047-2.422,0.211L246.75,7.97L245.934,6.641z M244.736,8.779c0.201,0.132,0.301,0.263,0.373,0.49
|
||||
c-1.234,0.636-1.986,1.252-2.969,2.392c-0.047-0.86-0.195-1.803,0.235-2.763c0.195-0.082,0.386-0.115,0.643-0.119
|
||||
c0.313-0.005,0.937-0.08,1.093-0.144C244.343,8.542,244.527,8.643,244.736,8.779 M229.134,10.183
|
||||
c0.371-0.665,0.854-1.309,1.434-1.86c0.31,0.162,0.529,0.313,0.835,0.573c0.234,0.197,0.376,0.337,0.547,0.542
|
||||
c-0.932,0.203-1.777,0.554-2.752,1.115c-0.004-0.063-0.012-0.128-0.027-0.206L229.134,10.183z M231.017,7.932
|
||||
c0.888-0.708,1.963-1.19,3.188-1.242c-0.102,0.526-0.337,1.323-0.442,1.573c0.062,0.064,0.366,0.601,0.449,0.945
|
||||
c-0.492,0.008-0.942,0.033-1.364,0.082C232.379,8.938,231.444,8.246,231.017,7.932 M234.924,6.702
|
||||
c1.25,0.078,2.138,0.363,2.803,0.833l0.076,0.638c0,0-0.33,0.841-0.577,1.357c-0.376-0.105-0.758-0.182-1.16-0.233
|
||||
c-0.093-0.233-0.195-0.468-0.333-0.612c-0.315-0.333-0.536-0.493-0.949-0.69l0.072-0.666L234.924,6.702z M238.591,8.399
|
||||
c0.422,0.583,0.721,1.304,0.997,2.142c-0.653-0.36-1.237-0.635-1.813-0.838L238.591,8.399z M234.491,32.701
|
||||
c-0.722-0.588-0.921-1.497-0.509-2.332l0.612,0.167l0.606,0.466C234.751,31.447,234.547,31.987,234.491,32.701 M234.43,29.827
|
||||
c0.798-0.623,2.174-0.588,2.796,0.233c-0.646,0.027-1.298,0.388-1.663,0.643l-0.386-0.784L234.43,29.827z M248.278,30.028
|
||||
c0.007,0.21,0.053,0.381,0.122,0.528c-0.093,0.264-0.137,0.49-0.172,0.823c-0.065,0.618-0.031,0.992,0.149,1.587l0.353-0.754
|
||||
l0.032-1.174c0.327,0.324,0.729,0.606,0.9,1.207c0.148,0.528,0.084,1.197-0.184,1.886c-1.02-0.065-1.72-0.408-2.019-1.268
|
||||
C247.212,32.146,247.378,30.597,248.278,30.028"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 60 KiB |
10907
docs/build/html/_static/jquery.js
vendored
1
docs/build/html/_static/js/badge_only.js
vendored
@ -1 +0,0 @@
|
||||
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});
|
@ -1,4 +0,0 @@
|
||||
/**
|
||||
* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
||||
*/
|
||||
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document);
|
4
docs/build/html/_static/js/html5shiv.min.js
vendored
@ -1,4 +0,0 @@
|
||||
/**
|
||||
* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
||||
*/
|
||||
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);
|
1
docs/build/html/_static/js/theme.js
vendored
199
docs/build/html/_static/language_data.js
vendored
@ -1,199 +0,0 @@
|
||||
/*
|
||||
* language_data.js
|
||||
* ~~~~~~~~~~~~~~~~
|
||||
*
|
||||
* This script contains the language-specific data used by searchtools.js,
|
||||
* namely the list of stopwords, stemmer, scorer and splitter.
|
||||
*
|
||||
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
|
||||
|
||||
|
||||
/* Non-minified version is copied as a separate JS file, is available */
|
||||
|
||||
/**
|
||||
* Porter Stemmer
|
||||
*/
|
||||
var Stemmer = function() {
|
||||
|
||||
var step2list = {
|
||||
ational: 'ate',
|
||||
tional: 'tion',
|
||||
enci: 'ence',
|
||||
anci: 'ance',
|
||||
izer: 'ize',
|
||||
bli: 'ble',
|
||||
alli: 'al',
|
||||
entli: 'ent',
|
||||
eli: 'e',
|
||||
ousli: 'ous',
|
||||
ization: 'ize',
|
||||
ation: 'ate',
|
||||
ator: 'ate',
|
||||
alism: 'al',
|
||||
iveness: 'ive',
|
||||
fulness: 'ful',
|
||||
ousness: 'ous',
|
||||
aliti: 'al',
|
||||
iviti: 'ive',
|
||||
biliti: 'ble',
|
||||
logi: 'log'
|
||||
};
|
||||
|
||||
var step3list = {
|
||||
icate: 'ic',
|
||||
ative: '',
|
||||
alize: 'al',
|
||||
iciti: 'ic',
|
||||
ical: 'ic',
|
||||
ful: '',
|
||||
ness: ''
|
||||
};
|
||||
|
||||
var c = "[^aeiou]"; // consonant
|
||||
var v = "[aeiouy]"; // vowel
|
||||
var C = c + "[^aeiouy]*"; // consonant sequence
|
||||
var V = v + "[aeiou]*"; // vowel sequence
|
||||
|
||||
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
|
||||
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
|
||||
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
|
||||
var s_v = "^(" + C + ")?" + v; // vowel in stem
|
||||
|
||||
this.stemWord = function (w) {
|
||||
var stem;
|
||||
var suffix;
|
||||
var firstch;
|
||||
var origword = w;
|
||||
|
||||
if (w.length < 3)
|
||||
return w;
|
||||
|
||||
var re;
|
||||
var re2;
|
||||
var re3;
|
||||
var re4;
|
||||
|
||||
firstch = w.substr(0,1);
|
||||
if (firstch == "y")
|
||||
w = firstch.toUpperCase() + w.substr(1);
|
||||
|
||||
// Step 1a
|
||||
re = /^(.+?)(ss|i)es$/;
|
||||
re2 = /^(.+?)([^s])s$/;
|
||||
|
||||
if (re.test(w))
|
||||
w = w.replace(re,"$1$2");
|
||||
else if (re2.test(w))
|
||||
w = w.replace(re2,"$1$2");
|
||||
|
||||
// Step 1b
|
||||
re = /^(.+?)eed$/;
|
||||
re2 = /^(.+?)(ed|ing)$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
re = new RegExp(mgr0);
|
||||
if (re.test(fp[1])) {
|
||||
re = /.$/;
|
||||
w = w.replace(re,"");
|
||||
}
|
||||
}
|
||||
else if (re2.test(w)) {
|
||||
var fp = re2.exec(w);
|
||||
stem = fp[1];
|
||||
re2 = new RegExp(s_v);
|
||||
if (re2.test(stem)) {
|
||||
w = stem;
|
||||
re2 = /(at|bl|iz)$/;
|
||||
re3 = new RegExp("([^aeiouylsz])\\1$");
|
||||
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
|
||||
if (re2.test(w))
|
||||
w = w + "e";
|
||||
else if (re3.test(w)) {
|
||||
re = /.$/;
|
||||
w = w.replace(re,"");
|
||||
}
|
||||
else if (re4.test(w))
|
||||
w = w + "e";
|
||||
}
|
||||
}
|
||||
|
||||
// Step 1c
|
||||
re = /^(.+?)y$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
re = new RegExp(s_v);
|
||||
if (re.test(stem))
|
||||
w = stem + "i";
|
||||
}
|
||||
|
||||
// Step 2
|
||||
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
suffix = fp[2];
|
||||
re = new RegExp(mgr0);
|
||||
if (re.test(stem))
|
||||
w = stem + step2list[suffix];
|
||||
}
|
||||
|
||||
// Step 3
|
||||
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
suffix = fp[2];
|
||||
re = new RegExp(mgr0);
|
||||
if (re.test(stem))
|
||||
w = stem + step3list[suffix];
|
||||
}
|
||||
|
||||
// Step 4
|
||||
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
|
||||
re2 = /^(.+?)(s|t)(ion)$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
re = new RegExp(mgr1);
|
||||
if (re.test(stem))
|
||||
w = stem;
|
||||
}
|
||||
else if (re2.test(w)) {
|
||||
var fp = re2.exec(w);
|
||||
stem = fp[1] + fp[2];
|
||||
re2 = new RegExp(mgr1);
|
||||
if (re2.test(stem))
|
||||
w = stem;
|
||||
}
|
||||
|
||||
// Step 5
|
||||
re = /^(.+?)e$/;
|
||||
if (re.test(w)) {
|
||||
var fp = re.exec(w);
|
||||
stem = fp[1];
|
||||
re = new RegExp(mgr1);
|
||||
re2 = new RegExp(meq1);
|
||||
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
|
||||
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
|
||||
w = stem;
|
||||
}
|
||||
re = /ll$/;
|
||||
re2 = new RegExp(mgr1);
|
||||
if (re.test(w) && re2.test(w)) {
|
||||
re = /.$/;
|
||||
w = w.replace(re,"");
|
||||
}
|
||||
|
||||
// and turn initial Y back to y
|
||||
if (firstch == "y")
|
||||
w = firstch.toLowerCase() + w.substr(1);
|
||||
return w;
|
||||
}
|
||||
}
|
||||
|
BIN
docs/build/html/_static/minus.png
vendored
Before Width: | Height: | Size: 90 B |
BIN
docs/build/html/_static/plus.png
vendored
Before Width: | Height: | Size: 90 B |
74
docs/build/html/_static/pygments.css
vendored
@ -1,74 +0,0 @@
|
||||
pre { line-height: 125%; }
|
||||
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight { background: #eeffcc; }
|
||||
.highlight .c { color: #408090; font-style: italic } /* Comment */
|
||||
.highlight .err { border: 1px solid #FF0000 } /* Error */
|
||||
.highlight .k { color: #007020; font-weight: bold } /* Keyword */
|
||||
.highlight .o { color: #666666 } /* Operator */
|
||||
.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */
|
||||
.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #007020 } /* Comment.Preproc */
|
||||
.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */
|
||||
.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
|
||||
.highlight .gd { color: #A00000 } /* Generic.Deleted */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #FF0000 } /* Generic.Error */
|
||||
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { color: #00A000 } /* Generic.Inserted */
|
||||
.highlight .go { color: #333333 } /* Generic.Output */
|
||||
.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .gt { color: #0044DD } /* Generic.Traceback */
|
||||
.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #007020 } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #902000 } /* Keyword.Type */
|
||||
.highlight .m { color: #208050 } /* Literal.Number */
|
||||
.highlight .s { color: #4070a0 } /* Literal.String */
|
||||
.highlight .na { color: #4070a0 } /* Name.Attribute */
|
||||
.highlight .nb { color: #007020 } /* Name.Builtin */
|
||||
.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
|
||||
.highlight .no { color: #60add5 } /* Name.Constant */
|
||||
.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
|
||||
.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
|
||||
.highlight .ne { color: #007020 } /* Name.Exception */
|
||||
.highlight .nf { color: #06287e } /* Name.Function */
|
||||
.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
|
||||
.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
|
||||
.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
|
||||
.highlight .nv { color: #bb60d5 } /* Name.Variable */
|
||||
.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
|
||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||
.highlight .mb { color: #208050 } /* Literal.Number.Bin */
|
||||
.highlight .mf { color: #208050 } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #208050 } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #208050 } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #208050 } /* Literal.Number.Oct */
|
||||
.highlight .sa { color: #4070a0 } /* Literal.String.Affix */
|
||||
.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #4070a0 } /* Literal.String.Char */
|
||||
.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
|
||||
.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
|
||||
.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #c65d09 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #235388 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #517918 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
|
||||
.highlight .fm { color: #06287e } /* Name.Function.Magic */
|
||||
.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
|
||||
.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
|
||||
.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */
|
577
docs/build/html/_static/searchtools.js
vendored
@ -1,577 +0,0 @@
|
||||
/*
|
||||
* searchtools.js
|
||||
* ~~~~~~~~~~~~~~~~
|
||||
*
|
||||
* Sphinx JavaScript utilities for the full-text search.
|
||||
*
|
||||
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* Simple result scoring code.
|
||||
*/
|
||||
if (typeof Scorer === "undefined") {
|
||||
var Scorer = {
|
||||
// Implement the following function to further tweak the score for each result
|
||||
// The function takes a result array [docname, title, anchor, descr, score, filename]
|
||||
// and returns the new score.
|
||||
/*
|
||||
score: result => {
|
||||
const [docname, title, anchor, descr, score, filename] = result
|
||||
return score
|
||||
},
|
||||
*/
|
||||
|
||||
// query matches the full name of an object
|
||||
objNameMatch: 11,
|
||||
// or matches in the last dotted part of the object name
|
||||
objPartialMatch: 6,
|
||||
// Additive scores depending on the priority of the object
|
||||
objPrio: {
|
||||
0: 15, // used to be importantResults
|
||||
1: 5, // used to be objectResults
|
||||
2: -5, // used to be unimportantResults
|
||||
},
|
||||
// Used when the priority is not in the mapping.
|
||||
objPrioDefault: 0,
|
||||
|
||||
// query found in title
|
||||
title: 15,
|
||||
partialTitle: 7,
|
||||
// query found in terms
|
||||
term: 5,
|
||||
partialTerm: 2,
|
||||
};
|
||||
}
|
||||
|
||||
const _removeChildren = (element) => {
|
||||
while (element && element.lastChild) element.removeChild(element.lastChild);
|
||||
};
|
||||
|
||||
/**
|
||||
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
|
||||
*/
|
||||
const _escapeRegExp = (string) =>
|
||||
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
|
||||
|
||||
const _displayItem = (item, searchTerms, highlightTerms) => {
|
||||
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
|
||||
const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
|
||||
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
|
||||
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
|
||||
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
|
||||
|
||||
const [docName, title, anchor, descr, score, _filename] = item;
|
||||
|
||||
let listItem = document.createElement("li");
|
||||
let requestUrl;
|
||||
let linkUrl;
|
||||
if (docBuilder === "dirhtml") {
|
||||
// dirhtml builder
|
||||
let dirname = docName + "/";
|
||||
if (dirname.match(/\/index\/$/))
|
||||
dirname = dirname.substring(0, dirname.length - 6);
|
||||
else if (dirname === "index/") dirname = "";
|
||||
requestUrl = docUrlRoot + dirname;
|
||||
linkUrl = requestUrl;
|
||||
} else {
|
||||
// normal html builders
|
||||
requestUrl = docUrlRoot + docName + docFileSuffix;
|
||||
linkUrl = docName + docLinkSuffix;
|
||||
}
|
||||
let linkEl = listItem.appendChild(document.createElement("a"));
|
||||
linkEl.href = linkUrl + anchor;
|
||||
linkEl.dataset.score = score;
|
||||
linkEl.innerHTML = title;
|
||||
const rehighlightListItem = () => {
|
||||
if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
|
||||
highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
|
||||
};
|
||||
if (descr) {
|
||||
listItem.appendChild(document.createElement("span")).innerHTML =
|
||||
" (" + descr + ")";
|
||||
rehighlightListItem();
|
||||
}
|
||||
else if (showSearchSummary)
|
||||
fetch(requestUrl)
|
||||
.then((responseData) => responseData.text())
|
||||
.then((data) => {
|
||||
if (data)
|
||||
listItem.appendChild(
|
||||
Search.makeSearchSummary(data, searchTerms)
|
||||
);
|
||||
rehighlightListItem();
|
||||
});
|
||||
Search.output.appendChild(listItem);
|
||||
};
|
||||
const _finishSearch = (resultCount) => {
|
||||
Search.stopPulse();
|
||||
Search.title.innerText = _("Search Results");
|
||||
if (!resultCount)
|
||||
Search.status.innerText = Documentation.gettext(
|
||||
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
|
||||
);
|
||||
else
|
||||
Search.status.innerText = _(
|
||||
`Search finished, found ${resultCount} page(s) matching the search query.`
|
||||
);
|
||||
};
|
||||
const _displayNextItem = (
|
||||
results,
|
||||
resultCount,
|
||||
searchTerms,
|
||||
highlightTerms,
|
||||
) => {
|
||||
// results left, load the summary and display it
|
||||
// this is intended to be dynamic (don't sub resultsCount)
|
||||
if (results.length) {
|
||||
_displayItem(results.pop(), searchTerms, highlightTerms);
|
||||
setTimeout(
|
||||
() => _displayNextItem(results, resultCount, searchTerms, highlightTerms),
|
||||
5
|
||||
);
|
||||
}
|
||||
// search finished, update title and status message
|
||||
else _finishSearch(resultCount);
|
||||
};
|
||||
|
||||
/**
|
||||
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
|
||||
* custom function per language.
|
||||
*
|
||||
* The regular expression works by splitting the string on consecutive characters
|
||||
* that are not Unicode letters, numbers, underscores, or emoji characters.
|
||||
* This is the same as ``\W+`` in Python, preserving the surrogate pair area.
|
||||
*/
|
||||
if (typeof splitQuery === "undefined") {
|
||||
var splitQuery = (query) => query
|
||||
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
|
||||
.filter(term => term) // remove remaining empty strings
|
||||
}
|
||||
|
||||
/**
|
||||
* Search Module
|
||||
*/
|
||||
const Search = {
|
||||
_index: null,
|
||||
_queued_query: null,
|
||||
_pulse_status: -1,
|
||||
|
||||
htmlToText: (htmlString) => {
|
||||
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
|
||||
htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
|
||||
const docContent = htmlElement.querySelector('[role="main"]');
|
||||
if (docContent !== undefined) return docContent.textContent;
|
||||
console.warn(
|
||||
"Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
|
||||
);
|
||||
return "";
|
||||
},
|
||||
|
||||
init: () => {
|
||||
const query = new URLSearchParams(window.location.search).get("q");
|
||||
document
|
||||
.querySelectorAll('input[name="q"]')
|
||||
.forEach((el) => (el.value = query));
|
||||
if (query) Search.performSearch(query);
|
||||
},
|
||||
|
||||
loadIndex: (url) =>
|
||||
(document.body.appendChild(document.createElement("script")).src = url),
|
||||
|
||||
setIndex: (index) => {
|
||||
Search._index = index;
|
||||
if (Search._queued_query !== null) {
|
||||
const query = Search._queued_query;
|
||||
Search._queued_query = null;
|
||||
Search.query(query);
|
||||
}
|
||||
},
|
||||
|
||||
hasIndex: () => Search._index !== null,
|
||||
|
||||
deferQuery: (query) => (Search._queued_query = query),
|
||||
|
||||
stopPulse: () => (Search._pulse_status = -1),
|
||||
|
||||
startPulse: () => {
|
||||
if (Search._pulse_status >= 0) return;
|
||||
|
||||
const pulse = () => {
|
||||
Search._pulse_status = (Search._pulse_status + 1) % 4;
|
||||
Search.dots.innerText = ".".repeat(Search._pulse_status);
|
||||
if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
|
||||
};
|
||||
pulse();
|
||||
},
|
||||
|
||||
/**
|
||||
* perform a search for something (or wait until index is loaded)
|
||||
*/
|
||||
performSearch: (query) => {
|
||||
// create the required interface elements
|
||||
const searchText = document.createElement("h2");
|
||||
searchText.textContent = _("Searching");
|
||||
const searchSummary = document.createElement("p");
|
||||
searchSummary.classList.add("search-summary");
|
||||
searchSummary.innerText = "";
|
||||
const searchList = document.createElement("ul");
|
||||
searchList.classList.add("search");
|
||||
|
||||
const out = document.getElementById("search-results");
|
||||
Search.title = out.appendChild(searchText);
|
||||
Search.dots = Search.title.appendChild(document.createElement("span"));
|
||||
Search.status = out.appendChild(searchSummary);
|
||||
Search.output = out.appendChild(searchList);
|
||||
|
||||
const searchProgress = document.getElementById("search-progress");
|
||||
// Some themes don't use the search progress node
|
||||
if (searchProgress) {
|
||||
searchProgress.innerText = _("Preparing search...");
|
||||
}
|
||||
Search.startPulse();
|
||||
|
||||
// index already loaded, the browser was quick!
|
||||
if (Search.hasIndex()) Search.query(query);
|
||||
else Search.deferQuery(query);
|
||||
},
|
||||
|
||||
/**
|
||||
* execute search (requires search index to be loaded)
|
||||
*/
|
||||
query: (query) => {
|
||||
const filenames = Search._index.filenames;
|
||||
const docNames = Search._index.docnames;
|
||||
const titles = Search._index.titles;
|
||||
const allTitles = Search._index.alltitles;
|
||||
const indexEntries = Search._index.indexentries;
|
||||
|
||||
// stem the search terms and add them to the correct list
|
||||
const stemmer = new Stemmer();
|
||||
const searchTerms = new Set();
|
||||
const excludedTerms = new Set();
|
||||
const highlightTerms = new Set();
|
||||
const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
|
||||
splitQuery(query.trim()).forEach((queryTerm) => {
|
||||
const queryTermLower = queryTerm.toLowerCase();
|
||||
|
||||
// maybe skip this "word"
|
||||
// stopwords array is from language_data.js
|
||||
if (
|
||||
stopwords.indexOf(queryTermLower) !== -1 ||
|
||||
queryTerm.match(/^\d+$/)
|
||||
)
|
||||
return;
|
||||
|
||||
// stem the word
|
||||
let word = stemmer.stemWord(queryTermLower);
|
||||
// select the correct list
|
||||
if (word[0] === "-") excludedTerms.add(word.substr(1));
|
||||
else {
|
||||
searchTerms.add(word);
|
||||
highlightTerms.add(queryTermLower);
|
||||
}
|
||||
});
|
||||
|
||||
if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
|
||||
localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
|
||||
}
|
||||
|
||||
// console.debug("SEARCH: searching for:");
|
||||
// console.info("required: ", [...searchTerms]);
|
||||
// console.info("excluded: ", [...excludedTerms]);
|
||||
|
||||
// array of [docname, title, anchor, descr, score, filename]
|
||||
let results = [];
|
||||
_removeChildren(document.getElementById("search-progress"));
|
||||
|
||||
const queryLower = query.toLowerCase();
|
||||
for (const [title, foundTitles] of Object.entries(allTitles)) {
|
||||
if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
|
||||
for (const [file, id] of foundTitles) {
|
||||
let score = Math.round(100 * queryLower.length / title.length)
|
||||
results.push([
|
||||
docNames[file],
|
||||
titles[file] !== title ? `${titles[file]} > ${title}` : title,
|
||||
id !== null ? "#" + id : "",
|
||||
null,
|
||||
score,
|
||||
filenames[file],
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// search for explicit entries in index directives
|
||||
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
|
||||
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
|
||||
for (const [file, id] of foundEntries) {
|
||||
let score = Math.round(100 * queryLower.length / entry.length)
|
||||
results.push([
|
||||
docNames[file],
|
||||
titles[file],
|
||||
id ? "#" + id : "",
|
||||
null,
|
||||
score,
|
||||
filenames[file],
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// lookup as object
|
||||
objectTerms.forEach((term) =>
|
||||
results.push(...Search.performObjectSearch(term, objectTerms))
|
||||
);
|
||||
|
||||
// lookup as search terms in fulltext
|
||||
results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
|
||||
|
||||
// let the scorer override scores with a custom scoring function
|
||||
if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
|
||||
|
||||
// now sort the results by score (in opposite order of appearance, since the
|
||||
// display function below uses pop() to retrieve items) and then
|
||||
// alphabetically
|
||||
results.sort((a, b) => {
|
||||
const leftScore = a[4];
|
||||
const rightScore = b[4];
|
||||
if (leftScore === rightScore) {
|
||||
// same score: sort alphabetically
|
||||
const leftTitle = a[1].toLowerCase();
|
||||
const rightTitle = b[1].toLowerCase();
|
||||
if (leftTitle === rightTitle) return 0;
|
||||
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
|
||||
}
|
||||
return leftScore > rightScore ? 1 : -1;
|
||||
});
|
||||
|
||||
// remove duplicate search results
|
||||
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
|
||||
let seen = new Set();
|
||||
results = results.reverse().reduce((acc, result) => {
|
||||
let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
|
||||
if (!seen.has(resultStr)) {
|
||||
acc.push(result);
|
||||
seen.add(resultStr);
|
||||
}
|
||||
return acc;
|
||||
}, []);
|
||||
|
||||
results = results.reverse();
|
||||
|
||||
// for debugging
|
||||
//Search.lastresults = results.slice(); // a copy
|
||||
// console.info("search results:", Search.lastresults);
|
||||
|
||||
// print the results
|
||||
_displayNextItem(results, results.length, searchTerms, highlightTerms);
|
||||
},
|
||||
|
||||
/**
|
||||
* search for object names
|
||||
*/
|
||||
performObjectSearch: (object, objectTerms) => {
|
||||
const filenames = Search._index.filenames;
|
||||
const docNames = Search._index.docnames;
|
||||
const objects = Search._index.objects;
|
||||
const objNames = Search._index.objnames;
|
||||
const titles = Search._index.titles;
|
||||
|
||||
const results = [];
|
||||
|
||||
const objectSearchCallback = (prefix, match) => {
|
||||
const name = match[4]
|
||||
const fullname = (prefix ? prefix + "." : "") + name;
|
||||
const fullnameLower = fullname.toLowerCase();
|
||||
if (fullnameLower.indexOf(object) < 0) return;
|
||||
|
||||
let score = 0;
|
||||
const parts = fullnameLower.split(".");
|
||||
|
||||
// check for different match types: exact matches of full name or
|
||||
// "last name" (i.e. last dotted part)
|
||||
if (fullnameLower === object || parts.slice(-1)[0] === object)
|
||||
score += Scorer.objNameMatch;
|
||||
else if (parts.slice(-1)[0].indexOf(object) > -1)
|
||||
score += Scorer.objPartialMatch; // matches in last name
|
||||
|
||||
const objName = objNames[match[1]][2];
|
||||
const title = titles[match[0]];
|
||||
|
||||
// If more than one term searched for, we require other words to be
|
||||
// found in the name/title/description
|
||||
const otherTerms = new Set(objectTerms);
|
||||
otherTerms.delete(object);
|
||||
if (otherTerms.size > 0) {
|
||||
const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
|
||||
if (
|
||||
[...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
|
||||
)
|
||||
return;
|
||||
}
|
||||
|
||||
let anchor = match[3];
|
||||
if (anchor === "") anchor = fullname;
|
||||
else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
|
||||
|
||||
const descr = objName + _(", in ") + title;
|
||||
|
||||
// add custom score for some objects according to scorer
|
||||
if (Scorer.objPrio.hasOwnProperty(match[2]))
|
||||
score += Scorer.objPrio[match[2]];
|
||||
else score += Scorer.objPrioDefault;
|
||||
|
||||
results.push([
|
||||
docNames[match[0]],
|
||||
fullname,
|
||||
"#" + anchor,
|
||||
descr,
|
||||
score,
|
||||
filenames[match[0]],
|
||||
]);
|
||||
};
|
||||
Object.keys(objects).forEach((prefix) => {
|
||||
if (!(objects[prefix] instanceof Array)) {
|
||||
objects[prefix] = Object.entries(objects[prefix]).map(([name, match]) => [...match, name]);
|
||||
}
|
||||
objects[prefix].forEach((array) =>
|
||||
objectSearchCallback(prefix, array)
|
||||
);
|
||||
});
|
||||
return results;
|
||||
},
|
||||
|
||||
/**
|
||||
* search for full-text terms in the index
|
||||
*/
|
||||
performTermsSearch: (searchTerms, excludedTerms) => {
|
||||
// prepare search
|
||||
const terms = Search._index.terms;
|
||||
const titleTerms = Search._index.titleterms;
|
||||
const filenames = Search._index.filenames;
|
||||
const docNames = Search._index.docnames;
|
||||
const titles = Search._index.titles;
|
||||
|
||||
const scoreMap = new Map();
|
||||
const fileMap = new Map();
|
||||
|
||||
// perform the search on the required terms
|
||||
searchTerms.forEach((word) => {
|
||||
const files = [];
|
||||
const arr = [
|
||||
{ files: terms[word], score: Scorer.term },
|
||||
{ files: titleTerms[word], score: Scorer.title },
|
||||
];
|
||||
// add support for partial matches
|
||||
if (word.length > 2) {
|
||||
const escapedWord = _escapeRegExp(word);
|
||||
Object.keys(terms).forEach((term) => {
|
||||
if (term.match(escapedWord) && !terms[word])
|
||||
arr.push({ files: terms[term], score: Scorer.partialTerm });
|
||||
});
|
||||
Object.keys(titleTerms).forEach((term) => {
|
||||
if (term.match(escapedWord) && !titleTerms[word])
|
||||
arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
|
||||
});
|
||||
}
|
||||
|
||||
// no match but word was a required one
|
||||
if (arr.every((record) => record.files === undefined)) return;
|
||||
|
||||
// found search word in contents
|
||||
arr.forEach((record) => {
|
||||
if (record.files === undefined) return;
|
||||
|
||||
let recordFiles = record.files;
|
||||
if (recordFiles.length === undefined) recordFiles = [recordFiles];
|
||||
files.push(...recordFiles);
|
||||
|
||||
// set score for the word in each file
|
||||
recordFiles.forEach((file) => {
|
||||
if (!scoreMap.has(file)) scoreMap.set(file, {});
|
||||
scoreMap.get(file)[word] = record.score;
|
||||
});
|
||||
});
|
||||
|
||||
// create the mapping
|
||||
files.forEach((file) => {
|
||||
if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
|
||||
fileMap.get(file).push(word);
|
||||
else fileMap.set(file, [word]);
|
||||
});
|
||||
});
|
||||
|
||||
// now check if the files don't contain excluded terms
|
||||
const results = [];
|
||||
for (const [file, wordList] of fileMap) {
|
||||
// check if all requirements are matched
|
||||
|
||||
// as search terms with length < 3 are discarded
|
||||
const filteredTermCount = [...searchTerms].filter(
|
||||
(term) => term.length > 2
|
||||
).length;
|
||||
if (
|
||||
wordList.length !== searchTerms.size &&
|
||||
wordList.length !== filteredTermCount
|
||||
)
|
||||
continue;
|
||||
|
||||
// ensure that none of the excluded terms is in the search result
|
||||
if (
|
||||
[...excludedTerms].some(
|
||||
(term) =>
|
||||
terms[term] === file ||
|
||||
titleTerms[term] === file ||
|
||||
(terms[term] || []).includes(file) ||
|
||||
(titleTerms[term] || []).includes(file)
|
||||
)
|
||||
)
|
||||
break;
|
||||
|
||||
// select one (max) score for the file.
|
||||
const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
|
||||
// add result to the result list
|
||||
results.push([
|
||||
docNames[file],
|
||||
titles[file],
|
||||
"",
|
||||
null,
|
||||
score,
|
||||
filenames[file],
|
||||
]);
|
||||
}
|
||||
return results;
|
||||
},
|
||||
|
||||
/**
|
||||
* helper function to return a node containing the
|
||||
* search summary for a given text. keywords is a list
|
||||
* of stemmed words.
|
||||
*/
|
||||
makeSearchSummary: (htmlText, keywords) => {
|
||||
const text = Search.htmlToText(htmlText);
|
||||
if (text === "") return null;
|
||||
|
||||
const textLower = text.toLowerCase();
|
||||
const actualStartPosition = [...keywords]
|
||||
.map((k) => textLower.indexOf(k.toLowerCase()))
|
||||
.filter((i) => i > -1)
|
||||
.slice(-1)[0];
|
||||
const startWithContext = Math.max(actualStartPosition - 120, 0);
|
||||
|
||||
const top = startWithContext === 0 ? "" : "...";
|
||||
const tail = startWithContext + 240 < text.length ? "..." : "";
|
||||
|
||||
let summary = document.createElement("p");
|
||||
summary.classList.add("context");
|
||||
summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
|
||||
|
||||
return summary;
|
||||
},
|
||||
};
|
||||
|
||||
_ready(Search.init);
|
152
docs/build/html/_static/sphinx_highlight.js
vendored
@ -1,152 +0,0 @@
|
||||
/* Highlighting utilities for Sphinx HTML documentation. */
|
||||
"use strict";
|
||||
|
||||
const SPHINX_HIGHLIGHT_ENABLED = true
|
||||
|
||||
/**
|
||||
* highlight a given string on a node by wrapping it in
|
||||
* span elements with the given class name.
|
||||
*/
|
||||
const _highlight = (node, addItems, text, className) => {
|
||||
if (node.nodeType === Node.TEXT_NODE) {
|
||||
const val = node.nodeValue;
|
||||
const parent = node.parentNode;
|
||||
const pos = val.toLowerCase().indexOf(text);
|
||||
if (
|
||||
pos >= 0 &&
|
||||
!parent.classList.contains(className) &&
|
||||
!parent.classList.contains("nohighlight")
|
||||
) {
|
||||
let span;
|
||||
|
||||
const closestNode = parent.closest("body, svg, foreignObject");
|
||||
const isInSVG = closestNode && closestNode.matches("svg");
|
||||
if (isInSVG) {
|
||||
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
|
||||
} else {
|
||||
span = document.createElement("span");
|
||||
span.classList.add(className);
|
||||
}
|
||||
|
||||
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
|
||||
const rest = document.createTextNode(val.substr(pos + text.length));
|
||||
parent.insertBefore(
|
||||
span,
|
||||
parent.insertBefore(rest, node.nextSibling)
|
||||
);
|
||||
node.nodeValue = val.substr(0, pos);
|
||||
/* There may be more occurrences of search term in this node. So call this
|
||||
* function recursively on the remaining fragment.
|
||||
*/
|
||||
_highlight(rest, addItems, text, className);
|
||||
|
||||
if (isInSVG) {
|
||||
const rect = document.createElementNS(
|
||||
"http://www.w3.org/2000/svg",
|
||||
"rect"
|
||||
);
|
||||
const bbox = parent.getBBox();
|
||||
rect.x.baseVal.value = bbox.x;
|
||||
rect.y.baseVal.value = bbox.y;
|
||||
rect.width.baseVal.value = bbox.width;
|
||||
rect.height.baseVal.value = bbox.height;
|
||||
rect.setAttribute("class", className);
|
||||
addItems.push({ parent: parent, target: rect });
|
||||
}
|
||||
}
|
||||
} else if (node.matches && !node.matches("button, select, textarea")) {
|
||||
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
|
||||
}
|
||||
};
|
||||
const _highlightText = (thisNode, text, className) => {
|
||||
let addItems = [];
|
||||
_highlight(thisNode, addItems, text, className);
|
||||
addItems.forEach((obj) =>
|
||||
obj.parent.insertAdjacentElement("beforebegin", obj.target)
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Small JavaScript module for the documentation.
|
||||
*/
|
||||
const SphinxHighlight = {
|
||||
|
||||
/**
|
||||
* highlight the search words provided in localstorage in the text
|
||||
*/
|
||||
highlightSearchWords: () => {
|
||||
if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
|
||||
|
||||
// get and clear terms from localstorage
|
||||
const url = new URL(window.location);
|
||||
const highlight =
|
||||
localStorage.getItem("sphinx_highlight_terms")
|
||||
|| url.searchParams.get("highlight")
|
||||
|| "";
|
||||
localStorage.removeItem("sphinx_highlight_terms")
|
||||
url.searchParams.delete("highlight");
|
||||
window.history.replaceState({}, "", url);
|
||||
|
||||
// get individual terms from highlight string
|
||||
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
|
||||
if (terms.length === 0) return; // nothing to do
|
||||
|
||||
// There should never be more than one element matching "div.body"
|
||||
const divBody = document.querySelectorAll("div.body");
|
||||
const body = divBody.length ? divBody[0] : document.querySelector("body");
|
||||
window.setTimeout(() => {
|
||||
terms.forEach((term) => _highlightText(body, term, "highlighted"));
|
||||
}, 10);
|
||||
|
||||
const searchBox = document.getElementById("searchbox");
|
||||
if (searchBox === null) return;
|
||||
searchBox.appendChild(
|
||||
document
|
||||
.createRange()
|
||||
.createContextualFragment(
|
||||
'<p class="highlight-link">' +
|
||||
'<a href="javascript:SphinxHighlight.hideSearchWords()">' +
|
||||
_("Hide Search Matches") +
|
||||
"</a></p>"
|
||||
)
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* helper function to hide the search marks again
|
||||
*/
|
||||
hideSearchWords: () => {
|
||||
document
|
||||
.querySelectorAll("#searchbox .highlight-link")
|
||||
.forEach((el) => el.remove());
|
||||
document
|
||||
.querySelectorAll("span.highlighted")
|
||||
.forEach((el) => el.classList.remove("highlighted"));
|
||||
localStorage.removeItem("sphinx_highlight_terms")
|
||||
},
|
||||
|
||||
initEscapeListener: () => {
|
||||
// only install a listener if it is really needed
|
||||
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
|
||||
|
||||
document.addEventListener("keydown", (event) => {
|
||||
// bail for input elements
|
||||
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
|
||||
// bail with special keys
|
||||
if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
|
||||
if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
|
||||
SphinxHighlight.hideSearchWords();
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
_ready(() => {
|
||||
/* Do not call highlightSearchWords() when we are on the search page.
|
||||
* It will highlight words from the _previous_ search query.
|
||||
*/
|
||||
if (typeof Search === "undefined")
|
||||
SphinxHighlight.highlightSearchWords();
|
||||
SphinxHighlight.initEscapeListener();
|
||||
});
|
144
docs/build/html/_static/style.css
vendored
@ -1,144 +0,0 @@
|
||||
/* Define default light theme colors */
|
||||
:root {
|
||||
--bg-color: #f8f8f8;
|
||||
--text-color: #404040;
|
||||
--header-bg-color: #343A40;
|
||||
--header-text-color: #b3b3b3;
|
||||
--code-bg-color: #f8f8f8;
|
||||
--link-color: #005cc5;
|
||||
--link-hover-color: #003d99;
|
||||
--side-bar-bg-color: #343131:
|
||||
}
|
||||
|
||||
/* Auto-toggle dark mode based on system preference */
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--bg-color: #1a1a1a;
|
||||
--text-color: #d1d1d1;
|
||||
--header-bg-color: #262626;
|
||||
--header-text-color: #d1d1d1;
|
||||
--code-bg-color: #333333;
|
||||
--link-color: #4da6ff;
|
||||
--link-hover-color: #1a8cff;
|
||||
--side-bar-bg-color: #343131;
|
||||
}
|
||||
|
||||
.method dt, .class dt, .data dt, .attribute dt, .function dt,
|
||||
.descclassname, .descname {
|
||||
background-color: #525252 !important;
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.toc-backref {
|
||||
color: grey !important;
|
||||
}
|
||||
|
||||
code.literal {
|
||||
background-color: #2d2d2d !important;
|
||||
border: 1px solid #6d6d6d !important;
|
||||
}
|
||||
|
||||
.wy-nav-content-wrap {
|
||||
background-color: rgba(0, 0, 0, 0.6) !important;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
background-color: #191919 !important;
|
||||
}
|
||||
|
||||
.sidebar-title {
|
||||
background-color: #2b2b2b !important;
|
||||
}
|
||||
|
||||
.xref, .py-meth {
|
||||
color: #7ec3e6 !important;
|
||||
}
|
||||
|
||||
.admonition, .note {
|
||||
background-color: #2d2d2d !important;
|
||||
}
|
||||
|
||||
.wy-side-nav-search {
|
||||
background-color: inherit;
|
||||
}
|
||||
|
||||
.wy-table thead, .rst-content table.docutils thead, .rst-content table.field-list thead {
|
||||
background-color: var(--header-bg-color);
|
||||
}
|
||||
|
||||
.wy-table thead th, .rst-content table.docutils thead th, .rst-content table.field-list thead th {
|
||||
border: solid 2px var(--text-color);
|
||||
color: var(--text-color);
|
||||
}
|
||||
|
||||
.wy-table thead p, .rst-content table.docutils thead p, .rst-content table.field-list thead p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.wy-table-odd td, .wy-table-striped tr:nth-child(2n-1) td, .rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td {
|
||||
background-color: #343131;
|
||||
}
|
||||
|
||||
.highlight .m {
|
||||
color: inherit
|
||||
}
|
||||
|
||||
/* Literal.Number */
|
||||
.highlight .nv {
|
||||
color: #3a7ca8
|
||||
}
|
||||
|
||||
.wy-menu-vertical li code {
|
||||
color: #E74C3C;
|
||||
}
|
||||
|
||||
.wy-menu-vertical .xref {
|
||||
color: #2980B9 !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Main colors adapted from pytorch doc */
|
||||
.wy-side-nav-search, .wy-nav-top {
|
||||
background-color: var(--header-bg-color);
|
||||
}
|
||||
|
||||
.wy-body-for-nav, .wy-nav-content, .wy-nav-content-wrap {
|
||||
background-color: var(--bg-color);
|
||||
background: var(--bg-color);
|
||||
}
|
||||
|
||||
.caption[role="heading"] {
|
||||
background-color: var(--side-bar-bg-color);
|
||||
}
|
||||
|
||||
a.icon.icon-home {
|
||||
color: var(--header-text-color);
|
||||
}
|
||||
|
||||
/* Apply the colors */
|
||||
body, h1, h2, .rst-content .toctree-wrapper p.caption, h3, h4, h5, h6, legend, p.caption, .field-list .xref.py.docutils, .field-list code.docutils, .field-list .docutils.literal.notranslate {
|
||||
background-color: var(--bg-color);
|
||||
color: var(--text-color);
|
||||
font-family: "Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;
|
||||
}
|
||||
|
||||
/* Code blocks */
|
||||
.codeblock, pre.literal-block, .rst-content .literal-block, .rst-content pre.literal-block, div[class^='highlight'] {
|
||||
background-color: var(--code-bg-color);
|
||||
}
|
||||
|
||||
/* Justify and Center */
|
||||
.justify {
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
.center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Docstring styles */
|
||||
.field-list .xref.py.docutils, .field-list code.docutils, .field-list .docutils.literal.notranslate {
|
||||
border: None;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|