Skip to content

Commit

Permalink
Merge pull request #40 from artemisart/doc
Browse files Browse the repository at this point in the history
Documentation + some fixes
  • Loading branch information
howiezhao committed Apr 25, 2020
2 parents 9958f1f + 5bd759a commit d8c21ab
Show file tree
Hide file tree
Showing 14 changed files with 623 additions and 327 deletions.
524 changes: 263 additions & 261 deletions README.rst

Large diffs are not rendered by default.

23 changes: 23 additions & 0 deletions docs/Makefile
@@ -0,0 +1,23 @@
# Minimal makefile for Sphinx documentation
#

# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = source
BUILDDIR = build

# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

apidoc:
sphinx-apidoc -o source ../fn --force --module-first

.PHONY: help Makefile

# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
35 changes: 35 additions & 0 deletions docs/make.bat
@@ -0,0 +1,35 @@
@ECHO OFF

pushd %~dp0

REM Command file for Sphinx documentation

if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=source
set BUILDDIR=build

if "%1" == "" goto help

%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.http://sphinx-doc.org/
exit /b 1
)

%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end

:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%

:end
popd
76 changes: 76 additions & 0 deletions docs/source/conf.py
@@ -0,0 +1,76 @@
# Configuration file for the Sphinx documentation builder.
#
# This file only contains a selection of the most common options. For a full
# list see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html

# -- Path setup --------------------------------------------------------------

# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
# import os
# import sys
# sys.path.insert(0, os.path.abspath('..'))

# -- Project information -----------------------------------------------------

project = 'fn.py'
copyright = '2020, fnpy'
author = 'fn.py Contributors'

# The full version, including alpha/beta/rc tags
release = '0.5.2'


# -- General configuration ---------------------------------------------------

# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.autosectionlabel',
'sphinx.ext.autosummary',
'sphinx.ext.doctest',
'sphinx.ext.intersphinx',
'sphinx.ext.todo',
'sphinx.ext.coverage',
'sphinx.ext.napoleon',
'sphinx.ext.viewcode',
]

# autosectionlabel throws warnings if section names are duplicated.
# The following tells autosectionlabel to not throw a warning for
# duplicated section names that are in different documents.
autosectionlabel_prefix_document = True

# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']

# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = []


# -- Options for HTML output -------------------------------------------------

# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = 'alabaster'

# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']


# -- Extension configuration -------------------------------------------------

# -- Options for todo extension ----------------------------------------------

# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = True
43 changes: 43 additions & 0 deletions docs/source/fn.immutable.rst
@@ -0,0 +1,43 @@
fn.immutable package
====================

.. automodule:: fn.immutable
:members:
:undoc-members:
:show-inheritance:

Submodules
----------

fn.immutable.finger module
--------------------------

.. automodule:: fn.immutable.finger
:members:
:undoc-members:
:show-inheritance:

fn.immutable.heap module
------------------------

.. automodule:: fn.immutable.heap
:members:
:undoc-members:
:show-inheritance:

fn.immutable.list module
------------------------

.. automodule:: fn.immutable.list
:members:
:undoc-members:
:show-inheritance:

fn.immutable.trie module
------------------------

.. automodule:: fn.immutable.trie
:members:
:undoc-members:
:show-inheritance:

82 changes: 82 additions & 0 deletions docs/source/fn.rst
@@ -0,0 +1,82 @@
fn package
==========

.. automodule:: fn
:members:
:undoc-members:
:show-inheritance:

Subpackages
-----------

.. toctree::

fn.immutable

Submodules
----------

fn.func module
--------------

.. automodule:: fn.func
:members:
:undoc-members:
:show-inheritance:

fn.iters module
---------------

.. automodule:: fn.iters
:members:
:undoc-members:
:show-inheritance:

fn.monad module
---------------

.. automodule:: fn.monad
:members:
:undoc-members:
:show-inheritance:

fn.op module
------------

.. automodule:: fn.op
:members:
:undoc-members:
:show-inheritance:

fn.recur module
---------------

.. automodule:: fn.recur
:members:
:undoc-members:
:show-inheritance:

fn.stream module
----------------

.. automodule:: fn.stream
:members:
:undoc-members:
:show-inheritance:

fn.underscore module
--------------------

.. automodule:: fn.underscore
:members:
:undoc-members:
:show-inheritance:

fn.uniform module
-----------------

.. automodule:: fn.uniform
:members:
:undoc-members:
:show-inheritance:

15 changes: 15 additions & 0 deletions docs/source/index.rst
@@ -0,0 +1,15 @@
fn.py documentation
===================

.. toctree::
:maxdepth: 4
:caption: Contents:

fn

Indices and tables
==================

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
7 changes: 7 additions & 0 deletions docs/source/modules.rst
@@ -0,0 +1,7 @@
fn
==

.. toctree::
:maxdepth: 4

fn
2 changes: 1 addition & 1 deletion fn/__init__.py
Expand Up @@ -4,4 +4,4 @@

__version__ = "0.5.2"

__all__ = [F, Stream, _]
__all__ = ["F", "Stream", "_"]
11 changes: 9 additions & 2 deletions fn/immutable/__init__.py
Expand Up @@ -9,6 +9,13 @@


__all__ = [
Deque, PairingHeap, SkewHeap, LinkedList, LinkedList, Queue, Stack,
Vector, ListDeque
"Deque",
"PairingHeap",
"SkewHeap",
"LinkedList",
"LinkedList",
"Queue",
"Stack",
"Vector",
"ListDeque",
]
20 changes: 11 additions & 9 deletions fn/immutable/heap.py
Expand Up @@ -40,11 +40,12 @@ class SkewHeap(_MergeBased):
done in O(log n).
Skew heaps may be described with the following recursive definition:
* a heap with only one element is a skew heap
* the result of skew merging two skew heaps is also a skew heap
* a heap with only one element is a skew heap
* the result of skew merging two skew heaps is also a skew heap
In Haskell type definition it should looks like following:
data Skew a = Empty | Node a (Skew a) (Skew a)
In Haskell type definition it should looks like following::
data Skew a = Empty | Node a (Skew a) (Skew a)
More information on Wikipedia:
[1] http://en.wikipedia.org/wiki/Skew_heap
Expand Down Expand Up @@ -91,7 +92,7 @@ def extract(self):
* minimum (or maximum regarding to given compare function)
* new skew heap without extracted element
Or None and empty heap if self is an empty heap.
Or ``None`` and empty heap if ``self`` is an empty heap.
"""
if not self:
return None, self._make_heap()
Expand Down Expand Up @@ -121,8 +122,9 @@ class PairingHeap(_MergeBased):
property requires that all the root elements of the subheaps in the list
are not smaller (bigger) than the root element of the heap.
In Haskell type definition it should looks like following:
data Pairing a = Empty | Node a [Pairing a]
In Haskell type definition it should looks like following::
data Pairing a = Empty | Node a [Pairing a]
Pairing heap has and excellent practical amortized performance. The
amortized time per extract is less than O(log n), find-min/find-max, merge
Expand Down Expand Up @@ -176,8 +178,8 @@ def insert(self, el):

def extract(self):
"""Returns pair of values:
* minimum (or maximum regarding to given compare function)
* new pairing heap without extracted element
* minimum (or maximum regarding to given compare function)
* new pairing heap without extracted element
Or None and empty heap if self is an empty heap.
"""
Expand Down
6 changes: 3 additions & 3 deletions fn/monad.py
Expand Up @@ -5,7 +5,7 @@
and get rid of many ``if/else`` blocks. See usage examples below.
Assume that you have ``Request`` class that gives you parameter
value by its name. To get uppercase notation for non-empty striped value:
value by its name. To get uppercase notation for non-empty striped value::
class Request(dict):
def parameter(self, name):
Expand All @@ -23,7 +23,7 @@ def parameter(self, name):
fixed = param.upper()
Hmm, looks ugly.. Update code with ``fn.monad.Option``:
Hmm, looks ugly.. Update code with ``fn.monad.Option``::
from operator import methodcaller
from fn.monad import optionable
Expand All @@ -43,7 +43,7 @@ def parameter(self, name):
``fn.monad.Option.or_call`` is good method for trying several
variant to end computation. I.e. use have ``Request`` class
with optional attributes ``type``, ``mimetype``, ``url``.
You need to evaluate "request type" using at least on attribute:
You need to evaluate "request type" using at least on attribute::
from fn.monad import Option
Expand Down

0 comments on commit d8c21ab

Please sign in to comment.