<?xml version="1.0" encoding="utf-8"?> 
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-us">
    <generator uri="https://gohugo.io/" version="0.152.2">Hugo</generator><title type="html"><![CDATA[Developer-in-Residence on Blog]]></title>
    
    
    
            <link href="https://blog.scientific-python.org/tags/developer-in-residence/" rel="alternate" type="text/html" title="html" />
            <link href="https://blog.scientific-python.org/tags/developer-in-residence/atom.xml" rel="self" type="application/atom" title="atom" />
    <updated>2026-04-04T04:32:36+00:00</updated>
    
    
    
    
        <id>https://blog.scientific-python.org/tags/developer-in-residence/</id>
    
        
        <entry>
            <title type="html"><![CDATA[A Year of Typing: My NumPy Fellowship Retrospective]]></title>
            <link href="https://blog.scientific-python.org/numpy/fellowship-program-2025-retrospective/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://blog.scientific-python.org/numpy/fellowship-program-2025/?utm_source=atom_feed" rel="related" type="text/html" title="NumPy&#39;s Second Developer in Residence: Joren Hammudoglu" />
                <link href="https://blog.scientific-python.org/numpy/fellowship-program/?utm_source=atom_feed" rel="related" type="text/html" title="NumPy&#39;s first Developer in Residence: Sayed Adel" />
                <link href="https://blog.scientific-python.org/numpy/numpy2/?utm_source=atom_feed" rel="related" type="text/html" title="NumPy 2.0: an evolutionary milestone" />
                <link href="https://blog.scientific-python.org/numpy/numpy-rng/?utm_source=atom_feed" rel="related" type="text/html" title="Best Practices for Using NumPy&#39;s Random Number Generators" />
                <link href="https://blog.scientific-python.org/numpy/mukulikapahari/?utm_source=atom_feed" rel="related" type="text/html" title="NumPy Contributor Spotlight: Mukulika Pahari" />
            
                <id>https://blog.scientific-python.org/numpy/fellowship-program-2025-retrospective/</id>
            
            
            <published>2026-01-08T00:00:00+00:00</published>
            <updated>2026-01-08T00:00:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<blockquote>A Year of Typing: My NumPy Fellowship Retrospective</blockquote><p>It’s been exactly one year since I started my journey as a NumPy Fellow, and looking back, it has honestly been the best job I&rsquo;ve ever had. My main goal for 2025 was to push the boundaries of static typing within the Scientific Python ecosystem. I&rsquo;m happy to report that we didn&rsquo;t just push the boundaries; we reshaped them.</p>
<p>Here is a high-level look at what we achieved, from making <code>numpy</code> fully type-checked to bridging the gap between scientific computing and the wider Python typing community.</p>
<h2 id="numpy-is-now-fully-type-checked">NumPy is Now Fully Type-Checked<a class="headerlink" href="#numpy-is-now-fully-type-checked" title="Link to this heading">#</a></h2>
<p>One of the biggest wins this year is that NumPy is now fully type-checked. When I started, there were significant gaps between the runtime behavior and the typing stubs.</p>
<p>For example, I spent a lot of time integrating <code>stubtest</code> — a <a href="https://github.com/python/mypy">mypy</a> tool that checks if stubs match the runtime — into the CI pipeline. For this I had to fix thousands (yes, thousands) of errors in the stubs. Now typing correctness is enforced by running <code>stubtest</code> and <code>mypy</code> on the stubs in CI, ensuring that technical debt doesn&rsquo;t creep back in.</p>
<p>Crucially, NumPy is now largely compatible with the official <a href="https://typing.python.org/en/latest/">Python typing specification</a>. I helped drop support for Python 3.11 to update our stubs to use the modern PEP 695 syntax, making the codebase cleaner and more future-proof.</p>
<p>Besides static typing, since NumPy 2.4.0, all function- and class-signatures can now also be inspected at runtime using <code>inspect.signature</code>. This is a game-changer for runtime type-checkers like <a href="https://github.com/beartype/beartype">beartype</a> and <a href="https://github.com/agronholm/typeguard">typeguard</a>.</p>
<p>Over the past year I&rsquo;ve made <a href="https://github.com/numpy/numpy/pulls?q=is%3Apr&#43;author%3Ajorenham&#43;created%3A2025-01-01..2025-12-31&#43;is%3Amerged">hundreds of contributions</a> to NumPy, so there&rsquo;s a good chance I&rsquo;m forgetting some important achievements.</p>
<h2 id="the-shape-typing-frontier-numtype">The Shape-Typing Frontier: NumType<a class="headerlink" href="#the-shape-typing-frontier-numtype" title="Link to this heading">#</a></h2>
<p>A massive part of my fellowship was dedicated to the &ldquo;holy grail&rdquo; of array typing: shape-typing. For this I had to rely on type-checker behavior that isn&rsquo;t well-specified, and therefore subject to change. Using these typing acrobatics in NumPy would be too risky, so we decided to create a new project for this, called <a href="https://github.com/numpy/numtype">NumType</a>.</p>
<p>When NumType is installed, your static type-checker will use its <code>.pyi</code> stubs instead of those bundled with NumPy. There are three main advantages to this:</p>
<ol>
<li>Improved ufunc annotations.</li>
<li>Full support of the <a href="https://numpy.org/neps/nep-0050-scalar-promotion.html">NEP 50</a> promotion rules for all scalars, exhaustively verified to be 100% accurate.</li>
<li>Experimental shape-typing with automatic static broadcasting types.</li>
</ol>
<p>The &ldquo;magic&rdquo; types that enable the dtype promotion and shape-type broadcasting are currently only accessible from the private type-check-only <code>_numtype</code> API. But the plan is to eventually make these part of the public <code>numtype</code> API.</p>
<p>But before you drop everything to install NumType, note that it&rsquo;s currently in alpha, so there&rsquo;s no backwards-compatibility guarantee. However, if you <em>do</em> decide to use it and encounter an issue, be sure to complain about it in high definition at <a href="https://github.com/numpy/numtype/issues">https://github.com/numpy/numtype/issues</a> :)</p>
<h2 id="strengthening-the-ecosystem-scipy-stubs-and-beyond">Strengthening the Ecosystem: <code>scipy-stubs</code> and Beyond<a class="headerlink" href="#strengthening-the-ecosystem-scipy-stubs-and-beyond" title="Link to this heading">#</a></h2>
<p>Typing NumPy is useless if the libraries built <em>on top</em> of it aren&rsquo;t typed. A significant portion of my time went into <code>scipy-stubs</code>.</p>
<ul>
<li>We transferred ownership of <a href="https://github.com/scipy/scipy-stubs/"><code>scipy-stubs</code></a> — which started as <code>jorenham/scipy-stubs</code> — to the official SciPy organization.</li>
<li><code>scipy-stubs</code> now covers the full SciPy API, and only uses <code>Any</code> when absolutely necessary.</li>
<li>It has grown massively — it now contains over 72,000 lines of code (according to <a href="https://github.com/boyter/scc"><code>scc</code></a>), making it the largest hand-written stubs-only Python package; even if you include <code>typeshed</code>&rsquo;s standard library stubs (which currently counts 69,439 lines of code).</li>
<li>We added runtime support for the generic types, including the sparse arrays, probability distributions, and interpolation classes.</li>
<li>I helped large libraries such as <a href="https://github.com/pandas-dev/pandas"><code>pandas</code></a>, <a href="https://github.com/jax-ml/jax"><code>jax</code></a>, <a href="https://github.com/colour-science/colour"><code>colour</code></a>, and <a href="https://github.com/apache/spark"><code>pyspark</code></a> adopt <code>scipy-stubs</code>.</li>
</ul>
<p>I also made sure to spread the love to other corners of the ecosystem by adding typing support to <a href="https://github.com/numpy/numpy-financial"><code>numpy-financial</code></a>, <a href="https://github.com/wolph/numpy-stl"><code>numpy-stl</code></a>, <a href="https://pypi.org/project/numpy-quaddtype/"><code>numpy-quaddtype</code></a>, <a href="https://github.com/pydata/numexpr"><code>numexpr</code></a>, and <a href="https://github.com/joblib/threadpoolctl"><code>threadpoolctl</code></a>.</p>
<h2 id="bridging-communities">Bridging Communities<a class="headerlink" href="#bridging-communities" title="Link to this heading">#</a></h2>
<p>Perhaps the achievement I&rsquo;m most proud of is the collaboration with the type-checker maintainers. Scientific Python has complex needs that often stretch the limits of Python&rsquo;s type system.</p>
<p>Throughout the year, I discovered and investigated bugs in all five major type-checkers: <a href="https://github.com/python/mypy"><code>mypy</code></a>, <a href="https://github.com/microsoft/pyright"><code>pyright</code></a>, <a href="https://github.com/DetachHead/basedpyright"><code>basedpyright</code></a>, <a href="https://github.com/facebook/pyrefly"><code>pyrefly</code></a>, and <a href="https://github.com/astral-sh/ty"><code>ty</code></a>. <a href="https://github.com/python/mypy/pulls?q=is%3Apr&#43;author%3Ajorenham&#43;created%3A2025-01-01..2025-12-31">Some</a> of the <code>mypy</code> bugs I even managed to fix myself. We fixed critical bugs affecting NumPy users and improved analysis times.</p>
<p>I feel that this work has brought the Scientific Python community much closer to the Python Typing community. I&rsquo;m incredibly grateful to the maintainers of these tools for their responsiveness and willingness to collaborate.</p>
<h2 id="wrapping-up">Wrapping Up<a class="headerlink" href="#wrapping-up" title="Link to this heading">#</a></h2>
<p>This fellowship has been an absolute privilege, and I feel like I&rsquo;ve made the most out of it. If you want to dive into the nitty-gritty details, you can find all of my activity on my GitHub profile (<a href="https://github.com/jorenham"><code>@jorenham</code></a>), but for now, I&rsquo;m just happy to have made those squiggly lines a bit more meaningful.</p>
<p>Thanks to everyone who made this possible, and type safe!</p>
]]></content>
            
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="taxonomy:Tags" term="numpy" label="numpy" />
                             
                                <category scheme="taxonomy:Tags" term="developer-in-residence" label="developer-in-residence" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[NumPy's Second Developer in Residence: Joren Hammudoglu]]></title>
            <link href="https://blog.scientific-python.org/numpy/fellowship-program-2025/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://blog.scientific-python.org/numpy/fellowship-program/?utm_source=atom_feed" rel="related" type="text/html" title="NumPy&#39;s first Developer in Residence: Sayed Adel" />
                <link href="https://blog.scientific-python.org/numpy/numpy2/?utm_source=atom_feed" rel="related" type="text/html" title="NumPy 2.0: an evolutionary milestone" />
                <link href="https://blog.scientific-python.org/numpy/numpy-rng/?utm_source=atom_feed" rel="related" type="text/html" title="Best Practices for Using NumPy&#39;s Random Number Generators" />
                <link href="https://blog.scientific-python.org/numpy/mukulikapahari/?utm_source=atom_feed" rel="related" type="text/html" title="NumPy Contributor Spotlight: Mukulika Pahari" />
            
                <id>https://blog.scientific-python.org/numpy/fellowship-program-2025/</id>
            
            
            <published>2025-01-01T00:00:00+00:00</published>
            <updated>2025-01-01T00:00:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<blockquote>Introducing NumPy&rsquo;s second developer in residence, Joren Hammudoglu.</blockquote><p>The NumPy team is excited to announce the appointment of Joren Hammudoglu (@jorenham) as the second NumPy Developer in Residence. For the second time, the project is in a position to use its project funds to pay for a full year of maintainer time through the NumPy Fellowship Program.</p>
<p>Joren has been the driving force behind the improvements in NumPy&rsquo;s support for static typing since he started contributing in mid-2024. He has authored a lot of the improvements — from the annotations themselves to CI support and working towards fundamental design improvements like ndarray shape typing — and helps guide and integrate the work of other NumPy contributors in this area, and engages with upstream projects like MyPy and Pyright and the typing standards/PEP process to help move static typing support for the ecosystem as a whole forward. He also contributes widely to static typing support in the ecosystem, as the author of <code>scipy-stubs</code>, <code>numtype</code> and more.</p>
<p>The NumPy Steering Council sees Joren’s appointment to this role as both recognition of his contributions and expertise as well as an opportunity to continue improving NumPy’s static typing support — an area that few maintainers are knowledgeable about but a significant fraction of end users tends to care about a lot.</p>
<p>Joren&rsquo;s role is for the calendar year 2025. Thanks to individual and corporate donations, as well as payments from Tidelift, NumPy has been able to fund another full-time position for one year, following the first such role held by Sayed Adel in 2023. The funds are still <a href="https://numpy.org/neps/nep-0048-spending-project-funds.html">transparently administered</a> on Open Collective.</p>
<p>Welcome aboard, Joren! We&rsquo;re excited to see the impact of your work.</p>
]]></content>
            
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="taxonomy:Tags" term="numpy" label="numpy" />
                             
                                <category scheme="taxonomy:Tags" term="developer-in-residence" label="developer-in-residence" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[NumPy's first Developer in Residence: Sayed Adel]]></title>
            <link href="https://blog.scientific-python.org/numpy/fellowship-program/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://blog.scientific-python.org/numpy/mukulikapahari/?utm_source=atom_feed" rel="related" type="text/html" title="NumPy Contributor Spotlight: Mukulika Pahari" />
            
                <id>https://blog.scientific-python.org/numpy/fellowship-program/</id>
            
            
            <published>2022-12-01T00:00:00+00:00</published>
            <updated>2022-12-01T00:00:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<blockquote>Introducing the NumPy Fellowship Program and our first
Developer in Residence, Sayed Adel, who will be working on performance
optimization.</blockquote><p>The NumPy team is excited to announce the launch of the NumPy Fellowship
Program and the appointment of Sayed Adel
(<a href="https://github.com/seiko2plus">@seiko2plus</a>) as the first NumPy
Developer in Residence. This is a significant milestone in the history
of the project: for the first time, NumPy is in a position to use its
project funds to pay for a full year of maintainer time. We believe that
this will be an impactful program that will contribute to NumPy&rsquo;s
long-term sustainability as a community-driven open source project.</p>
<p>Sayed has been making major contributions to NumPy
since the start of 2020, in particular around computational performance.
He is the main author of the NumPy SIMD architecture (<a href="https://numpy.org/neps/nep-0038-SIMD-optimizations.html"><em>NEP
38</em></a>,
<a href="https://numpy.org/devdocs/reference/simd/index.html"><em>docs</em></a>),
generously shared his knowledge of SIMD instructions with the core
developer team, and helped integrate the work of various volunteer and
industry contributors in this area. As a result, we&rsquo;ve been able to
expand support to multiple CPU architectures, integrating contributions
from IBM, Intel, Apple, and others, none of which would have been
possible without Sayed. Furthermore, when NumPy tentatively started
using C++ in 2021, Sayed was one of the proponents of the move and
helped with its implementation.</p>
<p>The NumPy Steering Council sees Sayed&rsquo;s appointment to this role as both
recognition of his past outstanding contributions as well as an
opportunity to continue improving NumPy&rsquo;s computational performance. In
the next 12 months, we&rsquo;d like to see Sayed focus on the following:</p>
<ul>
<li>SIMD code maintenance,</li>
<li>code review of SIMD contributions from others,</li>
<li>performance-related features,</li>
<li>sharing SIMD and C++ expertise with the team and growing a NumPy
sub-team around it,</li>
<li>SIMD build system migration to Meson,</li>
<li>and wherever else Sayed&rsquo;s interests take him.</li>
</ul>
<blockquote>
<p><em>&ldquo;I&rsquo;m both happy and nervous: this is a great opportunity, but also a
great responsibility,&rdquo; said Sayed in response to his appointment.</em></p>
</blockquote>
<p>The funds for the NumPy Fellowship Program come from a partnership with
Tidelift and from individual donations. We sincerely thank both
Tidelift and everyone who donated to the project&mdash;without you, this
program would not be possible! We also acknowledge the CPython
Developer-in-Residence and the Django Fellowship programs, which
served as inspiration for this program.</p>
<p>Sayed officially starts as the NumPy Developer in Residence today, 1
December 2022. Already, we are thinking about opportunities beyond
this first year: we imagine &ldquo;in residence&rdquo; roles that focus on
developing, improving, and maintaining other parts of the NumPy
project (e.g., documentation, website, translations, contributor
experience, etc.). We look forward to this exciting new chapter of the
NumPy contributor community and will keep you posted on our progress.</p>
]]></content>
            
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="taxonomy:Tags" term="numpy" label="numpy" />
                             
                                <category scheme="taxonomy:Tags" term="developer-in-residence" label="developer-in-residence" />
                            
                        
                    
                
            
        </entry>
    
</feed>
