<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://nuitka.net/</id>
  <title>Nuitka Blog - Posts tagged gsoc2019</title>
  <updated>2026-10-05T17:30:44.155029+00:00</updated>
  <link href="https://nuitka.net/"/>
  <link href="https://nuitka.net/blog/tag/gsoc2019/atom.xml" rel="self"/>
  <generator uri="https://ablog.readthedocs.io/" version="0.11.6">ABlog</generator>
  <entry>
    <id>https://nuitka.net/posts/bksahus-gsoc-wrap-up.html</id>
    <title>bksahu’s GSoC warp up</title>
    <updated>2019-08-25T19:55:00+02:00</updated>
    <author>
      <name>Batakrishna Sahu</name>
    </author>
    <content type="html">&lt;section id="bksahu-s-gsoc-warp-up"&gt;

&lt;p&gt;Hello everyone!&lt;/p&gt;
&lt;p&gt;GSoC 2019 has almost come to an end! It’s the time to wrap up this mega
event started back in May 2019. Under the mentorship of Mentor Hayen, my
learning experience has undergone a roller-coaster ride and it has not
only boosted my growth as a developer but also as an individual. Over
the last 3 months the following are my major contributions to this
project:&lt;/p&gt;
&lt;section id="built-ins-optimizations"&gt;
&lt;h2&gt;Built-ins Optimizations&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;dl&gt;
&lt;dt&gt;“any”: &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/246"&gt;PR #246&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;cite&gt;nuitka.nodes.BuiltinAnyNodes&lt;/cite&gt; node added to optimize the “any”
built-in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Developed an algorithm to predict the “any” for arguments
having repetitive values at compile time. For example:&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;&lt;p&gt;any([0]*255) -&amp;gt; False&lt;/p&gt;
&lt;p&gt;any([False, False, True]) -&amp;gt; True&lt;/p&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Extended support for &lt;cite&gt;range&lt;/cite&gt;, &lt;cite&gt;set&lt;/cite&gt; and &lt;cite&gt;dict&lt;/cite&gt; built-ins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added the optimized C side support too&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a method &lt;cite&gt;getMetaClassBase&lt;/cite&gt; to make Python 2 and Python 3
compatible while working with metaclasses.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;li&gt;&lt;dl class="simple"&gt;
&lt;dt&gt;Issue reported and closed &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/issues/349"&gt;Issue #349&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Created a new module &lt;cite&gt;nuitka.nodes.IterationHandles&lt;/cite&gt; to work
with iterables.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added support of Iteration for non-mutable types.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;li&gt;&lt;dl&gt;
&lt;dt&gt;“all”: &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/407"&gt;PR #407&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Added &lt;cite&gt;nuitka.nodes.BuiltinAllNodes&lt;/cite&gt; to optimize the “all”
built-ins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Developed an algorithm similar to “any” to predict the “all”
arguments. For example:&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;&lt;p&gt;all([0, 0, 1]) -&amp;gt; False&lt;/p&gt;
&lt;p&gt;all([True]*100) -&amp;gt; True&lt;/p&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Other similar optimizations are done like “any” built-in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Additionally, added a new testing module
&lt;cite&gt;tests.optimizations.CommonOptimizations&lt;/cite&gt; to test the built-ins
optimizations at the same place.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;li&gt;&lt;dl class="simple"&gt;
&lt;dt&gt;“abs”: &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/419"&gt;PR #419&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added new operation node &lt;cite&gt;ExpressionOperationAbs&lt;/cite&gt; to optimize
the &lt;cite&gt;abs&lt;/cite&gt; built-in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Manually added &lt;cite&gt;shapeSlotAbs&lt;/cite&gt; to different shapes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally pre-computed the compile time constant &lt;cite&gt;abs&lt;/cite&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;li&gt;&lt;dl&gt;
&lt;dt&gt;“max” and “min”: &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/442"&gt;PR #442&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;This PR is work in progress and is half complete.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This is the first optimizations in which I used reformulations
instead of added in a new node.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pseudo-code of “min” reformulation:&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;_min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
 &lt;span class="n"&gt;tmp_arg1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
 &lt;span class="n"&gt;tmp_arg2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
 &lt;span class="n"&gt;tmp_arg3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;
 &lt;span class="o"&gt;...&lt;/span&gt;
 &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tmp_arg1&lt;/span&gt;
 &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;keyfunc&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# can be decided during re-formulation&lt;/span&gt;
     &lt;span class="n"&gt;tmp_key_result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;keyfunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
     &lt;span class="n"&gt;tmp_key_candidate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;keyfunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tmp_arg2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
     &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tmp_key_candidate&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;tmp_key_result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
         &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tmp_arg2&lt;/span&gt;
         &lt;span class="n"&gt;tmp_key_result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tmp_key_candidate&lt;/span&gt;
     &lt;span class="n"&gt;tmp_key_candidate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;keyfunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tmp_arg3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
     &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tmp_key_candidate&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;tmp_key_result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
         &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tmp_arg3&lt;/span&gt;
         &lt;span class="n"&gt;tmp_key_result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tmp_key_candidate&lt;/span&gt;
     &lt;span class="o"&gt;...&lt;/span&gt;
 &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
     &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tmp_arg2&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
         &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tmp_arg2&lt;/span&gt;
     &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tmp_arg3&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
         &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tmp_arg3&lt;/span&gt;
     &lt;span class="o"&gt;...&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Adding support for &lt;cite&gt;keyfunc&lt;/cite&gt; is pending&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;li&gt;&lt;dl&gt;
&lt;dt&gt;“zip”: &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/462"&gt;PR #462&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;This built-in uses both types of optimizations that the
previous built-ins optimizations used.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;cite&gt;zip&lt;/cite&gt; for Python 2 uses the reformulations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pseudo-code of “zip” reformulation:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;_zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="c1"&gt;# First assign, to preserve order of execution,&lt;/span&gt;
&lt;span class="c1"&gt;# the arguments might be complex expressions.&lt;/span&gt;
&lt;span class="n"&gt;tmp_arg1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;span class="n"&gt;tmp_arg2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;span class="n"&gt;tmp_arg3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;tmp_iter_1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tmp_arg1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;tmp_iter_2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tmp_arg2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;tmp_iter_3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tmp_arg3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="c1"&gt;# could be more&lt;/span&gt;
&lt;span class="n"&gt;tmp_result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;tmp_result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="p"&gt;(&lt;/span&gt;
                 &lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tmp_iter_1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                 &lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tmp_iter_2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                 &lt;span class="nb"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tmp_iter_3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                 &lt;span class="o"&gt;...&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
         &lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;StopIteration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
       &lt;span class="k"&gt;pass&lt;/span&gt;
 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;tmp_result&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;cite&gt;zip&lt;/cite&gt; for Python 3 needs a new node that calls the &lt;cite&gt;zip&lt;/cite&gt;
because unlike &lt;cite&gt;zip&lt;/cite&gt; in Python 2, &lt;cite&gt;zip&lt;/cite&gt; in Python 3 returns a
&lt;cite&gt;zipobject&lt;/cite&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="test-suite"&gt;
&lt;h2&gt;Test suite&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;dl&gt;
&lt;dt&gt;Search mode “All”: &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/378"&gt;PR #378&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;In the test suite, I added a new search mode “all” that will
test all the modules and return all the results at once. For
example:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-bash notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;./tests/basics/run_all.py&lt;span class="w"&gt; &lt;/span&gt;all
&lt;span class="w"&gt;   &lt;/span&gt;Using&lt;span class="w"&gt; &lt;/span&gt;concrete&lt;span class="w"&gt; &lt;/span&gt;python&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;.7.12&lt;span class="w"&gt; &lt;/span&gt;on&lt;span class="w"&gt; &lt;/span&gt;x86_64
&lt;span class="w"&gt;   &lt;/span&gt;Comparing&lt;span class="w"&gt; &lt;/span&gt;output&lt;span class="w"&gt; &lt;/span&gt;of&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Asserts.py&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;using&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/usr/bin/python&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;with&lt;span class="w"&gt; &lt;/span&gt;flags&lt;span class="w"&gt; &lt;/span&gt;silent,&lt;span class="w"&gt; &lt;/span&gt;expect_success,&lt;span class="w"&gt; &lt;/span&gt;remove_output,&lt;span class="w"&gt;     &lt;/span&gt;recurse_all,&lt;span class="w"&gt; &lt;/span&gt;original_file,&lt;span class="w"&gt; &lt;/span&gt;cpython_cache,&lt;span class="w"&gt; &lt;/span&gt;plugin_enable:pylint-warnings&lt;span class="w"&gt; &lt;/span&gt;...
&lt;span class="w"&gt;   &lt;/span&gt;.
&lt;span class="w"&gt;   &lt;/span&gt;.
&lt;span class="w"&gt;   &lt;/span&gt;.
&lt;span class="w"&gt;   &lt;/span&gt;.
&lt;span class="w"&gt;   &lt;/span&gt;Total&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;error&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;found.
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;li&gt;&lt;dl&gt;
&lt;dt&gt;Search mode “Only”: &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/333"&gt;PR #333&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Added “only” search mode to test only a single module. For
example:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-bash notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;./tests/basics/run_all.py&lt;span class="w"&gt; &lt;/span&gt;only&lt;span class="w"&gt; &lt;/span&gt;BuiltinsTest.py
&lt;span class="w"&gt;   &lt;/span&gt;Using&lt;span class="w"&gt; &lt;/span&gt;concrete&lt;span class="w"&gt; &lt;/span&gt;python&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;.7.12&lt;span class="w"&gt; &lt;/span&gt;on&lt;span class="w"&gt; &lt;/span&gt;x86_64
&lt;span class="w"&gt;   &lt;/span&gt;Skipping&lt;span class="w"&gt; &lt;/span&gt;Asserts.py
&lt;span class="w"&gt;   &lt;/span&gt;Skipping&lt;span class="w"&gt; &lt;/span&gt;Assignments.py
&lt;span class="w"&gt;   &lt;/span&gt;Skipping&lt;span class="w"&gt; &lt;/span&gt;BigConstants.py
&lt;span class="w"&gt;   &lt;/span&gt;Skipping&lt;span class="w"&gt; &lt;/span&gt;Branching.py
&lt;span class="w"&gt;   &lt;/span&gt;Skipping&lt;span class="w"&gt; &lt;/span&gt;BuiltinOverload.py
&lt;span class="w"&gt;   &lt;/span&gt;Skipping&lt;span class="w"&gt; &lt;/span&gt;BuiltinSuper.py
&lt;span class="w"&gt;   &lt;/span&gt;Comparing&lt;span class="w"&gt; &lt;/span&gt;output&lt;span class="w"&gt; &lt;/span&gt;of&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;BuiltinsTest.py&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;using&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/usr/bin/python&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;with&lt;span class="w"&gt; &lt;/span&gt;flags&lt;span class="w"&gt; &lt;/span&gt;silent,&lt;span class="w"&gt; &lt;/span&gt;expect_success,&lt;span class="w"&gt; &lt;/span&gt;remove_output,&lt;span class="w"&gt; &lt;/span&gt;recurse_all,&lt;span class="w"&gt; &lt;/span&gt;original_file,&lt;span class="w"&gt; &lt;/span&gt;cpython_cache,&lt;span class="w"&gt; &lt;/span&gt;plugin_enable:pylint-warnings&lt;span class="w"&gt; &lt;/span&gt;...
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;li&gt;&lt;dl class="simple"&gt;
&lt;dt&gt;Reported and closed Issue #334: &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/336"&gt;PR #336&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Fixed the autoformat bug by reading and writing the files in
bytes instead of string.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="documentation"&gt;
&lt;h2&gt;Documentation&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Nuitka git work flow: &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/485"&gt;PR #485&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And other minor doc fixes are added with their respective pull requests.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="what-i-learned"&gt;
&lt;h2&gt;What I learned&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Learned the software engineering principles and how to keep my work
clean.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I also learned how to effectively use software designing principles
like &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;DRY&lt;/a&gt;
and &lt;a class="reference external" href="https://en.wikipedia.org/wiki/KISS_principle"&gt;KISS&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Got exposed to Nuitka internals which helped me to better understand
how compilers in general work.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Explored how CPython works internally.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Got some great advice from Mentor Hayen about starting my
professional career in Software engineering.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Overall, it was a great experience to be a part of Nuitka :)&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Batakrishna&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/bksahus-gsoc-wrap-up.html"/>
    <summary>Hello everyone!</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="gsoc2019" label="gsoc2019"/>
    <published>2019-08-25T19:55:00+02:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/tommy-gsoc-summary.html</id>
    <title>Intro</title>
    <updated>2019-08-23T07:00:00+02:00</updated>
    <author>
      <name>Taofeng(Tommy) Li</name>
    </author>
    <content type="html">&lt;section id="intro"&gt;

&lt;p&gt;As Google Summer of Code (GSoC) is coming to an end, I am writing this
blog post as a final summary describing all the work I have done as well
as my experiences in this program.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="summary-of-my-work"&gt;
&lt;h1&gt;Summary of My Work&lt;/h1&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/314"&gt;#314 run_all.py new special-comment mechanism &amp;amp; Urllib3Using.py&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Before GSoC started, I looked around for whatever work I could
help with.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In this pull request, I added a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;checkRequirements&lt;/span&gt;&lt;/code&gt; function for
the Nuitka standalone test suite.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This function checks for special-comments at the top of standalone
tests in the format of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;#&lt;/span&gt; &lt;span class="pre"&gt;nuitka-skip-unless-expression:&lt;/span&gt;
&lt;span class="pre"&gt;expression&lt;/span&gt; &lt;span class="pre"&gt;to&lt;/span&gt; &lt;span class="pre"&gt;be&lt;/span&gt; &lt;span class="pre"&gt;evaluated&lt;/span&gt;&lt;/code&gt; OR &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;#&lt;/span&gt; &lt;span class="pre"&gt;nuitka-skip-unless-imports:&lt;/span&gt;
&lt;span class="pre"&gt;module1,module2,...&lt;/span&gt;&lt;/code&gt; and will decide whether to skip a test
depending on if its specified requirements are met.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In addition, standalone test &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Urllib3Using.py&lt;/span&gt;&lt;/code&gt; was created.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This pull request was soon merged and allowed me the lucky
opportunity of GSoC 2019 with Nuitka :)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/339"&gt;#339 Standalone tests for botocore &amp;amp; boto3 + fix to Urllib3Using.py&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;This PR was also created before the start of GSoC.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standalone test &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Boto3Using.py&lt;/span&gt;&lt;/code&gt; was created using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;moto&lt;/span&gt;&lt;/code&gt; to
mock AWS calls which did not turn out well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changed &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Urllib3Using.py&lt;/span&gt;&lt;/code&gt; with the addition of python version
checks as a fix to &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/issues/373"&gt;Issue #373&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://nuitka.net/posts/urllib3-wheel-with-nuitka.html"&gt;Urllib3 Wheel with Nuitka Pytest Results&lt;/a&gt; and
&lt;a class="reference external" href="https://nuitka.net/posts/dateutil-wheel-with-nuitka.html"&gt;Python-Dateutil Wheel with Nuitka Pytest Results&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;At the start of GSoC, I performed manual pytest comparison for
PyPI packages &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;urllib3&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dateutil&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The findings of my testing were documented in these postings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Manual testing compares the pytest results of an installed nuitka
wheel built using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;setup.py&lt;/span&gt; &lt;span class="pre"&gt;bdist_nuitka&lt;/span&gt;&lt;/code&gt; to the regular
pytest results of each package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Testing is done to ensure that nuitka is building the wheel
correctly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the pytests pass/fail in the same way, that means Nuitka built
the wheel properly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Else if the tests differ, then something is wrong.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Virtualenv is used to create a clean environment with no outside
pollution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Over the course of performing manual testing, I became familiar
with the use of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;virtualenv&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wheel&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A bug was found with the package &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;urllib3&lt;/span&gt;&lt;/code&gt; bdist and I created
&lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/issues/413"&gt;Issue #413&lt;/a&gt; to
document the bug.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/440"&gt;#440 Automating PyPI Wheel Pytest&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;After familiarizing myself with how &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;virtualenv&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;wheel&lt;/span&gt;&lt;/code&gt;, and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; work, I started to work on a script which would
automate the pytest comparison for top PyPI packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The script first uses &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;git&lt;/span&gt;&lt;/code&gt; to update each package if it is
already existing in the local cache, else it will &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;git&lt;/span&gt; &lt;span class="pre"&gt;clone&lt;/span&gt;&lt;/code&gt;
that package into the local cache.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The script then uses calls to &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;os.system&lt;/span&gt;&lt;/code&gt; to automate the
creation of a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;virtualenv&lt;/span&gt;&lt;/code&gt; which is then used to install
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pytest&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pip&lt;/span&gt; &lt;span class="pre"&gt;install&lt;/span&gt;&lt;/code&gt; the package’s requirements (if any)
for running pytest.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The script then handles each package depending on different needs
before building a regular wheel with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;setup.py&lt;/span&gt;
&lt;span class="pre"&gt;bdist_wheel&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This wheel is then installed into the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;virtualenv&lt;/span&gt;&lt;/code&gt;, after which
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;subprocess.Popen&lt;/span&gt;&lt;/code&gt; is used to run and capture the output of
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;pytest&lt;/span&gt; &lt;span class="pre"&gt;--disable-warnings&lt;/span&gt;&lt;/code&gt; into a string.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The script then resets the package to its original state and
builds a nuitka-compiled wheel using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;setup.py&lt;/span&gt;
&lt;span class="pre"&gt;bdist_nuitka&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This compiled wheel is then installed into the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;virtualenv&lt;/span&gt;&lt;/code&gt;,
after which &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;subprocess.Popen&lt;/span&gt;&lt;/code&gt; is used to run and capture the
output of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;pytest&lt;/span&gt; &lt;span class="pre"&gt;--disable-warnings&lt;/span&gt;&lt;/code&gt; into another
string.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The two strings containing pytest outputs are then compared to
find differences.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If no differences are found, this means &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bdist_nuitka&lt;/span&gt;&lt;/code&gt; worked
properly. Else Nuitka compilation did something wrong.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The above process is repeated for each suitable PyPI package from
the PyPI top 50. (Some packages are left out if they do not
contain a test suite or if they do not need to be tested)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;At the end, a colored summary is given for all the packages
tested.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This automation script is meant to be run regularly to inform
developers of Nuitka regressions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/issues/477"&gt;Issue #477 Unable to compile modules listed under
unworthy_namespaces&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Raised due to package &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pycparser&lt;/span&gt;&lt;/code&gt; failing in the automated test
suite.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This issue will be addressed in the future.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/issues/479"&gt;Issue #479 bdist_nuitka fails for packages containing py_modules
only&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;While I worked on &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/440"&gt;#440&lt;/a&gt;, I found a bug with
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bdist_nuitka&lt;/span&gt;&lt;/code&gt; failing on PyPI packages containing py_modules
only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This bug occurs due to Nuitka making the assumption that a main
package always exists for all packages. However, some packages
contain only a main module and not a main package.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Applies to PyPI packages &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;decorator&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ipaddress&lt;/span&gt;&lt;/code&gt;, and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;pyparsing&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/483"&gt;#483 Add support for py_modules_only compilation&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;This pull request changes &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bdist_nuitka.py&lt;/span&gt;&lt;/code&gt; and various other
files to fix &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/issues/479"&gt;Issue #479&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Checks are added for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;bdist_nuitka&lt;/span&gt;&lt;/code&gt; command to see if a main
package exists. If there is not a main package, it will set its
compile target to the main module instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This also addressed the case of a package with both a main package
and a main module, in which case both are included inside the
resulting wheel.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In addition, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;distutils&lt;/span&gt;&lt;/code&gt; examples &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;py_modules_only&lt;/span&gt;&lt;/code&gt; and
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;package_and_module&lt;/span&gt;&lt;/code&gt; were created and added for future testing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;During this PR, I found an import bug in Nuitka and hotfixed it
with &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/487"&gt;#487 Fixup_import_module&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/484"&gt;#484 PyPI Standalone Tests&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;This pull request adds more standalone tests for each top PyPI
package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/495"&gt;#495 Improve pypi automation&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Improves the PyPI test suite created in &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/pull/440"&gt;#440&lt;/a&gt; with functional
improvements, readability improvements, and added documentation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="things-i-learned"&gt;
&lt;h1&gt;Things I Learned&lt;/h1&gt;
&lt;p&gt;Before GSoC, I was very uncomfortable with working inside a terminal. I
was unfamiliar with many basic bash commands because I simply did not
have any prior professional industrial experiences. I was also very
unfamiliar with the Git flow, which is evident in the messy commit
histories of my earliest pull requests.&lt;/p&gt;
&lt;p&gt;As I continued throughout my GSoC journey, however, I became much more
comfortable with working inside the terminal as well as using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;git&lt;/span&gt;&lt;/code&gt; as
a version-control system (shoutout to my mentor Kay Hayen for helping me
through all the annoying conflicts).&lt;/p&gt;
&lt;p&gt;Although I am still no expert, I can confidently say that I am now far
more proficient working with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;git&lt;/span&gt;&lt;/code&gt; and inside the terminal.&lt;/p&gt;
&lt;p&gt;In addition, I became much more familiar with many of the most popular
PyPI packages as well as the inner workings of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt;&lt;/code&gt;, which I
believe will help me go very far in my career as a software developer.&lt;/p&gt;
&lt;p&gt;Overall, the GSoC experience was truly astounding and I am more than
thankful to my mentor Kay Hayen as well as Google for making this
amazing program possible.&lt;/p&gt;
&lt;p&gt;Yours, &lt;a class="reference external" href="https://github.com/tommyli3318"&gt;Tommy&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/tommy-gsoc-summary.html"/>
    <summary>As Google Summer of Code (GSoC) is coming to an end, I am writing this
blog post as a final summary describing all the work I have done as well
as my experiences in this program.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="automation" label="automation"/>
    <category term="gsoc2019" label="gsoc2019"/>
    <category term="pypi" label="pypi"/>
    <category term="pytest" label="pytest"/>
    <category term="standalone" label="standalone"/>
    <category term="tests" label="tests"/>
    <published>2019-08-23T07:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/dateutil-wheel-with-nuitka.html</id>
    <title>Intro</title>
    <updated>2019-07-12T18:00:00+02:00</updated>
    <author>
      <name>Taofeng(Tommy) Li</name>
    </author>
    <content type="html">&lt;section id="intro"&gt;

&lt;p&gt;This post compares the pytest results of dateutil to its nuitka-built
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.whl&lt;/span&gt;&lt;/code&gt; counterpart.&lt;/p&gt;
&lt;p&gt;Dateutil standalone test have already been covered. Manual testing is
now done to compare the pytest results of a nuitka wheel built using
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;setup.py&lt;/span&gt; &lt;span class="pre"&gt;bdist_nuitka&lt;/span&gt;&lt;/code&gt; to the regular pytest of the dateutil
package. Testing is done to ensure that nuitka is building the wheel
correctly. If the pytests pass/fail in the same way, that means Nuitka
built the wheel properly. Else if the tests differ, then something is
wrong. Virtualenv is used to create a clean environment with no outside
pollution.&lt;/p&gt;
&lt;p&gt;The pytest results were very similar:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Regular&lt;/span&gt; &lt;span class="n"&gt;pytests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;=============&lt;/span&gt; &lt;span class="mi"&gt;1977&lt;/span&gt; &lt;span class="n"&gt;passed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt; &lt;span class="n"&gt;skipped&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="n"&gt;xfailed&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;7.99&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;=============&lt;/span&gt;
&lt;span class="n"&gt;Nuitka&lt;/span&gt; &lt;span class="n"&gt;wheel&lt;/span&gt; &lt;span class="n"&gt;pytests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;=============&lt;/span&gt; &lt;span class="mi"&gt;1976&lt;/span&gt; &lt;span class="n"&gt;passed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt; &lt;span class="n"&gt;skipped&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="n"&gt;xfailed&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;7.89&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;=============&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;section id="steps-to-reproduce"&gt;
&lt;h1&gt;Steps to Reproduce&lt;/h1&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;Clone dateutil and nuitka into a new folder&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inside the dateutil folder, issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;pip&lt;/span&gt; &lt;span class="pre"&gt;install&lt;/span&gt; &lt;span class="pre"&gt;-r&lt;/span&gt;
&lt;span class="pre"&gt;requirements-dev.txt&lt;/span&gt;&lt;/code&gt; to install its requirements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;pytest&lt;/span&gt; &lt;span class="pre"&gt;--disable-warnings&lt;/span&gt;&lt;/code&gt;, this runs the regular
pytest for dateutil.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Change into the nuitka folder and issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;setup.py&lt;/span&gt; &lt;span class="pre"&gt;develop&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Change back into dateutil and issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;setup.py&lt;/span&gt; &lt;span class="pre"&gt;bdist_nuitka&lt;/span&gt;&lt;/code&gt;
to build the dateutil wheel using nuitka. The newly built wheel
should be found in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dist&lt;/span&gt;&lt;/code&gt; folder.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use pip to uninstall the existing dateutil, then issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt;
&lt;span class="pre"&gt;pip&lt;/span&gt; &lt;span class="pre"&gt;install&lt;/span&gt;&lt;/code&gt; followed by the newly built &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.whl&lt;/span&gt;&lt;/code&gt; filename.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;pytest&lt;/span&gt; &lt;span class="pre"&gt;--disable-warnings&lt;/span&gt;&lt;/code&gt;, this runs the
nuitka-built wheel pytest for dateutil.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
&lt;section id="uncompile-python"&gt;
&lt;h1&gt;Uncompile Python&lt;/h1&gt;
&lt;p&gt;dateutil regular pytest:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;=============================&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="n"&gt;starts&lt;/span&gt; &lt;span class="o"&gt;=============================&lt;/span&gt;
&lt;span class="n"&gt;platform&lt;/span&gt; &lt;span class="n"&gt;win32&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="n"&gt;Python&lt;/span&gt; &lt;span class="mf"&gt;3.7.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pytest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4.6.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;py&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.8.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pluggy&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.12.0&lt;/span&gt;
&lt;span class="n"&gt;rootdir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Users&lt;/span&gt;\&lt;span class="n"&gt;Tommy&lt;/span&gt;\&lt;span class="n"&gt;pipenv&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;testing&lt;/span&gt;\&lt;span class="n"&gt;dateutil&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;testing&lt;/span&gt;\&lt;span class="n"&gt;dateutil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;inifile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;
&lt;span class="n"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hypothesis&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4.24.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cov&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.7.1&lt;/span&gt;
&lt;span class="n"&gt;collected&lt;/span&gt; &lt;span class="mi"&gt;2074&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;

&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_easter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;...........................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;................................................&lt;/span&gt;                         &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_import_star&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;                                      &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_imports&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.......................&lt;/span&gt;                    &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_internals&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;....&lt;/span&gt;                                     &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_isoparser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;........................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.......&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;............................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.....................&lt;/span&gt;&lt;span class="n"&gt;xx&lt;/span&gt;                                                  &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;...........................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.................................&lt;/span&gt;&lt;span class="n"&gt;xxxxxxxxxxxxxsss&lt;/span&gt;&lt;span class="o"&gt;......&lt;/span&gt;                  &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_relativedelta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;....................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;49&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.............................................&lt;/span&gt;                            &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;52&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_rrule&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;............................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;54&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;57&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;61&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;71&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;75&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;................................................................&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;.......&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;78&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;..............&lt;/span&gt;                                                           &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;79&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_tz&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;............................&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;...........&lt;/span&gt;&lt;span class="n"&gt;sssssss&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;81&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;sssssssssssssssssssssssssssssssssssssssss&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;............................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;84&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;xxx&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;......................................&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;...........................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.......................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;91&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;..........&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;....................................&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;....................&lt;/span&gt;&lt;span class="n"&gt;ss&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;95&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;sssssssssssss&lt;/span&gt;&lt;span class="o"&gt;....&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;..........&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;...........................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;98&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.............&lt;/span&gt;                                                            &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_utils&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.......&lt;/span&gt;                                      &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="nb"&gt;property&lt;/span&gt;\&lt;span class="n"&gt;test_isoparse_prop&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;                           &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;dateutil&lt;/span&gt;\&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="nb"&gt;property&lt;/span&gt;\&lt;span class="n"&gt;test_parser_prop&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt;                            &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;docs&lt;/span&gt;\&lt;span class="n"&gt;exercises&lt;/span&gt;\&lt;span class="n"&gt;solutions&lt;/span&gt;\&lt;span class="n"&gt;mlk_day_rrule_solution&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;                     &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="o"&gt;=============&lt;/span&gt; &lt;span class="mi"&gt;1977&lt;/span&gt; &lt;span class="n"&gt;passed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt; &lt;span class="n"&gt;skipped&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="n"&gt;xfailed&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;7.99&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;=============&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;section id="compiled-with-nuitka"&gt;
&lt;h1&gt;Compiled with Nuitka&lt;/h1&gt;
&lt;p&gt;nuitka wheel pytest:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;=============================&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="n"&gt;starts&lt;/span&gt; &lt;span class="o"&gt;=============================&lt;/span&gt;
&lt;span class="n"&gt;platform&lt;/span&gt; &lt;span class="n"&gt;win32&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="n"&gt;Python&lt;/span&gt; &lt;span class="mf"&gt;3.7.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pytest&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4.6.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;py&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.8.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pluggy&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.12.0&lt;/span&gt;
&lt;span class="n"&gt;rootdir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\&lt;span class="n"&gt;Users&lt;/span&gt;\&lt;span class="n"&gt;Tommy&lt;/span&gt;\&lt;span class="n"&gt;pipenv&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;testing&lt;/span&gt;\&lt;span class="n"&gt;dateutil&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;testing&lt;/span&gt;\&lt;span class="n"&gt;dateutil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;inifile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;
&lt;span class="n"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hypothesis&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;4.24.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cov&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.7.1&lt;/span&gt;
&lt;span class="n"&gt;collected&lt;/span&gt; &lt;span class="mi"&gt;2073&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;

&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_easter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;....................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.......................................&lt;/span&gt;                                  &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_import_star&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;                                               &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_imports&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.......................&lt;/span&gt;                             &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_internals&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;....&lt;/span&gt;                                              &lt;span class="p"&gt;[&lt;/span&gt;  &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_isoparser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;......................................................................&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;.....................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;............&lt;/span&gt;&lt;span class="n"&gt;xx&lt;/span&gt;                                                           &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;....................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;39&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;46&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................&lt;/span&gt;&lt;span class="n"&gt;xxxxxxxxxxxxxsss&lt;/span&gt;&lt;span class="o"&gt;......&lt;/span&gt;                           &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_relativedelta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.............................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;....................................&lt;/span&gt;                                     &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;52&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_rrule&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.....................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;54&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;61&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;65&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;68&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;72&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;75&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.......................................................&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;79&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.....&lt;/span&gt;                                                                    &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;79&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_tz&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;............................&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;...........&lt;/span&gt;&lt;span class="n"&gt;ssssssssssssssss&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;81&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;ssssssssssssssssssssssssssssssss&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;............................&lt;/span&gt;&lt;span class="n"&gt;xxx&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;85&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;...................................&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;...........................&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;........&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;........................................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;92&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;....................................&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;....................&lt;/span&gt;&lt;span class="n"&gt;sssssssssss&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;95&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;ssss&lt;/span&gt;&lt;span class="o"&gt;....&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;..........&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;....................................................&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;....&lt;/span&gt;                                                                     &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="n"&gt;test_utils&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.......&lt;/span&gt;                                               &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="nb"&gt;property&lt;/span&gt;\&lt;span class="n"&gt;test_isoparse_prop&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;                                    &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;test&lt;/span&gt;\&lt;span class="nb"&gt;property&lt;/span&gt;\&lt;span class="n"&gt;test_parser_prop&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt;                                     &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="o"&gt;=============&lt;/span&gt; &lt;span class="mi"&gt;1976&lt;/span&gt; &lt;span class="n"&gt;passed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;76&lt;/span&gt; &lt;span class="n"&gt;skipped&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;21&lt;/span&gt; &lt;span class="n"&gt;xfailed&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;7.89&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;=============&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/dateutil-wheel-with-nuitka.html"/>
    <summary>This post compares the pytest results of dateutil to its nuitka-built
.whl counterpart.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="gsoc2019" label="gsoc2019"/>
    <published>2019-07-12T18:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/urllib3-wheel-with-nuitka.html</id>
    <title>Intro</title>
    <updated>2019-06-19T16:00:00+02:00</updated>
    <author>
      <name>Taofeng(Tommy) Li</name>
    </author>
    <content type="html">&lt;section id="intro"&gt;

&lt;p&gt;This post compares the pytest results of urllib3 to its nuitka-built
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.whl&lt;/span&gt;&lt;/code&gt; counterpart.&lt;/p&gt;
&lt;p&gt;Urllib3 standalone test have already been covered. Manual testing is now
done to compare the pytest results of a nuitka wheel built using
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;setup.py&lt;/span&gt; &lt;span class="pre"&gt;bdist_nuitka&lt;/span&gt;&lt;/code&gt; to the regular pytest of the urllib3
package. Testing is done to ensure that nuitka is building the wheel
correctly. If the pytests pass/fail in the same way, that means Nuitka
built the wheel properly. Else if the tests differ, then something is
wrong. Virtualenv is used to create a clean environment with no outside
pollution.&lt;/p&gt;
&lt;p&gt;At first, the urllib3 nuitka-wheel pytest was crashing because of the
unsafe assumption that imports will always exist (which is not the case
if exceptions are thrown). &lt;a class="reference external" href="https://github.com/Nuitka/Nuitka/issues/413"&gt;Issue 413&lt;/a&gt; was filed to record and
fix this bug.&lt;/p&gt;
&lt;p&gt;After the fixes, the pytests were ran again and the results were very
similar:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Regular&lt;/span&gt; &lt;span class="n"&gt;pytests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;======&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="n"&gt;failed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;836&lt;/span&gt; &lt;span class="n"&gt;passed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;456&lt;/span&gt; &lt;span class="n"&gt;skipped&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;113&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;47.54&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;=======&lt;/span&gt;
&lt;span class="n"&gt;Nuitka&lt;/span&gt; &lt;span class="n"&gt;wheel&lt;/span&gt; &lt;span class="n"&gt;pytests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;======&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;failed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;838&lt;/span&gt; &lt;span class="n"&gt;passed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;456&lt;/span&gt; &lt;span class="n"&gt;skipped&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;113&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="mf"&gt;47.59&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;=======&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The extra passes are suspicious and require more investigation into why
they happen. To make that easy, we are going to fully automate the
process and compare outputs with verbose pytest modes.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="steps-to-reproduce"&gt;
&lt;h1&gt;Steps to Reproduce&lt;/h1&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;Clone urllib3 and nuitka into a new folder&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inside the urllib3 folder, issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;pip&lt;/span&gt; &lt;span class="pre"&gt;install&lt;/span&gt; &lt;span class="pre"&gt;-r&lt;/span&gt;
&lt;span class="pre"&gt;dev-requirements.txt&lt;/span&gt;&lt;/code&gt; to install its requirements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;pytest&lt;/span&gt; &lt;span class="pre"&gt;--disable-warnings&lt;/span&gt;&lt;/code&gt;, this runs the regular
pytest for urllib3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Change into the nuitka folder and issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;setup.py&lt;/span&gt; &lt;span class="pre"&gt;develop&lt;/span&gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Change back into urllib3 and issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;setup.py&lt;/span&gt; &lt;span class="pre"&gt;bdist_nuitka&lt;/span&gt;&lt;/code&gt;
to build the urllib3 wheel using nuitka. The newly built wheel should
be found in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dist&lt;/span&gt;&lt;/code&gt; folder.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use pip to uninstall the existing urllib3, then issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;pip&lt;/span&gt;
&lt;span class="pre"&gt;install&lt;/span&gt;&lt;/code&gt; followed by the newly built &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.whl&lt;/span&gt;&lt;/code&gt; filename.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Issue &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;python&lt;/span&gt; &lt;span class="pre"&gt;-m&lt;/span&gt; &lt;span class="pre"&gt;pytest&lt;/span&gt; &lt;span class="pre"&gt;--disable-warnings&lt;/span&gt;&lt;/code&gt;, this runs the
nuitka-built wheel pytest for urllib3.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
&lt;section id="uncompile-python"&gt;
&lt;h1&gt;Uncompile Python&lt;/h1&gt;
&lt;p&gt;urllib3 regular pytest:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ python -m pytest --disable-warnings
============================= test session starts =============================
platform win32 -- Python 3.7.0, pytest-4.0.0, py-1.8.0, pluggy-0.11.0
rootdir: C:\Users\Tommy\pipenv-testing\urllib3-testing\urllib3, inifile: setup.cfg
plugins: timeout-1.3.1
collected 1295 items

test\test_collections.py ....................................s           [  2%]
test\test_compatibility.py ...                                           [  3%]
test\test_connection.py .....                                            [  3%]
test\test_connectionpool.py ............................................ [  6%]
...........................                                              [  8%]
test\test_exceptions.py .............                                    [  9%]
test\test_fields.py ...............                                      [ 11%]
test\test_filepost.py ...........                                        [ 11%]
test\test_no_ssl.py ..                                                   [ 12%]
test\test_poolmanager.py .........................                       [ 14%]
test\test_proxymanager.py ...                                            [ 14%]
test\test_queue_monkeypatch.py .                                         [ 14%]
test\test_response.py ..................sss............................. [ 18%]
...........                                                              [ 19%]
test\test_retry.py ..............................F.F.F..                 [ 21%]
test\test_ssl.py ...............................                         [ 24%]
test\test_util.py ...................................................... [ 28%]
........................................................................ [ 34%]
....................ss.s...s............................................ [ 39%]
............                                                             [ 40%]
test\test_wait.py ...ssssss                                              [ 41%]
test\contrib\test_pyopenssl.py sssssssssssssssssssssssssssssssssssssssss [ 44%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 49%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 55%]
ssssssssssssssssssss                                                     [ 57%]
test\contrib\test_pyopenssl_dependencies.py ss                           [ 57%]
test\contrib\test_securetransport.py sssssssssssssssssssssssssssssssssss [ 59%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 65%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 71%]
sssssssssssssssssss                                                      [ 72%]
test\contrib\test_socks.py ..................                            [ 73%]
test\with_dummyserver\test_chunked_transfer.py ........                  [ 74%]
test\with_dummyserver\test_connectionpool.py ........................... [ 76%]
.......................................                                  [ 79%]
test\with_dummyserver\test_https.py .....................s....s......... [ 82%]
.................................................Uncaught exception, closing connection.
........................................................................ [ 87%]
................................sssssssssssssssssssssssssssssssssss....  [ 93%]
test\with_dummyserver\test_no_ssl.py ..                                  [ 93%]
test\with_dummyserver\test_poolmanager.py ...............                [ 94%]
test\with_dummyserver\test_proxy_poolmanager.py ................         [ 95%]
test\with_dummyserver\test_socketlevel.py .............................. [ 98%]
......................                                                   [100%]
====== 3 failed, 836 passed, 456 skipped, 113 warnings in 47.54 seconds =======
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;section id="compiled-with-nuitka"&gt;
&lt;h1&gt;Compiled with Nuitka&lt;/h1&gt;
&lt;p&gt;nuitka wheel pytest:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ python -m pytest --disable-warnings
============================= test session starts =============================
platform win32 -- Python 3.7.0, pytest-4.0.0, py-1.8.0, pluggy-0.11.0
rootdir: C:\Users\Tommy\pipenv-testing\urllib3-testing\urllib3, inifile: setup.cfg
plugins: timeout-1.3.1
collected 1295 items

test\test_collections.py ....................................s           [  2%]
test\test_compatibility.py ...                                           [  3%]
test\test_connection.py .....                                            [  3%]
test\test_connectionpool.py ............................................ [  6%]
...........................                                              [  8%]
test\test_exceptions.py .............                                    [  9%]
test\test_fields.py ...............                                      [ 11%]
test\test_filepost.py ...........                                        [ 11%]
test\test_no_ssl.py .F                                                   [ 12%]
test\test_poolmanager.py .........................                       [ 14%]
test\test_proxymanager.py ...                                            [ 14%]
test\test_queue_monkeypatch.py .                                         [ 14%]
test\test_response.py ..................sss............................. [ 18%]
...........                                                              [ 19%]
test\test_retry.py .....................................                 [ 21%]
test\test_ssl.py ...............................                         [ 24%]
test\test_util.py ...................................................... [ 28%]
........................................................................ [ 34%]
....................ss.s...s............................................ [ 39%]
............                                                             [ 40%]
test\test_wait.py ...ssssss                                              [ 41%]
test\contrib\test_pyopenssl.py sssssssssssssssssssssssssssssssssssssssss [ 44%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 49%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 55%]
ssssssssssssssssssss                                                     [ 57%]
test\contrib\test_pyopenssl_dependencies.py ss                           [ 57%]
test\contrib\test_securetransport.py sssssssssssssssssssssssssssssssssss [ 59%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 65%]
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 71%]
sssssssssssssssssss                                                      [ 72%]
test\contrib\test_socks.py ..................                            [ 73%]
test\with_dummyserver\test_chunked_transfer.py ........                  [ 74%]
test\with_dummyserver\test_connectionpool.py ........................... [ 76%]
.......................................                                  [ 79%]
test\with_dummyserver\test_https.py .....................s....s......... [ 82%]
........................................................................ [ 87%]
................................sssssssssssssssssssssssssssssssssss....  [ 93%]
test\with_dummyserver\test_no_ssl.py ..                                  [ 93%]
test\with_dummyserver\test_poolmanager.py ...............                [ 94%]
test\with_dummyserver\test_proxy_poolmanager.py ................         [ 95%]
test\with_dummyserver\test_socketlevel.py .............................. [ 98%]
......................                                                   [100%]
====== 1 failed, 838 passed, 456 skipped, 113 warnings in 47.59 seconds =======
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/urllib3-wheel-with-nuitka.html"/>
    <summary>This post compares the pytest results of urllib3 to its nuitka-built
.whl counterpart.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="compiler" label="compiler"/>
    <category term="gsoc2019" label="gsoc2019"/>
    <published>2019-06-19T16:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/jorj-x-mckie.html</id>
    <title>Jorj X. McKie</title>
    <updated>2019-05-18T11:00:00+02:00</updated>
    <author>
      <name>Jorj X. McKie</name>
    </author>
    <content type="html">&lt;p&gt;Self-Introduction Jorj McKie&lt;/p&gt;
&lt;section id="jorj-x-mckie"&gt;

&lt;p&gt;Hello everyone,&lt;/p&gt;
&lt;p&gt;I am Jorj X. McKie (this is &lt;strong&gt;not&lt;/strong&gt; my real name!) and I am an
enthusiastic supporter of Nuitka. For the time being, my focus area
within this package is standalone compilation and maintenance of the
plugin feature.&lt;/p&gt;
&lt;p&gt;Apart from extending Nuitka’s support to virtually all Python packages
living out there, my driving motivation in this respect is keeping up
and improving the usability of Nuitka.&lt;/p&gt;
&lt;p&gt;You may want to look into the &lt;a class="reference external" href="https://github.com/Nuitka/NUITKA-Utilities"&gt;Nuitka Utilities&lt;/a&gt; repository, which
contains many things I am working on.&lt;/p&gt;
&lt;dl class="py class"&gt;
&lt;dt class="sig sig-object py"&gt;
&lt;span class="sig-name descname"&gt;&lt;span class="pre"&gt;alert&lt;/span&gt; &lt;span class="pre"&gt;alert-primary&lt;/span&gt; &lt;span class="pre"&gt;float-md-right&lt;/span&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;img alt="https://nuitka.net/_images/jorjmckie-harald-lieder.jpg" src="https://nuitka.net/_images/jorjmckie-harald-lieder.jpg" /&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;section id="short-biography"&gt;
&lt;h2&gt;Short Biography&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Born 1951 as Harald Lieder near the city of Leipzig&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Studied Mathematics and Physics at the Frankfurt/M
Johann-Wolfgang-Goethe University from 10/1970 through 06/1976
(Diploma in Mathematics)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;dl class="simple"&gt;
&lt;dt&gt;Professional career overview&lt;/dt&gt;&lt;dd&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;insurance company (4 years): application and systems
programming (IBM mainframe, Cobol, Assembler), data center lead&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;book wholesaler (5 years): systems programming and data center
lead (IBM mainframe)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;consulting company (until 2009): leading of or participating in
numerous large and &lt;strong&gt;very&lt;/strong&gt; large projects mostly around
banking applications, banking mergers, data center optimization
and quality assurance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;since 2009: retirement, living on Isla Margarita, Venezuela.
Enjoying my beautiful house, pursuing my hobbies: mathematics,
science theory, biological evolution theory, science fiction
(my pseudonym comes from novels by one of my favorite authors
Frank Herbert) and of course programming (maintainer of
&lt;a class="reference external" href="https://github.com/pymupdf/PyMuPDF"&gt;PyMuPDF&lt;/a&gt;, and Nuitka).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="images-from-isla-margarita"&gt;
&lt;h2&gt;Images from Isla Margarita&lt;/h2&gt;
&lt;section id="house-frontview-with-guardians"&gt;
&lt;h3&gt;House Frontview with Guardians&lt;/h3&gt;
&lt;img alt="https://nuitka.net/_images/JMK-house-frontview-with-guardians.jpg" src="https://nuitka.net/_images/JMK-house-frontview-with-guardians.jpg" /&gt;
&lt;/section&gt;
&lt;section id="in-favorite-pizzeria-with-my-wife"&gt;
&lt;h3&gt;In favorite Pizzeria with my Wife&lt;/h3&gt;
&lt;img alt="https://nuitka.net/_images/JMK-in-favorite-pizzeria-with-my-wife.jpg" src="https://nuitka.net/_images/JMK-in-favorite-pizzeria-with-my-wife.jpg" /&gt;
&lt;/section&gt;
&lt;section id="seaview-from-my-terrace"&gt;
&lt;h3&gt;Seaview from my Terrace&lt;/h3&gt;
&lt;img alt="https://nuitka.net/_images/JMK-seaview-from-my-terrace.JPG" src="https://nuitka.net/_images/JMK-seaview-from-my-terrace.JPG" /&gt;
&lt;/section&gt;
&lt;section id="sunrise-view-from-house"&gt;
&lt;h3&gt;Sunrise view from House&lt;/h3&gt;
&lt;img alt="https://nuitka.net/_images/JMK-sunrise-view-from-house.jpg" src="https://nuitka.net/_images/JMK-sunrise-view-from-house.jpg" /&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/jorj-x-mckie.html"/>
    <summary>Self-Introduction Jorj McKie</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="gsoc2019" label="gsoc2019"/>
    <category term="portrait" label="portrait"/>
    <published>2019-05-18T11:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/tommy-gsoc-intro.html</id>
    <title>Tommy’s Google Summer of Code Intro</title>
    <updated>2019-05-15T10:00:00+02:00</updated>
    <author>
      <name>Taofeng(Tommy) Li</name>
    </author>
    <content type="html">&lt;section id="tommy-s-google-summer-of-code-intro"&gt;

&lt;p&gt;Hi all! :)&lt;/p&gt;
&lt;p&gt;My name is Taofeng Li and I go by the nickname of Tommy, github handle
&lt;a class="reference external" href="https://github.com/tommyli3318"&gt;tommyli3318&lt;/a&gt;. I’m a Computer Science
major at the University of California, Irvine in the United States. I am
very excited to announce that I’ll be contributing to Nuitka this summer
under the Google Summer of Code program!&lt;/p&gt;
&lt;p&gt;My project is “Nuitka support for PyPI top 50”, it ensures Nuitka’s
compatibility with the 50 most popular PyPI packages by setting up
automated testing for each package. These automated tests will serve to
be very important tools for the development of Nuitka, as they will be
used to assure Nuitka’s compatibility with the most used Python packages
every time Nuitka receives a new update.&lt;/p&gt;
&lt;p&gt;My mentors will be Vaibhav Tulsyan, Kamran Ghanaat, and Kay Hayen. My
project abstract can be seen &lt;a class="reference external" href="https://summerofcode.withgoogle.com/projects/#4874692681269248"&gt;here&lt;/a&gt; and
the full details of my project can be found &lt;a class="reference external" href="https://docs.google.com/document/d/1tdbXyMy5xjVEeWociI_t2f6tlmge6czT0xmfCLyDXYg/edit?usp=sharing"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I am greatly looking forward to the many things that I’ll learn this
summer!&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/tommy-gsoc-intro.html"/>
    <summary>Hi all! :)</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="gsoc2019" label="gsoc2019"/>
    <category term="portrait" label="portrait"/>
    <category term="standalone" label="standalone"/>
    <category term="tests" label="tests"/>
    <published>2019-05-15T10:00:00+02:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/batakrishna-sahu-intro.html</id>
    <title>Batakrishna Sahu</title>
    <updated>2019-05-14T08:31:00+02:00</updated>
    <author>
      <name>Batakrishna Sahu</name>
    </author>
    <content type="html">&lt;section id="batakrishna-sahu"&gt;

&lt;p&gt;Hello everyone!&lt;/p&gt;
&lt;p&gt;My name is Batakrishna Sahu and I am from India. I’m very grateful to be
one of the 2 selected students who will work with Nuitka during Google
Summer of Code 2019. My project is on &lt;a class="reference external" href="https://summerofcode.withgoogle.com/projects/#6183147857772544"&gt;“Optimizing Python 2 and Python 3
built-ins for Nuitka”&lt;/a&gt;
mentored by Vaibhav Tulsyan, Kamran Ghanaat, Kay Hayen.&lt;/p&gt;
&lt;p&gt;So far, ​there are a total of 69 built-ins in Python 3 and ​76 built-in
in Python 2 out of which 27 built-ins are yet to be optimized in
Nuitka​. My aim is to optimize those missing built-ins in Nuitka. This
will make Nuitka a lot faster while working with built-ins.&lt;/p&gt;
&lt;p&gt;I’m really excited to gain new experience while working on this project
this summer.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Batakrishna&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/batakrishna-sahu-intro.html"/>
    <summary>Hello everyone!</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="gsoc2019" label="gsoc2019"/>
    <category term="portrait" label="portrait"/>
    <published>2019-05-14T08:31:00+02:00</published>
  </entry>
</feed>
