diff --git a/docs/.developer-guide.md.html b/docs/.developer-guide.md.html new file mode 100644 index 0000000000000000000000000000000000000000..78112972959461fa3231ac8af29bdab779f59196 --- /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 <Fork> 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> and type "cmd" + <Enter>. 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>>> conda update --all +</code></pre> +<ul> + <li>Activate the Anaconda root environment in a terminal as follows:</li> +</ul> +<pre><code>>> activate +</code></pre> +<p>and your terminal will do something like:</p> +<pre><code>C:\Users\> activate +[Anaconda3] C:\Users\> +</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>>> conda create -n py27 python=2.7 +>> conda create -n py34 python=3.4 +>> conda create -n py35 python=3.5 +</code></pre> +<ul> + <li>These environments can be activated as follows:</li> +</ul> +<pre><code>>> activate py27 +>> activate py34 +>> activate py35 +</code></pre> +<p>The Python distribution in use will now be located in e.g. <path_to_anaconda>/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>>> conda install setuptools_scm future h5py pytables pytest nose sphinx +>> conda install scipy pandas matplotlib cython xlrd coverage xlwt openpyxl psutil +>> 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>>> git clone <https-link> +</code></pre> +<p>or via tortoise-git:</p> +<ul> + <li>Right-click in your working folder</li> + <li>"Git Clone..."</li> + <li><Ok></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>>> cd WindEnergyToolbox +>> 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>>> 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>