").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m});
diff --git a/docs/assets/js/main.js b/docs/assets/js/main.js
deleted file mode 100644
index 29dd0097..00000000
--- a/docs/assets/js/main.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- Prism by TEMPLATED
- templated.co @templatedco
- Released for free under the Creative Commons Attribution 3.0 license (templated.co/license)
-*/
-
-(function($) {
-
- skel.breakpoints({
- xlarge: '(max-width: 1680px)',
- large: '(max-width: 1280px)',
- medium: '(max-width: 980px)',
- small: '(max-width: 736px)',
- xsmall: '(max-width: 480px)'
- });
-
- $(function() {
-
- var $window = $(window),
- $body = $('body');
-
- // Disable animations/transitions until the page has loaded.
- $body.addClass('is-loading');
-
- $window.on('load', function() {
- window.setTimeout(function() {
- $body.removeClass('is-loading');
- }, 100);
- });
-
- // Fix: Placeholder polyfill.
- $('form').placeholder();
-
- // Prioritize "important" elements on medium.
- skel.on('+medium -medium', function() {
- $.prioritize(
- '.important\\28 medium\\29',
- skel.breakpoint('medium').active
- );
- });
-
- });
-
-})(jQuery);
\ No newline at end of file
diff --git a/docs/assets/js/skel.min.js b/docs/assets/js/skel.min.js
deleted file mode 100644
index 4f6a6749..00000000
--- a/docs/assets/js/skel.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* skel.js v3.0.0 | (c) n33 | skel.io | MIT licensed */
-var skel=function(){"use strict";var t={breakpointIds:null,events:{},isInit:!1,obj:{attachments:{},breakpoints:{},head:null,states:{}},sd:"/",state:null,stateHandlers:{},stateId:"",vars:{},DOMReady:null,indexOf:null,isArray:null,iterate:null,matchesMedia:null,extend:function(e,n){t.iterate(n,function(i){t.isArray(n[i])?(t.isArray(e[i])||(e[i]=[]),t.extend(e[i],n[i])):"object"==typeof n[i]?("object"!=typeof e[i]&&(e[i]={}),t.extend(e[i],n[i])):e[i]=n[i]})},newStyle:function(t){var e=document.createElement("style");return e.type="text/css",e.innerHTML=t,e},_canUse:null,canUse:function(e){t._canUse||(t._canUse=document.createElement("div"));var n=t._canUse.style,i=e.charAt(0).toUpperCase()+e.slice(1);return e in n||"Moz"+i in n||"Webkit"+i in n||"O"+i in n||"ms"+i in n},on:function(e,n){var i=e.split(/[\s]+/);return t.iterate(i,function(e){var a=i[e];if(t.isInit){if("init"==a)return void n();if("change"==a)n();else{var r=a.charAt(0);if("+"==r||"!"==r){var o=a.substring(1);if(o in t.obj.breakpoints)if("+"==r&&t.obj.breakpoints[o].active)n();else if("!"==r&&!t.obj.breakpoints[o].active)return void n()}}}t.events[a]||(t.events[a]=[]),t.events[a].push(n)}),t},trigger:function(e){return t.events[e]&&0!=t.events[e].length?(t.iterate(t.events[e],function(n){t.events[e][n]()}),t):void 0},breakpoint:function(e){return t.obj.breakpoints[e]},breakpoints:function(e){function n(t,e){this.name=this.id=t,this.media=e,this.active=!1,this.wasActive=!1}return n.prototype.matches=function(){return t.matchesMedia(this.media)},n.prototype.sync=function(){this.wasActive=this.active,this.active=this.matches()},t.iterate(e,function(i){t.obj.breakpoints[i]=new n(i,e[i])}),window.setTimeout(function(){t.poll()},0),t},addStateHandler:function(e,n){t.stateHandlers[e]=n},callStateHandler:function(e){var n=t.stateHandlers[e]();t.iterate(n,function(e){t.state.attachments.push(n[e])})},changeState:function(e){t.iterate(t.obj.breakpoints,function(e){t.obj.breakpoints[e].sync()}),t.vars.lastStateId=t.stateId,t.stateId=e,t.breakpointIds=t.stateId===t.sd?[]:t.stateId.substring(1).split(t.sd),t.obj.states[t.stateId]?t.state=t.obj.states[t.stateId]:(t.obj.states[t.stateId]={attachments:[]},t.state=t.obj.states[t.stateId],t.iterate(t.stateHandlers,t.callStateHandler)),t.detachAll(t.state.attachments),t.attachAll(t.state.attachments),t.vars.stateId=t.stateId,t.vars.state=t.state,t.trigger("change"),t.iterate(t.obj.breakpoints,function(e){t.obj.breakpoints[e].active?t.obj.breakpoints[e].wasActive||t.trigger("+"+e):t.obj.breakpoints[e].wasActive&&t.trigger("-"+e)})},generateStateConfig:function(e,n){var i={};return t.extend(i,e),t.iterate(t.breakpointIds,function(e){t.extend(i,n[t.breakpointIds[e]])}),i},getStateId:function(){var e="";return t.iterate(t.obj.breakpoints,function(n){var i=t.obj.breakpoints[n];i.matches()&&(e+=t.sd+i.id)}),e},poll:function(){var e="";e=t.getStateId(),""===e&&(e=t.sd),e!==t.stateId&&t.changeState(e)},_attach:null,attach:function(e){var n=t.obj.head,i=e.element;return i.parentNode&&i.parentNode.tagName?!1:(t._attach||(t._attach=n.firstChild),n.insertBefore(i,t._attach.nextSibling),e.permanent&&(t._attach=i),!0)},attachAll:function(e){var n=[];t.iterate(e,function(t){n[e[t].priority]||(n[e[t].priority]=[]),n[e[t].priority].push(e[t])}),n.reverse(),t.iterate(n,function(e){t.iterate(n[e],function(i){t.attach(n[e][i])})})},detach:function(t){var e=t.element;return t.permanent||!e.parentNode||e.parentNode&&!e.parentNode.tagName?!1:(e.parentNode.removeChild(e),!0)},detachAll:function(e){var n={};t.iterate(e,function(t){n[e[t].id]=!0}),t.iterate(t.obj.attachments,function(e){e in n||t.detach(t.obj.attachments[e])})},attachment:function(e){return e in t.obj.attachments?t.obj.attachments[e]:null},newAttachment:function(e,n,i,a){return t.obj.attachments[e]={id:e,element:n,priority:i,permanent:a}},init:function(){t.initMethods(),t.initVars(),t.initEvents(),t.obj.head=document.getElementsByTagName("head")[0],t.isInit=!0,t.trigger("init")},initEvents:function(){t.on("resize",function(){t.poll()}),t.on("orientationChange",function(){t.poll()}),t.DOMReady(function(){t.trigger("ready")}),window.onload&&t.on("load",window.onload),window.onload=function(){t.trigger("load")},window.onresize&&t.on("resize",window.onresize),window.onresize=function(){t.trigger("resize")},window.onorientationchange&&t.on("orientationChange",window.onorientationchange),window.onorientationchange=function(){t.trigger("orientationChange")}},initMethods:function(){document.addEventListener?!function(e,n){t.DOMReady=n()}("domready",function(){function t(t){for(r=1;t=n.shift();)t()}var e,n=[],i=document,a="DOMContentLoaded",r=/^loaded|^c/.test(i.readyState);return i.addEventListener(a,e=function(){i.removeEventListener(a,e),t()}),function(t){r?t():n.push(t)}}):!function(e,n){t.DOMReady=n()}("domready",function(t){function e(t){for(h=1;t=i.shift();)t()}var n,i=[],a=!1,r=document,o=r.documentElement,s=o.doScroll,c="DOMContentLoaded",d="addEventListener",u="onreadystatechange",l="readyState",f=s?/^loaded|^c/:/^loaded|c/,h=f.test(r[l]);return r[d]&&r[d](c,n=function(){r.removeEventListener(c,n,a),e()},a),s&&r.attachEvent(u,n=function(){/^c/.test(r[l])&&(r.detachEvent(u,n),e())}),t=s?function(e){self!=top?h?e():i.push(e):function(){try{o.doScroll("left")}catch(n){return setTimeout(function(){t(e)},50)}e()}()}:function(t){h?t():i.push(t)}}),Array.prototype.indexOf?t.indexOf=function(t,e){return t.indexOf(e)}:t.indexOf=function(t,e){if("string"==typeof t)return t.indexOf(e);var n,i,a=e?e:0;if(!this)throw new TypeError;if(i=this.length,0===i||a>=i)return-1;for(0>a&&(a=i-Math.abs(a)),n=a;i>n;n++)if(this[n]===t)return n;return-1},Array.isArray?t.isArray=function(t){return Array.isArray(t)}:t.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)},Object.keys?t.iterate=function(t,e){if(!t)return[];var n,i=Object.keys(t);for(n=0;i[n]&&e(i[n],t[i[n]])!==!1;n++);}:t.iterate=function(t,e){if(!t)return[];var n;for(n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&e(n,t[n])===!1)break},window.matchMedia?t.matchesMedia=function(t){return""==t?!0:window.matchMedia(t).matches}:window.styleMedia||window.media?t.matchesMedia=function(t){if(""==t)return!0;var e=window.styleMedia||window.media;return e.matchMedium(t||"all")}:window.getComputedStyle?t.matchesMedia=function(t){if(""==t)return!0;var e=document.createElement("style"),n=document.getElementsByTagName("script")[0],i=null;e.type="text/css",e.id="matchmediajs-test",n.parentNode.insertBefore(e,n),i="getComputedStyle"in window&&window.getComputedStyle(e,null)||e.currentStyle;var a="@media "+t+"{ #matchmediajs-test { width: 1px; } }";return e.styleSheet?e.styleSheet.cssText=a:e.textContent=a,"1px"===i.width}:t.matchesMedia=function(t){if(""==t)return!0;var e,n,i,a,r={"min-width":null,"max-width":null},o=!1;for(i=t.split(/\s+and\s+/),e=0;e
r["max-width"]||null!==r["min-height"]&&cr["max-height"]?!1:!0},navigator.userAgent.match(/MSIE ([0-9]+)/)&&RegExp.$1<9&&(t.newStyle=function(t){var e=document.createElement("span");return e.innerHTML=' ",e})},initVars:function(){var e,n,i,a=navigator.userAgent;e="other",n=0,i=[["firefox",/Firefox\/([0-9\.]+)/],["bb",/BlackBerry.+Version\/([0-9\.]+)/],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/],["opera",/OPR\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)/],["edge",/Edge\/([0-9\.]+)/],["safari",/Version\/([0-9\.]+).+Safari/],["chrome",/Chrome\/([0-9\.]+)/],["ie",/MSIE ([0-9]+)/],["ie",/Trident\/.+rv:([0-9]+)/]],t.iterate(i,function(t,i){return a.match(i[1])?(e=i[0],n=parseFloat(RegExp.$1),!1):void 0}),t.vars.browser=e,t.vars.browserVersion=n,e="other",n=0,i=[["ios",/([0-9_]+) like Mac OS X/,function(t){return t.replace("_",".").replace("_","")}],["ios",/CPU like Mac OS X/,function(t){return 0}],["android",/Android ([0-9\.]+)/,null],["mac",/Macintosh.+Mac OS X ([0-9_]+)/,function(t){return t.replace("_",".").replace("_","")}],["wp",/Windows Phone ([0-9\.]+)/,null],["windows",/Windows NT ([0-9\.]+)/,null],["bb",/BlackBerry.+Version\/([0-9\.]+)/,null],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/,null]],t.iterate(i,function(t,i){return a.match(i[1])?(e=i[0],n=parseFloat(i[2]?i[2](RegExp.$1):RegExp.$1),!1):void 0}),t.vars.os=e,t.vars.osVersion=n,t.vars.IEVersion="ie"==t.vars.browser?t.vars.browserVersion:99,t.vars.touch="wp"==t.vars.os?navigator.msMaxTouchPoints>0:!!("ontouchstart"in window),t.vars.mobile="wp"==t.vars.os||"android"==t.vars.os||"ios"==t.vars.os||"bb"==t.vars.os}};return t.init(),t}();!function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?module.exports=e():t.skel=e()}(this,function(){return skel});
diff --git a/docs/assets/js/util.js b/docs/assets/js/util.js
deleted file mode 100644
index ecf7b371..00000000
--- a/docs/assets/js/util.js
+++ /dev/null
@@ -1,587 +0,0 @@
-(function($) {
-
- /**
- * Generate an indented list of links from a nav. Meant for use with panel().
- * @return {jQuery} jQuery object.
- */
- $.fn.navList = function() {
-
- var $this = $(this);
- $a = $this.find('a'),
- b = [];
-
- $a.each(function() {
-
- var $this = $(this),
- indent = Math.max(0, $this.parents('li').length - 1),
- href = $this.attr('href'),
- target = $this.attr('target');
-
- b.push(
- '' +
- ' ' +
- $this.text() +
- ' '
- );
-
- });
-
- return b.join('');
-
- };
-
- /**
- * Panel-ify an element.
- * @param {object} userConfig User config.
- * @return {jQuery} jQuery object.
- */
- $.fn.panel = function(userConfig) {
-
- // No elements?
- if (this.length == 0)
- return $this;
-
- // Multiple elements?
- if (this.length > 1) {
-
- for (var i=0; i < this.length; i++)
- $(this[i]).panel(userConfig);
-
- return $this;
-
- }
-
- // Vars.
- var $this = $(this),
- $body = $('body'),
- $window = $(window),
- id = $this.attr('id'),
- config;
-
- // Config.
- config = $.extend({
-
- // Delay.
- delay: 0,
-
- // Hide panel on link click.
- hideOnClick: false,
-
- // Hide panel on escape keypress.
- hideOnEscape: false,
-
- // Hide panel on swipe.
- hideOnSwipe: false,
-
- // Reset scroll position on hide.
- resetScroll: false,
-
- // Reset forms on hide.
- resetForms: false,
-
- // Side of viewport the panel will appear.
- side: null,
-
- // Target element for "class".
- target: $this,
-
- // Class to toggle.
- visibleClass: 'visible'
-
- }, userConfig);
-
- // Expand "target" if it's not a jQuery object already.
- if (typeof config.target != 'jQuery')
- config.target = $(config.target);
-
- // Panel.
-
- // Methods.
- $this._hide = function(event) {
-
- // Already hidden? Bail.
- if (!config.target.hasClass(config.visibleClass))
- return;
-
- // If an event was provided, cancel it.
- if (event) {
-
- event.preventDefault();
- event.stopPropagation();
-
- }
-
- // Hide.
- config.target.removeClass(config.visibleClass);
-
- // Post-hide stuff.
- window.setTimeout(function() {
-
- // Reset scroll position.
- if (config.resetScroll)
- $this.scrollTop(0);
-
- // Reset forms.
- if (config.resetForms)
- $this.find('form').each(function() {
- this.reset();
- });
-
- }, config.delay);
-
- };
-
- // Vendor fixes.
- $this
- .css('-ms-overflow-style', '-ms-autohiding-scrollbar')
- .css('-webkit-overflow-scrolling', 'touch');
-
- // Hide on click.
- if (config.hideOnClick) {
-
- $this.find('a')
- .css('-webkit-tap-highlight-color', 'rgba(0,0,0,0)');
-
- $this
- .on('click', 'a', function(event) {
-
- var $a = $(this),
- href = $a.attr('href'),
- target = $a.attr('target');
-
- if (!href || href == '#' || href == '' || href == '#' + id)
- return;
-
- // Cancel original event.
- event.preventDefault();
- event.stopPropagation();
-
- // Hide panel.
- $this._hide();
-
- // Redirect to href.
- window.setTimeout(function() {
-
- if (target == '_blank')
- window.open(href);
- else
- window.location.href = href;
-
- }, config.delay + 10);
-
- });
-
- }
-
- // Event: Touch stuff.
- $this.on('touchstart', function(event) {
-
- $this.touchPosX = event.originalEvent.touches[0].pageX;
- $this.touchPosY = event.originalEvent.touches[0].pageY;
-
- })
-
- $this.on('touchmove', function(event) {
-
- if ($this.touchPosX === null
- || $this.touchPosY === null)
- return;
-
- var diffX = $this.touchPosX - event.originalEvent.touches[0].pageX,
- diffY = $this.touchPosY - event.originalEvent.touches[0].pageY,
- th = $this.outerHeight(),
- ts = ($this.get(0).scrollHeight - $this.scrollTop());
-
- // Hide on swipe?
- if (config.hideOnSwipe) {
-
- var result = false,
- boundary = 20,
- delta = 50;
-
- switch (config.side) {
-
- case 'left':
- result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX > delta);
- break;
-
- case 'right':
- result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX < (-1 * delta));
- break;
-
- case 'top':
- result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY > delta);
- break;
-
- case 'bottom':
- result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY < (-1 * delta));
- break;
-
- default:
- break;
-
- }
-
- if (result) {
-
- $this.touchPosX = null;
- $this.touchPosY = null;
- $this._hide();
-
- return false;
-
- }
-
- }
-
- // Prevent vertical scrolling past the top or bottom.
- if (($this.scrollTop() < 0 && diffY < 0)
- || (ts > (th - 2) && ts < (th + 2) && diffY > 0)) {
-
- event.preventDefault();
- event.stopPropagation();
-
- }
-
- });
-
- // Event: Prevent certain events inside the panel from bubbling.
- $this.on('click touchend touchstart touchmove', function(event) {
- event.stopPropagation();
- });
-
- // Event: Hide panel if a child anchor tag pointing to its ID is clicked.
- $this.on('click', 'a[href="#' + id + '"]', function(event) {
-
- event.preventDefault();
- event.stopPropagation();
-
- config.target.removeClass(config.visibleClass);
-
- });
-
- // Body.
-
- // Event: Hide panel on body click/tap.
- $body.on('click touchend', function(event) {
- $this._hide(event);
- });
-
- // Event: Toggle.
- $body.on('click', 'a[href="#' + id + '"]', function(event) {
-
- event.preventDefault();
- event.stopPropagation();
-
- config.target.toggleClass(config.visibleClass);
-
- });
-
- // Window.
-
- // Event: Hide on ESC.
- if (config.hideOnEscape)
- $window.on('keydown', function(event) {
-
- if (event.keyCode == 27)
- $this._hide(event);
-
- });
-
- return $this;
-
- };
-
- /**
- * Apply "placeholder" attribute polyfill to one or more forms.
- * @return {jQuery} jQuery object.
- */
- $.fn.placeholder = function() {
-
- // Browser natively supports placeholders? Bail.
- if (typeof (document.createElement('input')).placeholder != 'undefined')
- return $(this);
-
- // No elements?
- if (this.length == 0)
- return $this;
-
- // Multiple elements?
- if (this.length > 1) {
-
- for (var i=0; i < this.length; i++)
- $(this[i]).placeholder();
-
- return $this;
-
- }
-
- // Vars.
- var $this = $(this);
-
- // Text, TextArea.
- $this.find('input[type=text],textarea')
- .each(function() {
-
- var i = $(this);
-
- if (i.val() == ''
- || i.val() == i.attr('placeholder'))
- i
- .addClass('polyfill-placeholder')
- .val(i.attr('placeholder'));
-
- })
- .on('blur', function() {
-
- var i = $(this);
-
- if (i.attr('name').match(/-polyfill-field$/))
- return;
-
- if (i.val() == '')
- i
- .addClass('polyfill-placeholder')
- .val(i.attr('placeholder'));
-
- })
- .on('focus', function() {
-
- var i = $(this);
-
- if (i.attr('name').match(/-polyfill-field$/))
- return;
-
- if (i.val() == i.attr('placeholder'))
- i
- .removeClass('polyfill-placeholder')
- .val('');
-
- });
-
- // Password.
- $this.find('input[type=password]')
- .each(function() {
-
- var i = $(this);
- var x = $(
- $('')
- .append(i.clone())
- .remove()
- .html()
- .replace(/type="password"/i, 'type="text"')
- .replace(/type=password/i, 'type=text')
- );
-
- if (i.attr('id') != '')
- x.attr('id', i.attr('id') + '-polyfill-field');
-
- if (i.attr('name') != '')
- x.attr('name', i.attr('name') + '-polyfill-field');
-
- x.addClass('polyfill-placeholder')
- .val(x.attr('placeholder')).insertAfter(i);
-
- if (i.val() == '')
- i.hide();
- else
- x.hide();
-
- i
- .on('blur', function(event) {
-
- event.preventDefault();
-
- var x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');
-
- if (i.val() == '') {
-
- i.hide();
- x.show();
-
- }
-
- });
-
- x
- .on('focus', function(event) {
-
- event.preventDefault();
-
- var i = x.parent().find('input[name=' + x.attr('name').replace('-polyfill-field', '') + ']');
-
- x.hide();
-
- i
- .show()
- .focus();
-
- })
- .on('keypress', function(event) {
-
- event.preventDefault();
- x.val('');
-
- });
-
- });
-
- // Events.
- $this
- .on('submit', function() {
-
- $this.find('input[type=text],input[type=password],textarea')
- .each(function(event) {
-
- var i = $(this);
-
- if (i.attr('name').match(/-polyfill-field$/))
- i.attr('name', '');
-
- if (i.val() == i.attr('placeholder')) {
-
- i.removeClass('polyfill-placeholder');
- i.val('');
-
- }
-
- });
-
- })
- .on('reset', function(event) {
-
- event.preventDefault();
-
- $this.find('select')
- .val($('option:first').val());
-
- $this.find('input,textarea')
- .each(function() {
-
- var i = $(this),
- x;
-
- i.removeClass('polyfill-placeholder');
-
- switch (this.type) {
-
- case 'submit':
- case 'reset':
- break;
-
- case 'password':
- i.val(i.attr('defaultValue'));
-
- x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');
-
- if (i.val() == '') {
- i.hide();
- x.show();
- }
- else {
- i.show();
- x.hide();
- }
-
- break;
-
- case 'checkbox':
- case 'radio':
- i.attr('checked', i.attr('defaultValue'));
- break;
-
- case 'text':
- case 'textarea':
- i.val(i.attr('defaultValue'));
-
- if (i.val() == '') {
- i.addClass('polyfill-placeholder');
- i.val(i.attr('placeholder'));
- }
-
- break;
-
- default:
- i.val(i.attr('defaultValue'));
- break;
-
- }
- });
-
- });
-
- return $this;
-
- };
-
- /**
- * Moves elements to/from the first positions of their respective parents.
- * @param {jQuery} $elements Elements (or selector) to move.
- * @param {bool} condition If true, moves elements to the top. Otherwise, moves elements back to their original locations.
- */
- $.prioritize = function($elements, condition) {
-
- var key = '__prioritize';
-
- // Expand $elements if it's not already a jQuery object.
- if (typeof $elements != 'jQuery')
- $elements = $($elements);
-
- // Step through elements.
- $elements.each(function() {
-
- var $e = $(this), $p,
- $parent = $e.parent();
-
- // No parent? Bail.
- if ($parent.length == 0)
- return;
-
- // Not moved? Move it.
- if (!$e.data(key)) {
-
- // Condition is false? Bail.
- if (!condition)
- return;
-
- // Get placeholder (which will serve as our point of reference for when this element needs to move back).
- $p = $e.prev();
-
- // Couldn't find anything? Means this element's already at the top, so bail.
- if ($p.length == 0)
- return;
-
- // Move element to top of parent.
- $e.prependTo($parent);
-
- // Mark element as moved.
- $e.data(key, $p);
-
- }
-
- // Moved already?
- else {
-
- // Condition is true? Bail.
- if (condition)
- return;
-
- $p = $e.data(key);
-
- // Move element back to its original location (using our placeholder).
- $e.insertAfter($p);
-
- // Unmark element as moved.
- $e.removeData(key);
-
- }
-
- });
-
- };
-
-})(jQuery);
\ No newline at end of file
diff --git a/docs/images/python.png b/docs/images/python.png
deleted file mode 100644
index 23a4c6e3..00000000
Binary files a/docs/images/python.png and /dev/null differ
diff --git a/docs/images/rt_1.5e7_clean2.png b/docs/images/rt_1.5e7_clean2.png
deleted file mode 100644
index 204cd6bd..00000000
Binary files a/docs/images/rt_1.5e7_clean2.png and /dev/null differ
diff --git a/docs/index.html b/docs/index.html
deleted file mode 100644
index f1ab84b5..00000000
--- a/docs/index.html
+++ /dev/null
@@ -1,749 +0,0 @@
-
-
-
-
-
PHY 546: Python for Scientific Computing
-
-
-
-
-
-
-
-
-
-
-
-
- PHY 546: Python for Scientific Computing
- Spring 2018
-
-
-
- a weekly graduate seminar on techniques for scientific programming
- Instructor: Michael Zingale
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
xkcd
-
-
-
-
-
Some basic programming background, be it C/C++,
- Fortran, matlab, mathematica, ..., (enough to understand
- the logic of programming, control statements, basic data
- structures, etc.) is assumed.
-
-
This is a 1-credit class. The primary
- method of evaluation is class participation.
-
-
To make the most of this class, you should have python 3.x
- installed on a laptop that you can bring to the seminar.
- On Linux machines, you can get python and the needed
- libraries through your package manager. For Mac and
- Windows, you might want to consider the free
- distributions provided
- by Enthought
- Canopy
- or Anaconda .
- These both install everything you need.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Introduction to Python
-
The core language, data structures, control flow, functions, classes...
- [+/- content]
-
-
-
-
-
- Lecture slides:
-
-
- Jupyter notebooks:
-
- Week 1:
-
-
- Week 2:
-
-
- Week 3:
-
-
-
- Week 4:
-
-
-
- Week 5:
-
-
-
- Extras:
-
-
-
-
- Readings
-
-
- Practice on your own:
-
-
- Online books:
-
-
- Some python resources by disicipline
-
- Astronomy: AstroPy
-
- Atmospheric
- sciences: PyAOS
-
- Biology resources: Biopython
-
- Ocean and marine
- sciences: OceanPython.org
-
- Physics resources: QuTiP : the Quantum
- Toolbok in Python
-
- Social sciences resources: NetworkX : a
- library for exploring the structure and complexity of social
- networks
-
- Solar physics: SunPy
-
- Psychology resources: PyschoPy
-
-
-
-
-
-
-
-
-
-
-
NumPy
-
The core array library for scientific computing in python
- [+/- content]
-
-
-
- Jupyter notebooks:
-
-
- Readings
-
-
-
-
-
-
-
-
-
-
Software Development Practices
-
How to write, test, and debug code effectively...
- [+/- content]
-
-
-
- Before class materials:
-
- Install git (and bash, if you are on Windows) following
- the instructions on the Software Carpentry page:
- setting up git
- Create an account on github
- Read through the Software Carpentry Version Control with Git pages
-
-
- In-class materials:
-
-
- Readings:
-
-
- Readings on software engineering:
-
-
-
-
-
-
-
-
-
-
-
-
Matplotlib and plotting
-
The core array library for scientific computing in python
- [+/- content]
-
-
-
-
- Jupyter notebooks:
-
-
- Readings:
-
-
-
-
-
-
-
-
-
-
-
SciPy and numerical methods
-
The core array library for scientific computing in python
- [+/- content]
-
-
-
-
- Jupyter notebooks:
-
-
- Lecture slides:
-
-
-
- Other examples:
-
-
- Readings
-
-
-
-
-
-
-
-
-
-
SymPy
-
Symbolic math in python
- [+/- content]
-
-
-
-
- Jupyter notebooks:
-
-
- Readings:
-
-
-
-
-
-
-
-
-
-
-
Pandas and the DataFrame
-
a library for data analysis
- [+/- content]
-
-
-
-
- Jupyter notebooks:
-
-
- Sample datasets:
-
-
- Readings:
-
-
-
-
-
-
-
-
-
-
-
Extending python with C/Fortran
-
interacting with external code and the OS
- [+/- content]
-
-
-
-
- Lecture slides:
-
-
-
- Example codes:
-
-
- Readings:
-
-
-
-
-
-
-
-
-
-
-
Python applications and packaging
-
wrapping your code up for others to use
- [+/- content]
-
-
-
-
-
- Lecture slides:
-
-
- Readings:
-
-
-
- Examples:
-
-
-
-
-
-
-
-
-
-
-
Testing
-
testing to ensure that your code performs well
- [+/- content]
-
-
-
-
-
- Lecture slides:
-
-
-
- Examples:
-
-
-
-
-
-
-
-
-
-
-
Machine Learning
-
a quick example of machine learning using python libraries
- [+/- content]
-
-
-
-
-
- Lecture slides:
-
-
- Jupyter notebooks:
-
-
- Examples:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/old/class.css b/docs/old/class.css
deleted file mode 100644
index d1d75542..00000000
--- a/docs/old/class.css
+++ /dev/null
@@ -1,138 +0,0 @@
-body {
- background: #dddddd;
- font-size: 100%;
-}
-
-body, h1, h2, h3 {
- font-family: Carlito, Calibri, Arial, Helvetica, sans-serif;
- color: #333333;
-}
-
-h4
-{
- font-family: "Palatino Linotype", Palatino, "Book Antiqua", serif;
- font-style: italic;
- font-size: medium;
- color: #0000cc;
- font-weight: normal;
- line-height: 100%;
- position: relative;
- top: -0.25em;
- display: inline;
-}
-
-#main {
- width: 800px;
- margin: 0 auto;
- border: 2px solid black;
- padding: 1em;
- background: #ffffff;
-}
-
-h1
-{
- color: #770077;
- display: inline;
-}
-
-h2
-{
- margin-top: 1.5em;
- margin-bottom: 0.5em;
- font-size: 135%;
-}
-
-
-h3
-{
- color: #990099;
- font-weight: normal;
- font-size: 120%;
- margin: 0;
- padding: 0;
-}
-
-
-
-li
-{
- margin: 0;
- padding-bottom: 5px;
- border: none;
- color: #000088;
-}
-
-li li
-{
- margin: 0;
- padding-bottom: 5px;
- border: none;
- color: #555555;
-
-}
-
-li li li
-{
- margin: 0;
- padding-bottom: 5px;
- border: none;
- color: #005577;
-}
-
-li li li a
-{
- color: #0088aa;
-}
-
-li li li a:hover
-{
- color: #00aabb;
-}
-
-
-td {
- text-align: center;
- padding-left: 1em;
- padding-right: 1em;
-}
-
-td.gray {
- background-color: #eeeeee;
-}
-
-th {
- background-color: #000000;
- color: #ffffff;
-}
-
-table {
- border-collapse: collapse;
- border: 1px solid black;
- margin: 0 auto;
-}
-
-p.center {
- margin: 0 auto;
- padding-top: 1em;
- text-align: center;
-}
-
-div.getpython {
- margin: 2em;
- padding: 1em;
- border: 1px solid blue;
- background-color: lightblue;
- font-size: 90%;
-}
-
-div.getgit {
- margin: 2em;
- padding: 1em;
- border: 1px solid black;
- background-color: yellow;
- font-size: 90%;
-}
-
-#heading {
- text-align: center;
-}
diff --git a/docs/old/examples/C-API/numpy-ex.c b/docs/old/examples/C-API/numpy-ex.c
deleted file mode 100644
index 30149b47..00000000
--- a/docs/old/examples/C-API/numpy-ex.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/* see
- http://wiki.scipy.org/Cookbook/C_Extensions/NumPy_arrays and
- http://scipy-lectures.github.io/advanced/interfacing_with_c/interfacing_with_c.html
-*/
-
-#include
-#include
-#include
-
-
-/* a static function in C limits its scope to this file -- the linker
- won't complain about clashes */
-static PyObject* ex_function(PyObject* self, PyObject* args)
-{
-
- PyArrayObject *iarray, *oarray;
- double **iA, **oA;
- int i, j, m, n, dims[2];
-
- /* parse the inputs -- we need to know what the arguments of our
- call were. We'll assume:
-
- ex_function(array)
-
- and that we return a new array of the same dimensions
-
- In the parsing, you can do O or O! here (from the docs):
-
- O (object) [PyObject *]
-
- Store a Python object (without any conversion) in a C object
- pointer. The C program thus receives the actual object that was
- passed. The object’s reference count is not increased. The
- pointer stored is not NULL.
-
- O! (object) [typeobject, PyObject *]
-
- Store a Python object in a C object pointer. This is similar to
- O, but takes two C arguments: the first is the address of a
- Python type object, the second is the address of the C variable
- (of type PyObject*) into which the object pointer is stored. If
- the Python object does not have the required type, TypeError is
- raised.
-
- O! seems safer and preferred
-
- */
-
- if (!PyArg_ParseTuple(args, "O!", &PyArray_Type, &iarray)) return NULL;
- if (NULL == iarray) return NULL;
-
- /* check to make sure we are a double type */
- if (iarray->descr->type_num != NPY_DOUBLE ||
- iarray->nd != 2) {
- PyErr_SetString(PyExc_ValueError, "wrong input array type");
- return NULL;
- }
-
- /* get the dimensions */
- n = dims[0] = iarray->dimensions[0];
- m = dims[1] = iarray->dimensions[1];
-
- /* the new C interface can create iteration "object" using NpyIter, but we
- are not going to do that here, we want to explicitly see the different
- dimensions
- */
-
- /* make a NumPy double matrix with the same dimensions -- this will
- be contiguous, and will be our output (note, there is also a
- PyArray_NewLikeArray function) */
- oarray = (PyArrayObject *) PyArray_FromDims(2, dims, NPY_DOUBLE);
-
- /* change contigous arrays into C ** arrays -- we need to have a
- vector of pointers that point to the correct location in the
- contiguous block of memory that stores the multi-dimensional
- array data */
- iA = (double **) malloc( (size_t) (n*sizeof(double)));
- for (i = 0; i < n; i++) {
- iA[i] = (double *) iarray->data + i*m;
- }
-
- oA = (double **) malloc( (size_t) (n*sizeof(double)));
- for (i = 0; i < n; i++) {
- oA[i] = (double *) oarray->data + i*m;
- }
-
- /* now we can do our manipulation */
- for (i = 0; i < n; i ++) {
- for (j = 0; j < m; j++) {
- oA[i][j] = iA[i][j]*iA[i][j];
- }
- }
-
- /* free up the memory we allocated for the array indexing */
- free (iA);
- free (oA);
-
- /* return our python array */
- return PyArray_Return(oarray);
-
-}
-
-
-/* this is the table for function names that Python will see */
-static PyMethodDef numpy_in_cMethods[] = {
- {"example", ex_function, METH_VARARGS,
- "a simple example: square the elements of an array"},
- {NULL, NULL}
-};
-
-/* this tells python what to do when it first imports this module --
- the name follows directly from the table name above */
-PyMODINIT_FUNC initnumpy_in_c(void) {
- (void) Py_InitModule("numpy_in_c", numpy_in_cMethods);
- import_array(); // this deals with the NumPy stuff
-}
diff --git a/docs/old/examples/C-API/setup.py b/docs/old/examples/C-API/setup.py
deleted file mode 100644
index adef569d..00000000
--- a/docs/old/examples/C-API/setup.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from distutils.core import setup, Extension
-import numpy
-
-# define the extension module
-numpy_in_c = Extension('numpy_in_c', sources=['numpy-ex.c'],
- include_dirs=[numpy.get_include()]) #,
-# define_macros=[("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION")])
-
-# run the setup
-setup(ext_modules=[numpy_in_c])
diff --git a/docs/old/examples/C-API/test-C-API.py b/docs/old/examples/C-API/test-C-API.py
deleted file mode 100644
index 7a193c7f..00000000
--- a/docs/old/examples/C-API/test-C-API.py
+++ /dev/null
@@ -1,11 +0,0 @@
-import numpy_in_c
-import numpy as np
-
-a = np.arange(20, dtype=np.float64)
-a.shape = (4,5)
-print a
-
-b = numpy_in_c.example(a)
-print b
-
-
diff --git a/docs/old/examples/Cython/setup.py b/docs/old/examples/Cython/setup.py
deleted file mode 100644
index 35d7937a..00000000
--- a/docs/old/examples/Cython/setup.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from distutils.core import setup
-from distutils.extension import Extension
-from Cython.Distutils import build_ext
-
-import numpy
-
-ext = Extension("square", ["square.pyx"],
- include_dirs = [numpy.get_include()])
-
-setup(ext_modules=[ext],
- cmdclass = {'build_ext': build_ext})
diff --git a/docs/old/examples/Cython/square.pyx b/docs/old/examples/Cython/square.pyx
deleted file mode 100644
index aaeb97f5..00000000
--- a/docs/old/examples/Cython/square.pyx
+++ /dev/null
@@ -1,25 +0,0 @@
-cimport numpy as np
-import numpy as np
-
-#cython: boundscheck=False
-#cython: wraparound=False
-
-def cy_square(np.ndarray[double, ndim=2] A):
-
- # in Cython, we should use cdef to declare the types of the variables
- # this helps with generating the C code
- cdef int nx = A.shape[0]
- cdef int ny = A.shape[1]
-
- # return array -- we allocate it much like in straight NumPy
- cdef np.ndarray B = np.zeros( (nx, ny), dtype=np.float64)
-
- cdef int i, j
- for i in range(nx):
- for j in range(ny):
- B[i,j] = A[i,j]**2
-
- return B
-
-
-
diff --git a/docs/old/examples/Cython/test_cy.py b/docs/old/examples/Cython/test_cy.py
deleted file mode 100644
index 8a926e84..00000000
--- a/docs/old/examples/Cython/test_cy.py
+++ /dev/null
@@ -1,36 +0,0 @@
-import numpy as np
-import square
-
-import time
-
-N = 400
-M = 600
-
-A = np.arange(M*N, dtype=np.float64)
-A.shape = (N,M)
-
-# python version (note: this is a simple example, so doing B = A**2
-# will be faster than any of these methods)
-start = time.time()
-
-B = np.zeros_like(A)
-
-for i in range(A.shape[0]):
- for j in range(A.shape[1]):
- B[i,j] = A[i,j]**2
-
-
-print "pure python: ", time.time() - start
-
-# using our Cython routine
-start = time.time()
-
-B_cy = square.cy_square(A)
-
-print "cython: ", time.time() - start
-
-
-
-
-
-
diff --git a/docs/old/examples/argparse_example.py b/docs/old/examples/argparse_example.py
deleted file mode 100755
index fa046465..00000000
--- a/docs/old/examples/argparse_example.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env python
-
-# to get usage: use -h
-import sys
-import argparse
-
-
-# simple example of argparse
-#
-# ./argparse_example.py -a -b # -c string --darg --earg fextra
-
-parser = argparse.ArgumentParser()
-parser.add_argument("-a", help="the -a option", action="store_true")
-parser.add_argument("-b", help="-b takes a number", type=int, default=0)
-parser.add_argument("-c", help="-c takes a string", type=str, default=None)
-parser.add_argument("--darg", help="the --darg option", action="store_true")
-parser.add_argument("--earg", help="--earg takes a string", type=str,
- default="example string")
-
-# extra arguments (positional)
-parser.add_argument("extras", metavar="extra", type=str, nargs="*",
- help="optional positional arguments")
-
-args = parser.parse_args()
-
-
-if args.a: print "-a set"
-print "-b = {}".format(args.b)
-print "-c = {}".format(args.c)
-if args.darg: print "--dargs set"
-print "--earg value = {}".format(args.earg)
-
-print " "
-print "extra positional arguments: "
-if len(args.extras) > 0:
- for e in args.extras:
- print e
diff --git a/docs/old/examples/ctypes/Makefile b/docs/old/examples/ctypes/Makefile
deleted file mode 100644
index ee5ce8ab..00000000
--- a/docs/old/examples/ctypes/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-ALL: cfunc_multid.so
-
-SOURCES := cfunc_multid.c
-OBJECTS := $(SOURCES:.c=.o)
-
-%.o: %.c
- gcc -c -fPIC $< -o $@
-
-
-cfunc_multid.so: $(OBJECTS)
- gcc -shared -o cfunc_multid.so $(OBJECTS)
-
diff --git a/docs/old/examples/ctypes/cfunc_multid.c b/docs/old/examples/ctypes/cfunc_multid.c
deleted file mode 100644
index 6bb6b1d0..00000000
--- a/docs/old/examples/ctypes/cfunc_multid.c
+++ /dev/null
@@ -1,27 +0,0 @@
-#include
-
-int my_subroutine(double *iarray, int ilen, int jlen,
- double *oarray) {
-
- /* here iarray and oarray are pointers to a contiguous space in
- memory. We wish to access them as 2-d arrays. */
-
- /* note: there is no error or bounds checking done here! */
- double *iA[ilen], *oA[ilen];
-
- int i;
- for (i = 0; i < ilen; i++) {
- iA[i] = iarray + i*jlen;
- oA[i] = oarray + i*jlen;
- }
-
-
- int j;
- for (i = 0; i < ilen; i++) {
- for (j = 0; j < jlen; j++) {
- oA[i][j] = iA[i][j]*iA[i][j];
- }
- }
-
- return 0;
-}
diff --git a/docs/old/examples/ctypes/test-ctypes.py b/docs/old/examples/ctypes/test-ctypes.py
deleted file mode 100644
index dceb939b..00000000
--- a/docs/old/examples/ctypes/test-ctypes.py
+++ /dev/null
@@ -1,28 +0,0 @@
-import numpy as np
-import ctypes as C
-from numpy.ctypeslib import ndpointer
-
-# the NumPy way to call this function
-
-_cfunc = np.ctypeslib.load_library('cfunc_multid', '.')
-_cfunc.my_subroutine.restype = C.c_int
-_cfunc.my_subroutine.argtypes = [ndpointer(C.c_double, flags="C_CONTIGUOUS"),
- C.c_int, C.c_int,
- ndpointer(C.c_double, flags="C_CONTIGUOUS")]
-
-def my_subroutine(A, B):
- return _cfunc.my_subroutine(A, C.c_int(A.shape[0]), C.c_int(A.shape[1]), B)
-
-A = np.arange(20, dtype=np.float64)
-A.shape = (4,5)
-
-
-# here we pre-allocate the return array
-B = np.zeros_like(A)
-
-n = my_subroutine(A, B)
-
-print B
-
-
-
diff --git a/docs/old/examples/f2py/Makefile b/docs/old/examples/f2py/Makefile
deleted file mode 100644
index 05fb2350..00000000
--- a/docs/old/examples/f2py/Makefile
+++ /dev/null
@@ -1,4 +0,0 @@
-ALL: numpy_in_f.so
-
-numpy_in_f.so: numpy_in_f.f90
- f2py --fcompiler=gnu95 -c numpy_in_f.f90 -m numpy_in_f
diff --git a/docs/old/examples/f2py/numpy_in_f.f90 b/docs/old/examples/f2py/numpy_in_f.f90
deleted file mode 100644
index 2ffc848b..00000000
--- a/docs/old/examples/f2py/numpy_in_f.f90
+++ /dev/null
@@ -1,23 +0,0 @@
-subroutine square(a, b, nx, ny)
-
- implicit none
-
- integer, intent(in) :: nx, ny
- double precision, intent(in) :: a(nx, ny)
- double precision, intent(out) :: b(nx, ny)
-
-!f2py depend(nx, ny) :: a, b
-!f2py intent(in) :: a
-!f2py intent(out) :: b
-
-! call this as b = numpy_in_f.square(a, nx, ny)
-
- integer :: i, j
-
- do j = 1, ny
- do i = 1, nx
- b(i,j) = a(i,j)**2
- enddo
- enddo
-
-end subroutine square
diff --git a/docs/old/examples/f2py/test_f2py.py b/docs/old/examples/f2py/test_f2py.py
deleted file mode 100644
index 03f3dfe4..00000000
--- a/docs/old/examples/f2py/test_f2py.py
+++ /dev/null
@@ -1,13 +0,0 @@
-import numpy as np
-import numpy_in_f
-
-a = np.arange(24, dtype=np.float64)
-a.shape = (4,6)
-
-print a.flags
-
-b = numpy_in_f.square(a, a.shape[0], a.shape[1])
-
-print b
-
-print b.flags
diff --git a/docs/old/examples/gauss-test.py b/docs/old/examples/gauss-test.py
deleted file mode 100644
index 9d283a43..00000000
--- a/docs/old/examples/gauss-test.py
+++ /dev/null
@@ -1,78 +0,0 @@
-from __future__ import print_function
-
-import numpy
-from gauss import *
-from matmul import *
-
-
-# tests of gaussian elimination
-
-A = numpy.array([ [1, 1, 1], [-1, 2, 0], [2, 0, 1] ], dtype=numpy.float64)
-b = numpy.array([6, 3, 5], dtype=numpy.float64)
-
-# gaussElim changes A in place -- send a copy
-x, d = gauss_elim(A.copy(), b.copy(), return_det=1)
-
-# test it by multiplying A x
-bout = mult_Ax(A, x)
-
-print("matrix A:\n", A)
-print("RHS (b): ", b)
-print("solved x: ", x)
-print("det{A}: ", d)
-print("A.x: ", bout)
-print(" ")
-
-A = numpy.array([ [0, 1, 1], [1, 1, 0], [1, 0, 1] ], dtype=numpy.float64)
-b = numpy.array([5, 3, 4], dtype=numpy.float64)
-x = gauss_elim(A.copy(), b.copy())
-
-# test it by multiplying A x
-bout = mult_Ax(A, x)
-
-print("matrix A:\n", A)
-print("RHS (b): ", b)
-print("solved x: ", x)
-print("A.x: ", bout)
-print(" ")
-
-
-A = numpy.array([ [0, 0, 0, 4],
- [0, 0, 3, 0],
- [5, 6, 7, 8],
- [0, 4, 3, 2] ], dtype=numpy.float64)
-b = numpy.array([5, 4, 9, 1], dtype=numpy.float64)
-x = gauss_elim(A.copy(), b.copy())
-
-# test it by multiplying A x
-bout = mult_Ax(A, x)
-
-print("matrix A:\n", A)
-print("RHS (b): ", b)
-print("solved x: ", x)
-print("A.x: ", bout)
-print(" ")
-
-
-A = numpy.array([ [ 4, 3, 4, 10],
- [ 2, -7, 3, 0],
- [-2, 11, 1, 3],
- [ 3, -4, 0, 2] ], dtype=numpy.float64)
-b = numpy.array([2, 6, 3, 1], dtype=numpy.float64)
-x = gauss_elim(A.copy(), b.copy())
-
-# test it by multiplying A x
-bout = mult_Ax(A, x)
-
-print("matrix A:\n", A)
-print("RHS (b): ", b)
-print("solved x: ", x)
-print("A.x: ", bout)
-print(" ")
-
-
-
-
-
-
-
diff --git a/docs/old/examples/gauss.py b/docs/old/examples/gauss.py
deleted file mode 100644
index 9082a333..00000000
--- a/docs/old/examples/gauss.py
+++ /dev/null
@@ -1,117 +0,0 @@
-# gaussian elimination with scaled pivoting
-#
-# M. Zingale (2013-02-25)
-
-from __future__ import print_function
-import numpy as np
-
-def gauss_elim(A, b, return_det=0, quiet=0):
- """ perform gaussian elimination with pivoting, solving A x = b.
-
- A is an NxN matrix, x and b are an N-element vectors. Note: A
- and b are changed upon exit to be in upper triangular (row
- echelon) form """
-
- # b is a vector
- if not b.ndim == 1:
- print("ERROR: b should be a vector")
- return None
-
- N = len(b)
-
- # A is square, with each dimension of length N
- if not A.shape == (N, N):
- print("ERROR: A should be square with each dim of same length as b")
- return None
-
- # allocation the solution array
- x = np.zeros((N), dtype=A.dtype)
-
- # find the scale factors for each row -- this is used when pivoting
- scales = np.max(np.abs(A), 1)
-
- # keep track of the number of times we swapped rows
- num_row_swap = 0
-
- if not quiet: print_Ab(A, b)
-
- # main loop over rows
- for k in range(N):
-
- # find the pivot row based on the size of column k -- only consider
- # the rows beyond the current row
- row_max = np.argmax(A[k:, k]/scales[k:])
- if k > 0: row_max += k # we sliced A from k:, correct for total rows
-
- # swap the row with the largest scaled element in the current column
- # with the current row (pivot) -- do this with b too!
- if not row_max == k:
- A[[k, row_max],:] = A[[row_max, k],:]
- b[[k, row_max]] = b[[row_max, k]]
- if not quiet: print("pivoted")
- num_row_swap += 1
-
- # do the forward-elimination for all rows below the current
- for i in range(k+1, N):
- coeff = A[i,k]/A[k,k]
-
- for j in range(k+1, N):
- A[i,j] += -A[k,j]*coeff
-
- A[i,k] = 0.0
- b[i] += -coeff*b[k]
-
- if not quiet: print_Ab(A, b)
-
- # back-substitution
-
- # last solution is easy
- x[N-1] = b[N-1]/A[N-1,N-1]
-
- for i in reversed(range(N-1)):
- sum = b[i]
- for j in range(i+1,N):
- sum += -A[i,j]*x[j]
- x[i] = sum/A[i,i]
-
-
- # determinant
- det = np.prod(np.diagonal(A))*(-1.0)**num_row_swap
-
- if not return_det:
- return x
- else:
- return x, det
-
-
-
-# for debugging:
-# output: np.savetxt("test.out", a, fmt="%5.2f", delimiter=" ")
-# convert -font Courier-New-Regular -pointsize 20 text:test.out test.png
-
-def print_Ab(A, b):
- """ printout the matrix A and vector b in a pretty fashion. We
- don't use the numpy print here, because we want to make them
- side by side"""
-
- N = len(b)
-
- open_t = "/"
- close_t = "\\"
-
- open_b = "\\"
- close_b = "/"
-
- # numbers take 6 positions + 2 spaces
- a_fmt = " {:6.3f} "
- space = 8*" "
-
- line = "|" + N*a_fmt + "|" + space + "|" + a_fmt + "|"
- top = open_t + N*space + close_t + space + open_t + space + close_t
- bottom = open_b + N*space + close_b + space + open_b + space + close_b + "\n"
-
- print(top)
- for i in range(N):
- out = tuple(A[i,:]) + (b[i],)
- print(line.format(*out))
- print(bottom)
diff --git a/docs/old/examples/getopt_example.py b/docs/old/examples/getopt_example.py
deleted file mode 100755
index 1911ea75..00000000
--- a/docs/old/examples/getopt_example.py
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-import getopt
-
-# simple example of getopt
-#
-# ./getopt_example.py -a -b # -c string --darg --earg fextra
-
-try: opts, next = getopt.getopt(sys.argv[1:], "ab:c:",
- ["darg", "earg="])
-except getopt.GetoptError:
- sys.exit("invalid calling sequence")
-
-
-# set the defaults
-a_present = 0
-b_value = None
-c_value = None
-d_present = 0
-e_value = None
-
-for o, a in opts:
- if o == "-a":
- a_present = 1
- elif o == "-b":
- b_value = int(a)
- elif o == "-c":
- c_value = str(a)
- elif o == "--darg":
- d_present = 1
- elif o == "--earg":
- e_value = a
-
-try: extras = next[0:]
-except IndexError:
- pass
-
-if a_present: print "-a set"
-if not b_value == None: print "b = {}".format(b_value)
-if not c_value == None: print "c = {}".format(c_value)
-if d_present: print "--darg set"
-if not e_value == None: print "e = {}".format(e_value)
-
-print "extra arguments:"
-for e in extras:
- print e
-
diff --git a/docs/old/examples/githash.py b/docs/old/examples/githash.py
deleted file mode 100644
index 1d583d91..00000000
--- a/docs/old/examples/githash.py
+++ /dev/null
@@ -1,13 +0,0 @@
-import subprocess
-import string
-
-# issue the command 'git rev-parse HEAD'
-prog = ["git", "rev-parse", "HEAD"]
-p0 = subprocess.Popen(prog, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
-stdout0, stderr0 = p0.communicate()
-
-print "stdout: {}".format(stdout0)
-print "stderr: {}".format(stderr0)
-
-
diff --git a/docs/old/examples/matmul.f90 b/docs/old/examples/matmul.f90
deleted file mode 100644
index 87cdb3e4..00000000
--- a/docs/old/examples/matmul.f90
+++ /dev/null
@@ -1,39 +0,0 @@
-program matmul
-
- ! matrix multiply with OpenMP
- !
- ! M. Zingale (2013-04-14)
-
- integer, parameter :: N = 1000
-
- double precision a(N,N)
- double precision x(N)
- double precision b(N)
-
- integer :: i, j
-
- ! initialize the matrix and vector
- !$omp parallel do private(i, j)
- do j = 1, N
- do i = 1, N
- a(i,j) = dble(i + j)
- enddo
- enddo
- !$omp end parallel do
-
- do i = 1, N
- x(i) = i
- enddo
-
- ! multiply
- !$omp parallel do private(i, j)
- do i = 1, N
- b(i) = 0.0
- do j = 1, N
- b(i) = b(i) + a(i,j)*x(j)
- enddo
- enddo
- !$end parallel do
-
-end program matmul
-
diff --git a/docs/old/examples/matmul.py b/docs/old/examples/matmul.py
deleted file mode 100644
index d584f381..00000000
--- a/docs/old/examples/matmul.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# routines for multiplying matrices
-
-from __future__ import print_function
-
-import numpy
-
-def mult_Ax(A, x):
- """ return the product of matrix A and vector x: Ax = b """
-
- # x is a vector
- if not x.ndim == 1:
- print("ERROR: x should be a vector")
- return None
-
- N = len(x)
-
- # A is square, with each dimension of length N
- if not A.shape == (N, N):
- print("ERROR: A should be square with each dim of same length as x")
- return None
-
- # allocation the product array
- b = numpy.zeros((N), dtype=A.dtype)
-
- # each row of b is the product of the like row of A dotted with
- # the vector x
- for i in range(N):
- b[i] = numpy.dot(A[i,:], x)
-
- return b
-
diff --git a/docs/old/examples/mayavi-basic.py b/docs/old/examples/mayavi-basic.py
deleted file mode 100644
index 8b5b1341..00000000
--- a/docs/old/examples/mayavi-basic.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# http://docs.enthought.com/mayavi/mayavi/mlab_case_studies.html
-
-import numpy as np
-
-from mayavi import mlab
-
-x, y, z = np.ogrid[-10:10:20j, -10:10:20j, -10:10:20j]
-s = np.sin(x*y*z)/(x*y*z)
-
-mlab.contour3d(s)
-mlab.show()
-
-# volume rendering
-mlab.pipeline.volume(mlab.pipeline.scalar_field(s))
-mlab.show()
-
-
-# change the data limits
-mlab.pipeline.volume(mlab.pipeline.scalar_field(s), vmin=0, vmax=0.8)
-mlab.show()
-
-
-# cut planes
-mlab.pipeline.image_plane_widget(mlab.pipeline.scalar_field(s),
- plane_orientation='x_axes',
- slice_index=10)
-mlab.pipeline.image_plane_widget(mlab.pipeline.scalar_field(s),
- plane_orientation='y_axes',
- slice_index=10)
-mlab.outline()
-mlab.show()
-
-
-# combination
-src = mlab.pipeline.scalar_field(s)
-mlab.pipeline.iso_surface(src, contours=[s.min()+0.1*s.ptp(), ], opacity=0.1) # ptp is the range
-mlab.pipeline.iso_surface(src, contours=[s.max()-0.1*s.ptp(), ],)
-mlab.pipeline.image_plane_widget(src,
- plane_orientation='z_axes',
- slice_index=10)
-
-mlab.show()
diff --git a/docs/old/examples/mayavi-vector.py b/docs/old/examples/mayavi-vector.py
deleted file mode 100644
index 2b55dde1..00000000
--- a/docs/old/examples/mayavi-vector.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# http://docs.enthought.com/mayavi/mayavi/mlab_case_studies.html
-
-import numpy as np
-
-from mayavi import mlab
-
-x, y, z = np.mgrid[0:1:20j, 0:1:20j, 0:1:20j]
-
-u = np.sin(np.pi*x) * np.cos(np.pi*z)
-v = -2*np.sin(np.pi*y) * np.cos(2*np.pi*z)
-w = np.cos(np.pi*x)*np.sin(np.pi*z) + np.cos(np.pi*y)*np.sin(2*np.pi*z)
-
-
-# a quiver field
-mlab.quiver3d(u, v, w)
-mlab.outline()
-mlab.show()
-
-
-# thin things out -- this doesn't seem to work?
-src = mlab.pipeline.vector_field(u, v, w)
-#mlab.pipeline.vectors(src, mask_points=20, scale_factor=1.) # keep only one point out of 20
-#mlab.outline()
-#mlab.show()
-
-
-mlab.pipeline.vector_cut_plane(src, mask_points=2, scale_factor=3)
-mlab.outline()
-mlab.show()
-
-
-# isosurfaces of the magnitude -- doesn't work
-#magnitude = mlab.pipeline.extract_vector_norm(src)
-#mlab.pipeline.iso_surface(magnitude, contours=[1.9, 0.5])
-#mlab.outline()
-#mlab.show()
-
-
-mlab.figure(fgcolor=(0., 0., 0.), bgcolor=(1, 1, 1))
-src = mlab.pipeline.vector_field(u, v, w)
-magnitude = mlab.pipeline.extract_vector_norm(src)
-
-# We apply the following modules on the magnitude object, in order to
-# be able to display the norm of the vectors, eg as the color.
-iso = mlab.pipeline.iso_surface(magnitude, contours=[1.9, ], opacity=0.3)
-
-#vec = mlab.pipeline.vectors(magnitude, mask_points=40,
-# line_width=1,
-# color=(.8, .8, .8),
-# scale_factor=4.)
-
-flow = mlab.pipeline.streamline(magnitude, seedtype='plane',
- seed_visible=False,
- seed_scale=0.5,
- seed_resolution=1,
- linetype='ribbon',)
-
-vcp = mlab.pipeline.vector_cut_plane(magnitude, mask_points=2,
- scale_factor=4,
- colormap='jet',
- plane_orientation='x_axes')
-mlab.show()
-
-
diff --git a/docs/old/examples/timing/Makefile b/docs/old/examples/timing/Makefile
deleted file mode 100644
index 7ab180af..00000000
--- a/docs/old/examples/timing/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-ALL: laplace_fortran.so laplace_C.so laplace_CAPI.so
-
-laplace_fortran.so: laplace_fortran.f90
- f2py --fcompiler=gnu95 -c laplace_fortran.f90 -m laplace_fortran
-
-laplace_C.so: laplace_C.c
- gcc -c -fPIC laplace_C.c -o laplace_C.o
- gcc -shared -o laplace_C.so laplace_C.o
-
-laplace_CAPI.so: laplace_CAPI.c
- python setup.py build_ext --inplace
-
-
-.PHONY: clean
-
-clean:
- rm -f laplace_fortran.so laplace_C.so laplace_CAPI.so
- rm -rf build
diff --git a/docs/old/examples/timing/README b/docs/old/examples/timing/README
deleted file mode 100644
index 09c92aca..00000000
--- a/docs/old/examples/timing/README
+++ /dev/null
@@ -1 +0,0 @@
-comparison on Laplacian
\ No newline at end of file
diff --git a/docs/old/examples/timing/laplace.py b/docs/old/examples/timing/laplace.py
deleted file mode 100644
index 225ea8a3..00000000
--- a/docs/old/examples/timing/laplace.py
+++ /dev/null
@@ -1,119 +0,0 @@
-# based on http://technicaldiscovery.blogspot.com/2011/06/speeding-up-python-numpy-cython-and.html
-
-import numpy as np
-import time
-
-# here's an alternate way to do the building of the cython version
-import pyximport
-pyximport.install(setup_args={'include_dirs':[np.get_include()]})
-from laplace_cython import cy_update
-
-# f2py version
-from laplace_fortran import f90_update
-
-# ctypes version
-import ctypes as C
-from numpy.ctypeslib import ndpointer
-_cfunc = np.ctypeslib.load_library('laplace_C', '.')
-_cfunc.C_update.restype = C.c_int
-_cfunc.C_update.argtypes = [ndpointer(C.c_double, flags="C_CONTIGUOUS"),
- C.c_int, C.c_int,
- C.c_double, C.c_double]
-
-# C-API version
-from laplace_CAPI import CAPI_update
-
-
-dx = 0.1
-dy = 0.1
-dx2 = dx*dx
-dy2 = dy*dy
-
-# pure python (the wrong way) method
-def py_update(u):
- nx, ny = u.shape
- for i in xrange(1,nx-1):
- for j in xrange(1, ny-1):
- u[i,j] = ((u[i+1, j] + u[i-1, j]) * dy2 +
- (u[i, j+1] + u[i, j-1]) * dx2) / (2*(dx2+dy2))
-
-# numpy method -- note that this is actually a Jacobi iteration, not G-S.
-# the operation count should be the same, but the convergence will be worse.
-def num_update(u):
- u[1:-1,1:-1] = ((u[2:,1:-1]+u[:-2,1:-1])*dy2 +
- (u[1:-1,2:] + u[1:-1,:-2])*dx2) / (2*(dx2+dy2))
-
-
-
-# ctypes wrapper
-def ctypes_update(u):
- return _cfunc.C_update(u, C.c_int(u.shape[0]), C.c_int(u.shape[1]),
- dx2, dy2)
-
-
-# our driver that will run things with a given implementation of the
-# smoothing
-def calc(N, Niter=100, func=py_update, args=(), order="C"):
- u = np.zeros([N, N], dtype=np.float64, order=order)
- u[0] = 1 # boundary condition
- for i in range(Niter):
- func(u,*args)
- return u
-
-
-
-N = 64
-iters = 1000
-
-# pure python
-start = time.time()
-res_py = calc(N, Niter=iters)
-print "pure python: {} s".format(time.time()-start)
-
-
-# NumPy
-start = time.time()
-res_np = calc(N, Niter=iters, func=num_update)
-print "NumPy: {} s".format(time.time()-start)
-
-
-# Cython
-start = time.time()
-res_cy = calc(N, Niter=iters, func=cy_update, args=(dx2, dy2))
-print "Cython: {} s".format(time.time()-start)
-
-
-# f2py -- here we need to initialize the array in Fortran order so
-# we can use the "inout" argument type in Fortran
-start = time.time()
-res_f90 = calc(N, Niter=iters, func=f90_update,
- args=(N, N, dx2, dy2), order="F")
-print "f2py: {} s".format(time.time()-start)
-
-
-# ctypes
-start = time.time()
-res_ctypes = calc(N, Niter=iters, func=ctypes_update)
-print "ctypes: {} s".format(time.time()-start)
-
-
-# C-API
-start = time.time()
-res_CAPI = calc(N, Niter=iters, func=CAPI_update, args=(dx2, dy2))
-print "C-API: {} s".format(time.time()-start)
-
-
-
-
-
-
-
-# check the answers
-print " "
-print "max diff NumPy: {}".format(np.max(abs(res_py-res_np)[1:-1,1:-1]))
-print "max diff Cython: {}".format(np.max(abs(res_py-res_cy)[1:-1,1:-1]))
-print "max diff F90: {}".format(np.max(abs(res_py-res_f90)[1:-1,1:-1]))
-print "max diff ctypes: {}".format(np.max(abs(res_py-res_ctypes)[1:-1,1:-1]))
-print "max diff C-API: {}".format(np.max(abs(res_py-res_CAPI)[1:-1,1:-1]))
-
-
diff --git a/docs/old/examples/timing/laplace_C.c b/docs/old/examples/timing/laplace_C.c
deleted file mode 100644
index bba75bec..00000000
--- a/docs/old/examples/timing/laplace_C.c
+++ /dev/null
@@ -1,26 +0,0 @@
-int C_update(double *iarray, int ilen, int jlen, double dx2, double dy2) {
-
-
- /* here iarray is a pointer to a contiguous space in
- memory. We wish to access it as a 2-d array. */
-
- /* note: there is no error or bounds checking done here! */
- double *iA[ilen];
-
- int i;
- for (i = 0; i < ilen; i++) {
- iA[i] = iarray + i*jlen;
- }
-
-
- int j;
- for (i = 1; i < ilen-1; i++) {
- for (j = 1; j < jlen-1; j++) {
- iA[i][j] = ( (iA[i+1][j] + iA[i-1][j])*dy2 +
- (iA[i][j+1] + iA[i][j-1])*dx2 ) /
- (2.0*(dx2 + dy2));
- }
- }
-
- return 0;
-}
diff --git a/docs/old/examples/timing/laplace_CAPI.c b/docs/old/examples/timing/laplace_CAPI.c
deleted file mode 100644
index cdc519c8..00000000
--- a/docs/old/examples/timing/laplace_CAPI.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* see
- http://wiki.scipy.org/Cookbook/C_Extensions/NumPy_arrays and
- http://scipy-lectures.github.io/advanced/interfacing_with_c/interfacing_with_c.html
-*/
-
-#include
-#include
-
-
-/* a static function in C limits its scope to this file -- the linker
- won't complain about clashes */
-static PyObject* CAPI_update(PyObject* self, PyObject* args)
-{
-
- PyArrayObject *iarray;
- double **iA;
- int i, j, m, n;
- double dx2, dy2;
-
- /* parse the inputs -- we need to know what the arguments of our
- call were. We'll assume:
-
- ex_function(array, dx2, dy2)
-
- and array is updated in place
- */
-
- if (!PyArg_ParseTuple(args, "O!dd",
- &PyArray_Type, &iarray, &dx2, &dy2)) return NULL;
- if (NULL == iarray) return NULL;
-
- /* check to make sure we are a double type */
- if (iarray->descr->type_num != NPY_DOUBLE ||
- iarray->nd != 2) {
- PyErr_SetString(PyExc_ValueError, "wrong input array type");
- return NULL;
- }
-
- /* get the dimensions */
- n = iarray->dimensions[0];
- m = iarray->dimensions[1];
-
- /* change contigous arrays into C ** arrays -- we need to have a
- vector of pointers that point to the correct location in the
- contiguous block of memory that stores the multi-dimensional
- array data */
- iA = (double **) malloc( (size_t) (n*sizeof(double)));
- for (i = 0; i < n; i++) {
- iA[i] = (double *) iarray->data + i*m;
- }
-
- /* now we can do our manipulation */
- for (i = 1; i < n-1; i++) {
- for (j = 1; j < m-1; j++) {
- iA[i][j] = ( (iA[i+1][j] + iA[i-1][j])*dy2 +
- (iA[i][j+1] + iA[i][j-1])*dx2 ) /
- (2.0*(dx2 + dy2));
- }
- }
-
-
- /* free up the memory we allocated for the array indexing */
- free (iA);
-
- /* even though we are returning an integer, it is a Python object */
- return Py_BuildValue("d", 0);
-
-}
-
-
-/* this is the table for function names that Python will see */
-static PyMethodDef laplace_CAPIMethods[] = {
- {"CAPI_update", CAPI_update, METH_VARARGS, "Laplace G-S update in pure C"},
- {NULL, NULL, 0, NULL}
-};
-
-/* this tells python what to do when it first imports this module --
- the name follows directly from the table name above */
-PyMODINIT_FUNC initlaplace_CAPI(void) {
- (void) Py_InitModule("laplace_CAPI", laplace_CAPIMethods);
- import_array(); // this deals with the NumPy stuff
-}
diff --git a/docs/old/examples/timing/laplace_cython.pyx b/docs/old/examples/timing/laplace_cython.pyx
deleted file mode 100644
index e72da590..00000000
--- a/docs/old/examples/timing/laplace_cython.pyx
+++ /dev/null
@@ -1,11 +0,0 @@
-#cython: boundscheck=False
-#cython: wraparound=False
-
-cimport numpy as np
-
-def cy_update(np.ndarray[double, ndim=2] u, double dx2, double dy2):
- cdef unsigned int i, j
- for i in xrange(1,u.shape[0]-1):
- for j in xrange(1, u.shape[1]-1):
- u[i,j] = ((u[i+1, j] + u[i-1, j]) * dy2 +
- (u[i, j+1] + u[i, j-1]) * dx2) / (2*(dx2+dy2))
diff --git a/docs/old/examples/timing/laplace_fortran.f90 b/docs/old/examples/timing/laplace_fortran.f90
deleted file mode 100644
index d15806b4..00000000
--- a/docs/old/examples/timing/laplace_fortran.f90
+++ /dev/null
@@ -1,22 +0,0 @@
-subroutine f90_update(u, nx, ny, dx2, dy2)
-
- implicit none
-
- integer, intent(in) :: nx, ny
- double precision, intent(inout) :: u(nx, ny)
- double precision, intent(in) :: dx2, dy2
-
-!f2py depend(nx, ny) :: u
-!f2py intent(inout) :: u
-!f2py intent(in) :: dx2, dy2
-
- integer :: i, j
-
- do j = 2, ny-1
- do i = 2, nx-1
- u(i,j) = ( (u(i+1,j) + u(i-1,j))*dy2 + (u(i,j+1) + u(i,j-1))*dx2 ) / &
- (2.0d0*(dx2 + dy2))
- enddo
- enddo
-
-end subroutine f90_update
diff --git a/docs/old/examples/timing/setup.py b/docs/old/examples/timing/setup.py
deleted file mode 100644
index 2887b0f4..00000000
--- a/docs/old/examples/timing/setup.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from distutils.core import setup, Extension
-import numpy
-
-# define the extension module
-laplace_CAPI = Extension('laplace_CAPI', sources=['laplace_CAPI.c'],
- include_dirs=[numpy.get_include()]) #,
-# define_macros=[("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION")])
-
-# run the setup
-setup(ext_modules=[laplace_CAPI])
-
diff --git a/docs/old/index.html b/docs/old/index.html
deleted file mode 100755
index 4e7e8ec3..00000000
--- a/docs/old/index.html
+++ /dev/null
@@ -1,637 +0,0 @@
-
-
-
-
- PHY 546: Python for Scientific Computing
-
-
-
-
-
-
-
-
-
-
-
PHY 546: Python for Scientific Computing
-
a weekly graduate seminar on techniques for scientific programming
-
-
(Spring 2017)
-
-
-
(xkcd)
-
-
-
- Some basic programming background, be
- it C/C++, Fortran, matlab, mathematica, ..., (enough to
- understand the logic of programming, control statements,
- basic data structures, etc.) would be useful.
-
-
This is intended to be a 1-credit class. The primary
- method of evaluation is class participation.
-
-
To make the most of this class, you should have python
- installed on a laptop that you can bring to the seminar.
- On Linux machines, you can get python and the needed
- libraries through your package manager. For Mac and
- Windows, you might want to consider the free distributions
- provided
- by Enthought
- Canopy
- or Anaconda .
- These both install everything you need.
-
-
-
-
-
-
-
Course Information:
-
syllabus: syllabus.pdf
-
-
-
Online Resources:
-
-
The following free online books might be helpful:
-
-
-
-
Other Readings (dealing with Open science and managing
- code projects):
-
-
-
-
-
-
Python Resources by Disicipline:
-
The following list provides links to discipline-specific python
- software:
-
-
- Astronomy resources:
-
-
-
- Atmospheric Sciences resources:
-
- PyAOS : a
- list of python resources for Atmospheric Sciences
-
-
-
- Biology resources:
-
-
-
-
-
-
-
-
-
-
-
- Ocean and marine sciences resources:
-
- OceanPython.org :
- a blog for the ocean and marine sciences
- communities
-
-
-
- Physics resources:
-
- QuTiP : the Quantum
- Toolbok in Python
-
-
-
- Social sciences resources:
-
- NetworkX : a
- library for exploring the structure and complexity of social
- networks
-
-
-
- Solar physics resources:
-
- SunPy : a library
- providing routines to analyze solar data
-
-
-
- Psychology resources:
-
- PyschoPy :
- psychology software to "allow the presentation of
- stimuli and collection of data for a wide range of
- neuroscience, psychology and psychophysics
- experiments."
-
-
-
-
-
-
Course Topics:
- Note: this information will be updated continuously throughout the
- semester, so it is best to look at the relevant topics just before the
- class meeting.
-
-
Introduction to python (lectures 1–4)
-
-
- Readings:
-
-
-
- Practice on your own:
-
-
-
- Lecture
- slides: python.pdf
-
- Lecture IPython notebooks (based on the python tutorial
- above):
-
- datatypes: github link ,
- raw file: python-datatypes.ipynb
-
- more
- datatypes: github link ,
- raw file: python-advanced-datatypes.ipynb
-
- control
- flow: github link ,
- raw file: python-control-flow.ipynb
-
- functions: github link ,
- raw file: python-functions.ipynb
-
- in-class exercises: github link ,
- raw file: python-inclass-2.ipynb
-
- classes: github link ,
- raw file: python-classes.ipynb
-
- in-class exercises: github link ,
- raw file: python-inclass-3.ipynb
-
- modules: github link ,
- raw file: python-modules.ipynb ;
- [myprofile.py]
- (the module example file)
-
- exceptions: github link ,
- raw file: python-exceptions.ipynb
-
- I/O: github link ,
- raw file: python-io.ipynb ;
- [plain text sample]
- [CSV sample]
- [Config/INI sample]
-
-
-
-
-
-
-
-
The NumPy library (lecture 5)
-
-
-
-
-
Python Practices (lecture 6)
-
-
-
-
-
Matplotlib and others (lecture 7)
-
-
- Readings:
-
-
-
-
- Lecture notebooks:
-
-
-
-
-
SciPy and numerical methods (lectures 8–9)
-
-
- Readings:
-
-
-
-
- Lecture IPython notebooks:
-
-
- Other examples:
-
-
-
-
-
-
-
SymPy (lecture 10)
-
-
-
-
-
Pandas and the data frame (lecture 11)
-
-
-
-
-
Extending python with C/Fortran & System Operations (lecture 12)
-
-
- Readings:
-
-
-
- Lecture slides: extensions.pdf
- Example codes:
-
-
-
-
-
-
Building python applications / Packaging (lecture 13)
-
-
- Readings:
-
-
- Lecture slides: packaging.pdf
-
- Examples:
-
-
-
-
-
-
Testing (lecture 14)
-
-
- Readings:
-
-
- Lecture slides: testing.pdf
-
- Examples:
-
-
-
-
-
-
-
Other topics (if time)
-
-
GUIs
-
-
-
-
MayaVi
-
-
- Readings:
-
-
-
- Lecture slides: mayavi.pdf
-
- Examples:
-
-
-
-
-
NetworkX
-
-
-
Interfacing with Arduino Microcontrollers
-
-
-
h5py and HDF5
-
-
-
Last Modified:
-
-
-
-
-
diff --git a/docs/old/lectures/VARDEN-tests.ini b/docs/old/lectures/VARDEN-tests.ini
deleted file mode 100644
index 15cd4b45..00000000
--- a/docs/old/lectures/VARDEN-tests.ini
+++ /dev/null
@@ -1,74 +0,0 @@
-[main]
-boxLibDir = /home/regtester/RegTesting/BoxLib/
-sourceDir = /home/regtester/RegTesting/VARDEN/
-testTopDir = /home/regtester/RegTesting/rt-VARDEN/
-webTopDir = /home/regtester/RegTesting/rt-VARDEN/web
-compareToolDir = /home/regtester/RegTesting/AmrPostprocessing/F_Src
-
-MAKE = make
-sourceTree = F_Src
-numMakeJobs = 8
-
-COMP = g++
-FCOMP = gfortran
-
-# suiteName is the name prepended to all output directories
-suiteName = VARDEN
-
-reportActiveTestsOnly = 1
-
-# Add "GO UP" link at the top of the web page?
-goUpLink = 1
-
-
-# MPIcommand should use the placeholders:
-# @host@ to indicate where to put the hostname to run on
-# @nprocs@ to indicate where to put the number of processors
-# @command@ to indicate where to put the command to run
-#
-# only tests with useMPI = 1 will run in parallel
-# nprocs is problem dependent and specified in the individual problem
-# sections.
-
-#MPIcommand = mpiexec -host @host@ -n @nprocs@ @command@
-MPIcommand = /usr/local/bin/mpiexec -n @nprocs@ @command@
-MPIhost =
-
-# individual problems follow
-
-[bubble-2d]
-buildDir = varden/test
-inputFile = inputs_2d-regt
-dim = 2
-restartTest = 0
-useMPI = 1
-numprocs = 2
-useOMP = 0
-numthreads = 2
-compileTest = 0
-doVis = 0
-
-[bubble-3d]
-buildDir = varden/test
-inputFile = inputs_3d-regt
-dim = 3
-restartTest = 0
-useMPI = 1
-numprocs = 3
-useOMP = 1
-numthreads = 2
-compileTest = 0
-doVis = 0
-
-[bubble-restart]
-buildDir = varden/test
-inputFile = inputs-restart-regt
-dim = 3
-restartTest = 1
-restartFileNum = 4
-useMPI = 1
-numprocs = 3
-useOMP = 1
-numthreads = 2
-compileTest = 0
-doVis = 0
diff --git a/docs/old/lectures/extensions.pdf b/docs/old/lectures/extensions.pdf
deleted file mode 100644
index 7ed13f91..00000000
Binary files a/docs/old/lectures/extensions.pdf and /dev/null differ
diff --git a/docs/old/lectures/gui.pdf b/docs/old/lectures/gui.pdf
deleted file mode 100644
index 63fce9a4..00000000
Binary files a/docs/old/lectures/gui.pdf and /dev/null differ
diff --git a/docs/old/lectures/matplotlib.pdf b/docs/old/lectures/matplotlib.pdf
deleted file mode 100644
index 4265cc15..00000000
Binary files a/docs/old/lectures/matplotlib.pdf and /dev/null differ
diff --git a/docs/old/lectures/mayavi.pdf b/docs/old/lectures/mayavi.pdf
deleted file mode 100644
index e0c76650..00000000
Binary files a/docs/old/lectures/mayavi.pdf and /dev/null differ
diff --git a/docs/old/lectures/numpy.pdf b/docs/old/lectures/numpy.pdf
deleted file mode 100644
index 7c47e436..00000000
Binary files a/docs/old/lectures/numpy.pdf and /dev/null differ
diff --git a/docs/old/lectures/packaging.pdf b/docs/old/lectures/packaging.pdf
deleted file mode 100644
index 399f0db7..00000000
Binary files a/docs/old/lectures/packaging.pdf and /dev/null differ
diff --git a/docs/old/lectures/profile.py b/docs/old/lectures/profile.py
deleted file mode 100644
index 1174c888..00000000
--- a/docs/old/lectures/profile.py
+++ /dev/null
@@ -1,109 +0,0 @@
-"""
- A very simple profiling class. Define some timers and methods
- to start and stop them. Nesting of timers is tracked so we can
- pretty print the profiling information.
-
- # define a timer object, labeled 'my timer'
- a = timer('my timer')
-
- This will add 'my timer' to the list of keys in the 'my timer'
- dictionary. Subsequent calls to the timer class constructor
- will have no effect.
-
- # start timing the 'my timer' block of code
- a.begin()
-
- ... do stuff here ...
-
- # end the timing of the 'my timer' block of code
- a.end()
-
- for best results, the block of code timed should be large
- enough to offset the overhead of the timer class method
- calls.
-
- Multiple timers can be instanciated and nested. The stackCount
- global parameter keeps count of the level of nesting, and the
- timerNesting data structure stores the nesting level for each
- defined timer.
-
- timeReport() is called at the end to print out a summary of the
- timing.
-
- At present, no enforcement is done to ensure proper nesting.
-
-"""
-
-
-import time
-
-timers = {}
-
-# keep basic count of how nested we are in the timers, so we can do some
-# pretty printing.
-stackCount = 0
-
-timerNesting = {}
-timerOrder = []
-
-class timer:
-
- def __init__ (self, name):
- global timers, stackCount, timerNesting, timerOrder
-
- self.name = name
-
- keys = timers.keys()
-
- if name not in keys:
- timers[name] = 0.0
- self.startTime = 0.0
- timerOrder.append(name)
- timerNesting[name] = stackCount
-
-
- def begin(self):
- global stackCount
-
- self.startTime = time.time()
- stackCount += 1
-
-
- def end(self):
- global timers, stackCount
-
- elapsedTime = time.time() - self.startTime
- timers[self.name] += elapsedTime
-
- stackCount -= 1
-
-
-def timeReport():
- global timers, timerOrder, timerNesting
-
- spacing = ' '
- for key in timerOrder:
- print timerNesting[key]*spacing + key + ': ', timers[key]
-
-
-
-if __name__ == "__main__":
- a = timer('1')
- a.begin()
- time.sleep(10.)
- a.end()
-
- b = timer('2')
- b.begin()
- time.sleep(5.)
-
- c = timer('3')
- c.begin()
-
- time.sleep(20.)
-
- b.end()
- c.end()
-
- timeReport()
-
diff --git a/docs/old/lectures/python-practices.pdf b/docs/old/lectures/python-practices.pdf
deleted file mode 100644
index 455d8fcf..00000000
Binary files a/docs/old/lectures/python-practices.pdf and /dev/null differ
diff --git a/docs/old/lectures/python.pdf b/docs/old/lectures/python.pdf
deleted file mode 100644
index 08cac446..00000000
Binary files a/docs/old/lectures/python.pdf and /dev/null differ
diff --git a/docs/old/lectures/scipy.pdf b/docs/old/lectures/scipy.pdf
deleted file mode 100644
index 54195ff2..00000000
Binary files a/docs/old/lectures/scipy.pdf and /dev/null differ
diff --git a/docs/old/lectures/shopping.csv b/docs/old/lectures/shopping.csv
deleted file mode 100644
index e3fbe462..00000000
--- a/docs/old/lectures/shopping.csv
+++ /dev/null
@@ -1,7 +0,0 @@
-item,quantity,unit price,total
-apples,2,0.33,0.66
-bananas,5,0.1,0.5
-milk,1,2.5,2.5
-soda,3,1,3
-rolls,12,0.33,3.96
-eggs,1,2.5,2.5
diff --git a/docs/old/lectures/test.png b/docs/old/lectures/test.png
deleted file mode 100644
index ac5f8f2d..00000000
Binary files a/docs/old/lectures/test.png and /dev/null differ
diff --git a/docs/old/lectures/test.txt b/docs/old/lectures/test.txt
deleted file mode 100644
index 3c6f52fc..00000000
--- a/docs/old/lectures/test.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
-eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
-minim veniam, quis nostrud exercitation ullamco laboris nisi ut
-aliquip ex ea commodo consequat. Duis aute irure dolor in
-reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
-pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
-culpa qui officia deserunt mollit anim id est laborum.
-
diff --git a/docs/old/lectures/test1.exact.128.out b/docs/old/lectures/test1.exact.128.out
deleted file mode 100644
index 1f67c6a1..00000000
--- a/docs/old/lectures/test1.exact.128.out
+++ /dev/null
@@ -1,129 +0,0 @@
-# i x rho u p T e gamma_1
- 1 3906.25000000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 2 11718.7500000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 3 19531.2500000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 4 27343.7500000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 5 35156.2500000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 6 42968.7500000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 7 50781.2500000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 8 58593.7500000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 9 66406.2500000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 10 74218.7500000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 11 82031.2500000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 12 89843.7500000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 13 97656.2500000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 14 105468.750000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 15 113281.250000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 16 121093.750000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 17 128906.250000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 18 136718.750000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 19 144531.250000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 20 152343.750000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 21 160156.250000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 22 167968.750000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 23 175781.250000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 24 183593.750000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 25 191406.250000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 26 199218.750000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 27 207031.250000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 28 214843.750000000 10000000.0000000 0.00000000000000 0.839953872702363E+24 99999999.9999945 0.157524876938614E+18 1.45276634046453
- 29 222656.250000000 9937643.06395334 2183648.51698479 0.832354702535825E+24 99661553.7650043 0.157000195126362E+18 1.45306486912661
- 30 230468.750000000 9709898.24601320 10252035.5907353 0.804771066441305E+24 98413285.8611828 0.155068396477293E+18 1.45417589314423
- 31 238281.250000000 9486362.74009521 18317911.6571200 0.777960884532784E+24 97176296.6987787 0.153148134399705E+18 1.45529881677194
- 32 246093.750000000 9266967.58503920 26381546.2454984 0.751905283855879E+24 95953900.5043851 0.151239419217261E+18 1.45643265986929
- 33 253906.250000000 9051773.11339527 34438366.3560431 0.726600835964682E+24 94745386.6786927 0.149343310249377E+18 1.45757549047033
- 34 261718.750000000 8840579.92897204 42493478.0485396 0.702013736589051E+24 93546610.5785001 0.147458545744007E+18 1.45872692136675
- 35 269531.250000000 8633246.19762695 50550147.0990121 0.678117695752122E+24 92353794.1248505 0.145584318590467E+18 1.45988684756994
- 36 277343.750000000 8430080.28574247 58593920.1820189 0.654938154399121E+24 91167298.2039330 0.143723953017177E+18 1.46105339826357
- 37 285156.250000000 8230715.67291654 66636754.1557958 0.632423255726661E+24 89986059.2562992 0.141874686872926E+18 1.46222951859661
- 38 292968.750000000 8034836.87966469 74689451.0775257 0.610528458738280E+24 88812253.6451150 0.140034143978095E+18 1.46341920095656
- 39 300781.250000000 7843282.83184227 82714846.4335234 0.589337647358954E+24 87653705.7473881 0.138210850681164E+18 1.46461957956462
- 40 308593.750000000 7655131.39657738 90748844.0686147 0.568739037321717E+24 86499249.8493445 0.136396523280417E+18 1.46583475044255
- 41 316406.250000000 7470617.83249930 98779330.5624931 0.548749789886976E+24 85357334.6307142 0.134594053682325E+18 1.46706194330119
- 42 324218.750000000 7289678.05591329 106806667.654549 0.529354064622373E+24 84229267.3831378 0.132803394396652E+18 1.46829983831028
- 43 332031.250000000 7112203.72890764 114833293.409553 0.510531638451806E+24 83112341.3782926 0.131023970898291E+18 1.46954737094502
- 44 339843.750000000 6938392.94918078 122847597.066370 0.492294746771609E+24 82004714.4470556 0.129258286117458E+18 1.47080169060005
- 45 347656.250000000 6767908.52891521 130862493.517095 0.474599453603994E+24 80901971.1666013 0.127503440461682E+18 1.47206456208879
- 46 355468.750000000 6600789.00101208 138873777.919194 0.457441675235668E+24 79804176.0783791 0.125760357046732E+18 1.47333615466166
- 47 363281.250000000 6436869.65089887 146886975.939822 0.440796585653112E+24 78712951.1317172 0.124027893460216E+18 1.47461946919911
- 48 371093.750000000 6276489.74245613 154882718.583062 0.424690370468232E+24 77635518.1991667 0.122310312275551E+18 1.47591470639597
- 49 378906.250000000 6118499.49749269 162916588.866578 0.409000615309355E+24 76558474.8360261 0.120595629536622E+18 1.47723087366731
- 50 386718.750000000 5965016.68127032 170877508.400914 0.393929057403165E+24 75501291.7343595 0.118907588102652E+18 1.47854829523697
- 51 394531.250000000 5813730.62375631 178882064.720091 0.379240543512066E+24 74451144.0314516 0.117221478019374E+18 1.47988469358891
- 52 402343.750000000 5665979.82067907 186857478.428097 0.365058383778577E+24 73415821.1974846 0.115552648320849E+18 1.48122627752675
- 53 410156.250000000 5521051.29678604 194839119.497493 0.351306452609106E+24 72387385.0819663 0.113893608731257E+18 1.48257769772409
- 54 417968.750000000 5378407.85830813 202855353.073603 0.337928132133902E+24 71359552.7723231 0.112238517614146E+18 1.48394345579092
- 55 425781.250000000 5240037.90076758 210790570.243909 0.325101847792376E+24 70346511.9876940 0.110611155193724E+18 1.48530465910530
- 56 433593.750000000 5103578.51466414 218776883.614616 0.312601089828294E+24 69333718.4410295 0.108984428278018E+18 1.48668631440010
- 57 441406.250000000 4970431.71430172 226730324.666373 0.300548334929521E+24 68335814.0307206 0.107375573886750E+18 1.48807757871291
- 58 449218.750000000 4839922.70160467 234687815.567129 0.288875324147037E+24 67342746.4735432 0.105776986158520E+18 1.48948439810885
- 59 457031.250000000 4711265.33191279 242696461.030629 0.277506932482565E+24 66353874.5399278 0.104179435899479E+18 1.49091362221694
- 60 464843.750000000 4586909.59199493 250599522.998889 0.266652134770323E+24 65390018.3336558 0.102614125189112E+18 1.49233529907871
- 61 472656.250000000 4464462.78548668 258544501.692614 0.256094481367789E+24 64430747.4095846 0.101051682990164E+18 1.49377396903421
- 62 480468.750000000 4344586.76199392 266487111.681268 0.245886206471681E+24 63478286.4050982 0.995008620758450E+17 1.49522049966005
- 63 488281.250000000 4227170.37624063 274432100.237656 0.236012114103187E+24 62530032.1135908 0.979607162519869E+17 1.49667577244688
- 64 496093.750000000 4112467.21930436 282359184.866256 0.226487545356863E+24 61588857.0693006 0.964351717375335E+17 1.49813766326195
- 65 503906.250000000 4000155.86935734 290287399.255558 0.217279900048109E+24 60656176.8383703 0.949206188458379E+17 1.49961314761107
- 66 511718.750000000 3890267.13409877 298211828.342651 0.208386214364420E+24 59731907.4186821 0.934180016500716E+17 1.50110393624173
- 67 519531.250000000 3782708.64797566 306136331.418804 0.199793606985842E+24 58814849.1507763 0.919265886899766E+17 1.50260864158743
- 68 527343.750000000 3677092.12521152 314087661.319682 0.191466401855734E+24 57906246.6444128 0.904415041273040E+17 1.50413047641668
- 69 535156.250000000 3574806.90663268 321956691.449322 0.183507914330006E+24 57017260.9738064 0.889830102195741E+17 1.50564619608825
- 70 542968.750000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 71 550781.250000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 72 558593.750000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 73 566406.250000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 74 574218.750000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 75 582031.250000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 76 589843.750000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 77 597656.250000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 78 605468.750000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 79 613281.250000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 80 621093.750000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 81 628906.250000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 82 636718.750000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 83 644531.250000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 84 652343.750000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 85 660156.250000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 86 667968.750000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 87 675781.250000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 88 683593.750000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 89 691406.250000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 90 699218.750000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 91 707031.250000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 92 714843.750000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 93 722656.250000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 94 730468.750000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 95 738281.250000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 96 746093.750000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 97 753906.250000000 3566790.77600787 322580638.298037 0.182888671613425E+24 56947117.1489462 0.888678406169410E+17 1.50576673364596
- 98 761718.750000000 2952874.14623905 322580638.298037 0.182888671613425E+24 758652699.898829 0.109749790986499E+18 1.49555196135596
- 99 769531.250000000 2952874.14623905 322580638.298037 0.182888671613425E+24 758652699.898829 0.109749790986499E+18 1.49555196135596
- 100 777343.750000000 2952874.14623905 322580638.298037 0.182888671613425E+24 758652699.898829 0.109749790986499E+18 1.49555196135596
- 101 785156.250000000 2952874.14623905 322580638.298037 0.182888671613425E+24 758652699.898829 0.109749790986499E+18 1.49555196135596
- 102 792968.750000000 2952874.14623905 322580638.298037 0.182888671613425E+24 758652699.898829 0.109749790986499E+18 1.49555196135596
- 103 800781.250000000 2952874.14623905 322580638.298037 0.182888671613425E+24 758652699.898829 0.109749790986499E+18 1.49555196135596
- 104 808593.750000000 2952874.14623905 322580638.298037 0.182888671613425E+24 758652699.898829 0.109749790986499E+18 1.49555196135596
- 105 816406.250000000 2952874.14623905 322580638.298037 0.182888671613425E+24 758652699.898829 0.109749790986499E+18 1.49555196135596
- 106 824218.750000000 2952874.14623905 322580638.298037 0.182888671613425E+24 758652699.898829 0.109749790986499E+18 1.49555196135596
- 107 832031.250000000 2952874.14623905 322580638.298037 0.182888671613425E+24 758652699.898829 0.109749790986499E+18 1.49555196135596
- 108 839843.750000000 2952874.14623905 322580638.298037 0.182888671613425E+24 758652699.898829 0.109749790986499E+18 1.49555196135596
- 109 847656.250000000 2952874.14623905 322580638.298037 0.182888671613425E+24 758652699.898829 0.109749790986499E+18 1.49555196135596
- 110 855468.750000000 2952874.14623905 322580638.298037 0.182888671613425E+24 758652699.898829 0.109749790986499E+18 1.49555196135596
- 111 863281.250000000 2952874.14623905 322580638.298037 0.182888671613425E+24 758652699.898829 0.109749790986499E+18 1.49555196135596
- 112 871093.750000000 2952874.14623905 322580638.298037 0.182888671613425E+24 758652699.898829 0.109749790986499E+18 1.49555196135596
- 113 878906.250000000 2952874.14623905 322580638.298037 0.182888671613425E+24 758652699.898829 0.109749790986499E+18 1.49555196135596
- 114 886718.750000000 2952874.14623905 322580638.298037 0.182888671613425E+24 758652699.898829 0.109749790986499E+18 1.49555196135596
- 115 894531.250000000 1000000.00000000 0.00000000000000 0.255457263570597E+23 999999.999998600 0.408260700921391E+17 1.57201407471898
- 116 902343.750000000 1000000.00000000 0.00000000000000 0.255457263570597E+23 999999.999998600 0.408260700921391E+17 1.57201407471898
- 117 910156.250000000 1000000.00000000 0.00000000000000 0.255457263570597E+23 999999.999998600 0.408260700921391E+17 1.57201407471898
- 118 917968.750000000 1000000.00000000 0.00000000000000 0.255457263570597E+23 999999.999998600 0.408260700921391E+17 1.57201407471898
- 119 925781.250000000 1000000.00000000 0.00000000000000 0.255457263570597E+23 999999.999998600 0.408260700921391E+17 1.57201407471898
- 120 933593.750000000 1000000.00000000 0.00000000000000 0.255457263570597E+23 999999.999998600 0.408260700921391E+17 1.57201407471898
- 121 941406.250000000 1000000.00000000 0.00000000000000 0.255457263570597E+23 999999.999998600 0.408260700921391E+17 1.57201407471898
- 122 949218.750000000 1000000.00000000 0.00000000000000 0.255457263570597E+23 999999.999998600 0.408260700921391E+17 1.57201407471898
- 123 957031.250000000 1000000.00000000 0.00000000000000 0.255457263570597E+23 999999.999998600 0.408260700921391E+17 1.57201407471898
- 124 964843.750000000 1000000.00000000 0.00000000000000 0.255457263570597E+23 999999.999998600 0.408260700921391E+17 1.57201407471898
- 125 972656.250000000 1000000.00000000 0.00000000000000 0.255457263570597E+23 999999.999998600 0.408260700921391E+17 1.57201407471898
- 126 980468.750000000 1000000.00000000 0.00000000000000 0.255457263570597E+23 999999.999998600 0.408260700921391E+17 1.57201407471898
- 127 988281.250000000 1000000.00000000 0.00000000000000 0.255457263570597E+23 999999.999998600 0.408260700921391E+17 1.57201407471898
- 128 996093.750000000 1000000.00000000 0.00000000000000 0.255457263570597E+23 999999.999998600 0.408260700921391E+17 1.57201407471898
diff --git a/docs/old/lectures/testing.pdf b/docs/old/lectures/testing.pdf
deleted file mode 100644
index 74fd92b5..00000000
Binary files a/docs/old/lectures/testing.pdf and /dev/null differ
diff --git a/docs/old/python.png b/docs/old/python.png
deleted file mode 100644
index 23a4c6e3..00000000
Binary files a/docs/old/python.png and /dev/null differ
diff --git a/pyproject.toml b/pyproject.toml
deleted file mode 100644
index bb321245..00000000
--- a/pyproject.toml
+++ /dev/null
@@ -1,4 +0,0 @@
-[tool.codespell]
-skip = "*.fodp,*.pdf,*.sty,.git,*/_build,*.c,*.f90,other"
-#ignore-words-list = "pres"
-
diff --git a/requirements.txt b/requirements.txt
index 40fd41ed..9e3a406f 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,16 +1,21 @@
+# docs
jupyter-book<2
+git+https://github.com/executablebooks/sphinx-book-theme.git
+sphinx-copybutton
+sphinx-prompt
+jupyterlab_myst
+jupyterbook_patches
+
+# core python
matplotlib
-#basemap
numpy
sympy
scipy
+
+# ML
keras
-#tensorflow
torch
pydot
graphviz
scikit-learn
-sphinx-copybutton
-sphinx-prompt
-jupyterlab_myst
-jupyterbook_patches
+