Effective Programming Practices for Economists. 13. Documenting (the code of) research projects

Similar documents
LECTURE 26. Documenting Python

Effective Programming Practices for Economists

Sphinx format for Latex and HTML

Leetcode Solutions Documentation

SphinxTutorial Documentation

docs-python2readthedocs Documentation

How to Contribute to a Sphinx Doc Documentation

Effective Programming Practices for Economists. 7. Version Control, Part II: Git with a Shared Repository

Effective Programming Practices for Economists. 17. Regular Expressions

Brandon Rhodes Python Atlanta, July 2009

Introduction to Python Documentation

The RestructuredText Book Documentation

turning expressions into functions symbolic substitution, series, and lambdify

Effective Programming Practices for Economists. 10. Some scientific tools for Python

Who needs Pandoc when you have Sphinx? An exploration of the parsers and builders of the Sphinx documentation tool FOSDEM

CuteFlow-V4 Documentation

Recommonmark Documentation

LECTURE 9. Development Tools

LECTURE 9. Development Tools

Win8 on Intel Programming Course Modern UI HelloWorld in HTML5/JS Cédric Andreolli

Sphinx Github Webpage Tutorials. Release Wenqiang Feng

Latex Manually Set Font Size For Tables

Effective Programming Practices for Economists

PHCpack, phcpy, and Sphinx

This is a paragraph. It's quite short.

odpdown - markdown to slides

Week - 01 Lecture - 04 Downloading and installing Python

The mat2doc documentation system

Lesson 4 - Basic Text Formatting

Application documentation Documentation

Dynamic Document Generation in Stata

Doc Like an Egyptian. Dru Lavigne Documentation Lead, ixsystems SCALE, January 23, 2016

Python is available at: Why Python is awesome:

The RestructuredText Book Documentation

Copyright. For more information, please read the Disclosures and Disclaimers section at the end of this ebook. First PDF Edition, February 2013

Documentation. David Grellscheid

Part A: Getting started 1. Open the <oxygen/> editor (with a blue icon, not the author mode with a red icon).

pythonocc Parametric Application Framework (PAF) tutorial r0.4

Full file at New Perspectives on HTML and CSS 6 th Edition Instructor s Manual 1 of 13. HTML and CSS

Reference Services Division Presents. Microsoft Word 2

Starting. Read: Chapter 1, Appendix B from textbook.

1. Welcome. (1) Hello. My name is Dr. Christopher Raridan (Dr. R). (3) In this tutorial I will introduce you to the amsart documentclass.

Wikispaces in Education A Comprehensive Tutorial

Meeting One. Aaron Ecay. February 2, 2011

Intel Do-It-Yourself Challenge Maestro Pololu card + Bluetooth

?s t 2 W ; g 0 } 9 m! * = 5 z A & # + 92 Guidebook

APPLIED COMPUTING 1P01 Fluency with Technology

Hovercraft! Documentation

LuaTEX says goodbye to Pascal

Tutorial: Templates for reproducible research projects

Google Sites Guide Nursing Student Portfolio

Hovercraft! Documentation

Intel Do-It-Yourself Challenge Robotics Hello World

It is possible to create webpages without knowing anything about the HTML source behind the page.

Generating PDFs With (and Without) Python

PBwiki Basics Website:

Index. alt, 38, 57 class, 86, 88, 101, 107 href, 24, 51, 57 id, 86 88, 98 overview, 37. src, 37, 57. backend, WordPress, 146, 148

A Short Guide To Preparing Your Files for ebookit.com s Free epub Conversion Service

CiviX Author Custom Actions Cheat Sheet

Packaging Python code and Sphinx

Pharo s Tips and Tricks

CIT 590 Homework 5 HTML Resumes

What is LaTeX. Is a document markup language and document preparation system for the TeX typesetting program

Presentation Quality Bulleted Lists Using ODS in SAS 9.2. Karl M. Kilgore, PhD, Cetus Group, LLC, Timonium, MD

Moving ROOT Documentation from Docbook to Markdown

Python Project Documentation

CSC9B1: Essential Skills WWW 1

Basic Programming. Hans-Martin von Gaudecker

IQReport Documentation

Web Page Creation Part I. CS27101 Introduction to Web Interface Design Prof. Angela Guercio

FROM SCRIPT TO PACKAGES. good practices for hassle-free code reuse

Creating an with Constant Contact. A step-by-step guide

Civil Engineering Computation

1-2

Chapter 4 Printing and Viewing a Presentation Using Proofing Tools I. Spell Check II. The Thesaurus... 23

Zerodoc Documentation

Homework # You ll want to use some LaTeX editor to edit and compile your.tex files

Chapter 1 Getting Started with HTML 5 1. Chapter 2 Introduction to New Elements in HTML 5 21

ATSC Week 2 Web Authoring

Python in 10 (50) minutes

Creating an with Constant Contact. A step-by-step guide

Welcome to the quick start guide for Leadin. We also have tutorial video s located in the members area for more of a in depth look at the software.

HTML. Based mostly on

LYX with Beamer and Sweave

Intel Do-It-Yourself Challenge Hello World with the Arduino IDE Nicolas Vailliet

CS2900 Introductory Programming with Python and C++ Kevin Squire LtCol Joel Young Fall 2007

Privacy and Security in Online Social Networks Department of Computer Science and Engineering Indian Institute of Technology, Madras

Beginning and Intermediate Algebra Chapter 0: Arithmetic

Exercises: Instructions and Advice

Confluence User Training Guide

Creating Word Outlines from Compendium on a Mac

Winter Lecture 4

Sphinx Readability Theme Documentation

Structured documents

Win8 on Intel Programming Course Desktop : Perceptual Computing Cédric Andreolli

DOING MORE WITH WORD: MICROSOFT OFFICE 2010

Basic Uses of JavaScript: Modifying Existing Scripts

simpletex Documentation

My Mathematical Thesis

Using L A TEX. A numbered list is just that a collection of items sorted and labeled by number.

Transcription:

Effective Programming Practices for Economists 13. Documenting (the code of) research projects Hans-Martin von Gaudecker Department of Economics, Universität Bonn

At the end of this lecture you are able to... Appreciate the benefits of (code) documentation Create L A T E X and HTML documents using Sphinx and Waf Read and write restructuredtext documents Auto-document Python code using Sphinx Use Sphinx for documenting code in various languages Licensed under the Creative Commons Attribution License 2/37

Documenting your code is indispensable Required by journals Required if anyone should use your code... Mandatory for putting user-written commands on SSC Switching the type of markup is close to trivial... and to liberate yourself from the most obvious questions You will be just another user in some time yourself Licensed under the Creative Commons Attribution License 3/37

Why yet another document? Why not simply look at the code to understand it? Clean code = perfect documentation (e.g. Eddins, 2008)? Far too fine-grained Plow through implementations for understanding interfaces? Lots of irrelevant information Clean code and documentation are complements Designed to be understood by computers, not by humans Licensed under the Creative Commons Attribution License 4/37

Why yet another document? Put it in the paper? Should contain all relevant information Most readers care about results; editors about journal space Common mistake by young authors to describe too many details of how they were solving problems Information you can provide is far too abstract to be usable as an entry point to the code Often you want to closely weave code and documentation Standalone L A T E X not well suited Other typesetting programs much less so Licensed under the Creative Commons Attribution License 5/37

How to increase the chances that documentation is actually written? Problem of implementation: Easy to agree that it makes perfect sense Researchers hardly ever do it (properly) Need a tool to make things easy Enter Sphinx de-facto standard for Python code Matlab: Use Sphinx or m2html http://www.artefact.tk/software/matlab/m2html/ R: Use Sphinx or Sweave http://www.stat.uni-muenchen.de/~leisch/sweave/ Stata: Use Sphinx + line-based inclusion of code Licensed under the Creative Commons Attribution License 6/37

Taxonomy of documentation types Tutorials Relevant when other people use your software (estimator?) Far too often neglected API documentation (application programming interface) Describes how program interacts with outside world Keep interface definitions and their documentation close Which brings us back to docstrings More on types of documentation: http://blog.dexy.it/250 Licensed under the Creative Commons Attribution License 7/37

What is Sphinx? Document preparation system Think simpler L A T E X geared towards code documentation Direct output to PDF (via L A T E X) and HTML Much simpler markup language (restructuredtext) Similar ideas as Wiki languages, but more powerful Extract docstrings from Python modules Import code from other types of source code Complete files, line-number or line-content based sections Automatically create indices and search functionality Licensed under the Creative Commons Attribution License 8/37

Getting started with Sphinx Focus on how to use Sphinx within project template More general introduction is at http://sphinx-doc.org/ Excellent page Starting points for Sphinx are a configuration script... conf.py... and a main rest file definining the basic structure index.rst Waf task generators create PDF and HTML documents Licensed under the Creative Commons Attribution License 9/37

Structure of the documentation directory src wscript documentation library manual_input models original_data data_management analysis final paper documentation wscript conf.py index.rst introduction.rst data_management.rst analysis.rst final.rst paper.rst library.rst models.rst Licensed under the Creative Commons Attribution License 10/37

Important overall options in conf.py # 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.viewcode", 'sphinxcontrib.bibtex', "sphinx.ext.mathjax" ] # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] # The suffix of source filenames. source_suffix = ".rst" # The encoding of source files. source_encoding = "utf-8" # The master toctree document. master_doc = "index" # General information about the project. project = u"ttt" copyright = u"2013-, NNN" Licensed under the Creative Commons Attribution License 11/37

Important HTML-specific options in conf.py # -- 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 = "haiku" # This is the file name suffix for HTML files (e.g. ".xhtml"). html_file_suffix = ".html" # Output file base name for HTML help builder. htmlhelp_basename = "somedoc" Licensed under the Creative Commons Attribution License 12/37

Important L A T E X-specific options in conf.py # -- Options for LaTeX output ------------------------------------------------- latex_elements = { # The paper size ("letterpaper" or "a4paper"). "papersize": "a4paper", # The font size ("10pt", "11pt" or "12pt"). "pointsize": "11pt", # Remove the "Release..." subtitle from the LaTeX frontpage. "releasename": "" } # Additional stuff for the LaTeX preamble. #"preamble": "", # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). # Usually the list will only consist of one tuple for the master file. latex_documents = [( "index", "project_documentation.tex", "Documentation of the TTT project", "NNN", "manual" )] Licensed under the Creative Commons Attribution License 13/37

src.documentation.wscript.build # Build the documentation in pdf (via LaTeX) and html format. ctx( features='sphinx', builders=['html', 'latexpdf'], source='conf.py' ) # Install only after the build has finished. ctx.add_post_fun(post_install) Licensed under the Creative Commons Attribution License 14/37

restructuredtext Yet another markup language?!?!? Dual objective of docstrings: Form the basis of external documentation Document the code in-place Which is why you want to use a simple markup language Get a nicely formatted external documentation Be able to read and understand quickly in-place Licensed under the Creative Commons Attribution License 15/37

restructuredtext L A T E X is far too complex for such a purpose In rest, markup constructs and meaning are to some extent related This is a section heading =========================== followed by normal text The next slide has the master document (index.rst) Licensed under the Creative Commons Attribution License 16/37

.. This the TTT project's documentation master file... You can adapt this file completely to your liking,.. but it should at least contain the `toctree` directive. Welcome to the TTT project's documentation! ================================================.. toctree:: :maxdepth: 2 introduction original_data data_management analysis final paper model_code model_specs library references Licensed under the Creative Commons Attribution License 17/37

rest directives The toctree is an example of a restructuredtext directive, used to give special meaning to a block of text Syntax:.. name:: arguments :options: option_value content Example: Documenting a hypothetical Python function:.. function:: foo(x) :module: some_module_name Return a line of text input from the user. Watch the indentation! Licensed under the Creative Commons Attribution License 18/37

Paragraphs ---------- The paragraph is the most basic block in a rest document. Paragraphs are simply chunks of text separated by one or more blank lines. As in Python, indentation is significant in rest, so all lines of the same paragraph must be left-aligned to the same level of indentation. This is an indented paragraph for the sake of demonstration. You can enhance text in paragraphs using :ref:`inlinemarkup`... _inlinemarkup: Inline markup ------------- The standard rest inline markup is quite simple: use * one asterisk *for emphasis* (italics), * two asterisks **for strong emphasis** (boldface), and * backquotes ``for code samples``. Licensed under the Creative Commons Attribution License 19/37

HTML output Licensed under the Creative Commons Attribution License 20/37

L A T E X output Licensed under the Creative Commons Attribution License 21/37

Notes on simple markup constructs Create an arbitrary reference location by starting a line with two colons, followed by whitespace, an underscore, the reference name and ending in a double colon.. _label_name: Create a link with a reference to that location :ref:`label_name` Provide an explicit title for the link if the label was not placed before a section heading or a figure: :ref:`link title <label_name>` Licensed under the Creative Commons Attribution License 22/37

Notes on simple markup constructs Create a bulleted list by starting a line with an asterisk For bullet points spanning multiple lines, keep the same level of indentation at each line For numbered list, use either the numbers themselves or the pound character for automatic enumeration Licensed under the Creative Commons Attribution License 23/37

Notes on simple markup constructs #. Hello, World. #. This is the second item 1. Hello, World. 2. This is the second item Licensed under the Creative Commons Attribution License 24/37

Documenting Python code Preliminaries You need the autodoc extension enabled in conf.py Sphinx imports the module to be documented Depends on the location from where you invoke Sphinx You can adjust sys.path in conf.py No need to worry in the context of the project template, the project root is automatically on sys.path In the docstrings, you can use all the rest you want Licensed under the Creative Commons Attribution License 25/37

src/analysis/schelling.py """Run a Schelling (1969, :cite:`schelling69`) segregation model and store a list with locations by type at each cycle. The scripts expects that a model name is passed as an argument. The model name must correspond to a file called ``[model_name].json`` in the "IN_MODEL_SPECS" directory. """ import sys import json import logging import pickle import numpy as np from src.model_code.agent import Agent from bld.project_paths import project_paths_join as ppj def setup_agents(model): """Load the simulated initial locations and return a list that holds all agents.... """ Licensed under the Creative Commons Attribution License 26/37

Documenting Python code Content of src/documentation/analysis.rst.. _analysis: ************************************ Main model estimations / simulations ************************************ Documentation of the code in *src.analysis*. This is the cor Schelling example =================.. automodule:: src.analysis.schelling :members: Licensed under the Creative Commons Attribution License 27/37

Documenting Python code Resulting html output Licensed under the Creative Commons Attribution License 28/37

Notes on autodoc markup constructs The automodule directive displays the docstring Add the members option to also extract the specified members function signatures and docstrings More autodoc directives: http://sphinx-doc.org/ext/autodoc.html Autodoc generates labels that you can reference with :mod:`package.module` :func:`package.module.function` :class:`package.module.class` Similar behaviour with out the autodoc feature:.. py:function:: exponent(x, y) Description of exponent function Licensed under the Creative Commons Attribution License 29/37

Including code snippets End a paragraph with :: and the next paragraph(s), if indented, will be interpreted as (Python) code Change highlighting language for the rest of the document:.. highlight:: c Change highlighting language for the next block:.. code-block:: c Some C code Use any pygments lexer: http://pygments.org/docs/lexers/ Matlab, R,... More details: http://sphinx-doc.org/markup/code.html Licensed under the Creative Commons Attribution License 30/37

Including docstrings from other languages /* Estimate a simple survival time model. Important: The do-file requires two arguments to be passed */ 1. the name of the file itself (for keeping the log) 2. the name of a file in ${OUT_MODELS} containing globals definitions for a model (this will generally be derived from a json-file in ${IN_MODELS}) // Header do-file with path definitions, those end up in global macros. include src/library/stata/project_paths log using `"${PATH_OUT_ANALYSIS}/log/`1'_`2'.log"', replace... Licensed under the Creative Commons Attribution License 31/37

Including docstrings from other languages **Example for documenting Stata code**.. include::../analysis/streg_example.do :start-after: /* :end-before: */ Licensed under the Creative Commons Attribution License 32/37

Wrapping up In Sphinx / rest, it is extremely easy to pick up the basics Simple to write, easy to spot most markup constructs Complicated things annoying without syntax highlighting No excuses for not writing documentation anymore!!! Licensed under the Creative Commons Attribution License 33/37

At the end of this lecture you are able to... Appreciate the benefits of (code) documentation Create L A T E X and HTML documents using Sphinx and Waf Read and write restructuredtext documents Auto-document Python code using Sphinx Use Sphinx for documenting code in various languages Licensed under the Creative Commons Attribution License 34/37

References I Eddins, Steve (2008). Take Control of Your Code: Essential Software Development Tools for Engineers and Scientists. Available at http://blogs.mathworks.com/images/steve/2008/handout_yale_ 20080425.pdf. Licensed under the Creative Commons Attribution License 35/37

Acknowledgements This course is designed after and borrows a lot from the Software Carpentry course designed by Greg Wilson for scientists and engineers. The Software Carpentry course material is made available under a Creative Commons Attribution License, as is this course s material. Licensed under the Creative Commons Attribution License 36/37

License for the course material [Links to the full legal text and the source text for this page.] You are free: to Share to copy, distribute and transmit the work to Remix to adapt the work Under the following conditions: Attribution You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work). With the understanding that: Waiver Any of the above conditions can be waived if you get permission from the copyright holder. Public Domain Where the work or any of its elements is in the public domain under applicable law, that status is in no way affected by the license. Other Rights In no way are any of the following rights affected by the license: Your fair dealing or fair use rights, or other applicable copyright exceptions and limitations; The author s moral rights; Rights other persons may have either in the work itself or in how the work is used, such as publicity or privacy rights. Notice For any reuse or distribution, you must make clear to others the license terms of this work. The best way to do this is with a link to this web page.