Giter VIP home page Giter VIP logo

lecture-source-jl's Introduction

lecture-source-jl's People

Contributors

aakashgfude avatar ajozefiak avatar amphibianoid avatar anjujoon avatar anubhavpcjha avatar arnavs avatar artemsolod avatar cc7768 avatar chrisrackauckas avatar deivisangeli avatar drdrij avatar fernandosecco avatar franciscoeslavasaenz avatar fratrik avatar gava31 avatar jlperla avatar jstac avatar leopoldomig avatar mmcky avatar natashawatkins avatar nosferican avatar paulcorcuera avatar pedropessoa avatar pooyaravari avatar qirui-ubc avatar quanteconuser avatar sgyetvay avatar vjimenezg avatar xiaojunguan avatar yolsever avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lecture-source-jl's Issues

Try using png rather than svg with Plots

There are two issues with svg:

  • It requires you to trust a notebook in order to correct display it. Jupyter caches that trust, but otherwise it is a pain
  • I think it may create very large figures.

So one solution is to try to use png with plots. To do that, anywhere there is a using Plots change it to

using Plots
gr(fmt=:png)

I think! Check with one of the notebooks that has a large aiyagari.ipynb to see if it helps with the size.

Default Julia startup arguments for Juno and the REPL

The new arguments for Julia v1.0 include the ability to activate a project when julia starts up.

It isn't documented especially well yet, but I think the options are:

  • --project=. to select the current project file
  • --project=@. to recursively go up the tree until it finds a project file (or default otherwise)?

These can be set in Juno (by going to the Julia Client settings and setting the Additional Julia Startup Arguments.

The question is: what should the settings be in our setup guides - and is it something we should submit a PR for to the Juno to change the default.

We should ask on slack to see how it is supposed to work test both versions with the following permutations:

  • Open up the Juno repl after starting Juno in a particular directory with a project file
  • Same, but with a project that doesn't have a project file yet. This shouldn't error, and should default to the standard v1.0 project
  • Same but in a sub-directory of something with a project file. It would be nice if it picked up the parent directory project file, but not essential. Again, shouldn't error

We should also make sure that this workflow is the one we want. Finally, what other features for working with Pkg3 would make sense. An instantiate button/command? A test one? Asking to create a new project when starting the REPL in a folder without a project file, etc.

Re-writes Tracker

Programming in Julia

Tools and Techniques

Dynamic Programming

Multiple Agent Models

Time Series Models

Dynamic Programming Squared

Move to :png with GR

From teaching, students frequently forget to Trust the notebook. The main place this causes issues is that the graphs disappear when they reopen it.

I think the solution is to use the png wherever plots comes up. That is,

using Plots

globally becomes

using Plots
gr(fmt=:png)

Getting Started with Julia

More Programming and Software Engineering Principles

Tools and Techniques

Dynamic Programming

Multiple Agent Models

Time Series Models

Dynamic Programming Squared

Expectations Pass

Go through the lectures and, wherever possible, replace homebrewed expectations (i.e., the dot product of something with a pdf vector) with the E() operator from QuantEcon/Expectations.jl.

Some lectures to check:

  • Wald-Friedman
  • McCall
  • IFP
  • Classical Filtering
  • Aiyagari

Move the Project.toml and Manifest.toml to the build-location

There are two ways to do this:

  • First, see if you can add a line to the makefile so that it copies them from the current notebooks directory when make jupyter is run. This is ideal
  • If not, then:
    • add the _build/jupyter or whereever the notebooks aree generated to git.
    • ignore all ipynb, etc. files in there
    • Put the toml files there, and make sure they are in git, as they would be the master versions
    • Remove the toml files from git in the notebooks directory, so we only have 1 copy
    • Add a line into the bash script for running notebooks which atuomatically copies the toml files into notebooks, and make sure they are ignored in git.

Possible setup instructions for a docker based quantecon

From https://github.com/ubcecon/computing_and_datascience/tree/master/docker#how-to-get-docker-running-on-your-laptop

  • image with the activate_github and the ] add ... precompiled, etc.
  • Pointer for instructions to download docker
  • Then how to run docker in a local folder, and at least read notebooks, something like
docker run -p 8888:8888 -v "$PWD":/home/jovyan/work quantecon/jupyter-image

Try on windows, osx, and linx

  • How to start the docker again.
  • How to access the notebooks there, what to copy for the URL string, etc.
  • Test that GRL works

Wald-Friedman Lecture

Looks like it's carrying out the same computations over and over (but not infinitely). For example, the twelfth code block yields:

Converged in 13 steps
Compute iterate 5 with error 1.9261818620389288
Compute iterate 10 with error 0.00013175562270539842
Converged in 13 steps
Compute iterate 5 with error 1.9261818620389288
Compute iterate 10 with error 0.00013175562270539842
Converged in 13 steps
Compute iterate 5 with error 1.9261818620389288
Compute iterate 10 with error 0.00013175562270539842
Converged in 13 steps
Compute iterate 5 with error 1.9261818620389288
Compute iterate 10 with error 0.00013175562270539842
Converged in 13 steps
Compute iterate 5 with error 1.9261818620389288
Compute iterate 10 with error 0.00013175562270539842
Converged in 13 steps
Compute iterate 5 with error 1.9261818620389288
Compute iterate 10 with error 0.00013175562270539842

Add missing packages for the notebooks

When I use the project files, I am missing LaTeXStrings, which breaks current notebooks.
I realize that we will eventually get rid of all latexstrings, but we are not there yet.

  • Until then, can you add it to the Project.toml and the Manfiest.toml for the notebooks?
  • Also add GR while you are at it, so that it precompile.
  • Give the new files to Jasmine to get these built into the syzygy activation, if at all possible.

Font choice for unicode, consoles, etc. with instructions

The default font used in Windows consoles has poor unicode coverage, which is a problem if we want to use unicode heavy examples. Luckily, if fonts are installed it is relatively easy to change it in Windows (and I suspect terminals on other OSs).

My general gut is that for windows it might be DejaVu Sans Mono or Fira Mono which is installed by Atom but I could be wrong...

  • Check if DejaVu Sans Mono` is installed on your Windows system by right-clicking on the shortcut, going to properties, choosing the font, etc.
  • Check what the default font is for an Atom installation. I can't tell if this is set in the one-dark syntax theme or is chosen separately.. I think it is either one of these two, though it could be different for different OS. Check Windows, Ubuntu, and OSX
  • The julia console used within Atom uses whatever is the default font, as far as I can tell. This is helpful since it means if they use the embedded console the experience is very solid.
  • Check the default font used in jupyterlab
  • Add content to the setup instructions for Windows to set the font.
  • It is pretty easy to choose by right-clicking on the link if the font is installed. This could be described in one line
  • However, if the font we want to choose doesn't show up in the list, then it may require a registry tweak. Best avoided if possible, but here is https://www.wikihow.com/Customize-the-Font-in-Windows-Command-Prompt

A good test-suite to see if the font is solid is to type into the console (where the <TAB> completes the latex)

\alpha<TAB>
x\hat<TAB>
x\_1<TAB>
x\bar<TAB>
\alpha<TAB>\_1<TAB>
\cdot<TAB>
\otimes<TAB>
\partial<TAB>

And some others I am not sure the latex expansion for

๐’Ÿ

Eliminate Orphaned Files

As discussed on Slack, code that's not used in multiple lectures should be moved out of the _static/code folder or whatever it's called. Also, per @jlperla, files that are not used at all should be nuked.

amss lecture ("Optimal Saving without State-Contingent Debt")

As discussed, the workflow on this lecture is a special case. The current plan is to do the minimum required to get this thing running on 1.0/stylistic changes, and then perhaps to have one of the undergrad RAs dig in and build a test suite.

I think I'm in the home stretch on the undeprecation, will push to the server from my home machine on Sunday.

Come up with a font check file

List out all of the unicode characters in a .jl file we might want to use, then we can load it in Jupyter and Atom on various OSs.

  • Check u_0, etc.

Fix Credits

We are moving to the crediting scheme in https://github.com/jstac/QuantEcon.lectures/issues/1195.

Highlights:

  • Standardized format for coauthors at the top of each page. (when applicable)
  • Removing all "inline" citations/attributions (e.g., in comments, cells, Markdown, etc.) and moving these to a global credits page. There should be no names in the code.
  • Credits page will be in a different repo. Details on where to submit them TBD.

No need to duplicate the whole checklist here. Can just be mindful of this as we proceed with the rewrite, and then do a final pass to make sure we got them all.

cc: @jstac, @jlperla, @Nosferican

Plots, GR, and Trust

What is the basic plan with trust and the jupyter notebooks for QE? One place this comes up is in the plotting, since svg+xml is not a trusted mimetype. If we want the notebooks to load up and have the figures visible without running them, then there are two choices:

  1. Put gr(fmt="png") or something like that in front, which chagnes the svg into png - not requiring trust
  2. Teach users to go Trust Notebook when they open them.

Part of the quetsion is also whether the rest of the QE output will work with the generated notebooks if they are not trusted? If we have to trust them regardless, then changing to png is not worth it.

Test an AD extension to the by_example notes

With the current branch, the following is not working. We should find out why and patch NLsolve if required

using NLsolve, ForwardDiff
function fp(params)
    ฮฒ, p = params #unpack vector
    sol = fixedpoint(v -> p .+ ฮฒ * v, [0.8], inplace = false)
    return sol.zero[1]
end

fp([0.1, 2.0])
ForwardDiff.gradient(x -> fp(x), [0.1, 2.0])

Investigate Filesizes

Would be great if we could bring down some of the filesizes (as a benchmark, aiyagari.ipynb, which is 17MB). See #142. Tinkering with Plots resolutions/sizes didn't help much, but maybe we could ] up in a few days. If that doesn't work, post on Slack.

Replace Activation Header

Instead of something like using Pkg; Pkg.activate(@__DIR__), change it to using InstantiateFromURL; activate_github("QuantEcon/QuantEconLecturePackages"). Could either do the last tagged release or master (@jlperla).

Global scoping in code and Jupyter

It appears that IJulia in the latest version has https://github.com/stevengj/SoftGlobalScope.jl

Built in. We should try it, as I believe this is a tagged release with v1.0 on Windows now. If so, then it means we can avoid the let blocks.

It would still have trouble if that code is copied to a REPL without modification (or embedding in a function or let, but I would bet money that this sort of Soft global thing is built into the REPL before too long

Cc: @arnavs @Nosferican

Dev Environment

From earlier discussion with @jlperla. Implementing a set of tools that new RAs/collaborators could use to quickly start working on the lectures. Wishlist could include:

  • Notebook testing scripts (individual and all).
  • Scripts to grab dependency information (which packages are used, how often and where?)
  • Docker image?

Replace REPL Screenshots with Text

cc: @jstac, @natashawatkins, @mmcky, etc.

One thing @Nosferican, @jlperla and I discussed was replacing screenshots like:

44611767-24eaf880-a7b8-11e8-9a70-00b4fa900704

with something like:

arnavsood@Arnavs-MacBook-Pro:~/research/lecture-source-jl$ julia
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.0.0 (2018-08-08)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

julia> 

for compactness and upgradability. Let me know if you concur. If not, we can close this issue.

Roots pass

Move to https://github.com/JuliaMath/Roots.jl instead of the QuantEcon.jl features.

I think the ones to look for in the code are all of the bracketed root functions

To be clear, though, I am not sure that Roots.jl is always better, just that it is where we should add in new code and be able to swap out algorithms easily. It will also be much easier to tweak find_zero to support BigFloat, etc.

In fact, porting over some of those QuantEcon.jl routines to Roots.jl might be a good project for a student. Or maybe implementing "TOMS Algorithm 748" or something similar to see if it works well.

Fix warnings in current Jupinx execution

My current output:

jlperla@jlperla-surface:~/Documents/lecture-source-jl$ make jupyter
Running Sphinx v1.7.4
making output directory...
loading pickled environment... not yet created
building [mo]: targets for 0 po files that are out of date
building [jupyter]: targets for 71 source files that are out of date
updating environment: 71 added, 0 changed, 0 removed
checking for /mnt/c/Users/jlperla/Documents/GitHub/lecture-source-jl/rst_files/_static/quant-econ.bib in bibtex cache... not found
parsing bibtex file /mnt/c/Users/jlperla/Documents/GitHub/lecture-source-jl/rst_files/_static/quant-econ.bib... parsed 149 entries

/mnt/c/Users/jlperla/Documents/GitHub/lecture-source-jl/rst_files/lu_tricks.rst:879: WARNING: Include file '/mnt/c/Users/jlperla/Documents/GitHub/lecture-source-jl/rst_files/_static/code/lu_tricks/control_and_filter.jl' not found or reading it failed
looking for now-outdated files... none found
pickling environment... done
checking consistency... /mnt/c/Users/jlperla/Documents/GitHub/lecture-source-jl/rst_files/hist_dep_policies.rst: WARNING: document isn't included in any toctree
/mnt/c/Users/jlperla/Documents/GitHub/lecture-source-jl/rst_files/zreferences.rst: WARNING: Citation [Shiryaev1995] is not referenced.
done
preparing documents... done
writing output... [100%] zreferences
/mnt/c/Users/jlperla/Documents/GitHub/lecture-source-jl/rst_files/arma.rst:502: WARNING: undefined label: ar1_acov (if the link has no caption the label must precede a section header)
/mnt/c/Users/jlperla/Documents/GitHub/lecture-source-jl/rst_files/career.rst:277: WARNING: undefined label: beta-binom (if the link has no caption the label must precede a section header)
/mnt/c/Users/jlperla/Documents/GitHub/lecture-source-jl/rst_files/index.rst:: WARNING: Invalid jupyter kernels. jupyter_kernels: {'python3': {'kernelspec': {'display_name': 'Python', 'language': 'python3', 'name': 'python3'}, 'file_extension': '.py'}, 'julia': {'kernelspec': {'display_name': 'Julia 1.0.0', 'language': 'julia', 'name': 'julia-1.0'}, 'file_extension': '.jl'}}, lang: julia
/mnt/c/Users/jlperla/Documents/GitHub/lecture-source-jl/rst_files/index_postgrad.rst:: WARNING: Invalid jupyter kernels. jupyter_kernels: {'python3': {'kernelspec': {'display_name': 'Python', 'language': 'python3', 'name': 'python3'}, 'file_extension': '.py'}, 'julia': {'kernelspec': {'display_name': 'Julia 1.0.0', 'language': 'julia', 'name': 'julia-1.0'}, 'file_extension': '.jl'}}, lang: julia
/mnt/c/Users/jlperla/Documents/GitHub/lecture-source-jl/rst_files/index_undergrad.rst:: WARNING: Invalid jupyter kernels. jupyter_kernels: {'python3': {'kernelspec': {'display_name': 'Python', 'language': 'python3', 'name': 'python3'}, 'file_extension': '.py'}, 'julia': {'kernelspec': {'display_name': 'Julia 1.0.0', 'language': 'julia', 'name': 'julia-1.0'}, 'file_extension': '.jl'}}, lang: julia
/mnt/c/Users/jlperla/Documents/GitHub/lecture-source-jl/rst_files/linear_algebra.rst:488: WARNING: undefined label: la_3dvec (if the link has no caption the label must precede a section header)
/mnt/c/Users/jlperla/Documents/GitHub/lecture-source-jl/rst_files/linear_algebra.rst:988: WARNING: undefined label: la_3dvec (if the link has no caption the label must precede a section header)
/mnt/c/Users/jlperla/Documents/GitHub/lecture-source-jl/rst_files/odu.rst:601: WARNING: undefined label: odu_pol_vfi (if the link has no caption the label must precede a section header)
copying static files... done
build succeeded, 11 warnings.
bash -c "cp notebooks/*.toml _build/jupyter"

Ensure Full Test Coverage

We want to make sure that each plot (and code block in general) has a corresponding test, of some arbitrary intermediate point. This is done in a lot of cases, but I don't think we have had a strict policy of doing it, so there are almost certainly some missing cases.

As discussed, this is another issue for one of the undergrad RAs. So Kaan Yolsever (@yolsever) will be handling this, and I'll be the go-between as in #67. For ease of maintenance, we can group this by section, and check off when each one is verified.

  • Tools and Techniques
  • Dynamic Programming
  • Multiple-Agent Models
  • Time Series Models
  • Dynamic Programming Squared

cc: @jlperla, @Nosferican

No longer require Ref for broadcasting distributions

Bug report from a student!

It appears that Distributions is now "broadcast friendly". We should look for uses of Ref with broadcasting with it (e.g. pdf.(Ref(d), [1.0, 3.0]) no longer requires the Ref) and remove it. This might be a good time to review all uses of Ref( in the notes, since others might have changed.

Standardize comment spacing

See https://github.com/QuantEcon/lecture-source-jl/blob/master/style.md#naming-conventions-comments-etc

In particular, getting rid of the following pattern

 # == Some comment == #

Active template for checklists:

Getting Started with Julia

More Programming and Software Engineering Principles

Tools and Techniques

Dynamic Programming

Multiple Agent Models

Time Series Models

Dynamic Programming Squared

Script to execute single notebook

We want the ability to generate the executed notebooks. This can be run as a separate step after Jupinx.

First, lets add in a notebooks directory right under the lecture-source-jl root, and add in a .gitignore with .ipynb_checkpoints to be skipped. This is where we will add in the Project.toml and Manifest.toml at some point as well.

First, lets have it as taking a given filename and it would just copy the file to the correct location. e.g.
executenotebook mynotebook.ipynb, which would be done inside of where you run the make jupyter command. It could then do something like

cp ./_build/jupyter/mynotebook.ipynb    ./notebooks/mynotebook.ipynb
jupyter nbconvert --ExecutePreprocessor.timeout=600 --to notebook --execute ./notebooks/mynotebook.ipynb

Play around with the settings to make sure it knows it can replace the existing one.

We can then get into the habit of calling executenotebook mynotebook.ipynb whenever we modify things.

Fix Jupinx

Currently, we have a few issues with the Jupinx build on the source reStructured Text:

  • A few files are referring to nonexistent code blocks.
  • There is some (stochastic) issue with the use of the * symbol inside code. I couldn't replicate it, but @Nosferican and @jlperla could.
  • \Span \col \RR and other improperly parsed issues (see orth_proj.ipynb).

And likely a few others. We can close this when we're satisfied with the output Jupyter.

Global Undeprecation Tracker

This goal is to get all the lectures to a state where they run in Julia 1.0. This is distinct from making the code more "Julian," clean, suitable for teaching, etc.

Deprecation Tracker

We can check off each lecture when complete. Currently, @Nosferican and I have our notes in this Google doc.

Programming in Julia

Tools and Techniques

Dynamic Programming

Multiple Agent Models

Time Series Models

Dynamic Programming Squared

Global Style Tracker

This is a meta-issue focused on enumerating the global stylistic changes to the lectures. As before, we can check off each seciton when we are complete.

  • Remove docstrings
  • Convert to using Parameters and unpack throughout and all default constructors to @with_kw #135
  • Replacing homebrewed quadrature with Expectations.jl #133
  • Replacing homebrewed iteration and EQ ones with with fixedpoint() #134
  • Eliminating repeatedly nested loops (like in the career and job choice lecture).
  • Using Plots/GR globally #67
  • Convert to Maximize and simplify sign flips #158
  • Convert to using Parameters and unpack throughout #135
  • Use interpolations #146
  • Global removal of virtually all type signatures

Fixed-Point Pass

Wherever possible, replace homebrewed fixed-point iteration with the fixedpoint() routine from NLsolve.jl. Need to make sure the math checks out. This could cause tests of exact equality to fail; will need to be updated.

Linear Algebra Types

I'm finding some issue with specialized types in the LinearAlgebra module. See below for a MWE. The issue is that, because these don't subtype Matrix as some external libraries (like PyPlot) expect, methods defined on matrices don't seem to work.

Let me know how we should proceed.

julia> x = [0 1; 1 0]
2ร—2 Array{Int64,2}:
 0  1
 1  0

julia> transpose(x)
2ร—2 Transpose{Int64,Array{Int64,2}}:
 0  1
 1  0

julia> transpose(x) isa Matrix
false

julia> typeof(x')
Adjoint{Int64,Array{Int64,2}}

julia> x' isa Matrix
false

julia> versioninfo()
Julia Version 1.0.0
Commit 5d4eaca0c9 (2018-08-08 20:58 UTC)
Platform Info:
  OS: macOS (x86_64-apple-darwin14.5.0)
  CPU: Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.0 (ORCJIT, skylake)

Code-Math Integration

We should make sure that (a) code that's directly implementing math is commented with an equation number and (b) as a corollary, all significant equations are numbered. Example of a lecture with non-numbered equations is Wald-Friedman.

Script to execute all of the notebooks, skipping ones that are not modified

Lets modify the current file https://github.com/QuantEcon/lecture-source-jl/blob/master/execute-notebooks.sh

Or perhaps rename it to execute-notebook.sh and have a new one execute-notebooks.sh which will call it.

The basic goal of this is to run all of the notebooks in the _build/jupyter directory and put them in the /notebooks directory. But we only really need to run the nbconvert if the _build/jupyter/MYFILE.ipynb has been modified since the last time the script was executed.

A suggested approach:

\cp $1 ./notebooks/$1 # Move first argument to the right folder. Will overwrite. 
  • At the beginning of running the script, if there is a ./notebooks/timestamp.txt or whatever file, then load the timestamp.
  • If no timestamp is there, then the assumption will be that things have never been run... maybe set the timestamp to 0 or something so that filtering is easy.
  • Get a list of all ./_build/jupyter/*.ipynb with the timestamp
  • Filter out from that list of files anything where the timestamp is < the stored timestamp... and if there is no timestamp loaded, then don't filter.
  • Replace or save the current timestamp in ./notebooks/timestamp.txt
  • Run the modified https://github.com/QuantEcon/lecture-source-jl/blob/master/execute-notebook.sh script on each of the filtered list of files.

Then when you put this in git, make sure to ignore the timestamp files and any intermediate files you create in the process.

Maximize pass

Optim.jl now supports the univariate maximize function instead of just optimize

We should find all of the places that use optimize and convert to maximize if that is the math implementation. Of course, since this si a move from minimize to maximize, this means swapping the sign of the objective that is passed in as well not swapping the sign of the output

Also, look for http://quantecon.github.io/QuantEcon.jl/latest/api/QuantEcon.html#QuantEcon.golden_method-Tuple{Function,Real,Real} and swap that out as well.

PyPlot and Gadfly to Plots

Interpolations pass

Change everything to use Interpolations.jl and remove references to the QuantEcon

Global plot color settings

Right now a lot of the plots are along the lines of

plot(x, color = "blue")

Is the color = "blue" really necessary, and is there a better way to make a global setting change right below where the using Plots; gr(...) is used? If so, lets get rid of them globally.

Parameters Pass

Wherever possible, replace structs that we're using as parameter containers with NamedTuples (and the related constructors) from Parameters.jl. This issue binds to a large number of lectures, and involves a significant refactoring.

Active template for checklists:

Getting Started with Julia

More Programming and Software Engineering Principles

Tools and Techniques

Dynamic Programming

Multiple Agent Models

Time Series Models

Dynamic Programming Squared

Global Regression Test Tracker

For a given lecture, in between the undeprecation and the rewriting/refactoring, we want to insert regression tests to ensure that the output does not change.

Guidelines

Some thoughts, based on discussions with @jlperla:

  • When testing arrays, try not to test the bounds, but rather some arbitrary interior value.
  • In general, try to test values that depend on many other values, since it's unlikely that errors in those components will exactly cancel. Something like a checksum.
  • We should put these tests in their own blocks with a special comment (# jl-test, I believe), so that we can later efficiently delete all blocks that contain that comment. See README for this now.
  • For plots, the testing procedure is still TBD. Perhaps we can eyeball it, or maybe serialize the plot object and save it. Not sure what a good approach is here. See Jesse's comment below for how to handle this.

Tracker

Programming in Julia

Tools and Techniques

Dynamic Programming

Multiple Agent Models

Time Series Models

Dynamic Programming Squared

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.