From ea92152d750603efcfb8341d6a60d193c3ee81d6 Mon Sep 17 00:00:00 2001
From: "Mads M. Pedersen" <mmpe@dtu.dk>
Date: Fri, 25 Nov 2016 13:14:28 +0100
Subject: [PATCH] added developer-guide.md

---
 docs/.developer-guide.md.html | 759 ++++++++++++++++++++++++++++++++++
 1 file changed, 759 insertions(+)
 create mode 100644 docs/.developer-guide.md.html

diff --git a/docs/.developer-guide.md.html b/docs/.developer-guide.md.html
new file mode 100644
index 00000000..78112972
--- /dev/null
+++ b/docs/.developer-guide.md.html
@@ -0,0 +1,759 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>C:\mmpe\programming\python\WindEnergyToolbox\docs\.developer-guide.md.html</title>
+
+
+<style type="text/css">
+body {
+	color: #333;
+	font: 13px/1.4 "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
+	padding: 0;
+	margin: 0;
+}
+
+a {
+	background: transparent;
+	color: #4183c4;
+	text-decoration: none;
+}
+
+a:active,
+a:hover {
+	outline: 0 none;
+	text-decoration: underline;
+}
+
+abbr[title] {
+	border-bottom: 1px dotted;
+}
+
+b,
+strong {
+	font-weight: bold;
+}
+
+dfn {
+	font-style: italic;
+}
+h1 {
+	font-size: 2em;
+	margin: 0.67em 0;
+}
+mark {
+	background: #ff0;
+	color: #000;
+}
+small {
+	font-size: 80%;
+}
+sub, sup {
+	font-size: 75%;
+	line-height: 0;
+	position: relative;
+	vertical-align: baseline;
+}
+sup {
+	top: -0.5em;
+}
+sub {
+	bottom: -0.25em;
+}
+img {
+	border: 0 none;
+}
+svg:not(:root) {
+	overflow: hidden;
+}
+figure {
+	margin: 1em 40px;
+}
+hr {
+	box-sizing: content-box;
+	height: 0;
+}
+
+code,
+kbd,
+pre,
+samp {
+	font-family: monospace,monospace;
+	font-size: 1em;
+}
+
+pre {
+	overflow: auto;
+	font: 12px Consolas,"Liberation Mono",Menlo,Courier,monospace;
+	margin-bottom: 0;
+	margin-top: 0;
+}
+
+.markdown-body {
+	padding: 30px;
+	font-size: 16px;
+	line-height: 1.6;
+	word-wrap: break-word;
+}
+
+.markdown-body>*:first-child {
+	margin-top: 0 !important;
+}
+
+.markdown-body>*:last-child {
+	margin-bottom: 0 !important;
+}
+
+.markdown-body .absent {
+	color: #c00;
+}
+
+.markdown-body .anchor {
+	position: absolute;
+	top: 0;
+	bottom: 0;
+	left: 0;
+	display: block;
+	padding-right: 6px;
+	padding-left: 30px;
+	margin-left: -30px;
+}
+
+.markdown-body .anchor:focus {
+	outline: none;
+}
+
+.markdown-body h1,
+.markdown-body h2,
+.markdown-body h3,
+.markdown-body h4,
+.markdown-body h5,
+.markdown-body h6 {
+	position: relative;
+	margin-top: 1em;
+	margin-bottom: 16px;
+	font-weight: bold;
+	line-height: 1.4;
+}
+
+.markdown-body h1 .octicon-link,
+.markdown-body h2 .octicon-link,
+.markdown-body h3 .octicon-link,
+.markdown-body h4 .octicon-link,
+.markdown-body h5 .octicon-link,
+.markdown-body h6 .octicon-link {
+	display: none;
+	color: #000;
+	vertical-align: middle;
+}
+
+.markdown-body h1:hover .anchor,
+.markdown-body h2:hover .anchor,
+.markdown-body h3:hover .anchor,
+.markdown-body h4:hover .anchor,
+.markdown-body h5:hover .anchor,
+.markdown-body h6:hover .anchor {
+	padding-left: 8px;
+	margin-left: -30px;
+	line-height: 1;
+	text-decoration: none;
+}
+
+.markdown-body h1:hover .anchor .octicon-link,
+.markdown-body h2:hover .anchor .octicon-link,
+.markdown-body h3:hover .anchor .octicon-link,
+.markdown-body h4:hover .anchor .octicon-link,
+.markdown-body h5:hover .anchor .octicon-link,
+.markdown-body h6:hover .anchor .octicon-link {
+	display: inline-block;
+}
+
+.markdown-body h1 tt,
+.markdown-body h1 code,
+.markdown-body h2 tt,
+.markdown-body h2 code,
+.markdown-body h3 tt,
+.markdown-body h3 code,
+.markdown-body h4 tt,
+.markdown-body h4 code,
+.markdown-body h5 tt,
+.markdown-body h5 code,
+.markdown-body h6 tt,
+.markdown-body h6 code {
+	font-size: inherit;
+}
+
+.markdown-body h1 {
+	padding-bottom: 0.3em;
+	font-size: 2.25em;
+	line-height: 1.2;
+	border-bottom: 1px solid #eee;
+}
+
+.markdown-body h2 {
+	padding-bottom: 0.3em;
+	font-size: 1.75em;
+	line-height: 1.225;
+	border-bottom: 1px solid #eee;
+}
+
+.markdown-body h3 {
+	font-size: 1.5em;
+	line-height: 1.43;
+}
+
+.markdown-body h4 {
+	font-size: 1.25em;
+}
+
+.markdown-body h5 {
+	font-size: 1em;
+}
+
+.markdown-body h6 {
+	font-size: 1em;
+	color: #777;
+}
+
+.markdown-body p,.markdown-body blockquote,
+.markdown-body ul,.markdown-body ol,
+.markdown-body dl,.markdown-body table,
+.markdown-body pre {
+	margin-top: 0;
+	margin-bottom: 16px;
+}
+
+.markdown-body hr {
+	height: 4px;
+	padding: 0;
+	margin: 16px 0;
+	background-color: #e7e7e7;
+	border: 0 none;
+}
+
+.markdown-body ul,
+.markdown-body ol {
+	padding-left: 2em;
+}
+
+.markdown-body ul.no-list,
+.markdown-body ol.no-list {
+	padding: 0;
+	list-style-type: none;
+}
+
+.markdown-body ul ul,
+.markdown-body ul ol,
+.markdown-body ol ol,
+.markdown-body ol ul {
+	margin-top: 0;
+	margin-bottom: 0;
+}
+
+.markdown-body li>p {
+	margin-top: 16px;
+}
+
+.markdown-body dl {
+	padding: 0;
+}
+
+.markdown-body dl dt {
+	padding: 0;
+	margin-top: 16px;
+	font-size: 1em;
+	font-style: italic;
+	font-weight: bold;
+}
+
+.markdown-body dl dd {
+	padding: 0 16px;
+	margin-bottom: 16px;
+}
+
+.markdown-body blockquote {
+	padding: 0 15px;
+	color: #777;
+	border-left: 4px solid #ddd;
+}
+
+.markdown-body blockquote>:first-child {
+	margin-top: 0;
+}
+
+.markdown-body blockquote>:last-child {
+	margin-bottom: 0;
+}
+
+.markdown-body table {
+	display: block;
+	width: 100%;
+	overflow: auto;
+	word-break: normal;
+	word-break: keep-all;
+}
+
+.markdown-body table th {
+	font-weight: bold;
+}
+
+.markdown-body table th,
+.markdown-body table td {
+	padding: 6px 13px;
+	border: 1px solid #ddd;
+}
+
+.markdown-body table tr {
+	background-color: #fff;
+	border-top: 1px solid #ccc;
+}
+
+.markdown-body table tr:nth-child(2n) {
+	background-color: #f8f8f8;
+}
+
+.markdown-body img {
+	max-width: 100%;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+.markdown-body span.frame {
+	display: block;
+	overflow: hidden;
+}
+
+.markdown-body span.frame>span {
+	display: block;
+	float: left;
+	width: auto;
+	padding: 7px;
+	margin: 13px 0 0;
+	overflow: hidden;
+	border: 1px solid #ddd;
+}
+
+.markdown-body span.frame span img {
+	display: block;
+	float: left;
+}
+
+.markdown-body span.frame span span {
+	display: block;
+	padding: 5px 0 0;
+	clear: both;
+	color: #333;
+}
+
+.markdown-body span.align-center {
+	display: block;
+	overflow: hidden;
+	clear: both;
+}
+
+.markdown-body span.align-center>span {
+	display: block;
+	margin: 13px auto 0;
+	overflow: hidden;
+	text-align: center;
+}
+
+.markdown-body span.align-center span img {
+	margin: 0 auto;
+	text-align: center;
+}
+
+.markdown-body span.align-right {
+	display: block;
+	overflow: hidden;
+	clear: both;
+}
+
+.markdown-body span.align-right>span {
+	display: block;
+	margin: 13px 0 0;
+	overflow: hidden;
+	text-align: right;
+}
+
+.markdown-body span.align-right span img {
+	margin: 0;
+	text-align: right;
+}
+
+.markdown-body span.float-left {
+	display: block;
+	float: left;
+	margin-right: 13px;
+	overflow: hidden;
+}
+
+.markdown-body span.float-left span {
+	margin: 13px 0 0;
+}
+
+.markdown-body span.float-right {
+	display: block;
+	float: right;
+	margin-left: 13px;
+	overflow: hidden;
+}
+
+.markdown-body span.float-right>span {
+	display: block;
+	margin: 13px auto 0;
+	overflow: hidden;
+	text-align: right;
+}
+
+.markdown-body code,.markdown-body tt {
+	padding: 0;
+	padding-top: 0.2em;
+	padding-bottom: 0.2em;
+	margin: 0;
+	font-size: 85%;
+	background-color: rgba(0,0,0,0.04);
+	border-radius: 3px;
+}
+
+.markdown-body code:before,
+.markdown-body code:after,
+.markdown-body tt:before,
+.markdown-body tt:after {
+	letter-spacing: -0.2em;
+	content: "\00a0";
+}
+
+.markdown-body code br,
+.markdown-body tt br {
+	display: none;
+}
+
+.markdown-body del code {
+	text-decoration: inherit;
+}
+
+.markdown-body pre>code {
+	padding: 0;
+	margin: 0;
+	font-size: 100%;
+	word-break: normal;
+	white-space: pre;
+	background: transparent;
+	border: 0;
+}
+
+.markdown-body .highlight {
+	margin-bottom: 16px;
+}
+
+.markdown-body .highlight pre,
+.markdown-body pre {
+	padding: 16px;
+	overflow: auto;
+	font-size: 85%;
+	line-height: 1.45;
+	background-color: #f7f7f7;
+	border-radius: 3px;
+}
+
+.markdown-body .highlight pre {
+	margin-bottom: 0;
+	word-break: normal;
+}
+
+.markdown-body pre {
+	word-wrap: normal;
+}
+
+.markdown-body pre code,
+.markdown-body pre tt {
+	display: inline;
+	max-width: initial;
+	padding: 0;
+	margin: 0;
+	overflow: initial;
+	line-height: inherit;
+	word-wrap: normal;
+	background-color: transparent;
+	border: 0;
+}
+
+.markdown-body pre code:before,
+.markdown-body pre code:after,
+.markdown-body pre tt:before,
+.markdown-body pre tt:after {
+	content: normal;
+}
+
+.highlight .pl-coc,
+.highlight .pl-entl,
+.highlight .pl-entm,
+.highlight .pl-eoa,
+.highlight .pl-mai .pl-sf,
+.highlight .pl-mm,
+.highlight .pl-pdv,
+.highlight .pl-sc,
+.highlight .pl-som,
+.highlight .pl-sr,
+.highlight .pl-v,
+.highlight .pl-vpf {
+	color: #0086b3;
+}
+.highlight .pl-eoac,
+.highlight .pl-mdht,
+.highlight .pl-mi1,
+.highlight .pl-mri,
+.highlight .pl-va,
+.highlight .pl-vpu {
+	color: #008080;
+}
+.highlight .pl-c,
+.highlight .pl-pdc {
+	color: #b4b7b4;
+	font-style: italic;
+}
+.highlight .pl-k,
+.highlight .pl-ko,
+.highlight .pl-kolp,
+.highlight .pl-mc,
+.highlight .pl-mr,
+.highlight .pl-ms,
+.highlight .pl-s,
+.highlight .pl-sok,
+.highlight .pl-st {
+	color: #6e5494;
+}
+.highlight .pl-ef,
+.highlight .pl-enf,
+.highlight .pl-enm,
+.highlight .pl-entc,
+.highlight .pl-eoi,
+.highlight .pl-sf,
+.highlight .pl-smc {
+	color: #d12089;
+}
+.highlight .pl-ens,
+.highlight .pl-eoai,
+.highlight .pl-kos,
+.highlight .pl-mh .pl-pdh,
+.highlight .pl-mp,
+.highlight .pl-pde,
+.highlight .pl-stp {
+	color: #458;
+}
+.highlight .pl-enti {
+	color: #d12089;
+	font-weight: bold;
+}
+.highlight .pl-cce,
+.highlight .pl-enc,
+.highlight .pl-kou,
+.highlight .pl-mq {
+	color: #f93;
+}
+.highlight .pl-mp1 .pl-sf {
+	color: #458;
+	font-weight: bold;
+}
+.highlight .pl-cos,
+.highlight .pl-ent,
+.highlight .pl-md,
+.highlight .pl-mdhf,
+.highlight .pl-ml,
+.highlight .pl-pdc1,
+.highlight .pl-pds,
+.highlight .pl-s1,
+.highlight .pl-scp,
+.highlight .pl-sol {
+	color: #df5000;
+}
+.highlight .pl-c1,
+.highlight .pl-cn,
+.highlight .pl-pse,
+.highlight .pl-pse .pl-s2,
+.highlight .pl-vi {
+	color: #a31515;
+}
+.highlight .pl-mb,
+.highlight .pl-pdb {
+	color: #df5000;
+	font-weight: bold;
+}
+.highlight .pl-mi,
+.highlight .pl-pdi {
+	color: #6e5494;
+	font-style: italic;
+}
+.highlight .pl-ms1 {
+	background-color: #f5f5f5;
+}
+.highlight .pl-mdh,
+.highlight .pl-mdi {
+	font-weight: bold;
+}
+.highlight .pl-mdr {
+	color: #0086b3;
+	font-weight: bold;
+}
+.highlight .pl-s2 {
+	color: #333;
+}
+.highlight .pl-ii {
+	background-color: #df5000;
+	color: #fff;
+}
+.highlight .pl-ib {
+	background-color: #f93;
+}
+.highlight .pl-id {
+	background-color: #a31515;
+	color: #fff;
+}
+.highlight .pl-iu {
+	background-color: #b4b7b4;
+}
+.highlight .pl-mo {
+	color: #969896;
+}
+
+</style>
+
+
+<script type="text/javascript">
+
+function getDocumentScrollTop() 
+{
+   var res = document.body.scrollTop || document.documentElement.scrollTop || window.pageYOffset || 0;
+   // alert(res);
+   return res;
+}
+
+function setDocumentScrollTop(ypos) 
+{
+	window.scrollTo(0, ypos);
+}
+
+</script>
+
+
+</head>
+<body class="markdown-body">
+<h1> <a id="developer-guide" class="anchor" href="#developer-guide" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Developer guide</h1> 
+<p>Thank you for your interest in developing wetb. This guide details how to contribute to wetb in a way that is efficient for everyone.</p> 
+<h2> <a id="contents" class="anchor" href="#contents" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Contents</h2> 
+<ul> 
+ <li><a href="#Fork-project">Fork</a></li> 
+ <li><a href="#Requirements">Requirements</a></li> 
+ <li><a href="#Install-Python">Install Python</a></li> 
+ <li><a href="#Install-dependencies">Install dependencies</a></li> 
+ <li><a href="#Get-wetb">Get wetb</a></li> 
+ <li> <a href="#Install-wetb">Install wetb</a> </li> 
+ <li><a href="#Contributions">Contributions</a></li> 
+ <li><a href="#Upload-contributions">Upload contributions</a></li> 
+ <li><a href="#Make-and-upload-wheels">Make and upload wheels</a></li> 
+</ul> 
+<h2> <a id="fork-project" class="anchor" href="#fork-project" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Fork project</h2> 
+<p>We prefer that you make your contributions in your own fork of the project, <a href="#Contributions">make your changes</a> and <a href="#Upload%20contributions">make a merge request</a>.</p> 
+<p>The project can be forked to your own user account via the &lt;Fork&gt; button on the <a href="https://gitlab.windenergy.dtu.dk/toolbox/WindEnergyToolbox">frontpage</a></p> 
+<h2> <a id="requirements" class="anchor" href="#requirements" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Requirements</h2> 
+<h3> <a id="command-line" class="anchor" href="#command-line" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Command line</h3> 
+<p>This guide will use the command line (aka command prompt) frequently. You can launch a Windows terminal as follows: press Start&gt; and type &quot;cmd&quot; + &lt;Enter&gt;. A link to the command prompt should be visible now.</p> 
+<p>In case you want an alternative, more capable windows terminal, you could consider using <a href="https://conemu.github.io/">ConEmu</a> (this is optional).</p> 
+<blockquote> 
+ <p>ConEmu-Maximus5 is a Windows console emulator with tabs, which presents multiple consoles and simple GUI applications as one customizable GUI window with various features.</p> 
+</blockquote> 
+<h3> <a id="git" class="anchor" href="#git" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Git</h3> 
+<ul> 
+ <li><p>Download and install Git version control system for Windows 64-bit <a href="https://git-scm.com/download/win">here</a>. Only select the Windows Portable option if you know what you are doing or if you do not have administrative rights on your computer.</p></li> 
+ <li><p>Git comes with a simple GUI, but there are more and different options available if you are not happy with it, see <a href="https://git-scm.com/downloads/guis">here</a>.</p></li> 
+ <li><p>On windows we highly recommend <a href="https://tortoisegit.org/">tortoisegit</a>. It is a gui integrated into the windows explorer. </p></li> 
+</ul> 
+<h2> <a id="install-python" class="anchor" href="#install-python" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Install Python</h2> 
+<p>For all platforms we recommend that you download and install the Anaconda - a professional grade, full blown scientific Python distribution. </p> 
+<h3> <a id="installing-anaconda-activate-root-environment" class="anchor" href="#installing-anaconda-activate-root-environment" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Installing Anaconda, activate root environment</h3> 
+<ul> 
+ <li>Download and install Anaconda (Python 3.5 version, 64 bit installer is recommended) from <a href="https://www.continuum.io/downloads">https://www.continuum.io/downloads</a> </li> 
+</ul> 
+<blockquote> 
+ <p>Note: The Python 2.7 or Python 3.5 choice of Anaconda only affects the root environment. You can always create additional environments using other Python versions, see below.</p> 
+</blockquote> 
+<ul> 
+ <li>Update the root Anaconda environment (type in a terminal):</li> 
+</ul> 
+<pre><code>&gt;&gt; conda update --all
+</code></pre> 
+<ul> 
+ <li>Activate the Anaconda root environment in a terminal as follows:</li> 
+</ul> 
+<pre><code>&gt;&gt; activate
+</code></pre> 
+<p>and your terminal will do something like:</p> 
+<pre><code>C:\Users\&gt; activate
+[Anaconda3] C:\Users\&gt;
+</code></pre> 
+<p>note that the name of the environment is now a prefix before the current path.</p> 
+<p>use <code>deactivate</code> to deactivate the environment.</p> 
+<h3> <a id="optionally-create-other-independent-anaconda-environments" class="anchor" href="#optionally-create-other-independent-anaconda-environments" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Optionally, create other independent Anaconda environments</h3> 
+<ul> 
+ <li>By using environments you can manage different Python installations with different versions on your system. Creating environments is as easy as:</li> 
+</ul> 
+<pre><code>&gt;&gt; conda create -n py27 python=2.7
+&gt;&gt; conda create -n py34 python=3.4
+&gt;&gt; conda create -n py35 python=3.5
+</code></pre> 
+<ul> 
+ <li>These environments can be activated as follows:</li> 
+</ul> 
+<pre><code>&gt;&gt; activate py27
+&gt;&gt; activate py34
+&gt;&gt; activate py35
+</code></pre> 
+<p>The Python distribution in use will now be located in e.g. &lt;path_to_anaconda&gt;/env/py35/</p> 
+<p>use <code>deactivate</code> to deactivate the environment.</p> 
+<h2> <a id="install-dependencies" class="anchor" href="#install-dependencies" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Install dependencies</h2> 
+<p>Install the necessary Python dependencies using the conda package manager:</p> 
+<pre><code>&gt;&gt; conda install setuptools_scm future h5py pytables pytest nose sphinx
+&gt;&gt; conda install scipy pandas matplotlib cython xlrd coverage xlwt openpyxl psutil
+&gt;&gt; conda install -c https://conda.anaconda.org/conda-forge pyscaffold pytest-cov
+</code></pre> 
+<h2> <a id="get-wetb" class="anchor" href="#get-wetb" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Get wetb</h2> 
+<p>Copy the https - link on the front page of your fork of wetb</p> 
+<pre><code>&gt;&gt; git clone &lt;https-link&gt;
+</code></pre> 
+<p>or via tortoise-git:</p> 
+<ul> 
+ <li>Right-click in your working folder</li> 
+ <li>&quot;Git Clone...&quot;</li> 
+ <li>&lt;Ok&gt;</li> 
+</ul> 
+<h2> <a id="install-wetb" class="anchor" href="#install-wetb" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Install wetb</h2> 
+<pre><code>&gt;&gt; cd WindEnergyToolbox
+&gt;&gt; pip install -e . --no-deps
+</code></pre> 
+<h2> <a id="contributions" class="anchor" href="#contributions" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Contributions</h2> 
+<p>If you make a change in the toolbox, that others can benefit from please make a merge request.</p> 
+<p>If you can, please submit a merge request with the fix or improvements including tests. </p> 
+<p>The workflow to make a merge request is as follows:</p> 
+<ul> 
+ <li>Create a feature branch, branch away from master</li> 
+ <li>Write tests and code</li> 
+ <li>Push the commit(s) to your fork</li> 
+ <li>Submit a merge request (MR) to the master branch of </li> 
+ <li>Link any relevant issues in the merge request description and leave a comment on them with a link back to the MR</li> 
+ <li>Your tests should run as fast as possible, and if it uses test files, these files should be as small as possible.</li> 
+ <li>Please keep the change in a single MR as small as possible. Split the functionality if you can</li> 
+</ul> 
+<h2> <a id="upload-contributions" class="anchor" href="#upload-contributions" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Upload contributions</h2> 
+<p>To be written</p> 
+<h2> <a id="make-and-upload-wheels" class="anchor" href="#make-and-upload-wheels" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Make and upload wheels</h2> 
+<pre><code>&gt;&gt; conda install --channel https://conda.anaconda.org/pbrod twine
+</code></pre> 
+<ul> 
+ <li>Make tag</li> 
+ <li>pip install -e . --upgrade</li> 
+ <li>python setup.py bdist_wheel -d dist</li> 
+ <li>twine upload dist*</li> 
+</ul>
+</body>
+</html>
-- 
GitLab