contribute_to_paddle_en.html 23.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67


<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
  <meta charset="utf-8">
  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  
  <title>Contribute Code &mdash; PaddlePaddle  documentation</title>
  

  
  

  

  
  
    

  

  
  
    <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
  

  
  
        <link rel="index" title="Index"
              href="../../genindex.html"/>
        <link rel="search" title="Search" href="../../search.html"/>
    <link rel="top" title="PaddlePaddle  documentation" href="../../index.html"/>
        <link rel="up" title="HOW TO" href="../index_en.html"/>
        <link rel="next" title="RNN Models" href="../deep_model/rnn/index_en.html"/>
        <link rel="prev" title="Write New Layers" href="new_layer_en.html"/> 

  <link rel="stylesheet" href="https://cdn.jsdelivr.net/perfect-scrollbar/0.6.14/css/perfect-scrollbar.min.css" type="text/css" />
  <link rel="stylesheet" href="../../_static/css/override.css" type="text/css" />
  <script>
  var _hmt = _hmt || [];
  (function() {
    var hm = document.createElement("script");
    hm.src = "//hm.baidu.com/hm.js?b9a314ab40d04d805655aab1deee08ba";
    var s = document.getElementsByTagName("script")[0]; 
    s.parentNode.insertBefore(hm, s);
  })();
  </script>

  

  
  <script src="../../_static/js/modernizr.min.js"></script>

</head>

<body class="wy-body-for-nav" role="document">

  
  <header class="site-header">
    <div class="site-logo">
      <a href="/"><img src="../../_static/images/PP_w.png"></a>
    </div>
    <div class="site-nav-links">
      <div class="site-menu">
68
        <a class="fork-on-github" href="https://github.com/PaddlePaddle/Paddle" target="_blank"><i class="fa fa-github"></i>Fork me on Github</a>
69 70 71 72 73 74 75 76 77 78 79 80
        <div class="language-switcher dropdown">
          <a type="button" data-toggle="dropdown">
            <span>English</span>
            <i class="fa fa-angle-up"></i>
            <i class="fa fa-angle-down"></i>
          </a>
          <ul class="dropdown-menu">
            <li><a href="/doc_cn">中文</a></li>
            <li><a href="/doc">English</a></li>
          </ul>
        </div>
        <ul class="site-page-links">
81
          <li><a href="/">Home</a></li>
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
        </ul>
      </div>
      <div class="doc-module">
        
        <ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../getstarted/index_en.html">GET STARTED</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../index_en.html">HOW TO</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api/index_en.html">API</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../about/index_en.html">ABOUT</a></li>
</ul>

        
<div role="search">
  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
    <input type="text" name="q" placeholder="Search docs" />
    <input type="hidden" name="check_keywords" value="yes" />
    <input type="hidden" name="area" value="default" />
  </form>
</div>        
      </div>
    </div>
  </header>
  
  <div class="main-content-wrap">

    
    <nav class="doc-menu-vertical" role="navigation">
        
          
          <ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../getstarted/index_en.html">GET STARTED</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../getstarted/build_and_install/index_en.html">Install and Build</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../getstarted/build_and_install/docker_install_en.html">PaddlePaddle in Docker Containers</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getstarted/build_and_install/ubuntu_install_en.html">Debian Package installation guide</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getstarted/build_and_install/build_from_source_en.html">Installing from Sources</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1 current"><a class="reference internal" href="../index_en.html">HOW TO</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../usage/cmd_parameter/index_en.html">Set Command-line Parameters</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../usage/cmd_parameter/use_case_en.html">Use Case</a></li>
<li class="toctree-l3"><a class="reference internal" href="../usage/cmd_parameter/arguments_en.html">Argument Outline</a></li>
<li class="toctree-l3"><a class="reference internal" href="../usage/cmd_parameter/detail_introduction_en.html">Detail Description</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../usage/cluster/cluster_train_en.html">Run Distributed Training</a></li>
<li class="toctree-l2"><a class="reference internal" href="../usage/k8s/k8s_en.html">Paddle On Kubernetes</a></li>
<li class="toctree-l2"><a class="reference internal" href="../usage/k8s/k8s_aws_en.html">Distributed PaddlePaddle Training on AWS with Kubernetes</a></li>
<li class="toctree-l2"><a class="reference internal" href="new_layer_en.html">Write New Layers</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Contribute Code</a></li>
133 134 135 136
<li class="toctree-l2"><a class="reference internal" href="../deep_model/rnn/index_en.html">RNN Models</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../deep_model/rnn/rnn_config_en.html">RNN Configuration</a></li>
</ul>
</li>
137 138 139 140
<li class="toctree-l2"><a class="reference internal" href="../optimization/gpu_profiling_en.html">Tune GPU Performance</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../api/index_en.html">API</a><ul>
141 142 143
<li class="toctree-l2"><a class="reference internal" href="../../api/v2/model_configs.html">Model Configuration</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../api/v2/config/activation.html">Activation</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../api/v2/config/layer.html">Layers</a></li>
144
<li class="toctree-l3"><a class="reference internal" href="../../api/v2/config/evaluators.html">Evaluators</a></li>
145 146 147 148 149 150
<li class="toctree-l3"><a class="reference internal" href="../../api/v2/config/optimizer.html">Optimizer</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../api/v2/config/pooling.html">Pooling</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../api/v2/config/networks.html">Networks</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../api/v2/config/attr.html">Parameter Attribute</a></li>
</ul>
</li>
151
<li class="toctree-l2"><a class="reference internal" href="../../api/v2/data.html">Data Reader Interface and DataSets</a></li>
152
<li class="toctree-l2"><a class="reference internal" href="../../api/v2/run_logic.html">Training and Inference</a></li>
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../about/index_en.html">ABOUT</a></li>
</ul>

        
    </nav>
    
    <section class="doc-content-wrap">

      

 







<div role="navigation" aria-label="breadcrumbs navigation">
  <ul class="wy-breadcrumbs">
      
        <li><a href="../index_en.html">HOW TO</a> > </li>
      
    <li>Contribute Code</li>
  </ul>
</div>
      
      <div class="wy-nav-content" id="doc-content">
        <div class="rst-content">
          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
           <div itemprop="articleBody">
            
  <div class="section" id="contribute-code">
<span id="contribute-code"></span><h1>Contribute Code<a class="headerlink" href="#contribute-code" title="Permalink to this headline"></a></h1>
<p>We sincerely appreciate your contributions. You can use fork and pull request
workflow to merge your code.</p>
<div class="section" id="code-requirements">
<span id="code-requirements"></span><h2>Code Requirements<a class="headerlink" href="#code-requirements" title="Permalink to this headline"></a></h2>
<ul class="simple">
194 195 196
<li>Your code comments must be fully documented by
<a class="reference external" href="http://www.stack.nl/~dimitri/doxygen/">Doxygen</a> style.</li>
<li>Make sure the compiler option <code class="docutils literal"><span class="pre">WITH_STYLE_CHECK</span></code> is on and the compiler
197 198 199 200 201 202 203 204 205 206 207 208 209
passes the code style check.</li>
<li>All code must have unit test.</li>
<li>Pass all unit tests.</li>
</ul>
<p>The following tutorial guides you into submitting your contibution.</p>
</div>
<div class="section" id="creating-a-fork">
<span id="creating-a-fork"></span><h2><a class="reference external" href="https://help.github.com/articles/fork-a-repo/">Creating a Fork</a><a class="headerlink" href="#creating-a-fork" title="Permalink to this headline"></a></h2>
<p>Just head over to the GitHub page and click the &#8220;Fork&#8221; button.
It&#8217;s just that simple.</p>
</div>
<div class="section" id="clone">
<span id="clone"></span><h2>Clone<a class="headerlink" href="#clone" title="Permalink to this headline"></a></h2>
210 211 212
<p>Clone remote repository.</p>
<div class="highlight-bash"><div class="highlight"><pre><span></span>➜  git clone https://github.com/USERNAME/Paddle
<span class="nb">cd</span> Paddle
213 214 215
</pre></div>
</div>
</div>
216 217 218 219 220
<div class="section" id="create-a-local-branch">
<span id="create-a-local-branch"></span><h2>Create a local branch<a class="headerlink" href="#create-a-local-branch" title="Permalink to this headline"></a></h2>
<p>Paddle is currently using <a class="reference external" href="http://nvie.com/posts/a-successful-git-branching-model/">Git-flow branching model</a>.</p>
<p>All feature and bug fix development work should be done on a new branch, generally create new branch from <code class="docutils literal"><span class="pre">develop</span></code> branch .</p>
<div class="highlight-bash"><div class="highlight"><pre><span></span>➜  git checkout -b my-cool-stuff
221 222
</pre></div>
</div>
223
<p>Before the checkout, you need to keep the current branch directory clean, otherwise the untracked file will be brought to the new branch, which can be inspected by <code class="docutils literal"><span class="pre">git</span> <span class="pre">status</span></code>.</p>
224 225 226 227 228 229 230 231 232 233 234
</div>
<div class="section" id="using-pre-commit-hook">
<span id="using-pre-commit-hook"></span><h2>Using <code class="docutils literal"><span class="pre">pre-commit</span></code> hook<a class="headerlink" href="#using-pre-commit-hook" title="Permalink to this headline"></a></h2>
<p>Paddle developers use <a class="reference external" href="http://pre-commit.com/">pre-commit</a> tool to manage git
pre-commit hooks. It can help us format source codes (cpp, python), check some
basic thing before commit (only one EOL for each file, do not add a huge file
in git). <code class="docutils literal"><span class="pre">pre-commit</span></code> tests is a part of unit tests in Travis-CI now, every
PR doesn&#8217;t fit hook can not be merged into Paddle.</p>
<p>To use <a class="reference external" href="http://pre-commit.com/">pre-commit</a>, you should install it by
<code class="docutils literal"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">pre-commit</span></code>, and currently, Paddle uses <code class="docutils literal"><span class="pre">clang-format</span></code> to format
c/cpp sources. Please make sure clang-format 3.8+ installed.</p>
235 236 237 238 239 240
<p>Install and run it as follow:</p>
<div class="highlight-bash"><div class="highlight"><pre><span></span>➜  pip install pre-commit
➜  pre-commit install
</pre></div>
</div>
<p>When you commit your code, the pre-commit hook will check the local code if there is
241 242
anything not suitable to commit, and so on.</p>
</div>
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285
<div class="section" id="start-to-develop">
<span id="start-to-develop"></span><h2>Start to develop<a class="headerlink" href="#start-to-develop" title="Permalink to this headline"></a></h2>
<p>In this tutorial, I delete a line in README.md and created a new file.</p>
<p>We can use <code class="docutils literal"><span class="pre">git</span> <span class="pre">status</span></code> to inspect the changes of current directory, <code class="docutils literal"><span class="pre">git</span> <span class="pre">diff</span></code> to see difference.</p>
<div class="highlight-bash"><div class="highlight"><pre><span></span>➜  git status
On branch <span class="nb">test</span>
Changes not staged <span class="k">for</span> commit:
  <span class="o">(</span>use <span class="s2">&quot;git add &lt;file&gt;...&quot;</span> to update what will be committed<span class="o">)</span>
  <span class="o">(</span>use <span class="s2">&quot;git checkout -- &lt;file&gt;...&quot;</span> to discard changes in working directory<span class="o">)</span>

    modified:   README.md

Untracked files:
  <span class="o">(</span>use <span class="s2">&quot;git add &lt;file&gt;...&quot;</span> to include in what will be committed<span class="o">)</span>

    <span class="nb">test</span>

no changes added to commit <span class="o">(</span>use <span class="s2">&quot;git add&quot;</span> and/or <span class="s2">&quot;git commit -a&quot;</span><span class="o">)</span>
</pre></div>
</div>
</div>
<div class="section" id="build-and-test">
<span id="build-and-test"></span><h2>Build and Test<a class="headerlink" href="#build-and-test" title="Permalink to this headline"></a></h2>
<p>We package PaddlePaddle&#8217;s compile environment into a Docker image, called the develop image named <code class="docutils literal"><span class="pre">paddle:dev</span></code>, it contains all compiling tools that PaddlePaddle needs.</p>
<p>If you want to build the develop image, just run:</p>
<div class="highlight-bash"><div class="highlight"><pre><span></span>➜  docker build -t paddle:dev .
</pre></div>
</div>
<p>Then we can use the develop image to build PaddlePaddle source. For example:</p>
<div class="highlight-bash"><div class="highlight"><pre><span></span>➜  docker run -v <span class="k">$(</span><span class="nb">pwd</span><span class="k">)</span>:/paddle -e <span class="s2">&quot;WITH_GPU=OFF&quot;</span> -e <span class="s2">&quot;WITH_AVX=ON&quot;</span> -e <span class="s2">&quot;WITH_TEST=ON&quot;</span> paddle:dev
</pre></div>
</div>
<p>The above command will compile PaddlePaddle and create a Dockerfile for building production image. All the generated files are in the build directory. &#8220;WITH_GPU&#8221; controls if the generated production image supports GPU. &#8220;WITH_AVX&#8221; controls if the generated production image supports AVX. &#8220;WITH_TEST&#8221; controls if the unit test will be generated.</p>
<p>Then we can generate the production image by copying the compiled PaddlePaddle program into the image by</p>
<div class="highlight-bash"><div class="highlight"><pre><span></span>➜  docker build -t paddle:prod -f build/Dockerfile .
</pre></div>
</div>
<p>Run unit test finally:</p>
<div class="highlight-bash"><div class="highlight"><pre><span></span>➜  docker run -it -v <span class="k">$(</span><span class="nb">pwd</span><span class="k">)</span>:/paddle paddle:dev bash -c <span class="s2">&quot;cd /paddle/build &amp;&amp; ctest&quot;</span>
</pre></div>
</div>
<p>For more details, you can read <a class="reference external" href="https://github.com/PaddlePaddle/Paddle/blob/develop/doc/getstarted/build_and_install/docker_install_en.rst">this doc</a>.</p>
</div>
286 287
<div class="section" id="commit">
<span id="commit"></span><h2>Commit<a class="headerlink" href="#commit" title="Permalink to this headline"></a></h2>
288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314
<p>Next we cancel the changes to the README.md file and then commit our changes by following command lines:</p>
<div class="highlight-bash"><div class="highlight"><pre><span></span>➜  git checkout -- README.md
➜  git status
On branch <span class="nb">test</span>
Untracked files:
  <span class="o">(</span>use <span class="s2">&quot;git add &lt;file&gt;...&quot;</span> to include in what will be committed<span class="o">)</span>

    <span class="nb">test</span>

nothing added to commit but untracked files present <span class="o">(</span>use <span class="s2">&quot;git add&quot;</span> to track<span class="o">)</span>
➜  git add <span class="nb">test</span>
</pre></div>
</div>
<p>We should write a description of each commit by <code class="docutils literal"><span class="pre">git</span> <span class="pre">commit</span></code> to allow others to know
the changes in these files.</p>
<div class="highlight-bash"><div class="highlight"><pre><span></span>➜  git commit
CRLF end-lines remover...............................<span class="o">(</span>no files to check<span class="o">)</span>Skipped
yapf.................................................<span class="o">(</span>no files to check<span class="o">)</span>Skipped
Check <span class="k">for</span> added large files..............................................Passed
Check <span class="k">for</span> merge conflicts................................................Passed
Check <span class="k">for</span> broken symlinks................................................Passed
Detect Private Key...................................<span class="o">(</span>no files to check<span class="o">)</span>Skipped
Fix End of Files.....................................<span class="o">(</span>no files to check<span class="o">)</span>Skipped
clang-formater.......................................<span class="o">(</span>no files to check<span class="o">)</span>Skipped
<span class="o">[</span>my-cool-stuff c703c041<span class="o">]</span> add <span class="nb">test</span> file
 <span class="m">1</span> file changed, <span class="m">0</span> insertions<span class="o">(</span>+<span class="o">)</span>, <span class="m">0</span> deletions<span class="o">(</span>-<span class="o">)</span>
 create mode <span class="m">100644</span> <span class="m">233</span>
315 316 317 318 319 320 321
</pre></div>
</div>
</div>
<div class="section" id="keeping-fork-up-to-date">
<span id="keeping-fork-up-to-date"></span><h2>Keeping Fork Up to Date<a class="headerlink" href="#keeping-fork-up-to-date" title="Permalink to this headline"></a></h2>
<p>Before pull your request, you should sync your code from the latest PaddlePaddle.
To do this, you&#8217;ll need to add a remote at first:</p>
322 323 324 325
<div class="highlight-bash"><div class="highlight"><pre><span></span>➜  git remote add upstream https://github.com/PaddlePaddle/Paddle
➜  git remote
origin
upstream
326 327 328
</pre></div>
</div>
<p>Update your fork with the latest upstream changes:</p>
329 330
<div class="highlight-bash"><div class="highlight"><pre><span></span>➜  git fetch upstream
➜  git pull upstream develop
331 332 333 334 335 336
</pre></div>
</div>
<p>Now, your local master branch is up-to-date with everything modified upstream.</p>
</div>
<div class="section" id="push-to-github">
<span id="push-to-github"></span><h2>Push to GitHub<a class="headerlink" href="#push-to-github" title="Permalink to this headline"></a></h2>
337 338
<div class="highlight-bash"><div class="highlight"><pre><span></span><span class="c1"># push to your repository in Github</span>
➜  git push origin my-cool-stuff
339 340 341
</pre></div>
</div>
</div>
342 343 344
<div class="section" id="create-an-issue-and-a-pull-request">
<span id="create-an-issue-and-a-pull-request"></span><h2>Create an issue and a Pull Request<a class="headerlink" href="#create-an-issue-and-a-pull-request" title="Permalink to this headline"></a></h2>
<p>Create an Issue to describe the problem and record its number.</p>
345
<p>Go to the page for your fork on GitHub, select your development branch,
346 347 348 349 350 351
and click the <code class="docutils literal"><span class="pre">New</span> <span class="pre">pull</span> <span class="pre">request</span></code>.</p>
<p><img width="295" alt="screen shot 2017-04-26 at 9 09 28 pm" src="https://cloud.githubusercontent.com/assets/11692045/25436054/a6d98c66-2ac4-11e7-9cb1-18dd13150230.png"></p>
<p>Then select the target branch:</p>
<p><img width="750" alt="screen shot 2017-04-26 at 9 11 52 pm" src="https://cloud.githubusercontent.com/assets/11692045/25436139/f83b1e6c-2ac4-11e7-8c0e-add499023c46.png"></p>
<p>We can add <code class="docutils literal"><span class="pre">resolve</span> <span class="pre">#Issue</span> <span class="pre">number</span></code> in PR description to close the issue automatically after the PR is merge. More details in <a class="reference external" href="https://help.github.com/articles/closing-issues-via-commit-messages/">https://help.github.com/articles/closing-issues-via-commit-messages/</a>.</p>
<p>Then wait for review, if there need to modify, refer to the above steps to update the corresponding origin branch.</p>
352
</div>
353 354 355 356 357 358
<div class="section" id="delete-origin-branch">
<span id="delete-origin-branch"></span><h2>Delete origin branch<a class="headerlink" href="#delete-origin-branch" title="Permalink to this headline"></a></h2>
<p>After the PR is merge into the main repository, we can delete the remote branch on the PR page.</p>
<p><img width="775" alt="screen shot 2017-04-26 at 9 18 24 pm" src="https://cloud.githubusercontent.com/assets/11692045/25436457/e4cdd472-2ac5-11e7-9272-badc76c4a23e.png"></p>
<p>Or just run:</p>
<div class="highlight-bash"><div class="highlight"><pre><span></span>➜  git push origin :my-cool-stuff
359 360 361
</pre></div>
</div>
</div>
362 363 364 365 366 367 368
<div class="section" id="delete-local-branch">
<span id="delete-local-branch"></span><h2>Delete local branch<a class="headerlink" href="#delete-local-branch" title="Permalink to this headline"></a></h2>
<p>Finally, we delete local branch:</p>
<div class="highlight-bash"><div class="highlight"><pre><span></span>➜  git checkout develop 

<span class="c1"># delete my-cool-stuff branch</span>
➜  git branch -D my-cool-stuff
369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417
</pre></div>
</div>
</div>
</div>


           </div>
          </div>
          <footer>
  
    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
      
        <a href="../deep_model/rnn/index_en.html" class="btn btn-neutral float-right" title="RNN Models" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
      
      
        <a href="new_layer_en.html" class="btn btn-neutral" title="Write New Layers" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
      
    </div>
  

  <hr/>

  <div role="contentinfo">
    <p>
        &copy; Copyright 2016, PaddlePaddle developers.

    </p>
  </div>
  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 

</footer>

        </div>
      </div>

    </section>

  </div>
  


  

    <script type="text/javascript">
        var DOCUMENTATION_OPTIONS = {
            URL_ROOT:'../../',
            VERSION:'',
            COLLAPSE_INDEX:false,
            FILE_SUFFIX:'.html',
418 419
            HAS_SOURCE:  true,
            SOURCELINK_SUFFIX: ".txt",
420 421 422 423 424
        };
    </script>
      <script type="text/javascript" src="../../_static/jquery.js"></script>
      <script type="text/javascript" src="../../_static/underscore.js"></script>
      <script type="text/javascript" src="../../_static/doctools.js"></script>
425
      <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
426 427 428 429 430 431 432 433 434 435 436 437 438
       
  

  
  
    <script type="text/javascript" src="../../_static/js/theme.js"></script>
  
  
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/perfect-scrollbar/0.6.14/js/perfect-scrollbar.jquery.min.js"></script>
  <script src="../../_static/js/paddle_doc_init.js"></script> 

</body>
439
</html>