Skip to content

Commit

Permalink
Merge pull request #225 from Quansight-Labs/gsoc-2020-ideas-update
Browse files Browse the repository at this point in the history
Update GSoC 2020 Ideas Page
  • Loading branch information
rgommers committed Jan 29, 2020
2 parents 39c49b6 + f193a00 commit 074b89a
Showing 1 changed file with 45 additions and 13 deletions.
58 changes: 45 additions & 13 deletions docs/gsoc/2020/ideas.rst
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,21 @@ Contact
-------

If you have a question *after checking all guideline pages above*, you can
open an issue in the issue tracker.
open an issue in the issue tracker, but feel free to
`chat with us on Gitter <https://gitter.im/Plures/uarray>`_ if you need
clarification regarding any of the projects. Keep in mind that you might not
get a response right away, but we will endeavour to respond as early as possible.


``uarray`` project ideas
------------------------

``uarray``: Add querying for state
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Adding querying for the ``uarray._BackendState`` object will allow users of
``uarray`` to see what's inside the opaque object. Some parts can be re-used
from the pickling machinery.
Adding querying for the `uarray._BackendState <https://github.com/Quansight-Labs/uarray/blob/39c49b6efe6817b46af9c6702e6aa0264b89bcf5/uarray/_uarray_dispatch.cxx#L188>`_
object will allow users of ``uarray`` to see what's inside the opaque object.
Some parts can be re-used from the `pickling machinery <https://github.com/Quansight-Labs/uarray/blob/39c49b6efe6817b46af9c6702e6aa0264b89bcf5/uarray/_uarray_dispatch.cxx#L210>`_.

It can also help downstream users to access the parameters of the currently
set backend, which is a planned feature of ``uarray``. Here is a list of goals
Expand All @@ -71,7 +75,10 @@ This would enable, for example, the following use-cases:
* Allow a downstream library to fail-fast on a known-unsupported backend.

This project has a straightforward design and needs some implementation work,
and will require interacting with the mentors to implement and polish.
and will require interacting with the mentors to implement and polish. The accepted
student will get an outline of the desired API, along with some failing tests and
doctests. The student will make a pull request to implement the desired functionality
so that the tests pass.

* Required knowledge: Python C-API and C++
* Difficulty level: medium
Expand Down Expand Up @@ -116,28 +123,53 @@ This project is split into two parts:
* Adding more backends to ``unumpy``.

We realise this is a large (possibly open-ended) undertaking, and so there
will need to be a minimum amount of work done in order to pass (~150 functions,
if time allows a JAX backend).
will need to be a minimum amount of work done in order to pass (~150 function stubs,
if time allows a `JAX <https://jax.readthedocs.io/en/latest/>`_ backend). You may
see the existing methods and figure out how they are written using a combination
of the `documentation for writing multimethods <https://uarray.readthedocs.io/en/latest/multimethod_docs.html>`_
and the `already existing multimethods in this file <https://github.com/Quansight-Labs/unumpy/blob/30c4afde16fbbb231cbc1e20d28cf5f0a8527285/unumpy/_multimethods.py>`_.
For writing backends, you can see the `documentation for backends <https://uarray.readthedocs.io/en/latest/libauthor_docs.html>`_
in combination with the already existing backends in `this directory <https://github.com/Quansight-Labs/unumpy/tree/30c4afde16fbbb231cbc1e20d28cf5f0a8527285/unumpy>`_.

* Required knowledge: Python (intermediate level)
* Difficulty level: easy
* Potential mentors: Prasun Anand and Hameer Abbasi

``udiff``: Completion and Packaging
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This requires completion and packaging of the ``udiff`` library. Potential
This requires completion and packaging of the `udiff <https://github.com/Quansight-Labs/udiff>`_ library. Potential
goals include:

1. Publishing an initial version to PyPI.
1. Publishing an initial version to PyPI. Here's a `guide <https://realpython.com/pypi-publish-python-package/>`_
on how to do that.
2. Adding matrix/tensor calculus support.

* For this, you can see the `matrix cookbook <https://www.math.uwaterloo.ca/~hwolkowi/matrixcookbook.pdf>`_.
Don't be intimidated! There will only be five or so equations you have to
pull out of the matrix cookbook and implement, most prominently, the
equation for matrix multiplication.
* `Here <https://github.com/Quansight-Labs/udiff/blob/40975788639c2c93ebfb96c44a07d8ab01fbcbad/udiff/_builtin_diffs.py>`_
is how derivatives are registered.
* The second task here will be to add the "separation" between the data
dimensions and the differentiation dimensions. For example, the input
could be a vector, or an array of scalars, and this might need to be
taken into account when doing the differentiation. That will require
some work in `this file <https://github.com/Quansight-Labs/udiff/blob/40975788639c2c93ebfb96c44a07d8ab01fbcbad/udiff/_diff_array.py>`_,
and possibly `this one as well <https://github.com/Quansight-Labs/udiff/blob/40975788639c2c93ebfb96c44a07d8ab01fbcbad/udiff/_diff_array.py>`_.

3. Adding tests.
4. Adding documentation on use.

* This will require calculating a few derivatives by hand and making sure
they match up with what ``udiff`` computes.
* We will use the `PyTest framework <https://docs.pytest.org/en/latest/>`_.

4. Adding documentation on use, which will be fairly minimal. We will learn to
set up `Sphinx <http://www.sphinx-doc.org/en/master/>`_, and add some documentation.
5. Publishing a final version to PyPI.

This project has a somewhat some minimal design and needs some involved
implementation work, and will require interacting with the mentors to flesh
out and work through.
implementation work. It will allow the accepted student to get an idea of
what it's like to actually publish, test and document a small Python package.

* Required knowledge: Python (intermediate level) and calculus
* Difficulty level: medium
Expand Down

0 comments on commit 074b89a

Please sign in to comment.