adjusted params to nosetests, disabled pdb on failure

This commit is contained in:
fawce
2012-02-08 16:52:30 -05:00
parent 81fe2076cb
commit 45f2476045
22 changed files with 1 additions and 3676 deletions
+1
View File
@@ -25,6 +25,7 @@ pip-log.txt
dist
build
eggs
cover
parts
bin
var
-372
View File
@@ -1,372 +0,0 @@
// Coverage.py HTML report browser code.
/*jslint browser: true, sloppy: true, vars: true, plusplus: true, maxerr: 50, indent: 4 */
/*global coverage: true, document, window, $ */
coverage = {};
// Find all the elements with shortkey_* class, and use them to assign a shotrtcut key.
coverage.assign_shortkeys = function () {
$("*[class*='shortkey_']").each(function (i, e) {
$.each($(e).attr("class").split(" "), function (i, c) {
if (/^shortkey_/.test(c)) {
$(document).bind('keydown', c.substr(9), function () {
$(e).click();
});
}
});
});
};
// Create the events for the help panel.
coverage.wire_up_help_panel = function () {
$("#keyboard_icon").click(function () {
// Show the help panel, and position it so the keyboard icon in the
// panel is in the same place as the keyboard icon in the header.
$(".help_panel").show();
var koff = $("#keyboard_icon").offset();
var poff = $("#panel_icon").position();
$(".help_panel").offset({
top: koff.top-poff.top,
left: koff.left-poff.left
});
});
$("#panel_icon").click(function () {
$(".help_panel").hide();
});
};
// Loaded on index.html
coverage.index_ready = function ($) {
// Look for a cookie containing previous sort settings:
var sort_list = [];
var cookie_name = "COVERAGE_INDEX_SORT";
var i;
// This almost makes it worth installing the jQuery cookie plugin:
if (document.cookie.indexOf(cookie_name) > -1) {
var cookies = document.cookie.split(";");
for (i = 0; i < cookies.length; i++) {
var parts = cookies[i].split("=");
if ($.trim(parts[0]) === cookie_name && parts[1]) {
sort_list = eval("[[" + parts[1] + "]]");
break;
}
}
}
// Create a new widget which exists only to save and restore
// the sort order:
$.tablesorter.addWidget({
id: "persistentSort",
// Format is called by the widget before displaying:
format: function (table) {
if (table.config.sortList.length === 0 && sort_list.length > 0) {
// This table hasn't been sorted before - we'll use
// our stored settings:
$(table).trigger('sorton', [sort_list]);
}
else {
// This is not the first load - something has
// already defined sorting so we'll just update
// our stored value to match:
sort_list = table.config.sortList;
}
}
});
// Configure our tablesorter to handle the variable number of
// columns produced depending on report options:
var headers = [];
var col_count = $("table.index > thead > tr > th").length;
headers[0] = { sorter: 'text' };
for (i = 1; i < col_count-1; i++) {
headers[i] = { sorter: 'digit' };
}
headers[col_count-1] = { sorter: 'percent' };
// Enable the table sorter:
$("table.index").tablesorter({
widgets: ['persistentSort'],
headers: headers
});
coverage.assign_shortkeys();
coverage.wire_up_help_panel();
// Watch for page unload events so we can save the final sort settings:
$(window).unload(function () {
document.cookie = cookie_name + "=" + sort_list.toString() + "; path=/";
});
};
// -- pyfile stuff --
coverage.pyfile_ready = function ($) {
// If we're directed to a particular line number, highlight the line.
var frag = location.hash;
if (frag.length > 2 && frag[1] === 'n') {
$(frag).addClass('highlight');
coverage.set_sel(parseInt(frag.substr(2), 10));
}
else {
coverage.set_sel(0);
}
$(document)
.bind('keydown', 'j', coverage.to_next_chunk_nicely)
.bind('keydown', 'k', coverage.to_prev_chunk_nicely)
.bind('keydown', '0', coverage.to_top)
.bind('keydown', '1', coverage.to_first_chunk)
;
coverage.assign_shortkeys();
coverage.wire_up_help_panel();
};
coverage.toggle_lines = function (btn, cls) {
btn = $(btn);
var hide = "hide_"+cls;
if (btn.hasClass(hide)) {
$("#source ."+cls).removeClass(hide);
btn.removeClass(hide);
}
else {
$("#source ."+cls).addClass(hide);
btn.addClass(hide);
}
};
// Return the nth line div.
coverage.line_elt = function (n) {
return $("#t" + n);
};
// Return the nth line number div.
coverage.num_elt = function (n) {
return $("#n" + n);
};
// Return the container of all the code.
coverage.code_container = function () {
return $(".linenos");
};
// Set the selection. b and e are line numbers.
coverage.set_sel = function (b, e) {
// The first line selected.
coverage.sel_begin = b;
// The next line not selected.
coverage.sel_end = (e === undefined) ? b+1 : e;
};
coverage.to_top = function () {
coverage.set_sel(0, 1);
coverage.scroll_window(0);
};
coverage.to_first_chunk = function () {
coverage.set_sel(0, 1);
coverage.to_next_chunk();
};
coverage.is_transparent = function (color) {
// Different browsers return different colors for "none".
return color === "transparent" || color === "rgba(0, 0, 0, 0)";
};
coverage.to_next_chunk = function () {
var c = coverage;
// Find the start of the next colored chunk.
var probe = c.sel_end;
while (true) {
var probe_line = c.line_elt(probe);
if (probe_line.length === 0) {
return;
}
var color = probe_line.css("background-color");
if (!c.is_transparent(color)) {
break;
}
probe++;
}
// There's a next chunk, `probe` points to it.
var begin = probe;
// Find the end of this chunk.
var next_color = color;
while (next_color === color) {
probe++;
probe_line = c.line_elt(probe);
next_color = probe_line.css("background-color");
}
c.set_sel(begin, probe);
c.show_selection();
};
coverage.to_prev_chunk = function () {
var c = coverage;
// Find the end of the prev colored chunk.
var probe = c.sel_begin-1;
var probe_line = c.line_elt(probe);
if (probe_line.length === 0) {
return;
}
var color = probe_line.css("background-color");
while (probe > 0 && c.is_transparent(color)) {
probe--;
probe_line = c.line_elt(probe);
if (probe_line.length === 0) {
return;
}
color = probe_line.css("background-color");
}
// There's a prev chunk, `probe` points to its last line.
var end = probe+1;
// Find the beginning of this chunk.
var prev_color = color;
while (prev_color === color) {
probe--;
probe_line = c.line_elt(probe);
prev_color = probe_line.css("background-color");
}
c.set_sel(probe+1, end);
c.show_selection();
};
// Return the line number of the line nearest pixel position pos
coverage.line_at_pos = function (pos) {
var l1 = coverage.line_elt(1),
l2 = coverage.line_elt(2),
result;
if (l1.length && l2.length) {
var l1_top = l1.offset().top,
line_height = l2.offset().top - l1_top,
nlines = (pos - l1_top) / line_height;
if (nlines < 1) {
result = 1;
}
else {
result = Math.ceil(nlines);
}
}
else {
result = 1;
}
return result;
};
// Returns 0, 1, or 2: how many of the two ends of the selection are on
// the screen right now?
coverage.selection_ends_on_screen = function () {
if (coverage.sel_begin === 0) {
return 0;
}
var top = coverage.line_elt(coverage.sel_begin);
var next = coverage.line_elt(coverage.sel_end-1);
return (
(top.isOnScreen() ? 1 : 0) +
(next.isOnScreen() ? 1 : 0)
);
};
coverage.to_next_chunk_nicely = function () {
coverage.finish_scrolling();
if (coverage.selection_ends_on_screen() === 0) {
// The selection is entirely off the screen: select the top line on
// the screen.
var win = $(window);
coverage.select_line_or_chunk(coverage.line_at_pos(win.scrollTop()));
}
coverage.to_next_chunk();
};
coverage.to_prev_chunk_nicely = function () {
coverage.finish_scrolling();
if (coverage.selection_ends_on_screen() === 0) {
var win = $(window);
coverage.select_line_or_chunk(coverage.line_at_pos(win.scrollTop() + win.height()));
}
coverage.to_prev_chunk();
};
// Select line number lineno, or if it is in a colored chunk, select the
// entire chunk
coverage.select_line_or_chunk = function (lineno) {
var c = coverage;
var probe_line = c.line_elt(lineno);
if (probe_line.length === 0) {
return;
}
var the_color = probe_line.css("background-color");
if (!c.is_transparent(the_color)) {
// The line is in a highlighted chunk.
// Search backward for the first line.
var probe = lineno;
var color = the_color;
while (probe > 0 && color === the_color) {
probe--;
probe_line = c.line_elt(probe);
if (probe_line.length === 0) {
break;
}
color = probe_line.css("background-color");
}
var begin = probe + 1;
// Search forward for the last line.
probe = lineno;
color = the_color;
while (color === the_color) {
probe++;
probe_line = c.line_elt(probe);
color = probe_line.css("background-color");
}
coverage.set_sel(begin, probe);
}
else {
coverage.set_sel(lineno);
}
};
coverage.show_selection = function () {
var c = coverage;
// Highlight the lines in the chunk
c.code_container().find(".highlight").removeClass("highlight");
for (var probe = c.sel_begin; probe > 0 && probe < c.sel_end; probe++) {
c.num_elt(probe).addClass("highlight");
}
c.scroll_to_selection();
};
coverage.scroll_to_selection = function () {
// Scroll the page if the chunk isn't fully visible.
if (coverage.selection_ends_on_screen() < 2) {
// Need to move the page. The html,body trick makes it scroll in all
// browsers, got it from http://stackoverflow.com/questions/3042651
var top = coverage.line_elt(coverage.sel_begin);
var top_pos = parseInt(top.offset().top, 10);
coverage.scroll_window(top_pos - 30);
}
};
coverage.scroll_window = function (to_pos) {
$("html,body").animate({scrollTop: to_pos}, 200);
};
coverage.finish_scrolling = function () {
$("html,body").stop(true, true);
};
-179
View File
@@ -1,179 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<title>Coverage report</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.tablesorter.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.index_ready);
</script>
</head>
<body id='indexfile'>
<div id='header'>
<div class='content'>
<h1>Coverage report:
<span class='pc_cov'>36%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>n</span>
<span class='key'>s</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>c</span> &nbsp; change column sorting
</p>
</div>
</div>
<div id='index'>
<table class='index'>
<thead>
<tr class='tablehead' title='Click to sort'>
<th class='name left headerSortDown shortkey_n'>Module</th>
<th class='shortkey_s'>statements</th>
<th class='shortkey_m'>missing</th>
<th class='shortkey_x'>excluded</th>
<th class='right shortkey_c'>coverage</th>
</tr>
</thead>
<tfoot>
<tr class='total'>
<td class='name left'>Total</td>
<td>404</td>
<td>258</td>
<td>0</td>
<td class='right'>36%</td>
</tr>
</tfoot>
<tbody>
<tr class='file'>
<td class='name left'><a href='qsim.html'>qsim</a></td>
<td>0</td>
<td>0</td>
<td>0</td>
<td class='right'>100%</td>
</tr>
<tr class='file'>
<td class='name left'><a href='qsim_data.html'>qsim.data</a></td>
<td>0</td>
<td>0</td>
<td>0</td>
<td class='right'>100%</td>
</tr>
<tr class='file'>
<td class='name left'><a href='qsim_data_equity.html'>qsim.data.equity</a></td>
<td>59</td>
<td>30</td>
<td>0</td>
<td class='right'>49%</td>
</tr>
<tr class='file'>
<td class='name left'><a href='qsim_messaging.html'>qsim.messaging</a></td>
<td>0</td>
<td>0</td>
<td>0</td>
<td class='right'>100%</td>
</tr>
<tr class='file'>
<td class='name left'><a href='qsim_simulator.html'>qsim.simulator</a></td>
<td>0</td>
<td>0</td>
<td>0</td>
<td class='right'>100%</td>
</tr>
<tr class='file'>
<td class='name left'><a href='qsim_simulator_config.html'>qsim.simulator.config</a></td>
<td>29</td>
<td>17</td>
<td>0</td>
<td class='right'>41%</td>
</tr>
<tr class='file'>
<td class='name left'><a href='qsim_simulator_feed.html'>qsim.simulator.feed</a></td>
<td>71</td>
<td>44</td>
<td>0</td>
<td class='right'>38%</td>
</tr>
<tr class='file'>
<td class='name left'><a href='qsim_transforms.html'>qsim.transforms</a></td>
<td>0</td>
<td>0</td>
<td>0</td>
<td class='right'>100%</td>
</tr>
<tr class='file'>
<td class='name left'><a href='qsim_transforms_base.html'>qsim.transforms.base</a></td>
<td>125</td>
<td>104</td>
<td>0</td>
<td class='right'>17%</td>
</tr>
<tr class='file'>
<td class='name left'><a href='qsim_transforms_technical.html'>qsim.transforms.technical</a></td>
<td>17</td>
<td>13</td>
<td>0</td>
<td class='right'>24%</td>
</tr>
<tr class='file'>
<td class='name left'><a href='qsim_util.html'>qsim.util</a></td>
<td>103</td>
<td>50</td>
<td>0</td>
<td class='right'>51%</td>
</tr>
</tbody>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
-166
View File
@@ -1,166 +0,0 @@
/*!
* jQuery JavaScript Library v1.4.3
* http://jquery.com/
*
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Includes Sizzle.js
* http://sizzlejs.com/
* Copyright 2010, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Thu Oct 14 23:10:06 2010 -0400
*/
(function(E,A){function U(){return false}function ba(){return true}function ja(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ga(a){var b,d,e=[],f=[],h,k,l,n,s,v,B,D;k=c.data(this,this.nodeType?"events":"__events__");if(typeof k==="function")k=k.events;if(!(a.liveFired===this||!k||!k.live||a.button&&a.type==="click")){if(a.namespace)D=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var H=k.live.slice(0);for(n=0;n<H.length;n++){k=H[n];k.origType.replace(X,
"")===a.type?f.push(k.selector):H.splice(n--,1)}f=c(a.target).closest(f,a.currentTarget);s=0;for(v=f.length;s<v;s++){B=f[s];for(n=0;n<H.length;n++){k=H[n];if(B.selector===k.selector&&(!D||D.test(k.namespace))){l=B.elem;h=null;if(k.preType==="mouseenter"||k.preType==="mouseleave"){a.type=k.preType;h=c(a.relatedTarget).closest(k.selector)[0]}if(!h||h!==l)e.push({elem:l,handleObj:k,level:B.level})}}}s=0;for(v=e.length;s<v;s++){f=e[s];if(d&&f.level>d)break;a.currentTarget=f.elem;a.data=f.handleObj.data;
a.handleObj=f.handleObj;D=f.handleObj.origHandler.apply(f.elem,arguments);if(D===false||a.isPropagationStopped()){d=f.level;if(D===false)b=false}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(Ha,"`").replace(Ia,"&")}function ka(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Ja.test(b))return c.filter(b,
e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function la(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var k in e[h])c.event.add(this,h,e[h][k],e[h][k].data)}}})}function Ka(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}
function ma(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?La:Ma,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function ca(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Na.test(a)?e(a,h):ca(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?
e(a,""):c.each(b,function(f,h){ca(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(na.concat.apply([],na.slice(0,b)),function(){d[this]=a});return d}function oa(a){if(!da[a]){var b=c("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";da[a]=d}return da[a]}function ea(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var u=E.document,c=function(){function a(){if(!b.isReady){try{u.documentElement.doScroll("left")}catch(i){setTimeout(a,
1);return}b.ready()}}var b=function(i,r){return new b.fn.init(i,r)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,k=/\S/,l=/^\s+/,n=/\s+$/,s=/\W/,v=/\d/,B=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,D=/^[\],:{}\s]*$/,H=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,G=/(?:^|:|,)(?:\s*\[)+/g,M=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,j=/(msie) ([\w.]+)/,o=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,
q=[],t,x=Object.prototype.toString,C=Object.prototype.hasOwnProperty,P=Array.prototype.push,N=Array.prototype.slice,R=String.prototype.trim,Q=Array.prototype.indexOf,L={};b.fn=b.prototype={init:function(i,r){var y,z,F;if(!i)return this;if(i.nodeType){this.context=this[0]=i;this.length=1;return this}if(i==="body"&&!r&&u.body){this.context=u;this[0]=u.body;this.selector="body";this.length=1;return this}if(typeof i==="string")if((y=h.exec(i))&&(y[1]||!r))if(y[1]){F=r?r.ownerDocument||r:u;if(z=B.exec(i))if(b.isPlainObject(r)){i=
[u.createElement(z[1])];b.fn.attr.call(i,r,true)}else i=[F.createElement(z[1])];else{z=b.buildFragment([y[1]],[F]);i=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,i)}else{if((z=u.getElementById(y[2]))&&z.parentNode){if(z.id!==y[2])return f.find(i);this.length=1;this[0]=z}this.context=u;this.selector=i;return this}else if(!r&&!s.test(i)){this.selector=i;this.context=u;i=u.getElementsByTagName(i);return b.merge(this,i)}else return!r||r.jquery?(r||f).find(i):b(r).find(i);
else if(b.isFunction(i))return f.ready(i);if(i.selector!==A){this.selector=i.selector;this.context=i.context}return b.makeArray(i,this)},selector:"",jquery:"1.4.3",length:0,size:function(){return this.length},toArray:function(){return N.call(this,0)},get:function(i){return i==null?this.toArray():i<0?this.slice(i)[0]:this[i]},pushStack:function(i,r,y){var z=b();b.isArray(i)?P.apply(z,i):b.merge(z,i);z.prevObject=this;z.context=this.context;if(r==="find")z.selector=this.selector+(this.selector?" ":
"")+y;else if(r)z.selector=this.selector+"."+r+"("+y+")";return z},each:function(i,r){return b.each(this,i,r)},ready:function(i){b.bindReady();if(b.isReady)i.call(u,b);else q&&q.push(i);return this},eq:function(i){return i===-1?this.slice(i):this.slice(i,+i+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(i){return this.pushStack(b.map(this,function(r,y){return i.call(r,
y,r)}))},end:function(){return this.prevObject||b(null)},push:P,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var i=arguments[0]||{},r=1,y=arguments.length,z=false,F,I,K,J,fa;if(typeof i==="boolean"){z=i;i=arguments[1]||{};r=2}if(typeof i!=="object"&&!b.isFunction(i))i={};if(y===r){i=this;--r}for(;r<y;r++)if((F=arguments[r])!=null)for(I in F){K=i[I];J=F[I];if(i!==J)if(z&&J&&(b.isPlainObject(J)||(fa=b.isArray(J)))){if(fa){fa=false;clone=K&&b.isArray(K)?K:[]}else clone=
K&&b.isPlainObject(K)?K:{};i[I]=b.extend(z,clone,J)}else if(J!==A)i[I]=J}return i};b.extend({noConflict:function(i){E.$=e;if(i)E.jQuery=d;return b},isReady:false,readyWait:1,ready:function(i){i===true&&b.readyWait--;if(!b.readyWait||i!==true&&!b.isReady){if(!u.body)return setTimeout(b.ready,1);b.isReady=true;if(!(i!==true&&--b.readyWait>0)){if(q){for(var r=0;i=q[r++];)i.call(u,b);q=null}b.fn.triggerHandler&&b(u).triggerHandler("ready")}}},bindReady:function(){if(!p){p=true;if(u.readyState==="complete")return setTimeout(b.ready,
1);if(u.addEventListener){u.addEventListener("DOMContentLoaded",t,false);E.addEventListener("load",b.ready,false)}else if(u.attachEvent){u.attachEvent("onreadystatechange",t);E.attachEvent("onload",b.ready);var i=false;try{i=E.frameElement==null}catch(r){}u.documentElement.doScroll&&i&&a()}}},isFunction:function(i){return b.type(i)==="function"},isArray:Array.isArray||function(i){return b.type(i)==="array"},isWindow:function(i){return i&&typeof i==="object"&&"setInterval"in i},isNaN:function(i){return i==
null||!v.test(i)||isNaN(i)},type:function(i){return i==null?String(i):L[x.call(i)]||"object"},isPlainObject:function(i){if(!i||b.type(i)!=="object"||i.nodeType||b.isWindow(i))return false;if(i.constructor&&!C.call(i,"constructor")&&!C.call(i.constructor.prototype,"isPrototypeOf"))return false;for(var r in i);return r===A||C.call(i,r)},isEmptyObject:function(i){for(var r in i)return false;return true},error:function(i){throw i;},parseJSON:function(i){if(typeof i!=="string"||!i)return null;i=b.trim(i);
if(D.test(i.replace(H,"@").replace(w,"]").replace(G,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(i):(new Function("return "+i))();else b.error("Invalid JSON: "+i)},noop:function(){},globalEval:function(i){if(i&&k.test(i)){var r=u.getElementsByTagName("head")[0]||u.documentElement,y=u.createElement("script");y.type="text/javascript";if(b.support.scriptEval)y.appendChild(u.createTextNode(i));else y.text=i;r.insertBefore(y,r.firstChild);r.removeChild(y)}},nodeName:function(i,r){return i.nodeName&&i.nodeName.toUpperCase()===
r.toUpperCase()},each:function(i,r,y){var z,F=0,I=i.length,K=I===A||b.isFunction(i);if(y)if(K)for(z in i){if(r.apply(i[z],y)===false)break}else for(;F<I;){if(r.apply(i[F++],y)===false)break}else if(K)for(z in i){if(r.call(i[z],z,i[z])===false)break}else for(y=i[0];F<I&&r.call(y,F,y)!==false;y=i[++F]);return i},trim:R?function(i){return i==null?"":R.call(i)}:function(i){return i==null?"":i.toString().replace(l,"").replace(n,"")},makeArray:function(i,r){var y=r||[];if(i!=null){var z=b.type(i);i.length==
null||z==="string"||z==="function"||z==="regexp"||b.isWindow(i)?P.call(y,i):b.merge(y,i)}return y},inArray:function(i,r){if(r.indexOf)return r.indexOf(i);for(var y=0,z=r.length;y<z;y++)if(r[y]===i)return y;return-1},merge:function(i,r){var y=i.length,z=0;if(typeof r.length==="number")for(var F=r.length;z<F;z++)i[y++]=r[z];else for(;r[z]!==A;)i[y++]=r[z++];i.length=y;return i},grep:function(i,r,y){var z=[],F;y=!!y;for(var I=0,K=i.length;I<K;I++){F=!!r(i[I],I);y!==F&&z.push(i[I])}return z},map:function(i,
r,y){for(var z=[],F,I=0,K=i.length;I<K;I++){F=r(i[I],I,y);if(F!=null)z[z.length]=F}return z.concat.apply([],z)},guid:1,proxy:function(i,r,y){if(arguments.length===2)if(typeof r==="string"){y=i;i=y[r];r=A}else if(r&&!b.isFunction(r)){y=r;r=A}if(!r&&i)r=function(){return i.apply(y||this,arguments)};if(i)r.guid=i.guid=i.guid||r.guid||b.guid++;return r},access:function(i,r,y,z,F,I){var K=i.length;if(typeof r==="object"){for(var J in r)b.access(i,J,r[J],z,F,y);return i}if(y!==A){z=!I&&z&&b.isFunction(y);
for(J=0;J<K;J++)F(i[J],r,z?y.call(i[J],J,F(i[J],r)):y,I);return i}return K?F(i[0],r):A},now:function(){return(new Date).getTime()},uaMatch:function(i){i=i.toLowerCase();i=M.exec(i)||g.exec(i)||j.exec(i)||i.indexOf("compatible")<0&&o.exec(i)||[];return{browser:i[1]||"",version:i[2]||"0"}},browser:{}});b.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(i,r){L["[object "+r+"]"]=r.toLowerCase()});m=b.uaMatch(m);if(m.browser){b.browser[m.browser]=true;b.browser.version=
m.version}if(b.browser.webkit)b.browser.safari=true;if(Q)b.inArray=function(i,r){return Q.call(r,i)};if(!/\s/.test("\u00a0")){l=/^[\s\xA0]+/;n=/[\s\xA0]+$/}f=b(u);if(u.addEventListener)t=function(){u.removeEventListener("DOMContentLoaded",t,false);b.ready()};else if(u.attachEvent)t=function(){if(u.readyState==="complete"){u.detachEvent("onreadystatechange",t);b.ready()}};return E.jQuery=E.$=b}();(function(){c.support={};var a=u.documentElement,b=u.createElement("script"),d=u.createElement("div"),
e="script"+c.now();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],k=u.createElement("select"),l=k.appendChild(u.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),
hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:l.selected,optDisabled:false,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};k.disabled=true;c.support.optDisabled=!l.disabled;b.type="text/javascript";try{b.appendChild(u.createTextNode("window."+e+"=1;"))}catch(n){}a.insertBefore(b,
a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function s(){c.support.noCloneEvent=false;d.detachEvent("onclick",s)});d.cloneNode(true).fireEvent("onclick")}d=u.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=u.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var s=u.createElement("div");
s.style.width=s.style.paddingLeft="1px";u.body.appendChild(s);c.boxModel=c.support.boxModel=s.offsetWidth===2;if("zoom"in s.style){s.style.display="inline";s.style.zoom=1;c.support.inlineBlockNeedsLayout=s.offsetWidth===2;s.style.display="";s.innerHTML="<div style='width:4px;'></div>";c.support.shrinkWrapBlocks=s.offsetWidth!==2}s.innerHTML="<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";var v=s.getElementsByTagName("td");c.support.reliableHiddenOffsets=v[0].offsetHeight===
0;v[0].style.display="";v[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&v[0].offsetHeight===0;s.innerHTML="";u.body.removeChild(s).style.display="none"});a=function(s){var v=u.createElement("div");s="on"+s;var B=s in v;if(!B){v.setAttribute(s,"return;");B=typeof v[s]==="function"}return B};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",
cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var pa={},Oa=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?pa:a;var e=a.nodeType,f=e?a[c.expando]:null,h=c.cache;if(!(e&&!f&&typeof b==="string"&&d===A)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=
c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==A)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?pa:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);else if(d)delete f[e];else for(var k in a)delete a[k]}},acceptData:function(a){if(a.nodeName){var b=
c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){if(typeof a==="undefined")return this.length?c.data(this[0]):null;else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===A){var e=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(e===A&&this.length){e=c.data(this[0],a);if(e===A&&this[0].nodeType===1){e=this[0].getAttribute("data-"+a);if(typeof e===
"string")try{e=e==="true"?true:e==="false"?false:e==="null"?null:!c.isNaN(e)?parseFloat(e):Oa.test(e)?c.parseJSON(e):e}catch(f){}else e=A}}return e===A&&d[1]?this.data(d[0]):e}else return this.each(function(){var h=c(this),k=[d[0],b];h.triggerHandler("setData"+d[1]+"!",k);c.data(this,a,b);h.triggerHandler("changeData"+d[1]+"!",k)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=c.data(a,b);if(!d)return e||
[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===A)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,
a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var qa=/[\n\t]/g,ga=/\s+/,Pa=/\r/g,Qa=/^(?:href|src|style)$/,Ra=/^(?:button|input)$/i,Sa=/^(?:button|input|object|select|textarea)$/i,Ta=/^a(?:rea)?$/i,ra=/^(?:radio|checkbox)$/i;c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,
a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(s){var v=c(this);v.addClass(a.call(this,s,v.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ga),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1)if(f.className){for(var h=" "+f.className+" ",k=f.className,l=0,n=b.length;l<n;l++)if(h.indexOf(" "+b[l]+" ")<0)k+=" "+b[l];f.className=c.trim(k)}else f.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(n){var s=
c(this);s.removeClass(a.call(this,n,s.attr("class")))});if(a&&typeof a==="string"||a===A)for(var b=(a||"").split(ga),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1&&f.className)if(a){for(var h=(" "+f.className+" ").replace(qa," "),k=0,l=b.length;k<l;k++)h=h.replace(" "+b[k]+" "," ");f.className=c.trim(h)}else f.className=""}return this},toggleClass:function(a,b){var d=typeof a,e=typeof b==="boolean";if(c.isFunction(a))return this.each(function(f){var h=c(this);h.toggleClass(a.call(this,
f,h.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var f,h=0,k=c(this),l=b,n=a.split(ga);f=n[h++];){l=e?l:!k.hasClass(f);k[l?"addClass":"removeClass"](f)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(qa," ").indexOf(a)>-1)return true;return false},
val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h<e;h++){var k=f[h];if(k.selected&&(c.support.optDisabled?!k.disabled:k.getAttribute("disabled")===null)&&(!k.parentNode.disabled||!c.nodeName(k.parentNode,"optgroup"))){a=c(k).val();if(b)return a;d.push(a)}}return d}if(ra.test(b.type)&&
!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Pa,"")}return A}var l=c.isFunction(a);return this.each(function(n){var s=c(this),v=a;if(this.nodeType===1){if(l)v=a.call(this,n,s.val());if(v==null)v="";else if(typeof v==="number")v+="";else if(c.isArray(v))v=c.map(v,function(D){return D==null?"":D+""});if(c.isArray(v)&&ra.test(this.type))this.checked=c.inArray(s.val(),v)>=0;else if(c.nodeName(this,"select")){var B=c.makeArray(v);c("option",this).each(function(){this.selected=
c.inArray(c(this).val(),B)>=0});if(!B.length)this.selectedIndex=-1}else this.value=v}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return A;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==A;b=e&&c.props[b]||b;if(a.nodeType===1){var h=Qa.test(b);if((b in a||a[b]!==A)&&e&&!h){if(f){b==="type"&&Ra.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:Sa.test(a.nodeName)||Ta.test(a.nodeName)&&a.href?0:A;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return A;a=!c.support.hrefNormalized&&e&&
h?a.getAttribute(b,2):a.getAttribute(b);return a===null?A:a}}});var X=/\.(.*)$/,ha=/^(?:textarea|input|select)$/i,Ha=/\./g,Ia=/ /g,Ua=/[^\w\s.|`]/g,Va=function(a){return a.replace(Ua,"\\$&")},sa={focusin:0,focusout:0};c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var k=a.nodeType?"events":"__events__",l=h[k],n=h.handle;if(typeof l===
"function"){n=l.handle;l=l.events}else if(!l){a.nodeType||(h[k]=h=function(){});h.events=l={}}if(!n)h.handle=n=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(n.elem,arguments):A};n.elem=a;b=b.split(" ");for(var s=0,v;k=b[s++];){h=f?c.extend({},f):{handler:d,data:e};if(k.indexOf(".")>-1){v=k.split(".");k=v.shift();h.namespace=v.slice(0).sort().join(".")}else{v=[];h.namespace=""}h.type=k;if(!h.guid)h.guid=d.guid;var B=l[k],D=c.event.special[k]||{};if(!B){B=l[k]=[];
if(!D.setup||D.setup.call(a,e,v,n)===false)if(a.addEventListener)a.addEventListener(k,n,false);else a.attachEvent&&a.attachEvent("on"+k,n)}if(D.add){D.add.call(a,h);if(!h.handler.guid)h.handler.guid=d.guid}B.push(h);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,k=0,l,n,s,v,B,D,H=a.nodeType?"events":"__events__",w=c.data(a),G=w&&w[H];if(w&&G){if(typeof G==="function"){w=G;G=G.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||
typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in G)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[k++];){v=f;l=f.indexOf(".")<0;n=[];if(!l){n=f.split(".");f=n.shift();s=RegExp("(^|\\.)"+c.map(n.slice(0).sort(),Va).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(B=G[f])if(d){v=c.event.special[f]||{};for(h=e||0;h<B.length;h++){D=B[h];if(d.guid===D.guid){if(l||s.test(D.namespace)){e==null&&B.splice(h--,1);v.remove&&v.remove.call(a,D)}if(e!=null)break}}if(B.length===0||e!=null&&B.length===1){if(!v.teardown||
v.teardown.call(a,n)===false)c.removeEvent(a,f,w.handle);delete G[f]}}else for(h=0;h<B.length;h++){D=B[h];if(l||s.test(D.namespace)){c.event.remove(a,v,D.handler,h);B.splice(h--,1)}}}if(c.isEmptyObject(G)){if(b=w.handle)b.elem=null;delete w.events;delete w.handle;if(typeof w==="function")c.removeData(a,H);else c.isEmptyObject(w)&&c.removeData(a)}}}}},trigger:function(a,b,d,e){var f=a.type||a;if(!e){a=typeof a==="object"?a[c.expando]?a:c.extend(c.Event(f),a):c.Event(f);if(f.indexOf("!")>=0){a.type=
f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return A;a.result=A;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===
false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){e=a.target;var k,l=f.replace(X,""),n=c.nodeName(e,"a")&&l==="click",s=c.event.special[l]||{};if((!s._default||s._default.call(d,a)===false)&&!n&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[l]){if(k=e["on"+l])e["on"+l]=null;c.event.triggered=true;e[l]()}}catch(v){}if(k)e["on"+l]=k;c.event.triggered=false}}},handle:function(a){var b,d,e;
d=[];var f,h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var k=d.length;f<k;f++){var l=d[f];if(b||e.test(l.namespace)){a.handler=l.handler;a.data=
l.data;a.handleObj=l;l=l.handler.apply(this,h);if(l!==A){a.result=l;if(l===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[c.expando])return a;var b=a;a=c.Event(b);for(var d=this.props.length,e;d;){e=this.props[--d];a[e]=b[e]}if(!a.target)a.target=a.srcElement||u;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=u.documentElement;d=u.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(a.which==null&&(a.charCode!=null||a.keyCode!=null))a.which=a.charCode!=null?a.charCode:a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==A)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,Y(a.origType,a.selector),c.extend({},a,{handler:Ga,guid:a.handler.guid}))},remove:function(a){c.event.remove(this,
Y(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,d){if(c.isWindow(this))this.onbeforeunload=d},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.removeEvent=u.removeEventListener?function(a,b,d){a.removeEventListener&&a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent&&a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=
c.now();this[c.expando]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ba;var a=this.originalEvent;if(a)if(a.preventDefault)a.preventDefault();else a.returnValue=false},stopPropagation:function(){this.isPropagationStopped=ba;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ba;this.stopPropagation()},isDefaultPrevented:U,isPropagationStopped:U,isImmediatePropagationStopped:U};
var ta=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},ua=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?ua:ta,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?ua:ta)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!==
"form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length){a.liveFired=A;return ja("submit",this,arguments)}});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13){a.liveFired=A;return ja("submit",this,arguments)}})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};if(!c.support.changeBubbles){var V,
va=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ha.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=va(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===A||f===e))if(e!=null||f){a.type="change";a.liveFired=
A;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",va(a))}},setup:function(){if(this.type===
"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ha.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ha.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}u.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){sa[b]++===0&&u.addEventListener(a,d,true)},teardown:function(){--sa[b]===
0&&u.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=A}var k=b==="one"?c.proxy(f,function(n){c(this).unbind(n,k);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var l=this.length;h<l;h++)c.event.add(this[h],d,k,e)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault)for(var d in a)this.unbind(d,
a[d]);else{d=0;for(var e=this.length;d<e;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,e){return this.live(b,d,e,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var d=c.Event(a);d.preventDefault();d.stopPropagation();c.event.trigger(d,b,this[0]);return d.result}},toggle:function(a){for(var b=arguments,d=
1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(e){var f=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,f+1);e.preventDefault();return b[f].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var wa={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,e,f,h){var k,l=0,n,s,v=h||this.selector;h=h?this:c(this.context);if(typeof d===
"object"&&!d.preventDefault){for(k in d)h[b](k,e,d[k],v);return this}if(c.isFunction(e)){f=e;e=A}for(d=(d||"").split(" ");(k=d[l++])!=null;){n=X.exec(k);s="";if(n){s=n[0];k=k.replace(X,"")}if(k==="hover")d.push("mouseenter"+s,"mouseleave"+s);else{n=k;if(k==="focus"||k==="blur"){d.push(wa[k]+s);k+=s}else k=(wa[k]||k)+s;if(b==="live"){s=0;for(var B=h.length;s<B;s++)c.event.add(h[s],"live."+Y(k,v),{data:e,selector:v,handler:f,origType:k,origHandler:f,preType:n})}else h.unbind("live."+Y(k,v),f)}}return this}});
c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d,e){if(e==null){e=d;d=null}return arguments.length>0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
(function(){function a(g,j,o,m,p,q){p=0;for(var t=m.length;p<t;p++){var x=m[p];if(x){x=x[g];for(var C=false;x;){if(x.sizcache===o){C=m[x.sizset];break}if(x.nodeType===1&&!q){x.sizcache=o;x.sizset=p}if(x.nodeName.toLowerCase()===j){C=x;break}x=x[g]}m[p]=C}}}function b(g,j,o,m,p,q){p=0;for(var t=m.length;p<t;p++){var x=m[p];if(x){x=x[g];for(var C=false;x;){if(x.sizcache===o){C=m[x.sizset];break}if(x.nodeType===1){if(!q){x.sizcache=o;x.sizset=p}if(typeof j!=="string"){if(x===j){C=true;break}}else if(l.filter(j,
[x]).length>0){C=x;break}}x=x[g]}m[p]=C}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,k=true;[0,0].sort(function(){k=false;return 0});var l=function(g,j,o,m){o=o||[];var p=j=j||u;if(j.nodeType!==1&&j.nodeType!==9)return[];if(!g||typeof g!=="string")return o;var q=[],t,x,C,P,N=true,R=l.isXML(j),Q=g,L;do{d.exec("");if(t=d.exec(Q)){Q=t[3];q.push(t[1]);if(t[2]){P=t[3];
break}}}while(t);if(q.length>1&&s.exec(g))if(q.length===2&&n.relative[q[0]])x=M(q[0]+q[1],j);else for(x=n.relative[q[0]]?[j]:l(q.shift(),j);q.length;){g=q.shift();if(n.relative[g])g+=q.shift();x=M(g,x)}else{if(!m&&q.length>1&&j.nodeType===9&&!R&&n.match.ID.test(q[0])&&!n.match.ID.test(q[q.length-1])){t=l.find(q.shift(),j,R);j=t.expr?l.filter(t.expr,t.set)[0]:t.set[0]}if(j){t=m?{expr:q.pop(),set:D(m)}:l.find(q.pop(),q.length===1&&(q[0]==="~"||q[0]==="+")&&j.parentNode?j.parentNode:j,R);x=t.expr?l.filter(t.expr,
t.set):t.set;if(q.length>0)C=D(x);else N=false;for(;q.length;){t=L=q.pop();if(n.relative[L])t=q.pop();else L="";if(t==null)t=j;n.relative[L](C,t,R)}}else C=[]}C||(C=x);C||l.error(L||g);if(f.call(C)==="[object Array]")if(N)if(j&&j.nodeType===1)for(g=0;C[g]!=null;g++){if(C[g]&&(C[g]===true||C[g].nodeType===1&&l.contains(j,C[g])))o.push(x[g])}else for(g=0;C[g]!=null;g++)C[g]&&C[g].nodeType===1&&o.push(x[g]);else o.push.apply(o,C);else D(C,o);if(P){l(P,p,o,m);l.uniqueSort(o)}return o};l.uniqueSort=function(g){if(w){h=
k;g.sort(w);if(h)for(var j=1;j<g.length;j++)g[j]===g[j-1]&&g.splice(j--,1)}return g};l.matches=function(g,j){return l(g,null,null,j)};l.matchesSelector=function(g,j){return l(j,null,null,[g]).length>0};l.find=function(g,j,o){var m;if(!g)return[];for(var p=0,q=n.order.length;p<q;p++){var t=n.order[p],x;if(x=n.leftMatch[t].exec(g)){var C=x[1];x.splice(1,1);if(C.substr(C.length-1)!=="\\"){x[1]=(x[1]||"").replace(/\\/g,"");m=n.find[t](x,j,o);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=j.getElementsByTagName("*"));
return{set:m,expr:g}};l.filter=function(g,j,o,m){for(var p=g,q=[],t=j,x,C,P=j&&j[0]&&l.isXML(j[0]);g&&j.length;){for(var N in n.filter)if((x=n.leftMatch[N].exec(g))!=null&&x[2]){var R=n.filter[N],Q,L;L=x[1];C=false;x.splice(1,1);if(L.substr(L.length-1)!=="\\"){if(t===q)q=[];if(n.preFilter[N])if(x=n.preFilter[N](x,t,o,q,m,P)){if(x===true)continue}else C=Q=true;if(x)for(var i=0;(L=t[i])!=null;i++)if(L){Q=R(L,x,i,t);var r=m^!!Q;if(o&&Q!=null)if(r)C=true;else t[i]=false;else if(r){q.push(L);C=true}}if(Q!==
A){o||(t=q);g=g.replace(n.match[N],"");if(!C)return[];break}}}if(g===p)if(C==null)l.error(g);else break;p=g}return t};l.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=l.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,j){var o=typeof j==="string",m=o&&!/\W/.test(j);o=o&&!m;if(m)j=j.toLowerCase();m=0;for(var p=g.length,q;m<p;m++)if(q=g[m]){for(;(q=q.previousSibling)&&q.nodeType!==1;);g[m]=o||q&&q.nodeName.toLowerCase()===
j?q||false:q===j}o&&l.filter(j,g,true)},">":function(g,j){var o=typeof j==="string",m,p=0,q=g.length;if(o&&!/\W/.test(j))for(j=j.toLowerCase();p<q;p++){if(m=g[p]){o=m.parentNode;g[p]=o.nodeName.toLowerCase()===j?o:false}}else{for(;p<q;p++)if(m=g[p])g[p]=o?m.parentNode:m.parentNode===j;o&&l.filter(j,g,true)}},"":function(g,j,o){var m=e++,p=b,q;if(typeof j==="string"&&!/\W/.test(j)){q=j=j.toLowerCase();p=a}p("parentNode",j,m,g,q,o)},"~":function(g,j,o){var m=e++,p=b,q;if(typeof j==="string"&&!/\W/.test(j)){q=
j=j.toLowerCase();p=a}p("previousSibling",j,m,g,q,o)}},find:{ID:function(g,j,o){if(typeof j.getElementById!=="undefined"&&!o)return(g=j.getElementById(g[1]))&&g.parentNode?[g]:[]},NAME:function(g,j){if(typeof j.getElementsByName!=="undefined"){for(var o=[],m=j.getElementsByName(g[1]),p=0,q=m.length;p<q;p++)m[p].getAttribute("name")===g[1]&&o.push(m[p]);return o.length===0?null:o}},TAG:function(g,j){return j.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,j,o,m,p,q){g=" "+g[1].replace(/\\/g,
"")+" ";if(q)return g;q=0;for(var t;(t=j[q])!=null;q++)if(t)if(p^(t.className&&(" "+t.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))o||m.push(t);else if(o)j[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var j=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=j[1]+(j[2]||1)-0;g[3]=j[3]-0}g[0]=e++;return g},ATTR:function(g,j,o,
m,p,q){j=g[1].replace(/\\/g,"");if(!q&&n.attrMap[j])g[1]=n.attrMap[j];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,j,o,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=l(g[3],null,null,j);else{g=l.filter(g[3],j,o,true^p);o||m.push.apply(m,g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===
true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,j,o){return!!l(o[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===
g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,j){return j===0},last:function(g,j,o,m){return j===m.length-1},even:function(g,j){return j%2===0},odd:function(g,j){return j%2===1},lt:function(g,j,o){return j<o[3]-0},gt:function(g,j,o){return j>o[3]-0},nth:function(g,j,o){return o[3]-
0===j},eq:function(g,j,o){return o[3]-0===j}},filter:{PSEUDO:function(g,j,o,m){var p=j[1],q=n.filters[p];if(q)return q(g,o,j,m);else if(p==="contains")return(g.textContent||g.innerText||l.getText([g])||"").indexOf(j[3])>=0;else if(p==="not"){j=j[3];o=0;for(m=j.length;o<m;o++)if(j[o]===g)return false;return true}else l.error("Syntax error, unrecognized expression: "+p)},CHILD:function(g,j){var o=j[1],m=g;switch(o){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(o===
"first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":o=j[2];var p=j[3];if(o===1&&p===0)return true;var q=j[0],t=g.parentNode;if(t&&(t.sizcache!==q||!g.nodeIndex)){var x=0;for(m=t.firstChild;m;m=m.nextSibling)if(m.nodeType===1)m.nodeIndex=++x;t.sizcache=q}m=g.nodeIndex-p;return o===0?m===0:m%o===0&&m/o>=0}},ID:function(g,j){return g.nodeType===1&&g.getAttribute("id")===j},TAG:function(g,j){return j==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===
j},CLASS:function(g,j){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(j)>-1},ATTR:function(g,j){var o=j[1];o=n.attrHandle[o]?n.attrHandle[o](g):g[o]!=null?g[o]:g.getAttribute(o);var m=o+"",p=j[2],q=j[4];return o==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&o!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,j,o,m){var p=n.setFilters[j[2]];
if(p)return p(g,o,j,m)}}},s=n.match.POS,v=function(g,j){return"\\"+(j-0+1)},B;for(B in n.match){n.match[B]=RegExp(n.match[B].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[B]=RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[B].source.replace(/\\(\d+)/g,v))}var D=function(g,j){g=Array.prototype.slice.call(g,0);if(j){j.push.apply(j,g);return j}return g};try{Array.prototype.slice.call(u.documentElement.childNodes,0)}catch(H){D=function(g,j){var o=j||[],m=0;if(f.call(g)==="[object Array]")Array.prototype.push.apply(o,
g);else if(typeof g.length==="number")for(var p=g.length;m<p;m++)o.push(g[m]);else for(;g[m];m++)o.push(g[m]);return o}}var w,G;if(u.documentElement.compareDocumentPosition)w=function(g,j){if(g===j){h=true;return 0}if(!g.compareDocumentPosition||!j.compareDocumentPosition)return g.compareDocumentPosition?-1:1;return g.compareDocumentPosition(j)&4?-1:1};else{w=function(g,j){var o=[],m=[],p=g.parentNode,q=j.parentNode,t=p;if(g===j){h=true;return 0}else if(p===q)return G(g,j);else if(p){if(!q)return 1}else return-1;
for(;t;){o.unshift(t);t=t.parentNode}for(t=q;t;){m.unshift(t);t=t.parentNode}p=o.length;q=m.length;for(t=0;t<p&&t<q;t++)if(o[t]!==m[t])return G(o[t],m[t]);return t===p?G(g,m[t],-1):G(o[t],j,1)};G=function(g,j,o){if(g===j)return o;for(g=g.nextSibling;g;){if(g===j)return-1;g=g.nextSibling}return 1}}l.getText=function(g){for(var j="",o,m=0;g[m];m++){o=g[m];if(o.nodeType===3||o.nodeType===4)j+=o.nodeValue;else if(o.nodeType!==8)j+=l.getText(o.childNodes)}return j};(function(){var g=u.createElement("div"),
j="script"+(new Date).getTime();g.innerHTML="<a name='"+j+"'/>";var o=u.documentElement;o.insertBefore(g,o.firstChild);if(u.getElementById(j)){n.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:A:[]};n.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}o.removeChild(g);
o=g=null})();(function(){var g=u.createElement("div");g.appendChild(u.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(j,o){var m=o.getElementsByTagName(j[1]);if(j[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(j){return j.getAttribute("href",2)};g=null})();u.querySelectorAll&&
function(){var g=l,j=u.createElement("div");j.innerHTML="<p class='TEST'></p>";if(!(j.querySelectorAll&&j.querySelectorAll(".TEST").length===0)){l=function(m,p,q,t){p=p||u;if(!t&&!l.isXML(p))if(p.nodeType===9)try{return D(p.querySelectorAll(m),q)}catch(x){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var C=p.id,P=p.id="__sizzle__";try{return D(p.querySelectorAll("#"+P+" "+m),q)}catch(N){}finally{if(C)p.id=C;else p.removeAttribute("id")}}return g(m,p,q,t)};for(var o in g)l[o]=g[o];
j=null}}();(function(){var g=u.documentElement,j=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,o=false;try{j.call(u.documentElement,":sizzle")}catch(m){o=true}if(j)l.matchesSelector=function(p,q){try{if(o||!n.match.PSEUDO.test(q))return j.call(p,q)}catch(t){}return l(q,null,null,[p]).length>0}})();(function(){var g=u.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===
0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(j,o,m){if(typeof o.getElementsByClassName!=="undefined"&&!m)return o.getElementsByClassName(j[1])};g=null}}})();l.contains=u.documentElement.contains?function(g,j){return g!==j&&(g.contains?g.contains(j):true)}:function(g,j){return!!(g.compareDocumentPosition(j)&16)};l.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var M=function(g,
j){for(var o=[],m="",p,q=j.nodeType?[j]:j;p=n.match.PSEUDO.exec(g);){m+=p[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;p=0;for(var t=q.length;p<t;p++)l(g,q[p],o);return l.filter(m,o)};c.find=l;c.expr=l.selectors;c.expr[":"]=c.expr.filters;c.unique=l.uniqueSort;c.text=l.getText;c.isXMLDoc=l.isXML;c.contains=l.contains})();var Wa=/Until$/,Xa=/^(?:parents|prevUntil|prevAll)/,Ya=/,/,Ja=/^.[^:#\[\.,]*$/,Za=Array.prototype.slice,$a=c.expr.match.POS;c.fn.extend({find:function(a){for(var b=this.pushStack("",
"find",a),d=0,e=0,f=this.length;e<f;e++){d=b.length;c.find(a,this[e],b);if(e>0)for(var h=d;h<b.length;h++)for(var k=0;k<d;k++)if(b[k]===b[h]){b.splice(h--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,e=b.length;d<e;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(ka(this,a,false),"not",a)},filter:function(a){return this.pushStack(ka(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,
b){var d=[],e,f,h=this[0];if(c.isArray(a)){var k={},l,n=1;if(h&&a.length){e=0;for(f=a.length;e<f;e++){l=a[e];k[l]||(k[l]=c.expr.match.POS.test(l)?c(l,b||this.context):l)}for(;h&&h.ownerDocument&&h!==b;){for(l in k){e=k[l];if(e.jquery?e.index(h)>-1:c(h).is(e))d.push({selector:l,elem:h,level:n})}h=h.parentNode;n++}}return d}k=$a.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e<f;e++)for(h=this[e];h;)if(k?k.index(h)>-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||
!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});
c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",
d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Wa.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||Ya.test(e))&&Xa.test(a))f=f.reverse();return this.pushStack(f,a,Za.call(arguments).join(","))}});
c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===A||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var xa=/ jQuery\d+="(?:\d+|null)"/g,
$=/^\s+/,ya=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,za=/<([\w:]+)/,ab=/<tbody/i,bb=/<|&#?\w+;/,Aa=/<(?:script|object|embed|option|style)/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,cb=/\=([^="'>\s]+\/)>/g,O={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],
area:[1,"<map>","</map>"],_default:[0,"",""]};O.optgroup=O.option;O.tbody=O.tfoot=O.colgroup=O.caption=O.thead;O.th=O.td;if(!c.support.htmlSerialize)O._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==A)return this.empty().append((this[0]&&this[0].ownerDocument||u).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,
d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},
unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=
c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));
c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(xa,"").replace(cb,'="$1">').replace($,
"")],e)[0]}else return this.cloneNode(true)});if(a===true){la(this,b);la(this.find("*"),b.find("*"))}return b},html:function(a){if(a===A)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(xa,""):null;else if(typeof a==="string"&&!Aa.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!O[(za.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ya,"<$1></$2>");try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(e){this.empty().append(a)}}else c.isFunction(a)?
this.each(function(f){var h=c(this);h.html(a.call(this,f,h.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),e=d.html();d.replaceWith(a.call(this,b,e))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,
true)},domManip:function(a,b,d){var e,f,h=a[0],k=[],l;if(!c.support.checkClone&&arguments.length===3&&typeof h==="string"&&Ba.test(h))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(h))return this.each(function(s){var v=c(this);a[0]=h.call(this,s,b?v.html():A);v.domManip(a,b,d)});if(this[0]){e=h&&h.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:c.buildFragment(a,this,k);l=e.fragment;if(f=l.childNodes.length===1?l=l.firstChild:
l.firstChild){b=b&&c.nodeName(f,"tr");f=0;for(var n=this.length;f<n;f++)d.call(b?c.nodeName(this[f],"table")?this[f].getElementsByTagName("tbody")[0]||this[f].appendChild(this[f].ownerDocument.createElement("tbody")):this[f]:this[f],f>0||e.cacheable||this.length>1?l.cloneNode(true):l)}k.length&&c.each(k,Ka)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:u;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===u&&!Aa.test(a[0])&&(c.support.checkClone||
!Ba.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=
d.length;f<h;f++){var k=(f>0?this.clone(true):this).get();c(d[f])[b](k);e=e.concat(k)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||u;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||u;for(var f=[],h=0,k;(k=a[h])!=null;h++){if(typeof k==="number")k+="";if(k){if(typeof k==="string"&&!bb.test(k))k=b.createTextNode(k);else if(typeof k==="string"){k=k.replace(ya,"<$1></$2>");var l=(za.exec(k)||["",""])[1].toLowerCase(),n=O[l]||O._default,
s=n[0],v=b.createElement("div");for(v.innerHTML=n[1]+k+n[2];s--;)v=v.lastChild;if(!c.support.tbody){s=ab.test(k);l=l==="table"&&!s?v.firstChild&&v.firstChild.childNodes:n[1]==="<table>"&&!s?v.childNodes:[];for(n=l.length-1;n>=0;--n)c.nodeName(l[n],"tbody")&&!l[n].childNodes.length&&l[n].parentNode.removeChild(l[n])}!c.support.leadingWhitespace&&$.test(k)&&v.insertBefore(b.createTextNode($.exec(k)[0]),v.firstChild);k=v.childNodes}if(k.nodeType)f.push(k);else f=c.merge(f,k)}}if(d)for(h=0;f[h];h++)if(e&&
c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,k=0,l;(l=a[k])!=null;k++)if(!(l.nodeName&&c.noData[l.nodeName.toLowerCase()]))if(d=l[c.expando]){if((b=e[d])&&b.events)for(var n in b.events)f[n]?
c.event.remove(l,n):c.removeEvent(l,n,b.handle);if(h)delete l[c.expando];else l.removeAttribute&&l.removeAttribute(c.expando);delete e[d]}}});var Ca=/alpha\([^)]*\)/i,db=/opacity=([^)]*)/,eb=/-([a-z])/ig,fb=/([A-Z])/g,Da=/^-?\d+(?:px)?$/i,gb=/^-?\d/,hb={position:"absolute",visibility:"hidden",display:"block"},La=["Left","Right"],Ma=["Top","Bottom"],W,ib=u.defaultView&&u.defaultView.getComputedStyle,jb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===A)return this;
return c.access(this,a,b,true,function(d,e,f){return f!==A?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),k=a.style,l=c.cssHooks[h];b=c.cssProps[h]||
h;if(d!==A){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!l||!("set"in l)||(d=l.set(a,d))!==A)try{k[b]=d}catch(n){}}}else{if(l&&"get"in l&&(f=l.get(a,false,e))!==A)return f;return k[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==A)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=
e[f]},camelCase:function(a){return a.replace(eb,jb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=ma(d,b,f);else c.swap(d,hb,function(){h=ma(d,b,f)});return h+"px"}},set:function(d,e){if(Da.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return db.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":
b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=d.filter||"";d.filter=Ca.test(f)?f.replace(Ca,e):d.filter+" "+e}};if(ib)W=function(a,b,d){var e;d=d.replace(fb,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return A;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};else if(u.documentElement.currentStyle)W=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],
h=a.style;if(!Da.test(f)&&gb.test(f)){d=h.left;e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f};if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var kb=c.now(),lb=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
mb=/^(?:select|textarea)/i,nb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ob=/^(?:GET|HEAD|DELETE)$/,Na=/\[\]$/,T=/\=\?(&|$)/,ia=/\?/,pb=/([?&])_=[^&]*/,qb=/^(\w+:)?\/\/([^\/?#]+)/,rb=/%20/g,sb=/#.*$/,Ea=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ea)return Ea.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=
b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(k,l){if(l==="success"||l==="notmodified")h.html(f?c("<div>").append(k.responseText.replace(lb,"")).find(f):k.responseText);d&&h.each(d,[k.responseText,l,k])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&
!this.disabled&&(this.checked||mb.test(this.nodeName)||nb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})},
getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html",
script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),k=ob.test(h);b.url=b.url.replace(sb,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ia.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data||
!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+kb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var l=E[d];E[d]=function(m){f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);if(c.isFunction(l))l(m);else{E[d]=A;try{delete E[d]}catch(p){}}v&&v.removeChild(B)}}if(b.dataType==="script"&&b.cache===null)b.cache=
false;if(b.cache===false&&h==="GET"){var n=c.now(),s=b.url.replace(pb,"$1_="+n);b.url=s+(s===b.url?(ia.test(b.url)?"&":"?")+"_="+n:"")}if(b.data&&h==="GET")b.url+=(ia.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");n=(n=qb.exec(b.url))&&(n[1]&&n[1]!==location.protocol||n[2]!==location.host);if(b.dataType==="script"&&h==="GET"&&n){var v=u.getElementsByTagName("head")[0]||u.documentElement,B=u.createElement("script");if(b.scriptCharset)B.charset=b.scriptCharset;B.src=
b.url;if(!d){var D=false;B.onload=B.onreadystatechange=function(){if(!D&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){D=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);B.onload=B.onreadystatechange=null;v&&B.parentNode&&v.removeChild(B)}}}v.insertBefore(B,v.firstChild);return A}var H=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!k||a&&a.contentType)w.setRequestHeader("Content-Type",
b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}n||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(G){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&&
c.triggerGlobal(b,"ajaxSend",[w,b]);var M=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){H||c.handleComplete(b,w,e,f);H=true;if(w)w.onreadystatechange=c.noop}else if(!H&&w&&(w.readyState===4||m==="timeout")){H=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d||
c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&g.call&&g.call(w);M("abort")}}catch(j){}b.async&&b.timeout>0&&setTimeout(function(){w&&!H&&M("timeout")},b.timeout);try{w.send(k||b.data==null?null:b.data)}catch(o){c.handleError(b,w,null,o);c.handleComplete(b,w,e,f)}b.async||M();return w}},param:function(a,b){var d=[],e=function(h,k){k=c.isFunction(k)?k():k;d[d.length]=encodeURIComponent(h)+
"="+encodeURIComponent(k)};if(b===A)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)ca(f,a[f],b,e);return d.join("&").replace(rb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",[b,a])},handleComplete:function(a,
b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),e=a.getResponseHeader("Etag");
if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});if(E.ActiveXObject)c.ajaxSettings.xhr=
function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var da={},tb=/^(?:toggle|show|hide)$/,ub=/^([+\-]=)?([\d+.\-]+)(.*)$/,aa,na=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",3),a,b,d);else{a=
0;for(b=this.length;a<b;a++){if(!c.data(this[a],"olddisplay")&&this[a].style.display==="none")this[a].style.display="";this[a].style.display===""&&c.css(this[a],"display")==="none"&&c.data(this[a],"olddisplay",oa(this[a].nodeName))}for(a=0;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b,d){if(a||a===0)return this.animate(S("hide",3),a,b,d);else{a=0;for(b=this.length;a<b;a++){d=c.css(this[a],"display");d!=="none"&&c.data(this[a],"olddisplay",d)}for(a=
0;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b,d){var e=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||e?this.each(function(){var f=e?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(S("toggle",3),a,b,d);return this},fadeTo:function(a,b,d,e){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d,e)},animate:function(a,b,d,e){var f=c.speed(b,d,e);if(c.isEmptyObject(a))return this.each(f.complete);
return this[f.queue===false?"each":"queue"](function(){var h=c.extend({},f),k,l=this.nodeType===1,n=l&&c(this).is(":hidden"),s=this;for(k in a){var v=c.camelCase(k);if(k!==v){a[v]=a[k];delete a[k];k=v}if(a[k]==="hide"&&n||a[k]==="show"&&!n)return h.complete.call(this);if(l&&(k==="height"||k==="width")){h.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(c.css(this,"display")==="inline"&&c.css(this,"float")==="none")if(c.support.inlineBlockNeedsLayout)if(oa(this.nodeName)===
"inline")this.style.display="inline-block";else{this.style.display="inline";this.style.zoom=1}else this.style.display="inline-block"}if(c.isArray(a[k])){(h.specialEasing=h.specialEasing||{})[k]=a[k][1];a[k]=a[k][0]}}if(h.overflow!=null)this.style.overflow="hidden";h.curAnim=c.extend({},a);c.each(a,function(B,D){var H=new c.fx(s,h,B);if(tb.test(D))H[D==="toggle"?n?"show":"hide":D](a);else{var w=ub.exec(D),G=H.cur(true)||0;if(w){var M=parseFloat(w[2]),g=w[3]||"px";if(g!=="px"){c.style(s,B,(M||1)+g);
G=(M||1)/H.cur(true)*G;c.style(s,B,G+g)}if(w[1])M=(w[1]==="-="?-1:1)*M+G;H.custom(G,M,g)}else H.custom(G,D,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var e=d.length-1;e>=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b,
d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a*
Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(h){return f.step(h)}
this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;var f=this;a=c.fx;e.elem=this.elem;if(e()&&c.timers.push(e)&&!aa)aa=setInterval(a.tick,a.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;
this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(l,n){f.style["overflow"+n]=h.overflow[l]})}this.options.hide&&c(this.elem).hide();if(this.options.hide||
this.options.show)for(var k in this.options.curAnim)c.style(this.elem,k,this.options.orig[k]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=
c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},interval:13,stop:function(){clearInterval(aa);aa=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===
b.elem}).length};var vb=/^t(?:able|d|h)$/i,Fa=/^(?:body|html)$/i;c.fn.offset="getBoundingClientRect"in u.documentElement?function(a){var b=this[0],d;if(a)return this.each(function(k){c.offset.setOffset(this,a,k)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);try{d=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,h=f.documentElement;if(!d||!c.contains(h,b))return d||{top:0,left:0};b=f.body;f=ea(f);return{top:d.top+(f.pageYOffset||c.support.boxModel&&
h.scrollTop||b.scrollTop)-(h.clientTop||b.clientTop||0),left:d.left+(f.pageXOffset||c.support.boxModel&&h.scrollLeft||b.scrollLeft)-(h.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(s){c.offset.setOffset(this,a,s)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,e=b.ownerDocument,f,h=e.documentElement,k=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;
for(var l=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==k&&b!==h;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;f=e?e.getComputedStyle(b,null):b.currentStyle;l-=b.scrollTop;n-=b.scrollLeft;if(b===d){l+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&vb.test(b.nodeName))){l+=parseFloat(f.borderTopWidth)||0;n+=parseFloat(f.borderLeftWidth)||0}d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&f.overflow!=="visible"){l+=
parseFloat(f.borderTopWidth)||0;n+=parseFloat(f.borderLeftWidth)||0}f=f}if(f.position==="relative"||f.position==="static"){l+=k.offsetTop;n+=k.offsetLeft}if(c.offset.supportsFixedPosition&&f.position==="fixed"){l+=Math.max(h.scrollTop,k.scrollTop);n+=Math.max(h.scrollLeft,k.scrollLeft)}return{top:l,left:n}};c.offset={initialize:function(){var a=u.body,b=u.createElement("div"),d,e,f,h=parseFloat(c.css(a,"marginTop"))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",
height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);d=b.firstChild;e=d.firstChild;f=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=e.offsetTop!==5;this.doesAddBorderForTableAndCells=
f.offsetTop===5;e.style.position="fixed";e.style.top="20px";this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15;e.style.position=e.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==h;a.removeChild(b);c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.css(a,
"marginTop"))||0;d+=parseFloat(c.css(a,"marginLeft"))||0}return{top:b,left:d}},setOffset:function(a,b,d){var e=c.css(a,"position");if(e==="static")a.style.position="relative";var f=c(a),h=f.offset(),k=c.css(a,"top"),l=c.css(a,"left"),n=e==="absolute"&&c.inArray("auto",[k,l])>-1;e={};var s={};if(n)s=f.position();k=n?s.top:parseInt(k,10)||0;l=n?s.left:parseInt(l,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+k;if(b.left!=null)e.left=b.left-h.left+l;"using"in b?b.using.call(a,
e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Fa.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||u.body;a&&!Fa.test(a.nodeName)&&
c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==A)return this.each(function(){if(h=ea(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=ea(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();
c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(h){var k=c(this);k[d](e.call(this,h,k[d]()))});return c.isWindow(f)?f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b]:f.nodeType===9?Math.max(f.documentElement["client"+
b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]):e===A?parseFloat(c.css(f,d)):this.css(d,typeof e==="string"?e:e+"px")}})})(window);
-99
View File
@@ -1,99 +0,0 @@
/*
* jQuery Hotkeys Plugin
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* Based upon the plugin by Tzury Bar Yochay:
* http://github.com/tzuryby/hotkeys
*
* Original idea by:
* Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
*/
(function(jQuery){
jQuery.hotkeys = {
version: "0.8",
specialKeys: {
8: "backspace", 9: "tab", 13: "return", 16: "shift", 17: "ctrl", 18: "alt", 19: "pause",
20: "capslock", 27: "esc", 32: "space", 33: "pageup", 34: "pagedown", 35: "end", 36: "home",
37: "left", 38: "up", 39: "right", 40: "down", 45: "insert", 46: "del",
96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7",
104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111 : "/",
112: "f1", 113: "f2", 114: "f3", 115: "f4", 116: "f5", 117: "f6", 118: "f7", 119: "f8",
120: "f9", 121: "f10", 122: "f11", 123: "f12", 144: "numlock", 145: "scroll", 191: "/", 224: "meta"
},
shiftNums: {
"`": "~", "1": "!", "2": "@", "3": "#", "4": "$", "5": "%", "6": "^", "7": "&",
"8": "*", "9": "(", "0": ")", "-": "_", "=": "+", ";": ": ", "'": "\"", ",": "<",
".": ">", "/": "?", "\\": "|"
}
};
function keyHandler( handleObj ) {
// Only care when a possible input has been specified
if ( typeof handleObj.data !== "string" ) {
return;
}
var origHandler = handleObj.handler,
keys = handleObj.data.toLowerCase().split(" ");
handleObj.handler = function( event ) {
// Don't fire in text-accepting inputs that we didn't directly bind to
if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) ||
event.target.type === "text") ) {
return;
}
// Keypress represents characters, not special keys
var special = event.type !== "keypress" && jQuery.hotkeys.specialKeys[ event.which ],
character = String.fromCharCode( event.which ).toLowerCase(),
key, modif = "", possible = {};
// check combinations (alt|ctrl|shift+anything)
if ( event.altKey && special !== "alt" ) {
modif += "alt+";
}
if ( event.ctrlKey && special !== "ctrl" ) {
modif += "ctrl+";
}
// TODO: Need to make sure this works consistently across platforms
if ( event.metaKey && !event.ctrlKey && special !== "meta" ) {
modif += "meta+";
}
if ( event.shiftKey && special !== "shift" ) {
modif += "shift+";
}
if ( special ) {
possible[ modif + special ] = true;
} else {
possible[ modif + character ] = true;
possible[ modif + jQuery.hotkeys.shiftNums[ character ] ] = true;
// "$" can be triggered as "Shift+4" or "Shift+$" or just "$"
if ( modif === "shift+" ) {
possible[ jQuery.hotkeys.shiftNums[ character ] ] = true;
}
}
for ( var i = 0, l = keys.length; i < l; i++ ) {
if ( possible[ keys[i] ] ) {
return origHandler.apply( this, arguments );
}
}
};
}
jQuery.each([ "keydown", "keyup", "keypress" ], function() {
jQuery.event.special[ this ] = { add: keyHandler };
});
})( jQuery );
-53
View File
@@ -1,53 +0,0 @@
/* Copyright (c) 2010
* @author Laurence Wheway
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
*
* @version 1.2.0
*/
(function($) {
jQuery.extend({
isOnScreen: function(box, container) {
//ensure numbers come in as intgers (not strings) and remove 'px' is it's there
for(var i in box){box[i] = parseFloat(box[i])};
for(var i in container){container[i] = parseFloat(container[i])};
if(!container){
container = {
left: $(window).scrollLeft(),
top: $(window).scrollTop(),
width: $(window).width(),
height: $(window).height()
}
}
if( box.left+box.width-container.left > 0 &&
box.left < container.width+container.left &&
box.top+box.height-container.top > 0 &&
box.top < container.height+container.top
) return true;
return false;
}
})
jQuery.fn.isOnScreen = function (container) {
for(var i in container){container[i] = parseFloat(container[i])};
if(!container){
container = {
left: $(window).scrollLeft(),
top: $(window).scrollTop(),
width: $(window).width(),
height: $(window).height()
}
}
if( $(this).offset().left+$(this).width()-container.left > 0 &&
$(this).offset().left < container.width+container.left &&
$(this).offset().top+$(this).height()-container.top > 0 &&
$(this).offset().top < container.height+container.top
) return true;
return false;
}
})(jQuery);
File diff suppressed because one or more lines are too long
Binary file not shown.

Before

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 B

-81
View File
@@ -1,81 +0,0 @@
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for qsim: 100%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>qsim</b> :
<span class='pc_cov'>100%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
0 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>0 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>0 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
</td>
<td class='text' valign='top'>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
-81
View File
@@ -1,81 +0,0 @@
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for qsim.data: 100%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>qsim.data</b> :
<span class='pc_cov'>100%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
0 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>0 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>0 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
</td>
<td class='text' valign='top'>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
-241
View File
@@ -1,241 +0,0 @@
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for qsim.data.equity: 49%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>qsim.data.equity</b> :
<span class='pc_cov'>49%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
59 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>29 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>30 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
<p id='n1' class='stm run hide_run'><a href='#n1'>1</a></p>
<p id='n2' class='stm run hide_run'><a href='#n2'>2</a></p>
<p id='n3' class='stm run hide_run'><a href='#n3'>3</a></p>
<p id='n4' class='stm run hide_run'><a href='#n4'>4</a></p>
<p id='n5' class='stm run hide_run'><a href='#n5'>5</a></p>
<p id='n6' class='stm run hide_run'><a href='#n6'>6</a></p>
<p id='n7' class='stm run hide_run'><a href='#n7'>7</a></p>
<p id='n8' class='stm run hide_run'><a href='#n8'>8</a></p>
<p id='n9' class='pln'><a href='#n9'>9</a></p>
<p id='n10' class='stm run hide_run'><a href='#n10'>10</a></p>
<p id='n11' class='pln'><a href='#n11'>11</a></p>
<p id='n12' class='stm run hide_run'><a href='#n12'>12</a></p>
<p id='n13' class='stm run hide_run'><a href='#n13'>13</a></p>
<p id='n14' class='stm run hide_run'><a href='#n14'>14</a></p>
<p id='n15' class='stm run hide_run'><a href='#n15'>15</a></p>
<p id='n16' class='stm run hide_run'><a href='#n16'>16</a></p>
<p id='n17' class='stm run hide_run'><a href='#n17'>17</a></p>
<p id='n18' class='stm run hide_run'><a href='#n18'>18</a></p>
<p id='n19' class='stm run hide_run'><a href='#n19'>19</a></p>
<p id='n20' class='stm run hide_run'><a href='#n20'>20</a></p>
<p id='n21' class='pln'><a href='#n21'>21</a></p>
<p id='n22' class='stm run hide_run'><a href='#n22'>22</a></p>
<p id='n23' class='stm mis'><a href='#n23'>23</a></p>
<p id='n24' class='stm mis'><a href='#n24'>24</a></p>
<p id='n25' class='pln'><a href='#n25'>25</a></p>
<p id='n26' class='pln'><a href='#n26'>26</a></p>
<p id='n27' class='stm run hide_run'><a href='#n27'>27</a></p>
<p id='n28' class='stm mis'><a href='#n28'>28</a></p>
<p id='n29' class='stm mis'><a href='#n29'>29</a></p>
<p id='n30' class='pln'><a href='#n30'>30</a></p>
<p id='n31' class='pln'><a href='#n31'>31</a></p>
<p id='n32' class='stm mis'><a href='#n32'>32</a></p>
<p id='n33' class='stm mis'><a href='#n33'>33</a></p>
<p id='n34' class='pln'><a href='#n34'>34</a></p>
<p id='n35' class='pln'><a href='#n35'>35</a></p>
<p id='n36' class='stm mis'><a href='#n36'>36</a></p>
<p id='n37' class='pln'><a href='#n37'>37</a></p>
<p id='n38' class='stm run hide_run'><a href='#n38'>38</a></p>
<p id='n39' class='stm mis'><a href='#n39'>39</a></p>
<p id='n40' class='stm mis'><a href='#n40'>40</a></p>
<p id='n41' class='stm mis'><a href='#n41'>41</a></p>
<p id='n42' class='stm mis'><a href='#n42'>42</a></p>
<p id='n43' class='stm mis'><a href='#n43'>43</a></p>
<p id='n44' class='stm mis'><a href='#n44'>44</a></p>
<p id='n45' class='pln'><a href='#n45'>45</a></p>
<p id='n46' class='stm run hide_run'><a href='#n46'>46</a></p>
<p id='n47' class='stm mis'><a href='#n47'>47</a></p>
<p id='n48' class='stm mis'><a href='#n48'>48</a></p>
<p id='n49' class='stm mis'><a href='#n49'>49</a></p>
<p id='n50' class='pln'><a href='#n50'>50</a></p>
<p id='n51' class='stm run hide_run'><a href='#n51'>51</a></p>
<p id='n52' class='stm mis'><a href='#n52'>52</a></p>
<p id='n53' class='stm mis'><a href='#n53'>53</a></p>
<p id='n54' class='stm mis'><a href='#n54'>54</a></p>
<p id='n55' class='stm mis'><a href='#n55'>55</a></p>
<p id='n56' class='stm mis'><a href='#n56'>56</a></p>
<p id='n57' class='stm mis'><a href='#n57'>57</a></p>
<p id='n58' class='stm mis'><a href='#n58'>58</a></p>
<p id='n59' class='pln'><a href='#n59'>59</a></p>
<p id='n60' class='stm run hide_run'><a href='#n60'>60</a></p>
<p id='n61' class='pln'><a href='#n61'>61</a></p>
<p id='n62' class='stm run hide_run'><a href='#n62'>62</a></p>
<p id='n63' class='stm run hide_run'><a href='#n63'>63</a></p>
<p id='n64' class='stm run hide_run'><a href='#n64'>64</a></p>
<p id='n65' class='stm run hide_run'><a href='#n65'>65</a></p>
<p id='n66' class='pln'><a href='#n66'>66</a></p>
<p id='n67' class='stm run hide_run'><a href='#n67'>67</a></p>
<p id='n68' class='stm mis'><a href='#n68'>68</a></p>
<p id='n69' class='stm mis'><a href='#n69'>69</a></p>
<p id='n70' class='stm mis'><a href='#n70'>70</a></p>
<p id='n71' class='pln'><a href='#n71'>71</a></p>
<p id='n72' class='stm mis'><a href='#n72'>72</a></p>
<p id='n73' class='stm mis'><a href='#n73'>73</a></p>
<p id='n74' class='stm mis'><a href='#n74'>74</a></p>
<p id='n75' class='stm mis'><a href='#n75'>75</a></p>
<p id='n76' class='pln'><a href='#n76'>76</a></p>
<p id='n77' class='pln'><a href='#n77'>77</a></p>
<p id='n78' class='pln'><a href='#n78'>78</a></p>
<p id='n79' class='pln'><a href='#n79'>79</a></p>
<p id='n80' class='pln'><a href='#n80'>80</a></p>
</td>
<td class='text' valign='top'>
<p id='t1' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>datetime</span><span class='strut'>&nbsp;</span></p>
<p id='t2' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>zmq</span><span class='strut'>&nbsp;</span></p>
<p id='t3' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>json</span><span class='strut'>&nbsp;</span></p>
<p id='t4' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>pytz</span><span class='strut'>&nbsp;</span></p>
<p id='t5' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>copy</span><span class='strut'>&nbsp;</span></p>
<p id='t6' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>multiprocessing</span><span class='strut'>&nbsp;</span></p>
<p id='t7' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>logging</span><span class='strut'>&nbsp;</span></p>
<p id='t8' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>random</span><span class='strut'>&nbsp;</span></p>
<p id='t9' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t10' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>qsim</span><span class='op'>.</span><span class='nam'>util</span> <span class='key'>as</span> <span class='nam'>qutil</span><span class='strut'>&nbsp;</span></p>
<p id='t11' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t12' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>DataSource</span><span class='op'>(</span><span class='nam'>object</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t13' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>feed</span><span class='op'>,</span> <span class='nam'>source_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t14' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>source_id</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>=</span> <span class='nam'>source_id</span><span class='strut'>&nbsp;</span></p>
<p id='t15' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='nam'>qutil</span><span class='op'>.</span><span class='nam'>logger</span><span class='strut'>&nbsp;</span></p>
<p id='t16' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='nam'>feed</span><span class='strut'>&nbsp;</span></p>
<p id='t17' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sync</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='nam'>qutil</span><span class='op'>.</span><span class='nam'>FeedSync</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed</span><span class='op'>,</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>source_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t18' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_address</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed</span><span class='op'>.</span><span class='nam'>data_address</span><span class='strut'>&nbsp;</span></p>
<p id='t19' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;data address is {ds}&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>ds</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed</span><span class='op'>.</span><span class='nam'>data_address</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t20' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cur_event</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t21' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t22' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>start</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t23' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>proc</span> <span class='op'>=</span> <span class='nam'>multiprocessing</span><span class='op'>.</span><span class='nam'>Process</span><span class='op'>(</span><span class='nam'>target</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>run</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t24' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>proc</span><span class='op'>.</span><span class='nam'>start</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t25' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t26' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t27' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t28' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;starting data source:{source_id} on {addr}&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>source_id</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>source_id</span><span class='op'>,</span> <span class='nam'>addr</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed</span><span class='op'>.</span><span class='nam'>data_address</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t29' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>context</span> <span class='op'>=</span> <span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>Context</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t30' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t31' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#create the data sink. Based on http://zguide.zeromq.org/py:tasksink2 </span><span class='strut'>&nbsp;</span></p>
<p id='t32' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_socket</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>context</span><span class='op'>.</span><span class='nam'>socket</span><span class='op'>(</span><span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>PUSH</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t33' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_socket</span><span class='op'>.</span><span class='nam'>connect</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_address</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t34' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t35' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#signal we are ready</span><span class='strut'>&nbsp;</span></p>
<p id='t36' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sync</span><span class='op'>.</span><span class='nam'>confirm</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t37' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t38' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>run</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t39' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t40' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t41' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>send_all</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t42' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t43' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>Exception</span> <span class='key'>as</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t44' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>exception</span><span class='op'>(</span><span class='str'>&quot;Unexpected failure running datasource - {name}.&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>name</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>source_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t45' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t46' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>send</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>event</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t47' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>event</span><span class='op'>[</span><span class='str'>&#39;s&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>source_id</span><span class='strut'>&nbsp;</span></p>
<p id='t48' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>event</span><span class='op'>[</span><span class='str'>&#39;type&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='str'>&#39;event&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t49' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_socket</span><span class='op'>.</span><span class='nam'>send</span><span class='op'>(</span><span class='nam'>json</span><span class='op'>.</span><span class='nam'>dumps</span><span class='op'>(</span><span class='nam'>event</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t50' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t51' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>close</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t52' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>done_msg</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t53' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>done_msg</span><span class='op'>[</span><span class='str'>&#39;type&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='str'>&#39;DONE&#39;</span><span class='strut'>&nbsp;</span></p>
<p id='t54' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>done_msg</span><span class='op'>[</span><span class='str'>&#39;s&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>source_id</span><span class='strut'>&nbsp;</span></p>
<p id='t55' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_socket</span><span class='op'>.</span><span class='nam'>send</span><span class='op'>(</span><span class='nam'>json</span><span class='op'>.</span><span class='nam'>dumps</span><span class='op'>(</span><span class='nam'>done_msg</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t56' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_socket</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t57' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>context</span><span class='op'>.</span><span class='nam'>term</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t58' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;finished processing data source&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t59' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t60' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>RandomEquityTrades</span><span class='op'>(</span><span class='nam'>DataSource</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t61' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t62' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sid</span><span class='op'>,</span> <span class='nam'>feed</span><span class='op'>,</span> <span class='nam'>source_id</span><span class='op'>,</span> <span class='nam'>count</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t63' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>DataSource</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>feed</span><span class='op'>,</span> <span class='nam'>source_id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t64' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>count</span> <span class='op'>=</span> <span class='nam'>count</span><span class='strut'>&nbsp;</span></p>
<p id='t65' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sid</span> <span class='op'>=</span> <span class='nam'>sid</span><span class='strut'>&nbsp;</span></p>
<p id='t66' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t67' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>send_all</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t68' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>trade_start</span> <span class='op'>=</span> <span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>now</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t69' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>minute</span> <span class='op'>=</span> <span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>timedelta</span><span class='op'>(</span><span class='nam'>minutes</span><span class='op'>=</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t70' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>price</span> <span class='op'>=</span> <span class='nam'>random</span><span class='op'>.</span><span class='nam'>uniform</span><span class='op'>(</span><span class='num'>5.0</span><span class='op'>,</span><span class='num'>50.0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t71' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t72' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>i</span> <span class='key'>in</span> <span class='nam'>range</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>count</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t73' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>price</span> <span class='op'>=</span> <span class='nam'>price</span> <span class='op'>+</span> <span class='nam'>random</span><span class='op'>.</span><span class='nam'>uniform</span><span class='op'>(</span><span class='op'>-</span><span class='num'>0.05</span><span class='op'>,</span><span class='num'>0.05</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t74' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>event</span> <span class='op'>=</span> <span class='op'>{</span><span class='str'>&#39;sid&#39;</span><span class='op'>:</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>sid</span><span class='op'>,</span> <span class='str'>&#39;dt&#39;</span><span class='op'>:</span><span class='nam'>qutil</span><span class='op'>.</span><span class='nam'>format_date</span><span class='op'>(</span><span class='nam'>trade_start</span> <span class='op'>+</span> <span class='op'>(</span><span class='nam'>minute</span> <span class='op'>*</span> <span class='nam'>i</span><span class='op'>)</span><span class='op'>)</span><span class='op'>,</span><span class='str'>&#39;price&#39;</span><span class='op'>:</span><span class='nam'>price</span><span class='op'>,</span> <span class='str'>&#39;volume&#39;</span><span class='op'>:</span><span class='nam'>random</span><span class='op'>.</span><span class='nam'>randrange</span><span class='op'>(</span><span class='num'>100</span><span class='op'>,</span><span class='num'>10000</span><span class='op'>,</span><span class='num'>100</span><span class='op'>)</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t75' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>send</span><span class='op'>(</span><span class='nam'>event</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t76' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t77' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t78' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t79' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t80' class='pln'><span class='strut'>&nbsp;</span></p>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
-81
View File
@@ -1,81 +0,0 @@
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for qsim.messaging: 100%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>qsim.messaging</b> :
<span class='pc_cov'>100%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
0 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>0 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>0 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
</td>
<td class='text' valign='top'>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
-81
View File
@@ -1,81 +0,0 @@
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for qsim.simulator: 100%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>qsim.simulator</b> :
<span class='pc_cov'>100%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
0 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>0 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>0 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
</td>
<td class='text' valign='top'>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
-167
View File
@@ -1,167 +0,0 @@
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for qsim.simulator.config: 41%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>qsim.simulator.config</b> :
<span class='pc_cov'>41%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
29 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>12 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>17 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
<p id='n1' class='stm run hide_run'><a href='#n1'>1</a></p>
<p id='n2' class='pln'><a href='#n2'>2</a></p>
<p id='n3' class='stm run hide_run'><a href='#n3'>3</a></p>
<p id='n4' class='pln'><a href='#n4'>4</a></p>
<p id='n5' class='pln'><a href='#n5'>5</a></p>
<p id='n6' class='stm run hide_run'><a href='#n6'>6</a></p>
<p id='n7' class='stm mis'><a href='#n7'>7</a></p>
<p id='n8' class='pln'><a href='#n8'>8</a></p>
<p id='n9' class='stm run hide_run'><a href='#n9'>9</a></p>
<p id='n10' class='stm mis'><a href='#n10'>10</a></p>
<p id='n11' class='pln'><a href='#n11'>11</a></p>
<p id='n12' class='stm run hide_run'><a href='#n12'>12</a></p>
<p id='n13' class='stm mis'><a href='#n13'>13</a></p>
<p id='n14' class='stm mis'><a href='#n14'>14</a></p>
<p id='n15' class='pln'><a href='#n15'>15</a></p>
<p id='n16' class='stm run hide_run'><a href='#n16'>16</a></p>
<p id='n17' class='stm mis'><a href='#n17'>17</a></p>
<p id='n18' class='stm mis'><a href='#n18'>18</a></p>
<p id='n19' class='pln'><a href='#n19'>19</a></p>
<p id='n20' class='stm mis'><a href='#n20'>20</a></p>
<p id='n21' class='pln'><a href='#n21'>21</a></p>
<p id='n22' class='stm run hide_run'><a href='#n22'>22</a></p>
<p id='n23' class='stm mis'><a href='#n23'>23</a></p>
<p id='n24' class='pln'><a href='#n24'>24</a></p>
<p id='n25' class='stm run hide_run'><a href='#n25'>25</a></p>
<p id='n26' class='stm mis'><a href='#n26'>26</a></p>
<p id='n27' class='pln'><a href='#n27'>27</a></p>
<p id='n28' class='stm run hide_run'><a href='#n28'>28</a></p>
<p id='n29' class='stm mis'><a href='#n29'>29</a></p>
<p id='n30' class='pln'><a href='#n30'>30</a></p>
<p id='n31' class='stm run hide_run'><a href='#n31'>31</a></p>
<p id='n32' class='stm mis'><a href='#n32'>32</a></p>
<p id='n33' class='stm mis'><a href='#n33'>33</a></p>
<p id='n34' class='stm mis'><a href='#n34'>34</a></p>
<p id='n35' class='stm mis'><a href='#n35'>35</a></p>
<p id='n36' class='pln'><a href='#n36'>36</a></p>
<p id='n37' class='stm mis'><a href='#n37'>37</a></p>
<p id='n38' class='pln'><a href='#n38'>38</a></p>
<p id='n39' class='stm run hide_run'><a href='#n39'>39</a></p>
<p id='n40' class='stm mis'><a href='#n40'>40</a></p>
<p id='n41' class='pln'><a href='#n41'>41</a></p>
<p id='n42' class='stm run hide_run'><a href='#n42'>42</a></p>
<p id='n43' class='stm mis'><a href='#n43'>43</a></p>
</td>
<td class='text' valign='top'>
<p id='t1' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>json</span><span class='strut'>&nbsp;</span></p>
<p id='t2' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>Config</span><span class='op'>(</span><span class='nam'>object</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t4' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Name/Value configuration object with type-safe accessors and json serialization/deserialization.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t5' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t6' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>props</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t7' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>store</span> <span class='op'>=</span> <span class='nam'>props</span><span class='strut'>&nbsp;</span></p>
<p id='t8' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t9' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__setitem__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span><span class='nam'>key</span><span class='op'>,</span><span class='nam'>value</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t10' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>store</span><span class='op'>[</span><span class='nam'>key</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>value</span><span class='strut'>&nbsp;</span></p>
<p id='t11' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t12' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__getitem__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>key</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t13' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>store</span><span class='op'>.</span><span class='nam'>has_key</span><span class='op'>(</span><span class='nam'>key</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t14' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>store</span><span class='op'>[</span><span class='nam'>key</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t15' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t16' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__getattr__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span><span class='nam'>attrname</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t17' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>store</span><span class='op'>.</span><span class='nam'>has_key</span><span class='op'>(</span><span class='nam'>attrname</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t18' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>store</span><span class='op'>[</span><span class='nam'>attrname</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t19' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t20' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>AttributeError</span><span class='op'>(</span><span class='str'>&quot;No attribute named {name}&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>name</span><span class='op'>=</span><span class='nam'>attrname</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t21' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t22' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>get_integer</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>name</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='num'>0</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t23' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>get_value</span><span class='op'>(</span><span class='nam'>name</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>,</span> <span class='nam'>type</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t24' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t25' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>get_string</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>name</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='str'>&#39;&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t26' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>get_value</span><span class='op'>(</span><span class='nam'>name</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>,</span> <span class='nam'>type</span><span class='op'>(</span><span class='str'>&#39;&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t27' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t28' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>get_float</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>name</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>=</span><span class='num'>0.0</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t29' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>get_value</span><span class='op'>(</span><span class='nam'>name</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>,</span> <span class='nam'>type</span><span class='op'>(</span><span class='num'>1.0</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t30' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t31' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>get_value</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>name</span><span class='op'>,</span> <span class='nam'>default</span><span class='op'>,</span> <span class='nam'>expected_type</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t32' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>store</span><span class='op'>.</span><span class='nam'>has_key</span><span class='op'>(</span><span class='nam'>name</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t33' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>val</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>store</span><span class='op'>[</span><span class='nam'>name</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t34' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>val</span><span class='op'>,</span> <span class='nam'>expected_type</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t35' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>val</span><span class='strut'>&nbsp;</span></p>
<p id='t36' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t37' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>default</span><span class='strut'>&nbsp;</span></p>
<p id='t38' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t39' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>to_json</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t40' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>dumps</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>store</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t41' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t42' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>from_json</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>json_string</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t43' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>store</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>json_string</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
-319
View File
@@ -1,319 +0,0 @@
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for qsim.simulator.feed: 38%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>qsim.simulator.feed</b> :
<span class='pc_cov'>38%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
71 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>27 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>44 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
<p id='n1' class='pln'><a href='#n1'>1</a></p>
<p id='n2' class='stm run hide_run'><a href='#n2'>2</a></p>
<p id='n3' class='stm run hide_run'><a href='#n3'>3</a></p>
<p id='n4' class='stm run hide_run'><a href='#n4'>4</a></p>
<p id='n5' class='stm run hide_run'><a href='#n5'>5</a></p>
<p id='n6' class='stm run hide_run'><a href='#n6'>6</a></p>
<p id='n7' class='stm run hide_run'><a href='#n7'>7</a></p>
<p id='n8' class='pln'><a href='#n8'>8</a></p>
<p id='n9' class='stm run hide_run'><a href='#n9'>9</a></p>
<p id='n10' class='pln'><a href='#n10'>10</a></p>
<p id='n11' class='stm run hide_run'><a href='#n11'>11</a></p>
<p id='n12' class='stm run hide_run'><a href='#n12'>12</a></p>
<p id='n13' class='pln'><a href='#n13'>13</a></p>
<p id='n14' class='stm run hide_run'><a href='#n14'>14</a></p>
<p id='n15' class='stm run hide_run'><a href='#n15'>15</a></p>
<p id='n16' class='stm run hide_run'><a href='#n16'>16</a></p>
<p id='n17' class='pln'><a href='#n17'>17</a></p>
<p id='n18' class='stm run hide_run'><a href='#n18'>18</a></p>
<p id='n19' class='pln'><a href='#n19'>19</a></p>
<p id='n20' class='stm run hide_run'><a href='#n20'>20</a></p>
<p id='n21' class='stm run hide_run'><a href='#n21'>21</a></p>
<p id='n22' class='stm run hide_run'><a href='#n22'>22</a></p>
<p id='n23' class='stm run hide_run'><a href='#n23'>23</a></p>
<p id='n24' class='stm mis'><a href='#n24'>24</a></p>
<p id='n25' class='stm mis'><a href='#n25'>25</a></p>
<p id='n26' class='stm run hide_run'><a href='#n26'>26</a></p>
<p id='n27' class='stm run hide_run'><a href='#n27'>27</a></p>
<p id='n28' class='stm run hide_run'><a href='#n28'>28</a></p>
<p id='n29' class='pln'><a href='#n29'>29</a></p>
<p id='n30' class='stm run hide_run'><a href='#n30'>30</a></p>
<p id='n31' class='pln'><a href='#n31'>31</a></p>
<p id='n32' class='stm run hide_run'><a href='#n32'>32</a></p>
<p id='n33' class='pln'><a href='#n33'>33</a></p>
<p id='n34' class='stm mis'><a href='#n34'>34</a></p>
<p id='n35' class='stm mis'><a href='#n35'>35</a></p>
<p id='n36' class='stm mis'><a href='#n36'>36</a></p>
<p id='n37' class='stm mis'><a href='#n37'>37</a></p>
<p id='n38' class='pln'><a href='#n38'>38</a></p>
<p id='n39' class='stm run hide_run'><a href='#n39'>39</a></p>
<p id='n40' class='stm run hide_run'><a href='#n40'>40</a></p>
<p id='n41' class='pln'><a href='#n41'>41</a></p>
<p id='n42' class='stm run hide_run'><a href='#n42'>42</a></p>
<p id='n43' class='stm mis'><a href='#n43'>43</a></p>
<p id='n44' class='stm mis'><a href='#n44'>44</a></p>
<p id='n45' class='stm mis'><a href='#n45'>45</a></p>
<p id='n46' class='pln'><a href='#n46'>46</a></p>
<p id='n47' class='stm mis'><a href='#n47'>47</a></p>
<p id='n48' class='pln'><a href='#n48'>48</a></p>
<p id='n49' class='stm run hide_run'><a href='#n49'>49</a></p>
<p id='n50' class='pln'><a href='#n50'>50</a></p>
<p id='n51' class='stm mis'><a href='#n51'>51</a></p>
<p id='n52' class='stm mis'><a href='#n52'>52</a></p>
<p id='n53' class='stm mis'><a href='#n53'>53</a></p>
<p id='n54' class='pln'><a href='#n54'>54</a></p>
<p id='n55' class='stm mis'><a href='#n55'>55</a></p>
<p id='n56' class='pln'><a href='#n56'>56</a></p>
<p id='n57' class='stm mis'><a href='#n57'>57</a></p>
<p id='n58' class='stm mis'><a href='#n58'>58</a></p>
<p id='n59' class='pln'><a href='#n59'>59</a></p>
<p id='n60' class='pln'><a href='#n60'>60</a></p>
<p id='n61' class='stm mis'><a href='#n61'>61</a></p>
<p id='n62' class='pln'><a href='#n62'>62</a></p>
<p id='n63' class='stm mis'><a href='#n63'>63</a></p>
<p id='n64' class='stm mis'><a href='#n64'>64</a></p>
<p id='n65' class='pln'><a href='#n65'>65</a></p>
<p id='n66' class='stm run hide_run'><a href='#n66'>66</a></p>
<p id='n67' class='pln'><a href='#n67'>67</a></p>
<p id='n68' class='stm mis'><a href='#n68'>68</a></p>
<p id='n69' class='pln'><a href='#n69'>69</a></p>
<p id='n70' class='stm mis'><a href='#n70'>70</a></p>
<p id='n71' class='pln'><a href='#n71'>71</a></p>
<p id='n72' class='pln'><a href='#n72'>72</a></p>
<p id='n73' class='pln'><a href='#n73'>73</a></p>
<p id='n74' class='stm mis'><a href='#n74'>74</a></p>
<p id='n75' class='stm mis'><a href='#n75'>75</a></p>
<p id='n76' class='pln'><a href='#n76'>76</a></p>
<p id='n77' class='pln'><a href='#n77'>77</a></p>
<p id='n78' class='stm mis'><a href='#n78'>78</a></p>
<p id='n79' class='stm mis'><a href='#n79'>79</a></p>
<p id='n80' class='pln'><a href='#n80'>80</a></p>
<p id='n81' class='stm mis'><a href='#n81'>81</a></p>
<p id='n82' class='pln'><a href='#n82'>82</a></p>
<p id='n83' class='pln'><a href='#n83'>83</a></p>
<p id='n84' class='stm mis'><a href='#n84'>84</a></p>
<p id='n85' class='pln'><a href='#n85'>85</a></p>
<p id='n86' class='pln'><a href='#n86'>86</a></p>
<p id='n87' class='stm mis'><a href='#n87'>87</a></p>
<p id='n88' class='pln'><a href='#n88'>88</a></p>
<p id='n89' class='stm mis'><a href='#n89'>89</a></p>
<p id='n90' class='pln'><a href='#n90'>90</a></p>
<p id='n91' class='stm mis'><a href='#n91'>91</a></p>
<p id='n92' class='stm mis'><a href='#n92'>92</a></p>
<p id='n93' class='stm mis'><a href='#n93'>93</a></p>
<p id='n94' class='stm mis'><a href='#n94'>94</a></p>
<p id='n95' class='stm mis'><a href='#n95'>95</a></p>
<p id='n96' class='stm mis'><a href='#n96'>96</a></p>
<p id='n97' class='stm mis'><a href='#n97'>97</a></p>
<p id='n98' class='pln'><a href='#n98'>98</a></p>
<p id='n99' class='stm mis'><a href='#n99'>99</a></p>
<p id='n100' class='stm mis'><a href='#n100'>100</a></p>
<p id='n101' class='pln'><a href='#n101'>101</a></p>
<p id='n102' class='pln'><a href='#n102'>102</a></p>
<p id='n103' class='pln'><a href='#n103'>103</a></p>
<p id='n104' class='stm mis'><a href='#n104'>104</a></p>
<p id='n105' class='pln'><a href='#n105'>105</a></p>
<p id='n106' class='pln'><a href='#n106'>106</a></p>
<p id='n107' class='stm mis'><a href='#n107'>107</a></p>
<p id='n108' class='stm mis'><a href='#n108'>108</a></p>
<p id='n109' class='stm mis'><a href='#n109'>109</a></p>
<p id='n110' class='stm mis'><a href='#n110'>110</a></p>
<p id='n111' class='stm mis'><a href='#n111'>111</a></p>
<p id='n112' class='pln'><a href='#n112'>112</a></p>
<p id='n113' class='pln'><a href='#n113'>113</a></p>
<p id='n114' class='pln'><a href='#n114'>114</a></p>
<p id='n115' class='pln'><a href='#n115'>115</a></p>
<p id='n116' class='pln'><a href='#n116'>116</a></p>
<p id='n117' class='pln'><a href='#n117'>117</a></p>
<p id='n118' class='pln'><a href='#n118'>118</a></p>
<p id='n119' class='pln'><a href='#n119'>119</a></p>
</td>
<td class='text' valign='top'>
<p id='t1' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t2' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>qsim</span><span class='op'>.</span><span class='nam'>data</span><span class='op'>.</span><span class='nam'>equity</span> <span class='key'>as</span> <span class='nam'>qequity</span><span class='strut'>&nbsp;</span></p>
<p id='t3' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>qsim</span><span class='op'>.</span><span class='nam'>util</span> <span class='key'>as</span> <span class='nam'>qutil</span><span class='strut'>&nbsp;</span></p>
<p id='t4' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>zmq</span><span class='strut'>&nbsp;</span></p>
<p id='t5' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>time</span><span class='strut'>&nbsp;</span></p>
<p id='t6' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>logging</span><span class='strut'>&nbsp;</span></p>
<p id='t7' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>json</span><span class='strut'>&nbsp;</span></p>
<p id='t8' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t9' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>DataFeed</span><span class='op'>(</span><span class='nam'>object</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t10' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t11' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>config</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t12' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span> <span class='op'>=</span> <span class='nam'>qutil</span><span class='op'>.</span><span class='nam'>logger</span><span class='strut'>&nbsp;</span></p>
<p id='t13' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t14' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_address</span> <span class='op'>=</span> <span class='str'>&quot;tcp://127.0.0.1:{port}&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>port</span><span class='op'>=</span><span class='num'>10101</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t15' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sync_address</span> <span class='op'>=</span> <span class='str'>&quot;tcp://127.0.0.1:{port}&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>port</span><span class='op'>=</span><span class='num'>10102</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t16' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_address</span> <span class='op'>=</span> <span class='str'>&quot;tcp://127.0.0.1:{port}&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>port</span><span class='op'>=</span><span class='num'>10103</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t17' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t18' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>client_register</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t19' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t20' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_workers</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t21' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>config</span> <span class='op'>=</span> <span class='nam'>config</span><span class='strut'>&nbsp;</span></p>
<p id='t22' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>name</span><span class='op'>,</span> <span class='nam'>info</span> <span class='key'>in</span> <span class='nam'>config</span><span class='op'>.</span><span class='nam'>iteritems</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t23' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;class&#39;</span><span class='op'>]</span> <span class='op'>==</span> <span class='str'>&quot;EquityMinuteTrades&quot;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t24' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>emt</span> <span class='op'>=</span> <span class='nam'>EquityMinuteTrades</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;sid&#39;</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>,</span> <span class='nam'>name</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t25' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_workers</span><span class='op'>[</span><span class='nam'>name</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>emt</span><span class='strut'>&nbsp;</span></p>
<p id='t26' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;class&#39;</span><span class='op'>]</span> <span class='op'>==</span> <span class='str'>&quot;RandomEquityTrades&quot;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t27' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ret</span> <span class='op'>=</span> <span class='nam'>qequity</span><span class='op'>.</span><span class='nam'>RandomEquityTrades</span><span class='op'>(</span><span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;sid&#39;</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>,</span> <span class='nam'>name</span><span class='op'>,</span> <span class='nam'>info</span><span class='op'>[</span><span class='str'>&#39;count&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t28' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_workers</span><span class='op'>[</span><span class='nam'>name</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>ret</span><span class='strut'>&nbsp;</span></p>
<p id='t29' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t30' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span> <span class='op'>=</span> <span class='nam'>qutil</span><span class='op'>.</span><span class='nam'>ParallelBuffer</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_workers</span><span class='op'>.</span><span class='nam'>keys</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t31' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t32' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>start_data_workers</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t33' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Start a sub-process for each datasource.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t34' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>source_id</span><span class='op'>,</span> <span class='nam'>source</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_workers</span><span class='op'>.</span><span class='nam'>iteritems</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t35' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;starting {id}&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>id</span><span class='op'>=</span><span class='nam'>source_id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t36' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>source</span><span class='op'>.</span><span class='nam'>start</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t37' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;ds processes launched&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t38' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t39' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>register_sync</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sync_id</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t40' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>client_register</span><span class='op'>[</span><span class='nam'>sync_id</span><span class='op'>]</span> <span class='op'>=</span> <span class='str'>&quot;UNCONFIRMED&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t41' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t42' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>registration_complete</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t43' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>sync_id</span><span class='op'>,</span> <span class='nam'>status</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>client_register</span><span class='op'>.</span><span class='nam'>iteritems</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t44' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>status</span> <span class='op'>==</span> <span class='str'>&quot;UNCONFIRMED&quot;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t45' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
<p id='t46' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t47' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
<p id='t48' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t49' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>sync_clients</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t50' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Socket to receive signals</span><span class='strut'>&nbsp;</span></p>
<p id='t51' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;waiting for all datasources and clients to be ready&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t52' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>syncservice</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>context</span><span class='op'>.</span><span class='nam'>socket</span><span class='op'>(</span><span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>REP</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t53' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>syncservice</span><span class='op'>.</span><span class='nam'>bind</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>sync_address</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t54' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t55' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>registration_complete</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t56' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># wait for synchronization request</span><span class='strut'>&nbsp;</span></p>
<p id='t57' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>msg</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>syncservice</span><span class='op'>.</span><span class='nam'>recv</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t58' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>client_register</span><span class='op'>[</span><span class='nam'>msg</span><span class='op'>]</span> <span class='op'>=</span> <span class='str'>&quot;CONFIRMED&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t59' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#self.logger.info(&quot;confirmed {id}&quot;.format(id=msg))</span><span class='strut'>&nbsp;</span></p>
<p id='t60' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># send synchronization reply</span><span class='strut'>&nbsp;</span></p>
<p id='t61' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>syncservice</span><span class='op'>.</span><span class='nam'>send</span><span class='op'>(</span><span class='str'>&#39;CONFIRMED&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t62' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t63' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>syncservice</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t64' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;sync&#39;d all datasources and clients&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t65' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t66' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>run</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t67' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Prepare our context and sockets</span><span class='strut'>&nbsp;</span></p>
<p id='t68' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>context</span> <span class='op'>=</span> <span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>Context</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t69' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t70' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ds_finished_counter</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'>&nbsp;</span></p>
<p id='t71' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t72' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#create the data sink. Based on http://zguide.zeromq.org/py:tasksink2 </span><span class='strut'>&nbsp;</span></p>
<p id='t73' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#see: http://zguide.zeromq.org/py:taskwork2</span><span class='strut'>&nbsp;</span></p>
<p id='t74' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_socket</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>context</span><span class='op'>.</span><span class='nam'>socket</span><span class='op'>(</span><span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>PULL</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t75' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_socket</span><span class='op'>.</span><span class='nam'>bind</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_address</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t76' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t77' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#create the feed</span><span class='strut'>&nbsp;</span></p>
<p id='t78' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_socket</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>context</span><span class='op'>.</span><span class='nam'>socket</span><span class='op'>(</span><span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>PUB</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t79' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_socket</span><span class='op'>.</span><span class='nam'>bind</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_address</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t80' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t81' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>out_socket</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_socket</span><span class='strut'>&nbsp;</span></p>
<p id='t82' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t83' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#start the data source workers</span><span class='strut'>&nbsp;</span></p>
<p id='t84' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>start_data_workers</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t85' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t86' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#wait for all feed subscribers</span><span class='strut'>&nbsp;</span></p>
<p id='t87' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sync_clients</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t88' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t89' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;entering feed loop on {addr}&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>addr</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_address</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t90' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t91' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t92' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>message</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_socket</span><span class='op'>.</span><span class='nam'>recv</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t93' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>event</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>message</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t94' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='nam'>event</span><span class='op'>[</span><span class='str'>&quot;type&quot;</span><span class='op'>]</span> <span class='op'>==</span> <span class='str'>&quot;DONE&quot;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t95' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ds_finished_counter</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t96' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_workers</span><span class='op'>)</span> <span class='op'>==</span> <span class='nam'>ds_finished_counter</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t97' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
<p id='t98' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t99' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>event</span><span class='op'>[</span><span class='str'>u&#39;s&#39;</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>event</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t100' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>send_next</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t101' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t102' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t103' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#drain any remaining messages in the buffer</span><span class='strut'>&nbsp;</span></p>
<p id='t104' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>drain</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t105' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t106' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#send the DONE message</span><span class='strut'>&nbsp;</span></p>
<p id='t107' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_socket</span><span class='op'>.</span><span class='nam'>send</span><span class='op'>(</span><span class='str'>&quot;DONE&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t108' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;received {n} messages, sent {m} messages&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>n</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>received_count</span><span class='op'>,</span> <span class='nam'>m</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>sent_count</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t109' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_socket</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t110' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_socket</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t111' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>context</span><span class='op'>.</span><span class='nam'>term</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t112' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t113' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t114' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t115' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t116' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t117' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t118' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t119' class='pln'><span class='strut'>&nbsp;</span></p>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
-81
View File
@@ -1,81 +0,0 @@
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for qsim.transforms: 100%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>qsim.transforms</b> :
<span class='pc_cov'>100%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
0 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>0 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>0 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
</td>
<td class='text' valign='top'>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
-471
View File
@@ -1,471 +0,0 @@
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for qsim.transforms.base: 17%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>qsim.transforms.base</b> :
<span class='pc_cov'>17%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
125 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>21 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>104 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
<p id='n1' class='stm run hide_run'><a href='#n1'>1</a></p>
<p id='n2' class='stm run hide_run'><a href='#n2'>2</a></p>
<p id='n3' class='stm run hide_run'><a href='#n3'>3</a></p>
<p id='n4' class='stm run hide_run'><a href='#n4'>4</a></p>
<p id='n5' class='stm run hide_run'><a href='#n5'>5</a></p>
<p id='n6' class='stm run hide_run'><a href='#n6'>6</a></p>
<p id='n7' class='stm run hide_run'><a href='#n7'>7</a></p>
<p id='n8' class='stm run hide_run'><a href='#n8'>8</a></p>
<p id='n9' class='pln'><a href='#n9'>9</a></p>
<p id='n10' class='stm run hide_run'><a href='#n10'>10</a></p>
<p id='n11' class='pln'><a href='#n11'>11</a></p>
<p id='n12' class='pln'><a href='#n12'>12</a></p>
<p id='n13' class='stm run hide_run'><a href='#n13'>13</a></p>
<p id='n14' class='pln'><a href='#n14'>14</a></p>
<p id='n15' class='pln'><a href='#n15'>15</a></p>
<p id='n16' class='pln'><a href='#n16'>16</a></p>
<p id='n17' class='pln'><a href='#n17'>17</a></p>
<p id='n18' class='pln'><a href='#n18'>18</a></p>
<p id='n19' class='pln'><a href='#n19'>19</a></p>
<p id='n20' class='pln'><a href='#n20'>20</a></p>
<p id='n21' class='pln'><a href='#n21'>21</a></p>
<p id='n22' class='stm mis'><a href='#n22'>22</a></p>
<p id='n23' class='stm mis'><a href='#n23'>23</a></p>
<p id='n24' class='stm mis'><a href='#n24'>24</a></p>
<p id='n25' class='stm mis'><a href='#n25'>25</a></p>
<p id='n26' class='stm mis'><a href='#n26'>26</a></p>
<p id='n27' class='stm mis'><a href='#n27'>27</a></p>
<p id='n28' class='stm mis'><a href='#n28'>28</a></p>
<p id='n29' class='stm mis'><a href='#n29'>29</a></p>
<p id='n30' class='stm mis'><a href='#n30'>30</a></p>
<p id='n31' class='stm mis'><a href='#n31'>31</a></p>
<p id='n32' class='stm mis'><a href='#n32'>32</a></p>
<p id='n33' class='pln'><a href='#n33'>33</a></p>
<p id='n34' class='stm run hide_run'><a href='#n34'>34</a></p>
<p id='n35' class='stm mis'><a href='#n35'>35</a></p>
<p id='n36' class='stm mis'><a href='#n36'>36</a></p>
<p id='n37' class='stm mis'><a href='#n37'>37</a></p>
<p id='n38' class='pln'><a href='#n38'>38</a></p>
<p id='n39' class='stm run hide_run'><a href='#n39'>39</a></p>
<p id='n40' class='stm mis'><a href='#n40'>40</a></p>
<p id='n41' class='pln'><a href='#n41'>41</a></p>
<p id='n42' class='stm mis'><a href='#n42'>42</a></p>
<p id='n43' class='pln'><a href='#n43'>43</a></p>
<p id='n44' class='stm mis'><a href='#n44'>44</a></p>
<p id='n45' class='stm mis'><a href='#n45'>45</a></p>
<p id='n46' class='stm mis'><a href='#n46'>46</a></p>
<p id='n47' class='pln'><a href='#n47'>47</a></p>
<p id='n48' class='pln'><a href='#n48'>48</a></p>
<p id='n49' class='stm mis'><a href='#n49'>49</a></p>
<p id='n50' class='stm mis'><a href='#n50'>50</a></p>
<p id='n51' class='pln'><a href='#n51'>51</a></p>
<p id='n52' class='stm run hide_run'><a href='#n52'>52</a></p>
<p id='n53' class='stm mis'><a href='#n53'>53</a></p>
<p id='n54' class='stm mis'><a href='#n54'>54</a></p>
<p id='n55' class='pln'><a href='#n55'>55</a></p>
<p id='n56' class='stm mis'><a href='#n56'>56</a></p>
<p id='n57' class='stm mis'><a href='#n57'>57</a></p>
<p id='n58' class='stm mis'><a href='#n58'>58</a></p>
<p id='n59' class='stm mis'><a href='#n59'>59</a></p>
<p id='n60' class='stm mis'><a href='#n60'>60</a></p>
<p id='n61' class='stm mis'><a href='#n61'>61</a></p>
<p id='n62' class='stm mis'><a href='#n62'>62</a></p>
<p id='n63' class='stm mis'><a href='#n63'>63</a></p>
<p id='n64' class='stm mis'><a href='#n64'>64</a></p>
<p id='n65' class='stm mis'><a href='#n65'>65</a></p>
<p id='n66' class='stm mis'><a href='#n66'>66</a></p>
<p id='n67' class='stm mis'><a href='#n67'>67</a></p>
<p id='n68' class='stm mis'><a href='#n68'>68</a></p>
<p id='n69' class='pln'><a href='#n69'>69</a></p>
<p id='n70' class='stm run hide_run'><a href='#n70'>70</a></p>
<p id='n71' class='stm mis'><a href='#n71'>71</a></p>
<p id='n72' class='pln'><a href='#n72'>72</a></p>
<p id='n73' class='stm mis'><a href='#n73'>73</a></p>
<p id='n74' class='stm mis'><a href='#n74'>74</a></p>
<p id='n75' class='stm mis'><a href='#n75'>75</a></p>
<p id='n76' class='pln'><a href='#n76'>76</a></p>
<p id='n77' class='stm run hide_run'><a href='#n77'>77</a></p>
<p id='n78' class='pln'><a href='#n78'>78</a></p>
<p id='n79' class='pln'><a href='#n79'>79</a></p>
<p id='n80' class='pln'><a href='#n80'>80</a></p>
<p id='n81' class='pln'><a href='#n81'>81</a></p>
<p id='n82' class='pln'><a href='#n82'>82</a></p>
<p id='n83' class='pln'><a href='#n83'>83</a></p>
<p id='n84' class='stm mis'><a href='#n84'>84</a></p>
<p id='n85' class='pln'><a href='#n85'>85</a></p>
<p id='n86' class='pln'><a href='#n86'>86</a></p>
<p id='n87' class='stm run hide_run'><a href='#n87'>87</a></p>
<p id='n88' class='pln'><a href='#n88'>88</a></p>
<p id='n89' class='pln'><a href='#n89'>89</a></p>
<p id='n90' class='pln'><a href='#n90'>90</a></p>
<p id='n91' class='pln'><a href='#n91'>91</a></p>
<p id='n92' class='pln'><a href='#n92'>92</a></p>
<p id='n93' class='pln'><a href='#n93'>93</a></p>
<p id='n94' class='pln'><a href='#n94'>94</a></p>
<p id='n95' class='stm run hide_run'><a href='#n95'>95</a></p>
<p id='n96' class='pln'><a href='#n96'>96</a></p>
<p id='n97' class='pln'><a href='#n97'>97</a></p>
<p id='n98' class='pln'><a href='#n98'>98</a></p>
<p id='n99' class='stm mis'><a href='#n99'>99</a></p>
<p id='n100' class='stm mis'><a href='#n100'>100</a></p>
<p id='n101' class='stm mis'><a href='#n101'>101</a></p>
<p id='n102' class='stm mis'><a href='#n102'>102</a></p>
<p id='n103' class='pln'><a href='#n103'>103</a></p>
<p id='n104' class='pln'><a href='#n104'>104</a></p>
<p id='n105' class='stm run hide_run'><a href='#n105'>105</a></p>
<p id='n106' class='stm mis'><a href='#n106'>106</a></p>
<p id='n107' class='stm mis'><a href='#n107'>107</a></p>
<p id='n108' class='stm mis'><a href='#n108'>108</a></p>
<p id='n109' class='stm mis'><a href='#n109'>109</a></p>
<p id='n110' class='stm mis'><a href='#n110'>110</a></p>
<p id='n111' class='stm mis'><a href='#n111'>111</a></p>
<p id='n112' class='pln'><a href='#n112'>112</a></p>
<p id='n113' class='stm mis'><a href='#n113'>113</a></p>
<p id='n114' class='stm mis'><a href='#n114'>114</a></p>
<p id='n115' class='stm mis'><a href='#n115'>115</a></p>
<p id='n116' class='pln'><a href='#n116'>116</a></p>
<p id='n117' class='stm mis'><a href='#n117'>117</a></p>
<p id='n118' class='stm mis'><a href='#n118'>118</a></p>
<p id='n119' class='stm mis'><a href='#n119'>119</a></p>
<p id='n120' class='pln'><a href='#n120'>120</a></p>
<p id='n121' class='stm run hide_run'><a href='#n121'>121</a></p>
<p id='n122' class='stm mis'><a href='#n122'>122</a></p>
<p id='n123' class='pln'><a href='#n123'>123</a></p>
<p id='n124' class='stm mis'><a href='#n124'>124</a></p>
<p id='n125' class='pln'><a href='#n125'>125</a></p>
<p id='n126' class='stm mis'><a href='#n126'>126</a></p>
<p id='n127' class='stm mis'><a href='#n127'>127</a></p>
<p id='n128' class='stm mis'><a href='#n128'>128</a></p>
<p id='n129' class='pln'><a href='#n129'>129</a></p>
<p id='n130' class='pln'><a href='#n130'>130</a></p>
<p id='n131' class='stm mis'><a href='#n131'>131</a></p>
<p id='n132' class='stm mis'><a href='#n132'>132</a></p>
<p id='n133' class='pln'><a href='#n133'>133</a></p>
<p id='n134' class='pln'><a href='#n134'>134</a></p>
<p id='n135' class='stm mis'><a href='#n135'>135</a></p>
<p id='n136' class='stm mis'><a href='#n136'>136</a></p>
<p id='n137' class='stm mis'><a href='#n137'>137</a></p>
<p id='n138' class='pln'><a href='#n138'>138</a></p>
<p id='n139' class='pln'><a href='#n139'>139</a></p>
<p id='n140' class='stm mis'><a href='#n140'>140</a></p>
<p id='n141' class='stm mis'><a href='#n141'>141</a></p>
<p id='n142' class='stm mis'><a href='#n142'>142</a></p>
<p id='n143' class='pln'><a href='#n143'>143</a></p>
<p id='n144' class='stm mis'><a href='#n144'>144</a></p>
<p id='n145' class='stm mis'><a href='#n145'>145</a></p>
<p id='n146' class='stm mis'><a href='#n146'>146</a></p>
<p id='n147' class='stm mis'><a href='#n147'>147</a></p>
<p id='n148' class='pln'><a href='#n148'>148</a></p>
<p id='n149' class='stm mis'><a href='#n149'>149</a></p>
<p id='n150' class='pln'><a href='#n150'>150</a></p>
<p id='n151' class='stm run hide_run'><a href='#n151'>151</a></p>
<p id='n152' class='stm mis'><a href='#n152'>152</a></p>
<p id='n153' class='stm mis'><a href='#n153'>153</a></p>
<p id='n154' class='pln'><a href='#n154'>154</a></p>
<p id='n155' class='stm run hide_run'><a href='#n155'>155</a></p>
<p id='n156' class='pln'><a href='#n156'>156</a></p>
<p id='n157' class='stm mis'><a href='#n157'>157</a></p>
<p id='n158' class='stm mis'><a href='#n158'>158</a></p>
<p id='n159' class='stm mis'><a href='#n159'>159</a></p>
<p id='n160' class='pln'><a href='#n160'>160</a></p>
<p id='n161' class='stm mis'><a href='#n161'>161</a></p>
<p id='n162' class='stm mis'><a href='#n162'>162</a></p>
<p id='n163' class='stm mis'><a href='#n163'>163</a></p>
<p id='n164' class='stm mis'><a href='#n164'>164</a></p>
<p id='n165' class='stm mis'><a href='#n165'>165</a></p>
<p id='n166' class='pln'><a href='#n166'>166</a></p>
<p id='n167' class='stm mis'><a href='#n167'>167</a></p>
<p id='n168' class='stm mis'><a href='#n168'>168</a></p>
<p id='n169' class='stm mis'><a href='#n169'>169</a></p>
<p id='n170' class='pln'><a href='#n170'>170</a></p>
<p id='n171' class='stm mis'><a href='#n171'>171</a></p>
<p id='n172' class='stm mis'><a href='#n172'>172</a></p>
<p id='n173' class='stm mis'><a href='#n173'>173</a></p>
<p id='n174' class='stm mis'><a href='#n174'>174</a></p>
<p id='n175' class='stm mis'><a href='#n175'>175</a></p>
<p id='n176' class='pln'><a href='#n176'>176</a></p>
<p id='n177' class='stm mis'><a href='#n177'>177</a></p>
<p id='n178' class='stm mis'><a href='#n178'>178</a></p>
<p id='n179' class='stm mis'><a href='#n179'>179</a></p>
<p id='n180' class='pln'><a href='#n180'>180</a></p>
<p id='n181' class='stm mis'><a href='#n181'>181</a></p>
<p id='n182' class='stm mis'><a href='#n182'>182</a></p>
<p id='n183' class='pln'><a href='#n183'>183</a></p>
<p id='n184' class='stm mis'><a href='#n184'>184</a></p>
<p id='n185' class='pln'><a href='#n185'>185</a></p>
<p id='n186' class='stm mis'><a href='#n186'>186</a></p>
<p id='n187' class='stm mis'><a href='#n187'>187</a></p>
<p id='n188' class='pln'><a href='#n188'>188</a></p>
<p id='n189' class='pln'><a href='#n189'>189</a></p>
<p id='n190' class='stm mis'><a href='#n190'>190</a></p>
<p id='n191' class='pln'><a href='#n191'>191</a></p>
<p id='n192' class='pln'><a href='#n192'>192</a></p>
<p id='n193' class='stm mis'><a href='#n193'>193</a></p>
<p id='n194' class='stm mis'><a href='#n194'>194</a></p>
<p id='n195' class='pln'><a href='#n195'>195</a></p>
</td>
<td class='text' valign='top'>
<p id='t1' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>zmq</span><span class='strut'>&nbsp;</span></p>
<p id='t2' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>logging</span><span class='strut'>&nbsp;</span></p>
<p id='t3' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>datetime</span><span class='strut'>&nbsp;</span></p>
<p id='t4' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>json</span><span class='strut'>&nbsp;</span></p>
<p id='t5' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>copy</span><span class='strut'>&nbsp;</span></p>
<p id='t6' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>multiprocessing</span><span class='strut'>&nbsp;</span></p>
<p id='t7' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>qsim</span><span class='op'>.</span><span class='nam'>util</span> <span class='key'>as</span> <span class='nam'>qutil</span><span class='strut'>&nbsp;</span></p>
<p id='t8' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>qsim</span><span class='op'>.</span><span class='nam'>simulator</span><span class='op'>.</span><span class='nam'>config</span> <span class='key'>as</span> <span class='nam'>config</span><span class='strut'>&nbsp;</span></p>
<p id='t9' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t10' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>Transform</span><span class='op'>(</span><span class='nam'>object</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t11' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Parent class for feed transforms. Subclass and override transform method to create a new derived value from the combined feed.&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t12' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t13' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>feed</span><span class='op'>,</span> <span class='nam'>config_dict</span><span class='op'>,</span> <span class='nam'>result_address</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t14' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t15' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; feed_address&nbsp; &nbsp; - zmq socket address, Transform will CONNECT a PULL socket and receive messages until &quot;DONE&quot; is received.</span><span class='strut'>&nbsp;</span></p>
<p id='t16' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result_address&nbsp; - zmq socket address, Transform will CONNECT a PUSH socket and send messaes until feed_socket receives &quot;DONE&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t17' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sync_address&nbsp; &nbsp; - zmq socket address, Transform will CONNECT a REQ socket and send/receive one message before entering feed loop</span><span class='strut'>&nbsp;</span></p>
<p id='t18' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; config&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - must be a dict that can be wrapped in a config.Config object with at least an entry for &#39;name&#39;:string value</span><span class='strut'>&nbsp;</span></p>
<p id='t19' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; server&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; - if True, transform will bind to the result address (and act as a server), if False it will connect. The</span><span class='strut'>&nbsp;</span></p>
<p id='t20' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; the last transform in a series should be server=True so that clients can connect.</span><span class='strut'>&nbsp;</span></p>
<p id='t21' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t22' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='nam'>qutil</span><span class='op'>.</span><span class='nam'>logger</span><span class='strut'>&nbsp;</span></p>
<p id='t23' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='nam'>feed</span><span class='strut'>&nbsp;</span></p>
<p id='t24' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_address</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='nam'>feed</span><span class='op'>.</span><span class='nam'>feed_address</span><span class='strut'>&nbsp;</span></p>
<p id='t25' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>result_address</span>&nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='nam'>result_address</span><span class='strut'>&nbsp;</span></p>
<p id='t26' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>config</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='nam'>config</span><span class='op'>.</span><span class='nam'>Config</span><span class='op'>(</span><span class='nam'>config_dict</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t27' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>name</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>config</span><span class='op'>.</span><span class='nam'>get_string</span><span class='op'>(</span><span class='str'>&#39;name&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t28' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sync</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='nam'>FeedSync</span><span class='op'>(</span><span class='nam'>feed</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>name</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t29' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>state</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t30' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>state</span><span class='op'>[</span><span class='str'>&#39;name&#39;</span><span class='op'>]</span>&nbsp; &nbsp; &nbsp; <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>name</span><span class='strut'>&nbsp;</span></p>
<p id='t31' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>received_count</span>&nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='num'>0</span><span class='strut'>&nbsp;</span></p>
<p id='t32' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sent_count</span>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='num'>0</span><span class='strut'>&nbsp;</span></p>
<p id='t33' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t34' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>run</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t35' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t36' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>process_all</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t37' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t38' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t39' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t40' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>context</span> <span class='op'>=</span> <span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>Context</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t41' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t42' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;starting {name} transform&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>name</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>name</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t43' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#create the feed SUB. </span><span class='strut'>&nbsp;</span></p>
<p id='t44' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_socket</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>context</span><span class='op'>.</span><span class='nam'>socket</span><span class='op'>(</span><span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>SUB</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t45' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_socket</span><span class='op'>.</span><span class='nam'>connect</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_address</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t46' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_socket</span><span class='op'>.</span><span class='nam'>setsockopt</span><span class='op'>(</span><span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>SUBSCRIBE</span><span class='op'>,</span><span class='str'>&#39;&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t47' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t48' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#create the result PUSH</span><span class='strut'>&nbsp;</span></p>
<p id='t49' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>result_socket</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>context</span><span class='op'>.</span><span class='nam'>socket</span><span class='op'>(</span><span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>PUSH</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t50' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>result_socket</span><span class='op'>.</span><span class='nam'>connect</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>result_address</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t51' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t52' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>process_all</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t53' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;starting {name} event loop&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>name</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>name</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t54' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sync</span><span class='op'>.</span><span class='nam'>confirm</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t55' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t56' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t57' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>message</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_socket</span><span class='op'>.</span><span class='nam'>recv</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t58' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='nam'>message</span> <span class='op'>==</span> <span class='str'>&quot;DONE&quot;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t59' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;{name} received the Done message from the feed&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>name</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>name</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t60' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>result_socket</span><span class='op'>.</span><span class='nam'>send</span><span class='op'>(</span><span class='str'>&quot;DONE&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t61' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='op'>;</span><span class='strut'>&nbsp;</span></p>
<p id='t62' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>received_count</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t63' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>event</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>message</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t64' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cur_state</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>transform</span><span class='op'>(</span><span class='nam'>event</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t65' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cur_state</span><span class='op'>[</span><span class='str'>&#39;dt&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>event</span><span class='op'>[</span><span class='str'>&#39;dt&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t66' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cur_state</span><span class='op'>[</span><span class='str'>&#39;name&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>name</span><span class='strut'>&nbsp;</span></p>
<p id='t67' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>result_socket</span><span class='op'>.</span><span class='nam'>send</span><span class='op'>(</span><span class='nam'>json</span><span class='op'>.</span><span class='nam'>dumps</span><span class='op'>(</span><span class='nam'>cur_state</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t68' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sent_count</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t69' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t70' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>close</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t71' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;Transform {name} recieved {r} and sent {s}&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>name</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>name</span><span class='op'>,</span> <span class='nam'>r</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>received_count</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>sent_count</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t72' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t73' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_socket</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t74' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>result_socket</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t75' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>context</span><span class='op'>.</span><span class='nam'>term</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t76' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t77' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>transform</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>event</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t78' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Must return the transformed value as a map with {name:&quot;name of new transform&quot;, value: &quot;value of new field&quot;}</span><span class='strut'>&nbsp;</span></p>
<p id='t79' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Transforms run in parallel and results are merged into a single map, so transform names must be unique. </span><span class='strut'>&nbsp;</span></p>
<p id='t80' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Best practice is to use the self.state object initialized from the transform configuration, and only set the</span><span class='strut'>&nbsp;</span></p>
<p id='t81' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; transformed value:</span><span class='strut'>&nbsp;</span></p>
<p id='t82' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.state[&#39;value&#39;] = transformed_value</span><span class='strut'>&nbsp;</span></p>
<p id='t83' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t84' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t85' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t86' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t87' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>MergedTransformsFeed</span><span class='op'>(</span><span class='nam'>Transform</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t88' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Merge data feed and array of transform feeds into a single result vector.</span><span class='strut'>&nbsp;</span></p>
<p id='t89' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; PULL from feed</span><span class='strut'>&nbsp;</span></p>
<p id='t90' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; PULL from child transforms</span><span class='strut'>&nbsp;</span></p>
<p id='t91' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; PUSH merged message to client</span><span class='strut'>&nbsp;</span></p>
<p id='t92' class='pln'><span class='str'>&nbsp; &nbsp; </span><span class='strut'>&nbsp;</span></p>
<p id='t93' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t94' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t95' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>feed</span><span class='op'>,</span> <span class='nam'>props</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t96' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t97' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; config - must have an entry for &#39;transforms&#39;:array of dicts, which are convertedto configs.</span><span class='strut'>&nbsp;</span></p>
<p id='t98' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t99' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>Transform</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>feed</span><span class='op'>,</span> <span class='nam'>props</span><span class='op'>,</span> <span class='str'>&quot;tcp://127.0.0.1:20202&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t100' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>transform_address</span>&nbsp; <span class='op'>=</span> <span class='str'>&quot;tcp://127.0.0.1:{port}&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>port</span><span class='op'>=</span><span class='num'>10104</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t101' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>transform_socket</span>&nbsp;&nbsp; <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t102' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>create_transforms</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>config</span><span class='op'>.</span><span class='nam'>transforms</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t103' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t104' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t105' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>create_transforms</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>configs</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t106' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>transforms</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t107' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>props</span> <span class='key'>in</span> <span class='nam'>configs</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t108' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>class_name</span> <span class='op'>=</span> <span class='nam'>props</span><span class='op'>[</span><span class='str'>&#39;class&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t109' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='nam'>class_name</span> <span class='op'>==</span> <span class='str'>&#39;MovingAverage&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t110' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mavg</span> <span class='op'>=</span> <span class='nam'>MovingAverage</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed</span><span class='op'>,</span> <span class='nam'>props</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>transform_address</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t111' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>transforms</span><span class='op'>[</span><span class='nam'>mavg</span><span class='op'>.</span><span class='nam'>name</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>mavg</span><span class='strut'>&nbsp;</span></p>
<p id='t112' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t113' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>keys</span> <span class='op'>=</span> <span class='nam'>copy</span><span class='op'>.</span><span class='nam'>copy</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>transforms</span><span class='op'>.</span><span class='nam'>keys</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t114' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>keys</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='str'>&quot;feed&quot;</span><span class='op'>)</span> <span class='com'>#for the raw feed</span><span class='strut'>&nbsp;</span></p>
<p id='t115' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span> <span class='op'>=</span> <span class='nam'>MergedParallelBuffer</span><span class='op'>(</span><span class='nam'>keys</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t116' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t117' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>buffers</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t118' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>name</span><span class='op'>,</span> <span class='nam'>transform</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>transforms</span><span class='op'>.</span><span class='nam'>iteritems</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t119' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>buffers</span><span class='op'>[</span><span class='nam'>name</span><span class='op'>]</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t120' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t121' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t122' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>context</span> <span class='op'>=</span> <span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>Context</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t123' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t124' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;starting {name} transform&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>name</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>name</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t125' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#create the feed SUB. </span><span class='strut'>&nbsp;</span></p>
<p id='t126' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_socket</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>context</span><span class='op'>.</span><span class='nam'>socket</span><span class='op'>(</span><span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>SUB</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t127' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_socket</span><span class='op'>.</span><span class='nam'>connect</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_address</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t128' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_socket</span><span class='op'>.</span><span class='nam'>setsockopt</span><span class='op'>(</span><span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>SUBSCRIBE</span><span class='op'>,</span><span class='str'>&#39;&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t129' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t130' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#create the result PUSH</span><span class='strut'>&nbsp;</span></p>
<p id='t131' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>result_socket</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>context</span><span class='op'>.</span><span class='nam'>socket</span><span class='op'>(</span><span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>PUSH</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t132' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>result_socket</span><span class='op'>.</span><span class='nam'>bind</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>result_address</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t133' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t134' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#create the transform PULL. </span><span class='strut'>&nbsp;</span></p>
<p id='t135' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>transform_socket</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>context</span><span class='op'>.</span><span class='nam'>socket</span><span class='op'>(</span><span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>PULL</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t136' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>transform_socket</span><span class='op'>.</span><span class='nam'>bind</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>transform_address</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t137' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>out_socket</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>result_socket</span><span class='strut'>&nbsp;</span></p>
<p id='t138' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t139' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Initialize poll set</span><span class='strut'>&nbsp;</span></p>
<p id='t140' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>poller</span> <span class='op'>=</span> <span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>Poller</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t141' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>poller</span><span class='op'>.</span><span class='nam'>register</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_socket</span><span class='op'>,</span> <span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>POLLIN</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t142' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>poller</span><span class='op'>.</span><span class='nam'>register</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>transform_socket</span><span class='op'>,</span> <span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>POLLIN</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t143' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t144' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>name</span><span class='op'>,</span> <span class='nam'>transform</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>transforms</span><span class='op'>.</span><span class='nam'>iteritems</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t145' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;starting {name}&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>name</span><span class='op'>=</span><span class='nam'>name</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t146' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>proc</span> <span class='op'>=</span> <span class='nam'>multiprocessing</span><span class='op'>.</span><span class='nam'>Process</span><span class='op'>(</span><span class='nam'>target</span><span class='op'>=</span><span class='nam'>transform</span><span class='op'>.</span><span class='nam'>run</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t147' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>proc</span><span class='op'>.</span><span class='nam'>start</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t148' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t149' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sync</span><span class='op'>.</span><span class='nam'>confirm</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t150' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t151' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>close</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t152' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>transform_socket</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t153' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>Transform</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t154' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t155' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>process_all</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t156' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t157' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>done_count</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'>&nbsp;</span></p>
<p id='t158' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>True</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t159' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>socks</span> <span class='op'>=</span> <span class='nam'>dict</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>poller</span><span class='op'>.</span><span class='nam'>poll</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t160' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t161' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_socket</span> <span class='key'>in</span> <span class='nam'>socks</span> <span class='key'>and</span> <span class='nam'>socks</span><span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_socket</span><span class='op'>]</span> <span class='op'>==</span> <span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>POLLIN</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t162' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>message</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed_socket</span><span class='op'>.</span><span class='nam'>recv</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t163' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='nam'>message</span> <span class='op'>==</span> <span class='str'>&quot;DONE&quot;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t164' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;finished receiving feed to merge&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t165' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>done_count</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t166' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t167' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>received_count</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t168' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>event</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>message</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t169' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='str'>&quot;feed&quot;</span><span class='op'>,</span><span class='nam'>event</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t170' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t171' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>transform_socket</span> <span class='key'>in</span> <span class='nam'>socks</span> <span class='key'>and</span> <span class='nam'>socks</span><span class='op'>[</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>transform_socket</span><span class='op'>]</span> <span class='op'>==</span> <span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>POLLIN</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t172' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>t_message</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>transform_socket</span><span class='op'>.</span><span class='nam'>recv</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t173' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='nam'>t_message</span> <span class='op'>==</span> <span class='str'>&quot;DONE&quot;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t174' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;finished receiving a transform to merge&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t175' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>done_count</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t176' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t177' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>received_count</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t178' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>t_event</span> <span class='op'>=</span> <span class='nam'>json</span><span class='op'>.</span><span class='nam'>loads</span><span class='op'>(</span><span class='nam'>t_message</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t179' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>t_event</span><span class='op'>[</span><span class='str'>&#39;name&#39;</span><span class='op'>]</span><span class='op'>,</span> <span class='nam'>t_event</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t180' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t181' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='nam'>done_count</span> <span class='op'>&gt;=</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t182' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span> <span class='com'>#done!</span><span class='strut'>&nbsp;</span></p>
<p id='t183' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t184' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>send_next</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t185' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t186' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;Transform {name} received {r} and sent {s}&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>name</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>name</span><span class='op'>,</span> <span class='nam'>r</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>received_count</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>sent_count</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t187' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;about to drain {n} messages from merger&#39;s buffer&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>n</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>pending_messages</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t188' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t189' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#drain any remaining messages in the buffer</span><span class='strut'>&nbsp;</span></p>
<p id='t190' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>drain</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t191' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t192' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#signal to client that we&#39;re done</span><span class='strut'>&nbsp;</span></p>
<p id='t193' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>result_socket</span><span class='op'>.</span><span class='nam'>send</span><span class='op'>(</span><span class='str'>&quot;DONE&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t194' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;Transform {name} received {r} and sent {s}&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>name</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>name</span><span class='op'>,</span> <span class='nam'>r</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>received_count</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>sent_count</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t195' class='pln'><span class='strut'>&nbsp;</span></p>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
-155
View File
@@ -1,155 +0,0 @@
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for qsim.transforms.technical: 24%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>qsim.transforms.technical</b> :
<span class='pc_cov'>24%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
17 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>4 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>13 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
<p id='n1' class='stm run hide_run'><a href='#n1'>1</a></p>
<p id='n2' class='pln'><a href='#n2'>2</a></p>
<p id='n3' class='stm run hide_run'><a href='#n3'>3</a></p>
<p id='n4' class='pln'><a href='#n4'>4</a></p>
<p id='n5' class='stm run hide_run'><a href='#n5'>5</a></p>
<p id='n6' class='stm mis'><a href='#n6'>6</a></p>
<p id='n7' class='stm mis'><a href='#n7'>7</a></p>
<p id='n8' class='pln'><a href='#n8'>8</a></p>
<p id='n9' class='stm mis'><a href='#n9'>9</a></p>
<p id='n10' class='pln'><a href='#n10'>10</a></p>
<p id='n11' class='pln'><a href='#n11'>11</a></p>
<p id='n12' class='pln'><a href='#n12'>12</a></p>
<p id='n13' class='pln'><a href='#n13'>13</a></p>
<p id='n14' class='pln'><a href='#n14'>14</a></p>
<p id='n15' class='pln'><a href='#n15'>15</a></p>
<p id='n16' class='pln'><a href='#n16'>16</a></p>
<p id='n17' class='pln'><a href='#n17'>17</a></p>
<p id='n18' class='pln'><a href='#n18'>18</a></p>
<p id='n19' class='pln'><a href='#n19'>19</a></p>
<p id='n20' class='stm run hide_run'><a href='#n20'>20</a></p>
<p id='n21' class='stm mis'><a href='#n21'>21</a></p>
<p id='n22' class='pln'><a href='#n22'>22</a></p>
<p id='n23' class='pln'><a href='#n23'>23</a></p>
<p id='n24' class='stm mis'><a href='#n24'>24</a></p>
<p id='n25' class='pln'><a href='#n25'>25</a></p>
<p id='n26' class='stm mis'><a href='#n26'>26</a></p>
<p id='n27' class='stm mis'><a href='#n27'>27</a></p>
<p id='n28' class='pln'><a href='#n28'>28</a></p>
<p id='n29' class='stm mis'><a href='#n29'>29</a></p>
<p id='n30' class='stm mis'><a href='#n30'>30</a></p>
<p id='n31' class='stm mis'><a href='#n31'>31</a></p>
<p id='n32' class='pln'><a href='#n32'>32</a></p>
<p id='n33' class='stm mis'><a href='#n33'>33</a></p>
<p id='n34' class='pln'><a href='#n34'>34</a></p>
<p id='n35' class='stm mis'><a href='#n35'>35</a></p>
<p id='n36' class='pln'><a href='#n36'>36</a></p>
<p id='n37' class='stm mis'><a href='#n37'>37</a></p>
</td>
<td class='text' valign='top'>
<p id='t1' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>qsim</span><span class='op'>.</span><span class='nam'>transforms</span><span class='op'>.</span><span class='nam'>base</span> <span class='key'>as</span> <span class='nam'>base</span><span class='strut'>&nbsp;</span></p>
<p id='t2' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t3' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>MovingAverage</span><span class='op'>(</span><span class='nam'>base</span><span class='op'>.</span><span class='nam'>Transform</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t4' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t5' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>feed</span><span class='op'>,</span> <span class='nam'>props</span><span class='op'>,</span> <span class='nam'>result_address</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t6' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>base</span><span class='op'>.</span><span class='nam'>Transform</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>feed</span><span class='op'>,</span> <span class='nam'>props</span><span class='op'>,</span> <span class='nam'>result_address</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t7' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>events</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t8' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t9' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>window</span> <span class='op'>=</span> <span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>timedelta</span><span class='op'>(</span><span class='nam'>days</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>config</span><span class='op'>.</span><span class='nam'>get_integer</span><span class='op'>(</span><span class='str'>&#39;days&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t10' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>seconds</span>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>config</span><span class='op'>.</span><span class='nam'>get_integer</span><span class='op'>(</span><span class='str'>&#39;seconds&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t11' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>microseconds</span>&nbsp; &nbsp; <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>config</span><span class='op'>.</span><span class='nam'>get_integer</span><span class='op'>(</span><span class='str'>&#39;microseconds&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t12' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>milliseconds</span>&nbsp; &nbsp; <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>config</span><span class='op'>.</span><span class='nam'>get_integer</span><span class='op'>(</span><span class='str'>&#39;milliseconds&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t13' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>minutes</span>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>config</span><span class='op'>.</span><span class='nam'>get_integer</span><span class='op'>(</span><span class='str'>&#39;minutes&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t14' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>hours</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>config</span><span class='op'>.</span><span class='nam'>get_integer</span><span class='op'>(</span><span class='str'>&#39;hours&#39;</span><span class='op'>)</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
<p id='t15' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>weeks</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>config</span><span class='op'>.</span><span class='nam'>get_integer</span><span class='op'>(</span><span class='str'>&#39;weeks&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t16' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t17' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t18' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t19' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t20' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>transform</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>event</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t21' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>events</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>event</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t22' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t23' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#filter the event list to the window length.</span><span class='strut'>&nbsp;</span></p>
<p id='t24' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>events</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>x</span> <span class='key'>for</span> <span class='nam'>x</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>events</span> <span class='key'>if</span> <span class='op'>(</span><span class='nam'>qutil</span><span class='op'>.</span><span class='nam'>parse_date</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>[</span><span class='str'>&#39;dt&#39;</span><span class='op'>]</span><span class='op'>)</span> <span class='op'>-</span> <span class='nam'>qutil</span><span class='op'>.</span><span class='nam'>parse_date</span><span class='op'>(</span><span class='nam'>event</span><span class='op'>[</span><span class='str'>&#39;dt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span> <span class='op'>&lt;=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>window</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t25' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t26' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>events</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t27' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='num'>0.0</span><span class='strut'>&nbsp;</span></p>
<p id='t28' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t29' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>total</span> <span class='op'>=</span> <span class='num'>0.0</span><span class='strut'>&nbsp;</span></p>
<p id='t30' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>event</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>events</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t31' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>total</span> <span class='op'>+=</span> <span class='nam'>event</span><span class='op'>[</span><span class='str'>&#39;price&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t32' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t33' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>average</span> <span class='op'>=</span> <span class='nam'>total</span><span class='op'>/</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>events</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t34' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t35' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>state</span><span class='op'>[</span><span class='str'>&#39;value&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>average</span><span class='strut'>&nbsp;</span></p>
<p id='t36' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t37' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>state</span><span class='strut'>&nbsp;</span></p>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
-361
View File
@@ -1,361 +0,0 @@
<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=emulateIE7' />
<title>Coverage for qsim.util: 51%</title>
<link rel='stylesheet' href='style.css' type='text/css'>
<script type='text/javascript' src='jquery-1.4.3.min.js'></script>
<script type='text/javascript' src='jquery.hotkeys.js'></script>
<script type='text/javascript' src='jquery.isonscreen.js'></script>
<script type='text/javascript' src='coverage_html.js'></script>
<script type='text/javascript' charset='utf-8'>
jQuery(document).ready(coverage.pyfile_ready);
</script>
</head>
<body id='pyfile'>
<div id='header'>
<div class='content'>
<h1>Coverage for <b>qsim.util</b> :
<span class='pc_cov'>51%</span>
</h1>
<img id='keyboard_icon' src='keybd_closed.png'>
<h2 class='stats'>
103 statements
<span class='run hide_run shortkey_r' onclick='coverage.toggle_lines(this, "run")'>53 run</span>
<span class='mis shortkey_m' onclick='coverage.toggle_lines(this, "mis")'>50 missing</span>
<span class='exc shortkey_x' onclick='coverage.toggle_lines(this, "exc")'>0 excluded</span>
</h2>
</div>
</div>
<div class='help_panel'>
<img id='panel_icon' src='keybd_open.png'>
<p class='legend'>Hot-keys on this page</p>
<div>
<p class='keyhelp'>
<span class='key'>r</span>
<span class='key'>m</span>
<span class='key'>x</span>
<span class='key'>p</span> &nbsp; toggle line displays
</p>
<p class='keyhelp'>
<span class='key'>j</span>
<span class='key'>k</span> &nbsp; next/prev highlighted chunk
</p>
<p class='keyhelp'>
<span class='key'>0</span> &nbsp; (zero) top of page
</p>
<p class='keyhelp'>
<span class='key'>1</span> &nbsp; (one) first highlighted chunk
</p>
</div>
</div>
<div id='source'>
<table cellspacing='0' cellpadding='0'>
<tr>
<td class='linenos' valign='top'>
<p id='n1' class='pln'><a href='#n1'>1</a></p>
<p id='n2' class='pln'><a href='#n2'>2</a></p>
<p id='n3' class='pln'><a href='#n3'>3</a></p>
<p id='n4' class='pln'><a href='#n4'>4</a></p>
<p id='n5' class='stm run hide_run'><a href='#n5'>5</a></p>
<p id='n6' class='stm run hide_run'><a href='#n6'>6</a></p>
<p id='n7' class='stm run hide_run'><a href='#n7'>7</a></p>
<p id='n8' class='stm run hide_run'><a href='#n8'>8</a></p>
<p id='n9' class='stm run hide_run'><a href='#n9'>9</a></p>
<p id='n10' class='stm run hide_run'><a href='#n10'>10</a></p>
<p id='n11' class='pln'><a href='#n11'>11</a></p>
<p id='n12' class='stm run hide_run'><a href='#n12'>12</a></p>
<p id='n13' class='pln'><a href='#n13'>13</a></p>
<p id='n14' class='stm run hide_run'><a href='#n14'>14</a></p>
<p id='n15' class='pln'><a href='#n15'>15</a></p>
<p id='n16' class='stm mis'><a href='#n16'>16</a></p>
<p id='n17' class='stm mis'><a href='#n17'>17</a></p>
<p id='n18' class='stm mis'><a href='#n18'>18</a></p>
<p id='n19' class='stm mis'><a href='#n19'>19</a></p>
<p id='n20' class='stm mis'><a href='#n20'>20</a></p>
<p id='n21' class='pln'><a href='#n21'>21</a></p>
<p id='n22' class='stm run hide_run'><a href='#n22'>22</a></p>
<p id='n23' class='pln'><a href='#n23'>23</a></p>
<p id='n24' class='stm mis'><a href='#n24'>24</a></p>
<p id='n25' class='stm mis'><a href='#n25'>25</a></p>
<p id='n26' class='stm mis'><a href='#n26'>26</a></p>
<p id='n27' class='stm mis'><a href='#n27'>27</a></p>
<p id='n28' class='pln'><a href='#n28'>28</a></p>
<p id='n29' class='pln'><a href='#n29'>29</a></p>
<p id='n30' class='stm run hide_run'><a href='#n30'>30</a></p>
<p id='n31' class='pln'><a href='#n31'>31</a></p>
<p id='n32' class='stm run hide_run'><a href='#n32'>32</a></p>
<p id='n33' class='stm run hide_run'><a href='#n33'>33</a></p>
<p id='n34' class='stm run hide_run'><a href='#n34'>34</a></p>
<p id='n35' class='stm run hide_run'><a href='#n35'>35</a></p>
<p id='n36' class='stm run hide_run'><a href='#n36'>36</a></p>
<p id='n37' class='stm run hide_run'><a href='#n37'>37</a></p>
<p id='n38' class='stm run hide_run'><a href='#n38'>38</a></p>
<p id='n39' class='stm run hide_run'><a href='#n39'>39</a></p>
<p id='n40' class='pln'><a href='#n40'>40</a></p>
<p id='n41' class='stm run hide_run'><a href='#n41'>41</a></p>
<p id='n42' class='stm mis'><a href='#n42'>42</a></p>
<p id='n43' class='pln'><a href='#n43'>43</a></p>
<p id='n44' class='stm run hide_run'><a href='#n44'>44</a></p>
<p id='n45' class='stm mis'><a href='#n45'>45</a></p>
<p id='n46' class='stm mis'><a href='#n46'>46</a></p>
<p id='n47' class='pln'><a href='#n47'>47</a></p>
<p id='n48' class='stm run hide_run'><a href='#n48'>48</a></p>
<p id='n49' class='stm mis'><a href='#n49'>49</a></p>
<p id='n50' class='stm mis'><a href='#n50'>50</a></p>
<p id='n51' class='pln'><a href='#n51'>51</a></p>
<p id='n52' class='stm mis'><a href='#n52'>52</a></p>
<p id='n53' class='stm mis'><a href='#n53'>53</a></p>
<p id='n54' class='stm mis'><a href='#n54'>54</a></p>
<p id='n55' class='stm mis'><a href='#n55'>55</a></p>
<p id='n56' class='stm mis'><a href='#n56'>56</a></p>
<p id='n57' class='stm mis'><a href='#n57'>57</a></p>
<p id='n58' class='stm mis'><a href='#n58'>58</a></p>
<p id='n59' class='stm mis'><a href='#n59'>59</a></p>
<p id='n60' class='pln'><a href='#n60'>60</a></p>
<p id='n61' class='stm mis'><a href='#n61'>61</a></p>
<p id='n62' class='stm mis'><a href='#n62'>62</a></p>
<p id='n63' class='pln'><a href='#n63'>63</a></p>
<p id='n64' class='stm run hide_run'><a href='#n64'>64</a></p>
<p id='n65' class='stm mis'><a href='#n65'>65</a></p>
<p id='n66' class='stm mis'><a href='#n66'>66</a></p>
<p id='n67' class='stm mis'><a href='#n67'>67</a></p>
<p id='n68' class='stm mis'><a href='#n68'>68</a></p>
<p id='n69' class='pln'><a href='#n69'>69</a></p>
<p id='n70' class='stm run hide_run'><a href='#n70'>70</a></p>
<p id='n71' class='stm run hide_run'><a href='#n71'>71</a></p>
<p id='n72' class='stm run hide_run'><a href='#n72'>72</a></p>
<p id='n73' class='stm run hide_run'><a href='#n73'>73</a></p>
<p id='n74' class='stm run hide_run'><a href='#n74'>74</a></p>
<p id='n75' class='pln'><a href='#n75'>75</a></p>
<p id='n76' class='stm run hide_run'><a href='#n76'>76</a></p>
<p id='n77' class='stm mis'><a href='#n77'>77</a></p>
<p id='n78' class='stm mis'><a href='#n78'>78</a></p>
<p id='n79' class='stm mis'><a href='#n79'>79</a></p>
<p id='n80' class='pln'><a href='#n80'>80</a></p>
<p id='n81' class='stm run hide_run'><a href='#n81'>81</a></p>
<p id='n82' class='stm mis'><a href='#n82'>82</a></p>
<p id='n83' class='stm mis'><a href='#n83'>83</a></p>
<p id='n84' class='pln'><a href='#n84'>84</a></p>
<p id='n85' class='stm mis'><a href='#n85'>85</a></p>
<p id='n86' class='stm mis'><a href='#n86'>86</a></p>
<p id='n87' class='stm mis'><a href='#n87'>87</a></p>
<p id='n88' class='stm mis'><a href='#n88'>88</a></p>
<p id='n89' class='pln'><a href='#n89'>89</a></p>
<p id='n90' class='pln'><a href='#n90'>90</a></p>
<p id='n91' class='stm run hide_run'><a href='#n91'>91</a></p>
<p id='n92' class='pln'><a href='#n92'>92</a></p>
<p id='n93' class='stm run hide_run'><a href='#n93'>93</a></p>
<p id='n94' class='stm mis'><a href='#n94'>94</a></p>
<p id='n95' class='stm mis'><a href='#n95'>95</a></p>
<p id='n96' class='stm mis'><a href='#n96'>96</a></p>
<p id='n97' class='pln'><a href='#n97'>97</a></p>
<p id='n98' class='stm run hide_run'><a href='#n98'>98</a></p>
<p id='n99' class='stm mis'><a href='#n99'>99</a></p>
<p id='n100' class='stm mis'><a href='#n100'>100</a></p>
<p id='n101' class='pln'><a href='#n101'>101</a></p>
<p id='n102' class='stm mis'><a href='#n102'>102</a></p>
<p id='n103' class='stm mis'><a href='#n103'>103</a></p>
<p id='n104' class='stm mis'><a href='#n104'>104</a></p>
<p id='n105' class='stm mis'><a href='#n105'>105</a></p>
<p id='n106' class='stm mis'><a href='#n106'>106</a></p>
<p id='n107' class='stm mis'><a href='#n107'>107</a></p>
<p id='n108' class='stm mis'><a href='#n108'>108</a></p>
<p id='n109' class='stm mis'><a href='#n109'>109</a></p>
<p id='n110' class='pln'><a href='#n110'>110</a></p>
<p id='n111' class='pln'><a href='#n111'>111</a></p>
<p id='n112' class='stm run hide_run'><a href='#n112'>112</a></p>
<p id='n113' class='pln'><a href='#n113'>113</a></p>
<p id='n114' class='stm run hide_run'><a href='#n114'>114</a></p>
<p id='n115' class='stm run hide_run'><a href='#n115'>115</a></p>
<p id='n116' class='stm run hide_run'><a href='#n116'>116</a></p>
<p id='n117' class='stm run hide_run'><a href='#n117'>117</a></p>
<p id='n118' class='stm run hide_run'><a href='#n118'>118</a></p>
<p id='n119' class='pln'><a href='#n119'>119</a></p>
<p id='n120' class='pln'><a href='#n120'>120</a></p>
<p id='n121' class='stm run hide_run'><a href='#n121'>121</a></p>
<p id='n122' class='stm run hide_run'><a href='#n122'>122</a></p>
<p id='n123' class='pln'><a href='#n123'>123</a></p>
<p id='n124' class='stm run hide_run'><a href='#n124'>124</a></p>
<p id='n125' class='stm run hide_run'><a href='#n125'>125</a></p>
<p id='n126' class='pln'><a href='#n126'>126</a></p>
<p id='n127' class='stm run hide_run'><a href='#n127'>127</a></p>
<p id='n128' class='pln'><a href='#n128'>128</a></p>
<p id='n129' class='stm run hide_run'><a href='#n129'>129</a></p>
<p id='n130' class='stm run hide_run'><a href='#n130'>130</a></p>
<p id='n131' class='stm run hide_run'><a href='#n131'>131</a></p>
<p id='n132' class='stm run hide_run'><a href='#n132'>132</a></p>
<p id='n133' class='pln'><a href='#n133'>133</a></p>
<p id='n134' class='pln'><a href='#n134'>134</a></p>
<p id='n135' class='stm run hide_run'><a href='#n135'>135</a></p>
<p id='n136' class='stm run hide_run'><a href='#n136'>136</a></p>
<p id='n137' class='stm run hide_run'><a href='#n137'>137</a></p>
<p id='n138' class='stm run hide_run'><a href='#n138'>138</a></p>
<p id='n139' class='stm run hide_run'><a href='#n139'>139</a></p>
<p id='n140' class='stm run hide_run'><a href='#n140'>140</a></p>
</td>
<td class='text' valign='top'>
<p id='t1' class='pln'><span class='str'>&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t2' class='pln'><span class='str'>Small classes to assist with db access, timezone calculations, and so on.</span><span class='strut'>&nbsp;</span></p>
<p id='t3' class='pln'><span class='str'>&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t4' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t5' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>datetime</span><span class='strut'>&nbsp;</span></p>
<p id='t6' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>pytz</span><span class='strut'>&nbsp;</span></p>
<p id='t7' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>json</span><span class='strut'>&nbsp;</span></p>
<p id='t8' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>logging</span><span class='strut'>&nbsp;</span></p>
<p id='t9' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>uuid</span><span class='strut'>&nbsp;</span></p>
<p id='t10' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>zmq</span><span class='strut'>&nbsp;</span></p>
<p id='t11' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t12' class='stm run hide_run'><span class='nam'>logger</span> <span class='op'>=</span> <span class='nam'>logging</span><span class='op'>.</span><span class='nam'>getLogger</span><span class='op'>(</span><span class='str'>&#39;QSimLogger&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t13' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t14' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>parse_date</span><span class='op'>(</span><span class='nam'>dt_str</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t15' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;parse strings according to the same format as generated by format_date&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t16' class='stm mis'>&nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='nam'>dt_str</span> <span class='op'>==</span> <span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t17' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t18' class='stm mis'>&nbsp; &nbsp; <span class='nam'>parts</span> <span class='op'>=</span> <span class='nam'>dt_str</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&quot;.&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t19' class='stm mis'>&nbsp; &nbsp; <span class='nam'>dt</span> <span class='op'>=</span> <span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>datetime</span><span class='op'>.</span><span class='nam'>strptime</span><span class='op'>(</span><span class='nam'>parts</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>,</span> <span class='str'>&#39;%Y/%m/%d-%H:%M:%S&#39;</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>microsecond</span><span class='op'>=</span><span class='nam'>int</span><span class='op'>(</span><span class='nam'>parts</span><span class='op'>[</span><span class='num'>1</span><span class='op'>]</span><span class='op'>+</span><span class='str'>&quot;000&quot;</span><span class='op'>)</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>tzinfo</span> <span class='op'>=</span> <span class='nam'>pytz</span><span class='op'>.</span><span class='nam'>utc</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t20' class='stm mis'>&nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>dt</span><span class='strut'>&nbsp;</span></p>
<p id='t21' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t22' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>format_date</span><span class='op'>(</span><span class='nam'>dt</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t23' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Format the date into a date with millesecond resolution and string/alphabetical sorting that is equivalent to datetime sorting&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t24' class='stm mis'>&nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='nam'>dt</span> <span class='op'>==</span> <span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t25' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t26' class='stm mis'>&nbsp; &nbsp; <span class='nam'>dt_str</span> <span class='op'>=</span> <span class='nam'>dt</span><span class='op'>.</span><span class='nam'>strftime</span><span class='op'>(</span><span class='str'>&#39;%Y/%m/%d-%H:%M:%S&#39;</span><span class='op'>)</span> <span class='op'>+</span> <span class='str'>&quot;.&quot;</span> <span class='op'>+</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>dt</span><span class='op'>.</span><span class='nam'>microsecond</span> <span class='op'>/</span> <span class='num'>1000</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t27' class='stm mis'>&nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>dt_str</span><span class='strut'>&nbsp;</span></p>
<p id='t28' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t29' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t30' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>ParallelBuffer</span><span class='op'>(</span><span class='nam'>object</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t31' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; holds several queues of events by key, allows retrieval in date order or by merging&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
<p id='t32' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>key_list</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t33' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>out_socket</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t34' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sent_count</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'>&nbsp;</span></p>
<p id='t35' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>received_count</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'>&nbsp;</span></p>
<p id='t36' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>draining</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
<p id='t37' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
<p id='t38' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>key</span> <span class='key'>in</span> <span class='nam'>key_list</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t39' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>[</span><span class='nam'>key</span><span class='op'>]</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t40' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t41' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__len__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t42' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t43' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t44' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>append</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>key</span><span class='op'>,</span> <span class='nam'>value</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t45' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>[</span><span class='nam'>key</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>value</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t46' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>received_count</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t47' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t48' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>next</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t49' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='key'>not</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>is_full</span><span class='op'>(</span><span class='op'>)</span> <span class='key'>or</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>draining</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t50' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t51' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t52' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cur</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t53' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>earliest</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
<p id='t54' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>source</span><span class='op'>,</span> <span class='nam'>events</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>iteritems</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t55' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>events</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t56' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>continue</span><span class='strut'>&nbsp;</span></p>
<p id='t57' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cur</span> <span class='op'>=</span> <span class='nam'>events</span><span class='strut'>&nbsp;</span></p>
<p id='t58' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='nam'>earliest</span> <span class='op'>==</span> <span class='nam'>None</span><span class='op'>)</span> <span class='key'>or</span> <span class='op'>(</span><span class='nam'>cur</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&#39;dt&#39;</span><span class='op'>]</span> <span class='op'>&lt;=</span> <span class='nam'>earliest</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='str'>&#39;dt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t59' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>earliest</span> <span class='op'>=</span> <span class='nam'>cur</span><span class='strut'>&nbsp;</span></p>
<p id='t60' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t61' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='nam'>earliest</span> <span class='op'>!=</span> <span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t62' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>earliest</span><span class='op'>.</span><span class='nam'>pop</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t63' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t64' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>is_full</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t65' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>source</span><span class='op'>,</span> <span class='nam'>events</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>iteritems</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t66' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='op'>(</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>events</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t67' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
<p id='t68' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
<p id='t69' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t70' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>pending_messages</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t71' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>total</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'>&nbsp;</span></p>
<p id='t72' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>source</span><span class='op'>,</span> <span class='nam'>events</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>iteritems</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t73' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>total</span> <span class='op'>+=</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>events</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t74' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>total</span><span class='strut'>&nbsp;</span></p>
<p id='t75' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t76' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>drain</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t77' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>draining</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
<p id='t78' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>pending_messages</span><span class='op'>(</span><span class='op'>)</span> <span class='op'>&gt;</span> <span class='num'>0</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t79' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>send_next</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t80' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t81' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>send_next</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t82' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='key'>not</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>is_full</span><span class='op'>(</span><span class='op'>)</span> <span class='key'>or</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>draining</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t83' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t84' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t85' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>event</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>next</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t86' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='nam'>event</span> <span class='op'>!=</span> <span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t87' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>out_socket</span><span class='op'>.</span><span class='nam'>send</span><span class='op'>(</span><span class='nam'>json</span><span class='op'>.</span><span class='nam'>dumps</span><span class='op'>(</span><span class='nam'>event</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t88' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sent_count</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
<p id='t89' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t90' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t91' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>MergedParallelBuffer</span><span class='op'>(</span><span class='nam'>ParallelBuffer</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t92' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t93' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>keys</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t94' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ParallelBuffer</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>keys</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t95' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t96' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>[</span><span class='str'>&quot;feed&quot;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed</span><span class='strut'>&nbsp;</span></p>
<p id='t97' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t98' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>next</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t99' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='key'>not</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>is_full</span><span class='op'>(</span><span class='op'>)</span> <span class='key'>or</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>draining</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t100' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
<p id='t101' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t102' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>result</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed</span><span class='op'>.</span><span class='nam'>pop</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t103' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>source</span><span class='op'>,</span> <span class='nam'>events</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>data_buffer</span><span class='op'>.</span><span class='nam'>iteritems</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t104' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='nam'>source</span> <span class='op'>==</span> <span class='str'>&quot;feed&quot;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t105' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>continue</span><span class='strut'>&nbsp;</span></p>
<p id='t106' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span><span class='op'>(</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>events</span><span class='op'>)</span> <span class='op'>&gt;</span> <span class='num'>0</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t107' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cur</span> <span class='op'>=</span> <span class='nam'>events</span><span class='op'>.</span><span class='nam'>pop</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t108' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>result</span><span class='op'>[</span><span class='nam'>source</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>cur</span><span class='op'>[</span><span class='str'>&#39;value&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
<p id='t109' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>result</span><span class='strut'>&nbsp;</span></p>
<p id='t110' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t111' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t112' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>FeedSync</span><span class='op'>(</span><span class='nam'>object</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t113' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t114' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>feed</span><span class='op'>,</span> <span class='nam'>name</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t115' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed</span> <span class='op'>=</span> <span class='nam'>feed</span><span class='strut'>&nbsp;</span></p>
<p id='t116' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>id</span> <span class='op'>=</span> <span class='str'>&quot;{name}-{id}&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>name</span><span class='op'>=</span><span class='nam'>name</span><span class='op'>,</span> <span class='nam'>id</span><span class='op'>=</span><span class='nam'>uuid</span><span class='op'>.</span><span class='nam'>uuid1</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t117' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed</span><span class='op'>.</span><span class='nam'>register_sync</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t118' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span> <span class='op'>=</span> <span class='nam'>logger</span><span class='strut'>&nbsp;</span></p>
<p id='t119' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#self.logger.info(&quot;registered {id} with feed&quot;.format(id=self.id))</span><span class='strut'>&nbsp;</span></p>
<p id='t120' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t121' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>confirm</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t122' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>context</span> <span class='op'>=</span> <span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>Context</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t123' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'>#synchronize with feed</span><span class='strut'>&nbsp;</span></p>
<p id='t124' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sync_socket</span> <span class='op'>=</span> <span class='nam'>context</span><span class='op'>.</span><span class='nam'>socket</span><span class='op'>(</span><span class='nam'>zmq</span><span class='op'>.</span><span class='nam'>REQ</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t125' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sync_socket</span><span class='op'>.</span><span class='nam'>connect</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>feed</span><span class='op'>.</span><span class='nam'>sync_address</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t126' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># send a synchronization request to the feed</span><span class='strut'>&nbsp;</span></p>
<p id='t127' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sync_socket</span><span class='op'>.</span><span class='nam'>send</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>id</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t128' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># wait for synchronization reply from the feed</span><span class='strut'>&nbsp;</span></p>
<p id='t129' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sync_socket</span><span class='op'>.</span><span class='nam'>recv</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t130' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sync_socket</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t131' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>context</span><span class='op'>.</span><span class='nam'>term</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t132' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;sync&#39;d feed from {id}&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>id</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>id</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t133' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t134' class='pln'><span class='strut'>&nbsp;</span></p>
<p id='t135' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>configure_logging</span><span class='op'>(</span><span class='nam'>loglevel</span><span class='op'>=</span><span class='nam'>logging</span><span class='op'>.</span><span class='nam'>DEBUG</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
<p id='t136' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>logger</span><span class='op'>.</span><span class='nam'>setLevel</span><span class='op'>(</span><span class='nam'>loglevel</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t137' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>handler</span> <span class='op'>=</span> <span class='nam'>logging</span><span class='op'>.</span><span class='nam'>handlers</span><span class='op'>.</span><span class='nam'>RotatingFileHandler</span><span class='op'>(</span><span class='str'>&quot;/tmp/{lfn}.log&quot;</span><span class='op'>.</span><span class='nam'>format</span><span class='op'>(</span><span class='nam'>lfn</span><span class='op'>=</span><span class='str'>&quot;qsim-log&quot;</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>maxBytes</span><span class='op'>=</span><span class='num'>10</span><span class='op'>*</span><span class='num'>1024</span><span class='op'>*</span><span class='num'>1024</span><span class='op'>,</span> <span class='nam'>backupCount</span><span class='op'>=</span><span class='num'>5</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t138' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>handler</span><span class='op'>.</span><span class='nam'>setFormatter</span><span class='op'>(</span><span class='nam'>logging</span><span class='op'>.</span><span class='nam'>Formatter</span><span class='op'>(</span><span class='str'>&quot;%(asctime)s %(levelname)s %(filename)s %(funcName)s - %(message)s&quot;</span><span class='op'>,</span><span class='str'>&quot;%Y-%m-%d %H:%M:%S %Z&quot;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t139' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>logger</span><span class='op'>.</span><span class='nam'>addHandler</span><span class='op'>(</span><span class='nam'>handler</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
<p id='t140' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>logger</span><span class='op'>.</span><span class='nam'>info</span><span class='op'>(</span><span class='str'>&quot;logging started...&quot;</span><span class='op'>)</span><span class='err'> </span><span class='err'> </span><span class='err'> </span><span class='strut'>&nbsp;</span></p>
</td>
</tr>
</table>
</div>
<div id='footer'>
<div class='content'>
<p>
<a class='nav' href='index.html'>&#xab; index</a> &nbsp; &nbsp; <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.5.1</a>
</p>
</div>
</div>
</body>
</html>
-411
View File
@@ -1,411 +0,0 @@
(dp1
S'files'
p2
(dp3
S'qsim_data_equity'
p4
(dp5
S'index'
p6
(dp7
S'par'
p8
I0
sS'html_filename'
p9
S'qsim_data_equity.html'
p10
sS'name'
p11
S'qsim.data.equity'
p12
sS'nums'
p13
ccopy_reg
_reconstructor
p14
(ccoverage.results
Numbers
p15
c__builtin__
object
p16
NtRp17
(dp18
S'n_files'
p19
I1
sS'n_branches'
p20
I0
sS'n_statements'
p21
I59
sS'n_excluded'
p22
I0
sS'n_missing'
p23
I30
sS'n_missing_branches'
p24
I0
sbssS'hash'
p25
S'\xe5\xdd\x18{3\xd3\xb5?1\x99\xc3a\xa0\x11\x85\x12'
p26
ssS'qsim_messaging'
p27
(dp28
g6
(dp29
S'par'
p30
I0
sS'html_filename'
p31
S'qsim_messaging.html'
p32
sS'name'
p33
S'qsim.messaging'
p34
sS'nums'
p35
g14
(g15
g16
NtRp36
(dp37
g19
I1
sg20
I0
sg21
I0
sg22
I0
sg23
I0
sg24
I0
sbssg25
S'\xb0\xc8pN\xaf>\xa0\xbaz\x144\xe0A9\xb8?'
p38
ssS'qsim_simulator_config'
p39
(dp40
g6
(dp41
g30
I0
sg31
S'qsim_simulator_config.html'
p42
sg33
S'qsim.simulator.config'
p43
sg35
g14
(g15
g16
NtRp44
(dp45
g19
I1
sg20
I0
sg21
I29
sg22
I0
sg23
I17
sg24
I0
sbssg25
S'\x16\x9bD_w\xde{\xde\x84t`\x98\x83\x08P%'
p46
ssS'qsim_transforms_technical'
p47
(dp48
g6
(dp49
g30
I0
sg31
S'qsim_transforms_technical.html'
p50
sg33
S'qsim.transforms.technical'
p51
sg35
g14
(g15
g16
NtRp52
(dp53
g19
I1
sg20
I0
sg21
I17
sg22
I0
sg23
I13
sg24
I0
sbssg25
S'K\x80\x8cW\xd1\x9c\xb5n~E\x17\xfc\xc03W\x9e'
p54
ssS'qsim'
p55
(dp56
g6
(dp57
g30
I0
sg31
S'qsim.html'
p58
sg33
g55
sg35
g14
(g15
g16
NtRp59
(dp60
g19
I1
sg20
I0
sg21
I0
sg22
I0
sg23
I0
sg24
I0
sbssg25
S'\xb0\xc8pN\xaf>\xa0\xbaz\x144\xe0A9\xb8?'
p61
ssS'qsim_simulator'
p62
(dp63
g6
(dp64
g30
I0
sg31
S'qsim_simulator.html'
p65
sg33
S'qsim.simulator'
p66
sg35
g14
(g15
g16
NtRp67
(dp68
g19
I1
sg20
I0
sg21
I0
sg22
I0
sg23
I0
sg24
I0
sbssg25
S'\xb0\xc8pN\xaf>\xa0\xbaz\x144\xe0A9\xb8?'
p69
ssS'qsim_transforms'
p70
(dp71
g6
(dp72
g30
I0
sg31
S'qsim_transforms.html'
p73
sg33
S'qsim.transforms'
p74
sg35
g14
(g15
g16
NtRp75
(dp76
g19
I1
sg20
I0
sg21
I0
sg22
I0
sg23
I0
sg24
I0
sbssg25
S'\xb0\xc8pN\xaf>\xa0\xbaz\x144\xe0A9\xb8?'
p77
ssS'qsim_util'
p78
(dp79
g6
(dp80
g8
I0
sg9
S'qsim_util.html'
p81
sg11
S'qsim.util'
p82
sg13
g14
(g15
g16
NtRp83
(dp84
g19
I1
sg20
I0
sg21
I103
sg22
I0
sg23
I50
sg24
I0
sbssg25
S'R\xc7\xf4\x8e`\xf2\xb9\xdf9!\tz~\xb3!\xf5'
p85
ssS'qsim_data'
p86
(dp87
g6
(dp88
g30
I0
sg31
S'qsim_data.html'
p89
sg33
S'qsim.data'
p90
sg35
g14
(g15
g16
NtRp91
(dp92
g19
I1
sg20
I0
sg21
I0
sg22
I0
sg23
I0
sg24
I0
sbssg25
S'\xb0\xc8pN\xaf>\xa0\xbaz\x144\xe0A9\xb8?'
p93
ssS'qsim_transforms_base'
p94
(dp95
g6
(dp96
g30
I0
sg31
S'qsim_transforms_base.html'
p97
sg33
S'qsim.transforms.base'
p98
sg35
g14
(g15
g16
NtRp99
(dp100
g19
I1
sg20
I0
sg21
I125
sg22
I0
sg23
I104
sg24
I0
sbssg25
S'-H\xf0H\xd1\xf3\xd1\x98\x10W\xee\xb7\x05\xb9\xcc\x84'
p101
ssS'qsim_simulator_feed'
p102
(dp103
g6
(dp104
g8
I0
sg9
S'qsim_simulator_feed.html'
p105
sg11
S'qsim.simulator.feed'
p106
sg13
g14
(g15
g16
NtRp107
(dp108
g19
I1
sg20
I0
sg21
I71
sg22
I0
sg23
I44
sg24
I0
sbssg25
S'\xa80\x8f\x01i\x08\xdb\xeb\x93\xe9\xe5\xb0\x85#h\xa0'
p109
sssS'version'
p110
S'3.5.1'
p111
sS'settings'
p112
S"\x1e\xe4k\xc4\xf7\x0b\xd1\xf1oH\x02'D|\x0eK"
p113
sS'format'
p114
I1
s.
-275
View File
@@ -1,275 +0,0 @@
/* CSS styles for Coverage. */
/* Page-wide styles */
html, body, h1, h2, h3, p, td, th {
margin: 0;
padding: 0;
border: 0;
outline: 0;
font-weight: inherit;
font-style: inherit;
font-size: 100%;
font-family: inherit;
vertical-align: baseline;
}
/* Set baseline grid to 16 pt. */
body {
font-family: georgia, serif;
font-size: 1em;
}
html>body {
font-size: 16px;
}
/* Set base font size to 12/16 */
p {
font-size: .75em; /* 12/16 */
line-height: 1.3333em; /* 16/12 */
}
table {
border-collapse: collapse;
}
a.nav {
text-decoration: none;
color: inherit;
}
a.nav:hover {
text-decoration: underline;
color: inherit;
}
/* Page structure */
#header {
background: #f8f8f8;
width: 100%;
border-bottom: 1px solid #eee;
}
#source {
padding: 1em;
font-family: "courier new", monospace;
}
#indexfile #footer {
margin: 1em 3em;
}
#pyfile #footer {
margin: 1em 1em;
}
#footer .content {
padding: 0;
font-size: 85%;
font-family: verdana, sans-serif;
color: #666666;
font-style: italic;
}
#index {
margin: 1em 0 0 3em;
}
/* Header styles */
#header .content {
padding: 1em 3em;
}
h1 {
font-size: 1.25em;
}
h2.stats {
margin-top: .5em;
font-size: 1em;
}
.stats span {
border: 1px solid;
padding: .1em .25em;
margin: 0 .1em;
cursor: pointer;
border-color: #999 #ccc #ccc #999;
}
.stats span.hide_run, .stats span.hide_exc,
.stats span.hide_mis, .stats span.hide_par,
.stats span.par.hide_run.hide_par {
border-color: #ccc #999 #999 #ccc;
}
.stats span.par.hide_run {
border-color: #999 #ccc #ccc #999;
}
/* Help panel */
#keyboard_icon {
float: right;
cursor: pointer;
}
.help_panel {
position: absolute;
background: #ffc;
padding: .5em;
border: 1px solid #883;
display: none;
}
#indexfile .help_panel {
width: 20em; height: 4em;
}
#pyfile .help_panel {
width: 16em; height: 8em;
}
.help_panel .legend {
font-style: italic;
margin-bottom: 1em;
}
#panel_icon {
float: right;
cursor: pointer;
}
.keyhelp {
margin: .75em;
}
.keyhelp .key {
border: 1px solid black;
border-color: #888 #333 #333 #888;
padding: .1em .35em;
font-family: monospace;
font-weight: bold;
background: #eee;
}
/* Source file styles */
.linenos p {
text-align: right;
margin: 0;
padding: 0 .5em;
color: #999999;
font-family: verdana, sans-serif;
font-size: .625em; /* 10/16 */
line-height: 1.6em; /* 16/10 */
}
.linenos p.highlight {
background: #ffdd00;
}
.linenos p a {
text-decoration: none;
color: #999999;
}
.linenos p a:hover {
text-decoration: underline;
color: #999999;
}
td.text {
width: 100%;
}
.text p {
margin: 0;
padding: 0 0 0 .5em;
border-left: 2px solid #ffffff;
white-space: nowrap;
}
.text p.mis {
background: #ffdddd;
border-left: 2px solid #ff0000;
}
.text p.run, .text p.run.hide_par {
background: #ddffdd;
border-left: 2px solid #00ff00;
}
.text p.exc {
background: #eeeeee;
border-left: 2px solid #808080;
}
.text p.par, .text p.par.hide_run {
background: #ffffaa;
border-left: 2px solid #eeee99;
}
.text p.hide_run, .text p.hide_exc, .text p.hide_mis, .text p.hide_par,
.text p.hide_run.hide_par {
background: inherit;
}
.text span.annotate {
font-family: georgia;
font-style: italic;
color: #666;
float: right;
padding-right: .5em;
}
.text p.hide_par span.annotate {
display: none;
}
/* Syntax coloring */
.text .com {
color: green;
font-style: italic;
line-height: 1px;
}
.text .key {
font-weight: bold;
line-height: 1px;
}
.text .str {
color: #000080;
}
/* index styles */
#index td, #index th {
text-align: right;
width: 5em;
padding: .25em .5em;
border-bottom: 1px solid #eee;
}
#index th {
font-style: italic;
color: #333;
border-bottom: 1px solid #ccc;
cursor: pointer;
}
#index th:hover {
background: #eee;
border-bottom: 1px solid #999;
}
#index td.left, #index th.left {
padding-left: 0;
}
#index td.right, #index th.right {
padding-right: 0;
}
#index th.headerSortDown, #index th.headerSortUp {
border-bottom: 1px solid #000;
}
#index td.name, #index th.name {
text-align: left;
width: auto;
}
#index td.name a {
text-decoration: none;
color: #000;
}
#index td.name a:hover {
text-decoration: underline;
color: #000;
}
#index tr.total {
}
#index tr.total td {
font-weight: bold;
border-top: 1px solid #ccc;
border-bottom: none;
}
#index tr.file:hover {
background: #eeeeee;
}