--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project/static/js/leaflet.js Mon Jan 30 15:19:23 2012 +0530
@@ -0,0 +1,114 @@
+/*
+ Copyright (c) 2010-2011, CloudMade, Vladimir Agafonkin
+ Leaflet is a BSD-licensed JavaScript library for map display and interaction.
+ See http://cloudmade.github.com/Leaflet/ for more information.
+*/
+(function(a){var b={VERSION:"0.2",ROOT_URL:function(){for(var a=document.getElementsByTagName("script"),b=/^(.*\/)leaflet-?([\w-]*)\.js.*$/,e=0,f=a.length;e<f;e++){var g=a[e].src;if(g=g&&g.match(b)){if(g[2]=="include")break;return g[1]}}return"../../dist/"}(),noConflict:function(){a.L=this._originalL;return this},_originalL:a.L};window.L=b})(this);L.Util={extend:function(a){for(var b=Array.prototype.slice.call(arguments,1),c=0,d=b.length,e;c<d;c++){e=b[c]||{};for(var f in e)e.hasOwnProperty(f)&&(a[f]=e[f])}return a},bind:function(a,b){return function(){return a.apply(b,arguments)}},stamp:function(){var a=0;return function(b){b._leaflet_id=b._leaflet_id||++a;return b._leaflet_id}}(),requestAnimFrame:function(){function a(a){window.setTimeout(a,1E3/60)}var b=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||
+window.oRequestAnimationFrame||window.msRequestAnimationFrame||a;return function(c,d,e){c=d?L.Util.bind(c,d):d;e&&b===a?c():b(c)}}(),limitExecByInterval:function(a,b,c){function d(){e=!1;f&&(g.callee.apply(c,g),f=!1)}var e,f,g;return function(){g=arguments;e?f=!0:(e=!0,setTimeout(d,b),a.apply(c,g))}},falseFn:function(){return!1},formatNum:function(a,b){var c=Math.pow(10,b||5);return Math.round(a*c)/c},setOptions:function(a,b){a.options=L.Util.extend({},a.options,b)},getParamString:function(a){var b=
+[],c;for(c in a)a.hasOwnProperty(c)&&b.push(c+"="+a[c]);return"?"+b.join("&")}};L.Class=function(){};
+L.Class.extend=function(a){var b=function(){!L.Class._prototyping&&this.initialize&&this.initialize.apply(this,arguments)};L.Class._prototyping=!0;var c=new this;L.Class._prototyping=!1;c.constructor=b;b.prototype=c;c.superclass=this.prototype;a.statics&&(L.Util.extend(b,a.statics),delete a.statics);a.includes&&(L.Util.extend.apply(null,[c].concat(a.includes)),delete a.includes);if(a.options&&c.options)a.options=L.Util.extend({},c.options,a.options);L.Util.extend(c,a);b.extend=arguments.callee;b.include=
+function(a){L.Util.extend(this.prototype,a)};for(var d in this)this.hasOwnProperty(d)&&d!="prototype"&&(b[d]=this[d]);return b};L.Mixin={};
+L.Mixin.Events={addEventListener:function(a,b,c){var d=this._leaflet_events=this._leaflet_events||{};d[a]=d[a]||[];d[a].push({action:b,context:c});return this},hasEventListeners:function(a){return"_leaflet_events"in this&&a in this._leaflet_events&&this._leaflet_events[a].length>0},removeEventListener:function(a,b,c){if(!this.hasEventListeners(a))return this;for(var d=0,e=this._leaflet_events,f=e[a].length;d<f;d++)if(e[a][d].action===b&&(!c||e[a][d].context===c)){e[a].splice(d,1);break}return this},fireEvent:function(a,
+b){if(this.hasEventListeners(a)){for(var c=L.Util.extend({type:a,target:this},b),d=this._leaflet_events[a].slice(),e=0,f=d.length;e<f;e++)d[e].action.call(d[e].context||this,c);return this}}};L.Mixin.Events.on=L.Mixin.Events.addEventListener;L.Mixin.Events.off=L.Mixin.Events.removeEventListener;L.Mixin.Events.fire=L.Mixin.Events.fireEvent;(function(){var a=navigator.userAgent.toLowerCase(),b=!!window.ActiveXObject,c=a.indexOf("webkit")!=-1,d=a.indexOf("mobi")!=-1,e=a.indexOf("android")!=-1,f=window.opera;L.Browser={ie:b,ie6:b&&!window.XMLHttpRequest,webkit:c,webkit3d:c&&"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix,mobileWebkit:c&&(d||e),mobileOpera:d&&f,gecko:a.indexOf("gecko")!=-1,android:e};L.Browser.touch=L.Browser.mobileWebkit||L.Browser.mobileOpera})();L.Point=function(a,b,c){this.x=c?Math.round(a):a;this.y=c?Math.round(b):b};
+L.Point.prototype={add:function(a){return this.clone()._add(a)},_add:function(a){this.x+=a.x;this.y+=a.y;return this},subtract:function(a){return this.clone()._subtract(a)},_subtract:function(a){this.x-=a.x;this.y-=a.y;return this},divideBy:function(a,b){return new L.Point(this.x/a,this.y/a,b)},multiplyBy:function(a){return new L.Point(this.x*a,this.y*a)},distanceTo:function(a){var b=a.x-this.x,a=a.y-this.y;return Math.sqrt(b*b+a*a)},round:function(){return this.clone()._round()},_round:function(){this.x=
+Math.round(this.x);this.y=Math.round(this.y);return this},clone:function(){return new L.Point(this.x,this.y)},toString:function(){return"Point("+L.Util.formatNum(this.x)+", "+L.Util.formatNum(this.y)+")"}};L.Bounds=L.Class.extend({initialize:function(a,b){if(a)for(var c=a instanceof Array?a:[a,b],d=0,e=c.length;d<e;d++)this.extend(c[d])},extend:function(a){!this.min&&!this.max?(this.min=new L.Point(a.x,a.y),this.max=new L.Point(a.x,a.y)):(this.min.x=Math.min(a.x,this.min.x),this.max.x=Math.max(a.x,this.max.x),this.min.y=Math.min(a.y,this.min.y),this.max.y=Math.max(a.y,this.max.y))},getCenter:function(a){return new L.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,a)},contains:function(a){var b;
+if(a instanceof L.Bounds)b=a.min,a=a.max;return b.x>=this.min.x&&a.x<=this.max.x&&b.y>=this.min.y&&a.y<=this.max.y}});L.Transformation=L.Class.extend({initialize:function(a,b,c,d){this._a=a;this._b=b;this._c=c;this._d=d},transform:function(a,b){return this._transform(a.clone(),b)},_transform:function(a,b){b=b||1;a.x=b*(this._a*a.x+this._b);a.y=b*(this._c*a.y+this._d);return a},untransform:function(a,b){b=b||1;return new L.Point((a.x/b-this._b)/this._a,(a.y/b-this._d)/this._c)}});L.LineUtil={simplify:function(a,b){if(!b)return a.slice();a=this.reducePoints(a,b);return a=this.simplifyDP(a,b)},pointToSegmentDistance:function(a,b,c){return Math.sqrt(this._sqPointToSegmentDist(a,b,c))},simplifyDP:function(a,b){for(var c=0,d=0,e=b*b,f=1,g=a.length,h;f<g-1;f++)h=this._sqPointToSegmentDist(a[f],a[0],a[g-1]),h>c&&(d=f,c=h);return c>=e?(c=a.slice(0,d),d=a.slice(d),g=this.simplifyDP(c,b).slice(0,g-2),d=this.simplifyDP(d,b),g.concat(d)):[a[0],a[g-1]]},reducePoints:function(a,b){for(var c=
+[a[0]],d=b*b,e=1,f=0,g=a.length;e<g;e++)this._sqDist(a[e],a[f])<d||(c.push(a[e]),f=e);f<g-1&&c.push(a[g-1]);return c},clipSegment:function(a,b,c,d){var d=d?this._lastCode:this._getBitCode(a,c),e=this._getBitCode(b,c);for(this._lastCode=e;;)if(d|e)if(d&e)return!1;else{var f=d||e,g=this._getEdgeIntersection(a,b,f,c),h=this._getBitCode(g,c);f==d?(a=g,d=h):(b=g,e=h)}else return[a,b]},_getEdgeIntersection:function(a,b,c,d){var e=b.x-a.x,b=b.y-a.y,f=d.min,d=d.max;if(c&8)return new L.Point(a.x+e*(d.y-a.y)/
+b,d.y);else if(c&4)return new L.Point(a.x+e*(f.y-a.y)/b,f.y);else if(c&2)return new L.Point(d.x,a.y+b*(d.x-a.x)/e);else if(c&1)return new L.Point(f.x,a.y+b*(f.x-a.x)/e)},_getBitCode:function(a,b){var c=0;a.x<b.min.x?c|=1:a.x>b.max.x&&(c|=2);a.y<b.min.y?c|=4:a.y>b.max.y&&(c|=8);return c},_sqDist:function(a,b){var c=b.x-a.x,d=b.y-a.y;return c*c+d*d},_sqPointToSegmentDist:function(a,b,c){var d=c.x-b.x,e=c.y-b.y;if(!d&&!e)return this._sqDist(a,b);var f=((a.x-b.x)*d+(a.y-b.y)*e)/this._sqDist(b,c);if(f<
+0)return this._sqDist(a,b);if(f>1)return this._sqDist(a,c);b=new L.Point(b.x+d*f,b.y+e*f);return this._sqDist(a,b)}};L.PolyUtil={};L.PolyUtil.clipPolygon=function(a,b){var c,d=[1,4,2,8],e,f,g,h,j,k,l=L.LineUtil;e=0;for(j=a.length;e<j;e++)a[e]._code=l._getBitCode(a[e],b);for(g=0;g<4;g++){k=d[g];c=[];e=0;j=a.length;for(f=j-1;e<j;f=e++)if(h=a[e],f=a[f],h._code&k){if(!(f._code&k))f=l._getEdgeIntersection(f,h,k,b),f._code=l._getBitCode(f,b),c.push(f)}else{if(f._code&k)f=l._getEdgeIntersection(f,h,k,b),f._code=l._getBitCode(f,b),c.push(f);c.push(h)}a=c}return a};L.DomEvent={addListener:function(a,b,c,d){function e(b){return c.call(d||a,b||L.DomEvent._getEvent())}var f=L.Util.stamp(c);if(L.Browser.touch&&b=="dblclick"&&this.addDoubleTapListener)this.addDoubleTapListener(a,e,f);else if("addEventListener"in a)if(b=="mousewheel")a.addEventListener("DOMMouseScroll",e,!1),a.addEventListener(b,e,!1);else if(b=="mouseenter"||b=="mouseleave"){var g=e,e=function(b){if(L.DomEvent._checkMouse(a,b))return g(b)};a.addEventListener(b=="mouseenter"?"mouseover":"mouseout",
+e,!1)}else a.addEventListener(b,e,!1);else"attachEvent"in a&&a.attachEvent("on"+b,e);a["_leaflet_"+b+f]=e},removeListener:function(a,b,c){var c=L.Util.stamp(c),d="_leaflet_"+b+c;handler=a[d];L.Browser.mobileWebkit&&b=="dblclick"&&this.removeDoubleTapListener?this.removeDoubleTapListener(a,c):"removeEventListener"in a?b=="mousewheel"?(a.removeEventListener("DOMMouseScroll",handler,!1),a.removeEventListener(b,handler,!1)):b=="mouseenter"||b=="mouseleave"?a.removeEventListener(b=="mouseenter"?"mouseover":
+"mouseout",handler,!1):a.removeEventListener(b,handler,!1):"detachEvent"in a&&a.detachEvent("on"+b,handler);a[d]=null},_checkMouse:function(a,b){var c=b.relatedTarget;if(!c)return!0;try{for(;c&&c!=a;)c=c.parentNode}catch(d){return!1}return c!=a},_getEvent:function(){var a=window.event;if(!a)for(var b=arguments.callee.caller;b;){if((a=b.arguments[0])&&Event==a.constructor)break;b=b.caller}return a},stopPropagation:function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},disableClickPropagation:function(a){L.DomEvent.addListener(a,
+"mousedown",L.DomEvent.stopPropagation);L.DomEvent.addListener(a,"click",L.DomEvent.stopPropagation);L.DomEvent.addListener(a,"dblclick",L.DomEvent.stopPropagation)},preventDefault:function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},stop:function(a){L.DomEvent.preventDefault(a);L.DomEvent.stopPropagation(a)},getMousePosition:function(a,b){var c=new L.Point(a.pageX?a.pageX:a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,a.pageY?a.pageY:a.clientY+document.body.scrollTop+
+document.documentElement.scrollTop);return b?c.subtract(L.DomUtil.getCumulativeOffset(b)):c},getWheelDelta:function(a){var b=0;a.wheelDelta&&(b=a.wheelDelta/120);a.detail&&(b=-a.detail/3);return b}};L.Util.extend(L.DomEvent,{addDoubleTapListener:function(a,b,c){function d(a){if(a.touches.length==1){var b=Date.now(),c=b-(f||b);j=a.touches[0];g=c>0&&c<=h;f=b}}function e(){if(g)j.type="dblclick",b(j),f=null}var f,g=!1,h=250,j;a["_leaflet_touchstart"+c]=d;a["_leaflet_touchend"+c]=e;a.addEventListener("touchstart",d,!1);a.addEventListener("touchend",e,!1)},removeDoubleTapListener:function(a,b){a.removeEventListener(a,a["_leaflet_touchstart"+b],!1);a.removeEventListener(a,a["_leaflet_touchend"+b],
+!1)}});L.DomUtil={get:function(a){return typeof a=="string"?document.getElementById(a):a},getStyle:function(a,b){var c=a.style[b];!c&&a.currentStyle&&(c=a.currentStyle[b]);if(!c||c=="auto")c=(c=document.defaultView.getComputedStyle(a,null))?c[b]:null;return c=="auto"?null:c},getCumulativeOffset:function(a){var b=0,c=0;do b+=a.offsetTop||0,c+=a.offsetLeft||0,a=a.offsetParent;while(a);return new L.Point(c,b)},create:function(a,b,c){a=document.createElement(a);a.className=b;c&&c.appendChild(a);return a},disableTextSelection:function(){document.selection&&
+document.selection.empty&&document.selection.empty();if(!this._onselectstart)this._onselectstart=document.onselectstart,document.onselectstart=L.Util.falseFn},enableTextSelection:function(){document.onselectstart=this._onselectstart;this._onselectstart=null},CLASS_RE:/(\\s|^)'+cls+'(\\s|$)/,hasClass:function(a,b){return a.className.length>0&&RegExp("(^|\\s)"+b+"(\\s|$)").test(a.className)},addClass:function(a,b){L.DomUtil.hasClass(a,b)||(a.className+=(a.className?" ":"")+b)},setOpacity:function(a,
+b){L.Browser.ie?a.style.filter="alpha(opacity="+Math.round(b*100)+")":a.style.opacity=b},testProp:function(a){for(var b=document.documentElement.style,c=0;c<a.length;c++)if(a[c]in b)return a[c];return!1},getTranslateString:function(a){return L.DomUtil.TRANSLATE_OPEN+a.x+"px,"+a.y+"px"+L.DomUtil.TRANSLATE_CLOSE},getScaleString:function(a,b){return L.DomUtil.getTranslateString(b)+" scale("+a+") "+L.DomUtil.getTranslateString(b.multiplyBy(-1))},setPosition:function(a,b){a._leaflet_pos=b;L.Browser.webkit?
+a.style[L.DomUtil.TRANSFORM]=L.DomUtil.getTranslateString(b):(a.style.left=b.x+"px",a.style.top=b.y+"px")},getPosition:function(a){return a._leaflet_pos}};
+L.Util.extend(L.DomUtil,{TRANSITION:L.DomUtil.testProp(["transition","webkitTransition","OTransition","MozTransition","msTransition"]),TRANSFORM:L.DomUtil.testProp(["transformProperty","WebkitTransform","OTransform","MozTransform","msTransform"]),TRANSLATE_OPEN:"translate"+(L.Browser.webkit3d?"3d(":"("),TRANSLATE_CLOSE:L.Browser.webkit3d?",0)":")"});L.Draggable=L.Class.extend({includes:L.Mixin.Events,statics:{START:L.Browser.touch?"touchstart":"mousedown",END:L.Browser.touch?"touchend":"mouseup",MOVE:L.Browser.touch?"touchmove":"mousemove",TAP_TOLERANCE:15},initialize:function(a,b){this._element=a;this._dragStartTarget=b||a},enable:function(){if(!this._enabled)L.DomEvent.addListener(this._dragStartTarget,L.Draggable.START,this._onDown,this),this._enabled=!0},disable:function(){if(this._enabled)L.DomEvent.removeListener(this._dragStartTarget,
+L.Draggable.START,this._onDown),this._enabled=!1},_onDown:function(a){if(!(a.shiftKey||a.which!=1&&a.button!=1&&!a.touches)&&!(a.touches&&a.touches.length>1)){var b=a.touches&&a.touches.length==1?a.touches[0]:a;L.DomEvent.preventDefault(a);L.Browser.mobileWebkit&&(b.target.className+=" leaflet-active");this._moved=!1;L.DomUtil.disableTextSelection();this._setMovingCursor();this._startPos=this._newPos=L.DomUtil.getPosition(this._element);this._startPoint=new L.Point(b.clientX,b.clientY);L.DomEvent.addListener(document,
+L.Draggable.MOVE,this._onMove,this);L.DomEvent.addListener(document,L.Draggable.END,this._onUp,this)}},_onMove:function(a){if(!(a.touches&&a.touches.length>1)){L.DomEvent.preventDefault(a);a=a.touches&&a.touches.length==1?a.touches[0]:a;if(!this._moved)this.fire("dragstart"),this._moved=!0;this._newPos=this._startPos.add(new L.Point(a.clientX,a.clientY)).subtract(this._startPoint);L.Util.requestAnimFrame(this._updatePosition,this,!0);this.fire("drag")}},_updatePosition:function(){L.DomUtil.setPosition(this._element,
+this._newPos)},_onUp:function(a){if(a.changedTouches){var a=a.changedTouches[0],b=a.target,c=this._newPos&&this._newPos.distanceTo(this._startPos)||0;b.className=b.className.replace(" leaflet-active","");c<L.Draggable.TAP_TOLERANCE&&this._simulateEvent("click",a)}L.DomUtil.enableTextSelection();this._restoreCursor();L.DomEvent.removeListener(document,L.Draggable.MOVE,this._onMove);L.DomEvent.removeListener(document,L.Draggable.END,this._onUp);this._moved&&this.fire("dragend")},_removeActiveClass:function(){},
+_setMovingCursor:function(){this._bodyCursor=document.body.style.cursor;document.body.style.cursor="move"},_restoreCursor:function(){document.body.style.cursor=this._bodyCursor},_simulateEvent:function(a,b){var c=document.createEvent("MouseEvent");c.initMouseEvent(a,!0,!0,window,1,b.screenX,b.screenY,b.clientX,b.clientY,!1,!1,!1,!1,0,null);b.target.dispatchEvent(c)}});L.Transition=L.Class.extend({includes:L.Mixin.Events,statics:{CUSTOM_PROPS_SETTERS:{position:L.DomUtil.setPosition},implemented:function(){return L.Transition.NATIVE||L.Transition.TIMER}},options:{easing:"ease",duration:0.5},_setProperty:function(a,b){var c=L.Transition.CUSTOM_PROPS_SETTERS;if(a in c)c[a](this._el,b);else this._el.style[a]=b}});L.Transition=L.Transition.extend({statics:function(){var a=L.DomUtil.TRANSITION;return{NATIVE:!!a,TRANSITION:a,PROPERTY:a+"Property",DURATION:a+"Duration",EASING:a+"TimingFunction",END:a=="webkitTransition"||a=="OTransition"?a+"End":"transitionend",CUSTOM_PROPS_PROPERTIES:{position:L.Browser.webkit?L.DomUtil.TRANSFORM:"top, left"}}}(),options:{fakeStepInterval:100},initialize:function(a,b){this._el=a;L.Util.setOptions(this,b);L.DomEvent.addListener(a,L.Transition.END,this._onTransitionEnd,this);this._onFakeStep=
+L.Util.bind(this._onFakeStep,this)},run:function(a){var b,c=[],d=L.Transition.CUSTOM_PROPS_PROPERTIES;for(b in a)a.hasOwnProperty(b)&&(b=d[b]?d[b]:b,b=b.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()}),c.push(b));this._el.style[L.Transition.DURATION]=this.options.duration+"s";this._el.style[L.Transition.EASING]=this.options.easing;this._el.style[L.Transition.PROPERTY]=c.join(", ");for(b in a)a.hasOwnProperty(b)&&this._setProperty(b,a[b]);this._inProgress=!0;this.fire("start");L.Transition.NATIVE?
+this._timer=setInterval(this._onFakeStep,this.options.fakeStepInterval):this._onTransitionEnd()},_onFakeStep:function(){this.fire("step")},_onTransitionEnd:function(){if(this._inProgress)this._inProgress=!1,clearInterval(this._timer),this._el.style[L.Transition.PROPERTY]="none",this.fire("step"),this.fire("end")}});L.Transition=L.Transition.NATIVE?L.Transition:L.Transition.extend({statics:{getTime:Date.now||function(){return+new Date},TIMER:!0,EASINGS:{ease:[0.25,0.1,0.25,1],linear:[0,0,1,1],"ease-in":[0.42,0,1,1],"ease-out":[0,0,0.58,1],"ease-in-out":[0.42,0,0.58,1]},CUSTOM_PROPS_GETTERS:{position:L.DomUtil.getPosition},UNIT_RE:/^[\d\.]+(\D*)$/},options:{fps:50},initialize:function(a,b){this._el=a;L.Util.extend(this.options,b);var c=L.Transition.EASINGS[this.options.easing]||L.Transition.EASINGS.ease;this._p1=
+new L.Point(0,0);this._p2=new L.Point(c[0],c[1]);this._p3=new L.Point(c[2],c[3]);this._p4=new L.Point(1,1);this._step=L.Util.bind(this._step,this);this._interval=Math.round(1E3/this.options.fps)},run:function(a){this._props={};var b=L.Transition.CUSTOM_PROPS_GETTERS,c=L.Transition.UNIT_RE;this.fire("start");for(var d in a)if(a.hasOwnProperty(d)){var e={};if(d in b)e.from=b[d](this._el);else{var f=this._el.style[d].match(c);e.from=parseFloat(f[0]);e.unit=f[1]}e.to=a[d];this._props[d]=e}clearInterval(this._timer);
+this._timer=setInterval(this._step,this._interval);this._startTime=L.Transition.getTime()},_step:function(){var a=L.Transition.getTime()-this._startTime,b=this.options.duration*1E3;a<b?this._runFrame(this._cubicBezier(a/b)):(this._runFrame(1),this._complete())},_runFrame:function(a){var b=L.Transition.CUSTOM_PROPS_SETTERS,c,d;for(c in this._props)this._props.hasOwnProperty(c)&&(d=this._props[c],c in b?(d=d.to.subtract(d.from).multiplyBy(a).add(d.from),b[c](this._el,d)):this._el.style[c]=(d.to-d.from)*
+a+d.from+d.unit);this.fire("step")},_complete:function(){clearInterval(this._timer);this.fire("end")},_cubicBezier:function(a){var b=3*Math.pow(1-a,2)*a,c=3*(1-a)*Math.pow(a,2),d=Math.pow(a,3),a=this._p1.multiplyBy(Math.pow(1-a,3)),b=this._p2.multiplyBy(b),c=this._p3.multiplyBy(c),d=this._p4.multiplyBy(d);return a.add(b).add(c).add(d).y}});L.LatLng=function(a,b,c){c!==!0&&(a=Math.max(Math.min(a,90),-90),b=(b+180)%360+(b<-180?180:-180));this.lat=a;this.lng=b};L.Util.extend(L.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1.0E-9});L.LatLng.prototype={equals:function(a){if(!(a instanceof L.LatLng))return!1;return Math.max(Math.abs(this.lat-a.lat),Math.abs(this.lng-a.lng))<=L.LatLng.MAX_MARGIN},toString:function(){return"LatLng("+L.Util.formatNum(this.lat)+", "+L.Util.formatNum(this.lng)+")"}};L.LatLngBounds=L.Class.extend({initialize:function(a,b){if(a)for(var c=a instanceof Array?a:[a,b],d=0,e=c.length;d<e;d++)this.extend(c[d])},extend:function(a){!this._southWest&&!this._northEast?(this._southWest=new L.LatLng(a.lat,a.lng),this._northEast=new L.LatLng(a.lat,a.lng)):(this._southWest.lat=Math.min(a.lat,this._southWest.lat),this._southWest.lng=Math.min(a.lng,this._southWest.lng),this._northEast.lat=Math.max(a.lat,this._northEast.lat),this._northEast.lng=Math.max(a.lng,this._northEast.lng))},
+getCenter:function(){return new L.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new L.LatLng(this._northEast.lat,this._southWest.lng)},getSouthEast:function(){return new L.LatLng(this._southWest.lat,this._northEast.lng)},contains:function(a){var b=this._southWest,c=this._northEast,d;a instanceof L.LatLngBounds?(d=a.getSouthWest(),
+a=a.getNorthEast()):d=a;return d.lat>=b.lat&&a.lat<=c.lat&&d.lng>=b.lng&&a.lng<=c.lng}});L.Projection={};L.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(a){var b=L.LatLng.DEG_TO_RAD,c=this.MAX_LATITUDE,d=a.lng*b,a=Math.max(Math.min(c,a.lat),-c)*b,a=Math.log(Math.tan(Math.PI/4+a/2));return new L.Point(d,a)},unproject:function(a,b){var c=L.LatLng.RAD_TO_DEG;return new L.LatLng((2*Math.atan(Math.exp(a.y))-Math.PI/2)*c,a.x*c,b)}};L.Projection.LonLat={project:function(a){return new L.Point(a.lng,a.lat)},unproject:function(a,b){return new L.LatLng(a.y,a.x,b)}};L.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.3142,R_MAJOR:6378137,project:function(a){var b=L.LatLng.DEG_TO_RAD,c=this.MAX_LATITUDE,d=this.R_MAJOR,e=a.lng*b*d,a=Math.max(Math.min(c,a.lat),-c)*b,b=this.R_MINOR/d,b=Math.sqrt(1-b*b),c=b*Math.sin(a),c=Math.pow((1-c)/(1+c),b*0.5),a=-d*Math.log(Math.tan(0.5*(Math.PI*0.5-a))/c);return new L.Point(e,a)},unproject:function(a,b){for(var c=L.LatLng.RAD_TO_DEG,d=this.R_MAJOR,e=a.x*c/d,f=this.R_MINOR/d,f=Math.sqrt(1-f*f),d=Math.exp(-a.y/d),
+g=Math.PI/2-2*Math.atan(d),h=15,j=0.1;Math.abs(j)>1.0E-7&&--h>0;)j=f*Math.sin(g),j=Math.PI/2-2*Math.atan(d*Math.pow((1-j)/(1+j),0.5*f))-g,g+=j;return new L.LatLng(g*c,e,b)}};L.CRS={latLngToPoint:function(a,b){return this.transformation._transform(this.projection.project(a),b)},pointToLatLng:function(a,b,c){return this.projection.unproject(this.transformation.untransform(a,b),c)},project:function(a){return this.projection.project(a)}};L.CRS.EPSG3857=L.Util.extend({},L.CRS,{code:"EPSG:3857",projection:L.Projection.SphericalMercator,transformation:new L.Transformation(0.5/Math.PI,0.5,-0.5/Math.PI,0.5),project:function(a){return this.projection.project(a).multiplyBy(6378137)}});L.CRS.EPSG900913=L.Util.extend({},L.CRS.EPSG3857,{code:"EPSG:900913"});L.CRS.EPSG4326=L.Util.extend({},L.CRS,{code:"EPSG:4326",projection:L.Projection.LonLat,transformation:new L.Transformation(1/360,0.5,-1/360,0.5)});L.CRS.EPSG3395=L.Util.extend({},L.CRS,{code:"EPSG:3395",projection:L.Projection.Mercator,transformation:function(){var a=L.Projection.Mercator;return new L.Transformation(0.5/(Math.PI*a.R_MAJOR),0.5,-0.5/(Math.PI*a.R_MINOR),0.5)}()});L.LayerGroup=L.Class.extend({initialize:function(a){this._layers={};if(a)for(var b=0,c=a.length;b<c;b++)this.addLayer(a[b])},addLayer:function(a){this._layers[L.Util.stamp(a)]=a;this._map&&this._map.addLayer(a);return this},removeLayer:function(a){delete this._layers[L.Util.stamp(a)];this._map&&this._map.removeLayer(a);return this},clearLayers:function(){this._iterateLayers(this.removeLayer,this);return this},onAdd:function(a){this._map=a;this._iterateLayers(a.addLayer,a)},onRemove:function(a){this._iterateLayers(a.removeLayer,
+a);delete this._map},_iterateLayers:function(a,b){for(var c in this._layers)this._layers.hasOwnProperty(c)&&a.call(b,this._layers[c])}});L.FeatureGroup=L.LayerGroup.extend({includes:L.Mixin.Events,addLayer:function(a){this._initEvents(a);L.LayerGroup.prototype.addLayer.call(this,a);this._popupContent&&a.bindPopup&&a.bindPopup(this._popupContent)},bindPopup:function(a){this._popupContent=a;for(var b in this._layers)this._layers.hasOwnProperty(b)&&this._layers[b].bindPopup&&this._layers[b].bindPopup(a)},_events:["click","dblclick","mouseover","mouseout"],_initEvents:function(a){for(var b=0,c=this._events.length;b<c;b++)a.on(this._events[b],
+this._propagateEvent,this)},_propagateEvent:function(a){a.layer=a.target;a.target=this;this.fire(a.type,a)}});L.TileLayer=L.Class.extend({includes:L.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",opacity:1,scheme:"xyz",noWrap:!1,unloadInvisibleTiles:L.Browser.mobileWebkit,updateWhenIdle:L.Browser.mobileWebkit},initialize:function(a,b){L.Util.setOptions(this,b);this._url=a;if(typeof this.options.subdomains=="string")this.options.subdomains=this.options.subdomains.split("")},onAdd:function(a){this._map=a;this._initContainer();this._createTileProto();
+a.on("viewreset",this._reset,this);if(this.options.updateWhenIdle)a.on("moveend",this._update,this);else this._limitedUpdate=L.Util.limitExecByInterval(this._update,100,this),a.on("move",this._limitedUpdate,this);this._reset();this._update()},onRemove:function(){this._map.getPanes().tilePane.removeChild(this._container);this._container=null;this._map.off("viewreset",this._reset,this);this.options.updateWhenIdle?this._map.off("moveend",this._update,this):this._map.off("move",this._limitedUpdate,this)},
+getAttribution:function(){return this.options.attribution},setOpacity:function(a){this.options.opacity=a;this._setOpacity(a);if(L.Browser.webkit)for(i in this._tiles)this._tiles[i].style.webkitTransform+=" translate(0,0)"},_setOpacity:function(a){a<1&&L.DomUtil.setOpacity(this._container,a)},_initContainer:function(){var a=this._map.getPanes().tilePane;if(!this._container||a.empty)this._container=L.DomUtil.create("div","leaflet-layer",a),this._setOpacity(this.options.opacity)},_reset:function(){this._tiles=
+{};this._initContainer();this._container.innerHTML=""},_update:function(){var a=this._map.getPixelBounds(),b=this.options.tileSize,c=new L.Point(Math.floor(a.min.x/b),Math.floor(a.min.y/b)),a=new L.Point(Math.floor(a.max.x/b),Math.floor(a.max.y/b)),c=new L.Bounds(c,a);this._addTilesFromCenterOut(c);this.options.unloadInvisibleTiles&&this._removeOtherTiles(c)},_addTilesFromCenterOut:function(a){for(var b=[],c=a.getCenter(),d=a.min.y;d<=a.max.y;d++)for(var e=a.min.x;e<=a.max.x;e++)e+":"+d in this._tiles||
+b.push(new L.Point(e,d));b.sort(function(a,b){return a.distanceTo(c)-b.distanceTo(c)});this._tilesToLoad=b.length;a=0;for(d=this._tilesToLoad;a<d;a++)this._addTile(b[a])},_removeOtherTiles:function(a){var b,c,d;for(d in this._tiles)if(this._tiles.hasOwnProperty(d)&&(b=d.split(":"),c=parseInt(b[0],10),b=parseInt(b[1],10),c<a.min.x||c>a.max.x||b<a.min.y||b>a.max.y))this._tiles[d].src="",this._tiles[d].parentNode==this._container&&this._container.removeChild(this._tiles[d]),delete this._tiles[d]},_addTile:function(a){var b=
+this._getTilePos(a),c=this._map.getZoom(),d=a.x+":"+a.y,e=1<<c;if(!this.options.noWrap)a.x=(a.x%e+e)%e;if(!(a.y<0||a.y>=e)){var f=this._createTile();L.DomUtil.setPosition(f,b);this._tiles[d]=f;if(this.options.scheme=="tms")a.y=e-a.y-1;this._loadTile(f,a,c);this._container.appendChild(f)}},_getTilePos:function(a){var b=this._map.getPixelOrigin();return a.multiplyBy(this.options.tileSize).subtract(b)},getTileUrl:function(a,b){return this._url.replace("{s}",this.options.subdomains[(a.x+a.y)%this.options.subdomains.length]).replace("{z}",
+b).replace("{x}",a.x).replace("{y}",a.y)},_createTileProto:function(){this._tileImg=L.DomUtil.create("img","leaflet-tile");this._tileImg.galleryimg="no";var a=this.options.tileSize;this._tileImg.style.width=a+"px";this._tileImg.style.height=a+"px"},_createTile:function(){var a=this._tileImg.cloneNode(!1);a.onselectstart=a.onmousemove=L.Util.falseFn;return a},_loadTile:function(a,b,c){a._layer=this;a.onload=this._tileOnLoad;a.onerror=this._tileOnError;a.src=this.getTileUrl(b,c)},_tileOnLoad:function(){var a=
+this._layer;this.className+=" leaflet-tile-loaded";a.fire("tileload",{tile:this,url:this.src});a._tilesToLoad--;a._tilesToLoad||a.fire("load")},_tileOnError:function(){var a=this._layer;a.fire("tileerror",{tile:this,url:this.src});if(a=a.options.errorTileUrl)this.src=a}});L.TileLayer.WMS=L.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(a,b){this._url=a;this.wmsParams=L.Util.extend({},this.defaultWmsParams);this.wmsParams.width=this.wmsParams.height=this.options.tileSize;for(var c in b)this.options.hasOwnProperty(c)||(this.wmsParams[c]=b[c]);L.Util.setOptions(this,b)},onAdd:function(a){this.wmsParams[parseFloat(this.wmsParams.version)>=1.3?"crs":"srs"]=a.options.crs.code;
+L.TileLayer.prototype.onAdd.call(this,a)},getTileUrl:function(a){var b=this.options.tileSize,a=a.multiplyBy(b),b=a.add(new L.Point(b,b)),a=this._map.unproject(a,this._zoom,!0),b=this._map.unproject(b,this._zoom,!0),a=this._map.options.crs.project(a),b=this._map.options.crs.project(b),b=[a.x,b.y,b.x,a.y].join(",");return this._url+L.Util.getParamString(this.wmsParams)+"&bbox="+b}});L.TileLayer.Canvas=L.TileLayer.extend({options:{async:!1},initialize:function(a){L.Util.setOptions(this,a)},_createTileProto:function(){this._canvasProto=L.DomUtil.create("canvas","leaflet-tile");var a=this.options.tileSize;this._canvasProto.width=a;this._canvasProto.height=a},_createTile:function(){var a=this._canvasProto.cloneNode(!1);a.onselectstart=a.onmousemove=L.Util.falseFn;return a},_loadTile:function(a,b,c){a._layer=this;this.drawTile(a,b,c);this.options.async||this.tileDrawn(a)},drawTile:function(){},
+tileDrawn:function(a){this._tileOnLoad.call(a)}});L.ImageOverlay=L.Class.extend({includes:L.Mixin.Events,initialize:function(a,b){this._url=a;this._bounds=b},onAdd:function(a){this._map=a;this._image||this._initImage();a.getPanes().overlayPane.appendChild(this._image);a.on("viewreset",this._reset,this);this._reset()},onRemove:function(a){a.getPanes().overlayPane.removeChild(this._image);a.off("viewreset",this._reset,this)},_initImage:function(){this._image=L.DomUtil.create("img","leaflet-image-layer");this._image.style.visibility="hidden";L.Util.extend(this._image,
+{galleryimg:"no",onselectstart:L.Util.falseFn,onmousemove:L.Util.falseFn,onload:this._onImageLoad,src:this._url})},_reset:function(){var a=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),b=this._map.latLngToLayerPoint(this._bounds.getSouthEast()).subtract(a);L.DomUtil.setPosition(this._image,a);this._image.style.width=b.x+"px";this._image.style.height=b.y+"px"},_onImageLoad:function(){this.style.visibility=""}});L.Popup=L.Class.extend({includes:L.Mixin.Events,options:{maxWidth:300,autoPan:!0,closeButton:!0,offset:new L.Point(0,2),autoPanPadding:new L.Point(5,5)},initialize:function(a){L.Util.setOptions(this,a)},onAdd:function(a){this._map=a;this._container||this._initLayout();this._updateContent();this._container.style.opacity="0";this._map._panes.popupPane.appendChild(this._container);this._map.on("viewreset",this._updatePosition,this);if(this._map.options.closePopupOnClick)this._map.on("preclick",this._close,
+this);this._update();this._container.style.opacity="1";this._opened=!0},onRemove:function(a){a._panes.popupPane.removeChild(this._container);a.off("viewreset",this._updatePosition,this);a.off("click",this._close,this);this._container.style.opacity="0";this._opened=!1},setLatLng:function(a){this._latlng=a;this._opened&&this._update();return this},setContent:function(a){this._content=a;this._opened&&this._update();return this},_close:function(){this._opened&&this._map.removeLayer(this)},_initLayout:function(){this._container=
+L.DomUtil.create("div","leaflet-popup");this._closeButton=L.DomUtil.create("a","leaflet-popup-close-button",this._container);this._closeButton.href="#close";this._closeButton.onclick=L.Util.bind(this._onCloseButtonClick,this);this._wrapper=L.DomUtil.create("div","leaflet-popup-content-wrapper",this._container);L.DomEvent.disableClickPropagation(this._wrapper);this._contentNode=L.DomUtil.create("div","leaflet-popup-content",this._wrapper);this._tipContainer=L.DomUtil.create("div","leaflet-popup-tip-container",
+this._container);this._tip=L.DomUtil.create("div","leaflet-popup-tip",this._tipContainer)},_update:function(){this._container.style.visibility="hidden";this._updateContent();this._updateLayout();this._updatePosition();this._container.style.visibility="";this._adjustPan()},_updateContent:function(){if(this._content)typeof this._content=="string"?this._contentNode.innerHTML=this._content:(this._contentNode.innerHTML="",this._contentNode.appendChild(this._content))},_updateLayout:function(){this._container.style.width=
+"";this._container.style.whiteSpace="nowrap";var a=this._container.offsetWidth;this._container.style.width=(a>this.options.maxWidth?this.options.maxWidth:a)+"px";this._container.style.whiteSpace="";this._containerWidth=this._container.offsetWidth},_updatePosition:function(){var a=this._map.latLngToLayerPoint(this._latlng);this._containerBottom=-a.y-this.options.offset.y;this._containerLeft=a.x-Math.round(this._containerWidth/2)+this.options.offset.x;this._container.style.bottom=this._containerBottom+
+"px";this._container.style.left=this._containerLeft+"px"},_adjustPan:function(){if(this.options.autoPan){var a=this._container.offsetHeight,b=this._map.layerPointToContainerPoint(new L.Point(this._containerLeft,-a-this._containerBottom)),c=new L.Point(0,0),d=this.options.autoPanPadding,e=this._map.getSize();if(b.x<0)c.x=b.x-d.x;if(b.x+this._containerWidth>e.x)c.x=b.x+this._containerWidth-e.x+d.x;if(b.y<0)c.y=b.y-d.y;if(b.y+a>e.y)c.y=b.y+a-e.y+d.y;(c.x||c.y)&&this._map.panBy(c)}},_onCloseButtonClick:function(a){this._close();
+L.DomEvent.stop(a)}});L.Icon=L.Class.extend({iconUrl:L.ROOT_URL+"images/marker.png",shadowUrl:L.ROOT_URL+"images/marker-shadow.png",iconSize:new L.Point(25,41),shadowSize:new L.Point(41,41),iconAnchor:new L.Point(13,41),popupAnchor:new L.Point(0,-33),initialize:function(a){if(a)this.iconUrl=a},createIcon:function(){return this._createIcon("icon")},createShadow:function(){return this._createIcon("shadow")},_createIcon:function(a){var b=this[a+"Size"],c=this[a+"Url"],d=this._createImg(c);if(!c)return null;d.className="leaflet-marker-"+
+a;d.style.marginLeft=-this.iconAnchor.x+"px";d.style.marginTop=-this.iconAnchor.y+"px";if(b)d.style.width=b.x+"px",d.style.height=b.y+"px";return d},_createImg:function(a){var b;L.Browser.ie6?(b=document.createElement("div"),b.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+a+'")'):(b=document.createElement("img"),b.src=a);return b}});L.Marker=L.Class.extend({includes:L.Mixin.Events,options:{icon:new L.Icon,title:"",clickable:!0,draggable:!1},initialize:function(a,b){L.Util.setOptions(this,b);this._latlng=a},onAdd:function(a){this._map=a;this._initIcon();a.on("viewreset",this._reset,this);this._reset()},onRemove:function(a){this._removeIcon();a.off("viewreset",this._reset,this)},getLatLng:function(){return this._latlng},setLatLng:function(a){this._latlng=a;this._reset()},setIcon:function(a){this._removeIcon();this._icon=this._shadow=
+null;this.options.icon=a;this._initIcon()},_initIcon:function(){if(!this._icon){this._icon=this.options.icon.createIcon();if(this.options.title)this._icon.title=this.options.title;this._initInteraction()}if(!this._shadow)this._shadow=this.options.icon.createShadow();this._map._panes.markerPane.appendChild(this._icon);this._shadow&&this._map._panes.shadowPane.appendChild(this._shadow)},_removeIcon:function(){this._map._panes.markerPane.removeChild(this._icon);this._shadow&&this._map._panes.shadowPane.removeChild(this._shadow)},
+_reset:function(){var a=this._map.latLngToLayerPoint(this._latlng).round();L.DomUtil.setPosition(this._icon,a);this._shadow&&L.DomUtil.setPosition(this._shadow,a);this._icon.style.zIndex=a.y},_initInteraction:function(){if(this.options.clickable){this._icon.className+=" leaflet-clickable";L.DomEvent.addListener(this._icon,"click",this._onMouseClick,this);for(var a=["dblclick","mousedown","mouseover","mouseout"],b=0;b<a.length;b++)L.DomEvent.addListener(this._icon,a[b],this._fireMouseEvent,this)}if(L.Handler.MarkerDrag)this.dragging=
+new L.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable()},_onMouseClick:function(a){L.DomEvent.stopPropagation(a);(!this.dragging||!this.dragging.moved())&&this.fire(a.type)},_fireMouseEvent:function(a){this.fire(a.type);L.DomEvent.stopPropagation(a)}});L.Marker.include({openPopup:function(){this._popup.setLatLng(this._latlng);this._map.openPopup(this._popup);return this},closePopup:function(){this._popup&&this._popup._close()},bindPopup:function(a,b){b=L.Util.extend({offset:this.options.icon.popupAnchor},b);this._popup=new L.Popup(b);this._popup.setContent(a);this.on("click",this.openPopup,this);return this}});L.Path=L.Class.extend({includes:[L.Mixin.Events],statics:function(){return{SVG_NS:"http://www.w3.org/2000/svg",SVG:!(!document.createElementNS||!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect),CLIP_PADDING:0.5}}(),options:{stroke:!0,color:"#0033ff",weight:5,opacity:0.5,fill:!1,fillColor:null,fillOpacity:0.2,clickable:!0,updateOnMoveEnd:!1},initialize:function(a){L.Util.setOptions(this,a)},onAdd:function(a){this._map=a;this._initElements();this._initEvents();this.projectLatlngs();
+this._updatePath();a.on("viewreset",this.projectLatlngs,this);this._updateTrigger=this.options.updateOnMoveEnd?"moveend":"viewreset";a.on(this._updateTrigger,this._updatePath,this)},onRemove:function(a){a._pathRoot.removeChild(this._container);a.off("viewreset",this._projectLatlngs,this);a.off(this._updateTrigger,this._updatePath,this)},projectLatlngs:function(){},getPathString:function(){},setStyle:function(a){L.Util.setOptions(this,a);this._path&&this._updateStyle()},_initElements:function(){this._initRoot();
+this._initPath();this._initStyle()},_initRoot:function(){if(!this._map._pathRoot)this._map._pathRoot=this._createElement("svg"),this._map._panes.overlayPane.appendChild(this._map._pathRoot),this._map.on("moveend",this._updateSvgViewport,this),this._updateSvgViewport()},_updateSvgViewport:function(){this._updateViewport();var a=this._map._pathViewport,b=a.min,c=a.max,a=c.x-b.x,c=c.y-b.y,d=this._map._pathRoot,e=this._map._panes.overlayPane;L.Browser.mobileWebkit&&e.removeChild(d);L.DomUtil.setPosition(d,
+b);d.setAttribute("width",a);d.setAttribute("height",c);d.setAttribute("viewBox",[b.x,b.y,a,c].join(" "));L.Browser.mobileWebkit&&e.appendChild(d)},_updateViewport:function(){var a=L.Path.CLIP_PADDING,b=this._map.getSize(),c=L.DomUtil.getPosition(this._map._mapPane).multiplyBy(-1).subtract(b.multiplyBy(a)),a=c.add(b.multiplyBy(1+a*2));this._map._pathViewport=new L.Bounds(c,a)},_initPath:function(){this._container=this._createElement("g");this._path=this._createElement("path");this._container.appendChild(this._path);
+this._map._pathRoot.appendChild(this._container)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round"));this.options.fill?this._path.setAttribute("fill-rule","evenodd"):this._path.setAttribute("fill","none");this._updateStyle()},_updateStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",
+this.options.weight));this.options.fill&&(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity))},_updatePath:function(){var a=this.getPathString();a||(a="M0 0");this._path.setAttribute("d",a)},_createElement:function(a){return document.createElementNS(L.Path.SVG_NS,a)},_initEvents:function(){if(this.options.clickable){L.Path.VML||this._path.setAttribute("class","leaflet-clickable");L.DomEvent.addListener(this._container,
+"click",this._onMouseClick,this);for(var a=["dblclick","mousedown","mouseover","mouseout"],b=0;b<a.length;b++)L.DomEvent.addListener(this._container,a[b],this._fireMouseEvent,this)}},_onMouseClick:function(a){(!this._map.dragging||!this._map.dragging.moved())&&this._fireMouseEvent(a)},_fireMouseEvent:function(a){this.hasEventListeners(a.type)&&(this.fire(a.type,{latlng:this._map.mouseEventToLatLng(a),layerPoint:this._map.mouseEventToLayerPoint(a)}),L.DomEvent.stopPropagation(a))},_redraw:function(){this.projectLatlngs();
+this._updatePath()}});L.Path.VML=function(){var a=document.createElement("div");a.innerHTML='<v:shape adj="1"/>';a=a.firstChild;a.style.behavior="url(#default#VML)";return a&&typeof a.adj=="object"}();
+L.Path=L.Path.SVG||!L.Path.VML?L.Path:L.Path.extend({statics:{CLIP_PADDING:0.02},_createElement:function(){try{return document.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(a){return document.createElement("<lvml:"+a+' class="lvml">')}}catch(a){return function(a){return document.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initRoot:function(){if(!this._map._pathRoot)this._map._pathRoot=document.createElement("div"),this._map._pathRoot.className=
+"leaflet-vml-container",this._map._panes.overlayPane.appendChild(this._map._pathRoot),this._map.on("moveend",this._updateViewport,this),this._updateViewport()},_initPath:function(){this._container=this._createElement("shape");this._container.className+=" leaflet-vml-shape"+(this.options.clickable?" leaflet-clickable":"");this._container.coordsize="1 1";this._path=this._createElement("path");this._container.appendChild(this._path);this._map._pathRoot.appendChild(this._container)},_initStyle:function(){this.options.stroke?
+(this._stroke=this._createElement("stroke"),this._stroke.endcap="round",this._container.appendChild(this._stroke)):this._container.stroked=!1;this.options.fill?(this._container.filled=!0,this._fill=this._createElement("fill"),this._container.appendChild(this._fill)):this._container.filled=!1;this._updateStyle()},_updateStyle:function(){if(this.options.stroke)this._stroke.weight=this.options.weight+"px",this._stroke.color=this.options.color,this._stroke.opacity=this.options.opacity;if(this.options.fill)this._fill.color=
+this.options.fillColor||this.options.color,this._fill.opacity=this.options.fillOpacity},_updatePath:function(){this._container.style.display="none";this._path.v=this.getPathString()+" ";this._container.style.display=""}});L.Path.include({bindPopup:function(a,b){if(!this._popup||this._popup.options!==b)this._popup=new L.Popup(b);this._popup.setContent(a);if(!this._openPopupAdded)this.on("click",this._openPopup,this),this._openPopupAdded=!0;return this},_openPopup:function(a){this._popup.setLatLng(a.latlng);this._map.openPopup(this._popup)}});L.Polyline=L.Path.extend({initialize:function(a,b){L.Path.prototype.initialize.call(this,b);this._latlngs=a},options:{smoothFactor:1,noClip:!1,updateOnMoveEnd:!0},projectLatlngs:function(){this._originalPoints=[];for(var a=0,b=this._latlngs.length;a<b;a++)this._originalPoints[a]=this._map.latLngToLayerPoint(this._latlngs[a])},getPathString:function(){for(var a=0,b=this._parts.length,c="";a<b;a++)c+=this._getPathPartStr(this._parts[a]);return c},getLatLngs:function(){return this._latlngs},setLatLngs:function(a){this._latlngs=
+a;this._redraw();return this},addLatLng:function(a){this._latlngs.push(a);this._redraw();return this},spliceLatLngs:function(){var a=[].splice.apply(this._latlngs,arguments);this._redraw();return a},_getPathPartStr:function(a){for(var b=L.Path.VML,c=0,d=a.length,e="",f;c<d;c++)f=a[c],b&&f._round(),e+=(c?"L":"M")+f.x+" "+f.y;return e},_clipPoints:function(){var a=this._originalPoints,b=a.length,c,d,e;if(this.options.noClip)this._parts=[a];else{var f=this._parts=[],g=this._map._pathViewport,h=L.LineUtil;
+for(d=c=0;c<b-1;c++)if(e=h.clipSegment(a[c],a[c+1],g,c))if(f[d]=f[d]||[],f[d].push(e[0]),e[1]!=a[c+1]||c==b-2)f[d].push(e[1]),d++}},_simplifyPoints:function(){for(var a=this._parts,b=L.LineUtil,c=0,d=a.length;c<d;c++)a[c]=b.simplify(a[c],this.options.smoothFactor)},_updatePath:function(){this._clipPoints();this._simplifyPoints();L.Path.prototype._updatePath.call(this)}});L.Polygon=L.Polyline.extend({options:{fill:!0},initialize:function(a,b){L.Polyline.prototype.initialize.call(this,a,b);if(a[0]instanceof Array)this._latlngs=a[0],this._holes=a.slice(1)},projectLatlngs:function(){L.Polyline.prototype.projectLatlngs.call(this);this._holePoints=[];if(this._holes)for(var a=0,b=this._holes.length;a<b;a++){this._holePoints[a]=[];for(var c=0,d=this._holes[a].length;c<d;c++)this._holePoints[a][c]=this._map.latLngToLayerPoint(this._holes[a][c])}},_clipPoints:function(){var a=
+[];this._parts=[this._originalPoints].concat(this._holePoints);if(!this.options.noClip){for(var b=0,c=this._parts.length;b<c;b++){var d=L.PolyUtil.clipPolygon(this._parts[b],this._map._pathViewport);d.length&&a.push(d)}this._parts=a}},_getPathPartStr:function(a){return L.Polyline.prototype._getPathPartStr.call(this,a)+(L.Path.SVG?"z":"x")}});(function(){function a(a){return L.FeatureGroup.extend({initialize:function(c,d){this._layers={};for(var e=0,f=c.length;e<f;e++)this.addLayer(new a(c[e],d))},setStyle:function(a){for(var b in this._layers)this._layers.hasOwnProperty(b)&&this._layers[b].setStyle&&this._layers[b].setStyle(a)}})}L.MultiPolyline=a(L.Polyline);L.MultiPolygon=a(L.Polygon)})();L.Circle=L.Path.extend({initialize:function(a,b,c){L.Path.prototype.initialize.call(this,c);this._latlng=a;this._mRadius=b},options:{fill:!0},setLatLng:function(a){this._latlng=a;this._redraw();return this},setRadius:function(a){this._mRadius=a;this._redraw();return this},projectLatlngs:function(){var a=this._map.options.scale(this._map._zoom);this._point=this._map.latLngToLayerPoint(this._latlng);this._radius=this._mRadius/40075017*a},getPathString:function(){var a=this._point,b=this._radius;return L.Path.SVG?
+"M"+a.x+","+(a.y-b)+"A"+b+","+b+",0,1,1,"+(a.x-0.1)+","+(a.y-b)+" z":(a._round(),b=Math.round(b),"AL "+a.x+","+a.y+" "+b+","+b+" 0,23592600")}});L.CircleMarker=L.Circle.extend({options:{radius:10,weight:2},initialize:function(a,b){L.Circle.prototype.initialize.call(this,a,null,b);this._radius=this.options.radius},projectLatlngs:function(){this._point=this._map.latLngToLayerPoint(this._latlng)},setRadius:function(a){this._radius=a;this._redraw();return this}});L.GeoJSON=L.LayerGroup.extend({includes:L.Mixin.Events,initialize:function(a,b){L.Util.setOptions(this,b);this._geojson=a;this._layers={};a&&this.addGeoJSON(a)},addGeoJSON:function(a){if(a.features)for(var b=0,c=a.features.length;b<c;b++)this.addGeoJSON(a.features[b]);else b=a.type=="Feature"?a.geometry:a,c=L.GeoJSON.geometryToLayer(b,this.options.pointToLayer),this.fire("featureparse",{layer:c,properties:a.properties,geometryType:b.type,bbox:a.bbox,id:a.id}),this.addLayer(c)}});
+L.Util.extend(L.GeoJSON,{geometryToLayer:function(a,b){var c=a.coordinates,d,e,f,g=[];switch(a.type){case "Point":return d=this.coordsToLatLng(c),b?b(d):new L.Marker(d);case "MultiPoint":e=0;for(f=c.length;e<f;e++)d=this.coordsToLatLng(c[e]),d=b?b(d):new L.Marker(d),g.push(d);return new L.FeatureGroup(g);case "LineString":return c=this.coordsToLatLngs(c),new L.Polyline(c);case "Polygon":return c=this.coordsToLatLngs(c,1),new L.Polygon(c);case "MultiLineString":return c=this.coordsToLatLngs(c,1),new L.MultiPolyline(c);
+case "MultiPolygon":return c=this.coordsToLatLngs(c,2),new L.MultiPolygon(c);case "GeometryCollection":e=0;for(f=a.geometries.length;e<f;e++)d=this.geometryToLayer(a.geometries[e]),g.push(d);return new L.FeatureGroup(g);default:throw Error("Invalid GeoJSON object.");}},coordsToLatLng:function(a,b){var c=parseFloat(a[b?0:1]),d=parseFloat(a[b?1:0]);return new L.LatLng(c,d)},coordsToLatLngs:function(a,b,c){var d,e=[],f,g=a.length;for(f=0;f<g;f++)d=b?this.coordsToLatLngs(a[f],b-1,c):this.coordsToLatLng(a[f],
+c),e.push(d);return e}});L.Handler=L.Class.extend({initialize:function(a){this._map=a},enabled:function(){return!!this._enabled}});L.Handler.MapDrag=L.Handler.extend({enable:function(){if(!this._enabled){if(!this._draggable)this._draggable=new L.Draggable(this._map._mapPane,this._map._container),this._draggable.on("dragstart",this._onDragStart,this),this._draggable.on("drag",this._onDrag,this),this._draggable.on("dragend",this._onDragEnd,this);this._draggable.enable();this._enabled=!0}},disable:function(){if(this._enabled)this._draggable.disable(),this._enabled=!1},moved:function(){return this._draggable._moved},_onDragStart:function(){this._map.fire("movestart");
+this._map.fire("dragstart")},_onDrag:function(){this._map.fire("move");this._map.fire("drag")},_onDragEnd:function(){this._map.fire("moveend");this._map.fire("dragend")}});L.Handler.TouchZoom=L.Handler.extend({enable:function(){if(L.Browser.mobileWebkit&&!this._enabled)L.DomEvent.addListener(this._map._container,"touchstart",this._onTouchStart,this),this._enabled=!0},disable:function(){if(this._enabled)L.DomEvent.removeListener(this._map._container,"touchstart",this._onTouchStart,this),this._enabled=!1},_onTouchStart:function(a){if(a.touches&&!(a.touches.length!=2||this._map._animatingZoom)){var b=this._map.mouseEventToLayerPoint(a.touches[0]),c=this._map.mouseEventToLayerPoint(a.touches[1]),
+d=this._map.containerPointToLayerPoint(this._map.getSize().divideBy(2));this._startCenter=b.add(c).divideBy(2,!0);this._startDist=b.distanceTo(c);this._moved=!1;this._zooming=!0;this._centerOffset=d.subtract(this._startCenter);L.DomEvent.addListener(document,"touchmove",this._onTouchMove,this);L.DomEvent.addListener(document,"touchend",this._onTouchEnd,this);L.DomEvent.preventDefault(a)}},_onTouchMove:function(a){if(a.touches&&a.touches.length==2){if(!this._moved)this._map._mapPane.className+=" leaflet-zoom-anim",
+this._map._prepareTileBg(),this._moved=!0;var b=this._map.mouseEventToLayerPoint(a.touches[0]),c=this._map.mouseEventToLayerPoint(a.touches[1]);this._scale=b.distanceTo(c)/this._startDist;this._delta=b.add(c).divideBy(2,!0).subtract(this._startCenter);this._map._tileBg.style.webkitTransform=[L.DomUtil.getTranslateString(this._delta),L.DomUtil.getScaleString(this._scale,this._startCenter)].join(" ");L.DomEvent.preventDefault(a)}},_onTouchEnd:function(){if(this._moved&&this._zooming){this._zooming=
+!1;var a=this._map.getZoom(),b=Math.log(this._scale)/Math.LN2,b=this._map._limitZoom(a+(b>0?Math.ceil(b):Math.floor(b))),a=b-a,c=this._centerOffset.subtract(this._delta).divideBy(this._scale),d=this._map.unproject(this._map.getPixelOrigin().add(this._startCenter).add(c));L.DomEvent.removeListener(document,"touchmove",this._onTouchMove);L.DomEvent.removeListener(document,"touchend",this._onTouchEnd);this._map._runAnimation(d,b,Math.pow(2,a)/this._scale,this._startCenter.add(c))}}});L.Handler.ScrollWheelZoom=L.Handler.extend({enable:function(){if(!this._enabled)L.DomEvent.addListener(this._map._container,"mousewheel",this._onWheelScroll,this),this._delta=0,this._enabled=!0},disable:function(){if(this._enabled)L.DomEvent.removeListener(this._map._container,"mousewheel",this._onWheelScroll),this._enabled=!1},_onWheelScroll:function(a){this._delta+=L.DomEvent.getWheelDelta(a);this._lastMousePos=this._map.mouseEventToContainerPoint(a);clearTimeout(this._timer);this._timer=setTimeout(L.Util.bind(this._performZoom,
+this),50);L.DomEvent.preventDefault(a)},_performZoom:function(){var a=Math.round(this._delta);this._delta=0;if(a){var b=this._getCenterForScrollWheelZoom(this._lastMousePos,a),a=this._map.getZoom()+a;this._map._limitZoom(a)!=this._map._zoom&&this._map.setView(b,a)}},_getCenterForScrollWheelZoom:function(a,b){var c=this._map.getPixelBounds().getCenter(),d=this._map.getSize().divideBy(2),d=a.subtract(d).multiplyBy(1-Math.pow(2,-b));return this._map.unproject(c.add(d),this._map._zoom,!0)}});L.Handler.DoubleClickZoom=L.Handler.extend({enable:function(){if(!this._enabled)this._map.on("dblclick",this._onDoubleClick,this._map),this._enabled=!0},disable:function(){if(this._enabled)this._map.off("dblclick",this._onDoubleClick,this._map),this._enabled=!1},_onDoubleClick:function(a){this.setView(a.latlng,this._zoom+1)}});L.Handler.ShiftDragZoom=L.Handler.extend({initialize:function(a){this._map=a;this._container=a._container;this._pane=a._panes.overlayPane},enable:function(){if(!this._enabled)L.DomEvent.addListener(this._container,"mousedown",this._onMouseDown,this),this._enabled=!0},disable:function(){if(this._enabled)L.DomEvent.removeListener(this._container,"mousedown",this._onMouseDown),this._enabled=!1},_onMouseDown:function(a){if(!a.shiftKey||a.which!=1&&a.button!=1)return!1;L.DomUtil.disableTextSelection();
+this._startLayerPoint=this._map.mouseEventToLayerPoint(a);this._box=L.DomUtil.create("div","leaflet-zoom-box",this._pane);L.DomUtil.setPosition(this._box,this._startLayerPoint);this._container.style.cursor="crosshair";L.DomEvent.addListener(document,"mousemove",this._onMouseMove,this);L.DomEvent.addListener(document,"mouseup",this._onMouseUp,this);L.DomEvent.preventDefault(a)},_onMouseMove:function(a){var b=this._map.mouseEventToLayerPoint(a),a=b.x-this._startLayerPoint.x,c=b.y-this._startLayerPoint.y,
+b=new L.Point(Math.min(b.x,this._startLayerPoint.x),Math.min(b.y,this._startLayerPoint.y));L.DomUtil.setPosition(this._box,b);this._box.style.width=Math.abs(a)-4+"px";this._box.style.height=Math.abs(c)-4+"px"},_onMouseUp:function(a){this._pane.removeChild(this._box);this._container.style.cursor="";L.DomUtil.enableTextSelection();L.DomEvent.removeListener(document,"mousemove",this._onMouseMove);L.DomEvent.removeListener(document,"mouseup",this._onMouseUp);a=this._map.mouseEventToLayerPoint(a);this._map.fitBounds(new L.LatLngBounds(this._map.layerPointToLatLng(this._startLayerPoint),
+this._map.layerPointToLatLng(a)))}});L.Handler.MarkerDrag=L.Handler.extend({initialize:function(a){this._marker=a},enable:function(){if(!this._enabled){if(!this._draggable)this._draggable=new L.Draggable(this._marker._icon,this._marker._icon),this._draggable.on("dragstart",this._onDragStart,this),this._draggable.on("drag",this._onDrag,this),this._draggable.on("dragend",this._onDragEnd,this);this._draggable.enable();this._enabled=!0}},disable:function(){if(this._enabled)this._draggable.disable(),this._enabled=!1},moved:function(){return this._draggable&&
+this._draggable._moved},_onDragStart:function(){this._marker.closePopup();this._marker.fire("movestart");this._marker.fire("dragstart")},_onDrag:function(){var a=L.DomUtil.getPosition(this._marker._icon);L.DomUtil.setPosition(this._marker._shadow,a);this._marker._latlng=this._marker._map.layerPointToLatLng(a);this._marker.fire("move");this._marker.fire("drag")},_onDragEnd:function(){this._marker.fire("moveend");this._marker.fire("dragend")}});L.Control={};L.Control.Position={TOP_LEFT:"topLeft",TOP_RIGHT:"topRight",BOTTOM_LEFT:"bottomLeft",BOTTOM_RIGHT:"bottomRight"};L.Control.Zoom=L.Class.extend({onAdd:function(a){this._map=a;this._container=L.DomUtil.create("div","leaflet-control-zoom");this._zoomInButton=this._createButton("Zoom in","leaflet-control-zoom-in",this._map.zoomIn,this._map);this._zoomOutButton=this._createButton("Zoom out","leaflet-control-zoom-out",this._map.zoomOut,this._map);this._container.appendChild(this._zoomInButton);this._container.appendChild(this._zoomOutButton)},getContainer:function(){return this._container},getPosition:function(){return L.Control.Position.TOP_LEFT},
+_createButton:function(a,b,c,d){var e=document.createElement("a");e.href="#";e.title=a;e.className=b;L.DomEvent.disableClickPropagation(e);L.DomEvent.addListener(e,"click",L.DomEvent.preventDefault);L.DomEvent.addListener(e,"click",c,d);return e}});L.Control.Attribution=L.Class.extend({onAdd:function(a){this._container=L.DomUtil.create("div","leaflet-control-attribution");this._map=a;this._prefix='Powered by <a href="http://leaflet.cloudmade.com">Leaflet</a>';this._attributions={};this._update()},getPosition:function(){return L.Control.Position.BOTTOM_RIGHT},getContainer:function(){return this._container},setPrefix:function(a){this._prefix=a},addAttribution:function(a){a&&(this._attributions[a]=!0,this._update())},removeAttribution:function(a){a&&
+(delete this._attributions[a],this._update())},_update:function(){if(this._map){var a=[],b;for(b in this._attributions)this._attributions.hasOwnProperty(b)&&a.push(b);b=[];this._prefix&&b.push(this._prefix);a.length&&b.push(a.join(", "));this._container.innerHTML=b.join(" — ")}}});L.Map=L.Class.extend({includes:L.Mixin.Events,options:{crs:L.CRS.EPSG3857||L.CRS.EPSG4326,scale:function(a){return 256*(1<<a)},center:null,zoom:null,layers:[],dragging:!0,touchZoom:L.Browser.mobileWebkit&&!L.Browser.android,scrollWheelZoom:!L.Browser.mobileWebkit,doubleClickZoom:!0,shiftDragZoom:!0,zoomControl:!0,attributionControl:!0,fadeAnimation:L.DomUtil.TRANSITION&&!L.Browser.android,zoomAnimation:L.DomUtil.TRANSITION&&!L.Browser.android&&!L.Browser.mobileOpera,trackResize:!0,closePopupOnClick:!0},
+initialize:function(a,b){L.Util.setOptions(this,b);this._container=L.DomUtil.get(a);this._initLayout();L.DomEvent&&(this._initEvents(),L.Handler&&this._initInteraction(),L.Control&&this._initControls());var c=this.options.center,d=this.options.zoom;c!==null&&d!==null&&this.setView(c,d,!0);c=this.options.layers;c=c instanceof Array?c:[c];this._tileLayersNum=0;this._initLayers(c)},setView:function(a,b){this._resetView(a,this._limitZoom(b));return this},setZoom:function(a){return this.setView(this.getCenter(),
+a)},zoomIn:function(){return this.setZoom(this._zoom+1)},zoomOut:function(){return this.setZoom(this._zoom-1)},fitBounds:function(a){var b=this.getBoundsZoom(a);return this.setView(a.getCenter(),b)},fitWorld:function(){var a=new L.LatLng(-60,-170),b=new L.LatLng(85,179);return this.fitBounds(new L.LatLngBounds(a,b))},panTo:function(a){return this.setView(a,this._zoom)},panBy:function(a){this.fire("movestart");this._rawPanBy(a);this.fire("move");this.fire("moveend");return this},addLayer:function(a){var b=
+L.Util.stamp(a);if(this._layers[b])return this;this._layers[b]=a;if(a.options&&!isNaN(a.options.maxZoom))this._layersMaxZoom=Math.max(this._layersMaxZoom||0,a.options.maxZoom);if(a.options&&!isNaN(a.options.minZoom))this._layersMinZoom=Math.min(this._layersMinZoom||Infinity,a.options.minZoom);this.options.zoomAnimation&&L.TileLayer&&a instanceof L.TileLayer&&(this._tileLayersNum++,a.on("load",this._onTileLayerLoad,this));this.attributionControl&&a.getAttribution&&this.attributionControl.addAttribution(a.getAttribution());
+b=function(){a.onAdd(this);this.fire("layeradd",{layer:a})};if(this._loaded)b.call(this);else this.on("load",b,this);return this},removeLayer:function(a){var b=L.Util.stamp(a);this._layers[b]&&(a.onRemove(this),delete this._layers[b],this.options.zoomAnimation&&L.TileLayer&&a instanceof L.TileLayer&&(this._tileLayersNum--,a.off("load",this._onTileLayerLoad,this)),this.attributionControl&&a.getAttribution&&this.attributionControl.removeAttribution(a.getAttribution()),this.fire("layerremove",{layer:a}));
+return this},invalidateSize:function(){this._sizeChanged=!0;this.fire("move");clearTimeout(this._sizeTimer);this._sizeTimer=setTimeout(L.Util.bind(function(){this.fire("moveend")},this),200);return this},getCenter:function(a){var b=this.getSize().divideBy(2);return this.unproject(this._getTopLeftPoint().add(b),this._zoom,a)},getZoom:function(){return this._zoom},getBounds:function(){var a=this.getPixelBounds(),b=this.unproject(new L.Point(a.min.x,a.max.y)),a=this.unproject(new L.Point(a.max.x,a.min.y));
+return new L.LatLngBounds(b,a)},getMinZoom:function(){return isNaN(this.options.minZoom)?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return isNaN(this.options.maxZoom)?this._layersMaxZoom||Infinity:this.options.maxZoom},getBoundsZoom:function(a){var b=this.getSize(),c=this.getMinZoom(),d=this.getMaxZoom(),e=a.getNorthEast(),a=a.getSouthWest(),f,g;do c++,f=this.project(e,c),g=this.project(a,c),f=new L.Point(f.x-g.x,g.y-f.y);while(f.x<=b.x&&f.y<=b.y&&c<=d);return c-1},getSize:function(){if(!this._size||
+this._sizeChanged)this._size=new L.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1;return this._size},getPixelBounds:function(){var a=this._getTopLeftPoint(),b=this.getSize();return new L.Bounds(a,a.add(b))},getPixelOrigin:function(){return this._initialTopLeftPoint},getPanes:function(){return this._panes},mouseEventToContainerPoint:function(a){return L.DomEvent.getMousePosition(a,this._container)},mouseEventToLayerPoint:function(a){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(a))},
+mouseEventToLatLng:function(a){return this.layerPointToLatLng(this.mouseEventToLayerPoint(a))},containerPointToLayerPoint:function(a){return a.subtract(L.DomUtil.getPosition(this._mapPane))},layerPointToContainerPoint:function(a){return a.add(L.DomUtil.getPosition(this._mapPane))},layerPointToLatLng:function(a){return this.unproject(a.add(this._initialTopLeftPoint))},latLngToLayerPoint:function(a){return this.project(a)._subtract(this._initialTopLeftPoint)},project:function(a,b){b=typeof b=="undefined"?
+this._zoom:b;return this.options.crs.latLngToPoint(a,this.options.scale(b))},unproject:function(a,b,c){b=typeof b=="undefined"?this._zoom:b;return this.options.crs.pointToLatLng(a,this.options.scale(b),c)},_initLayout:function(){var a=this._container;a.className+=" leaflet-container";this.options.fadeAnimation&&(a.className+=" leaflet-fade-anim");var b=L.DomUtil.getStyle(a,"position");if(b!="absolute"&&b!="relative")a.style.position="relative";this._initPanes();this._initControlPos&&this._initControlPos()},
+_initPanes:function(){var a=this._panes={};this._mapPane=a.mapPane=this._createPane("leaflet-map-pane",this._container);this._tilePane=a.tilePane=this._createPane("leaflet-tile-pane",this._mapPane);this._objectsPane=a.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane);a.shadowPane=this._createPane("leaflet-shadow-pane");a.overlayPane=this._createPane("leaflet-overlay-pane");a.markerPane=this._createPane("leaflet-marker-pane");a.popupPane=this._createPane("leaflet-popup-pane")},_createPane:function(a,
+b){return L.DomUtil.create("div",a,b||this._objectsPane)},_resetView:function(a,b,c){var d=this._zoom!=b;this.fire("movestart");this._zoom=b;this._initialTopLeftPoint=this._getNewTopLeftPoint(a);c?this._initialTopLeftPoint._add(L.DomUtil.getPosition(this._mapPane)):L.DomUtil.setPosition(this._mapPane,new L.Point(0,0));this._tileLayersToLoad=this._tileLayersNum;this.fire("viewreset");this.fire("move");d&&this.fire("zoomend");this.fire("moveend");if(!this._loaded)this._loaded=!0,this.fire("load")},
+_initLayers:function(a){this._layers={};for(var b=0,c=a.length;b<c;b++)this.addLayer(a[b])},_initControls:function(){this.options.zoomControl&&this.addControl(new L.Control.Zoom);if(this.options.attributionControl)this.attributionControl=new L.Control.Attribution,this.addControl(this.attributionControl)},_rawPanBy:function(a){var b=L.DomUtil.getPosition(this._mapPane);L.DomUtil.setPosition(this._mapPane,b.subtract(a))},_initEvents:function(){L.DomEvent.addListener(this._container,"click",this._onMouseClick,
+this);for(var a=["dblclick","mousedown","mouseenter","mouseleave","mousemove"],b=0;b<a.length;b++)L.DomEvent.addListener(this._container,a[b],this._fireMouseEvent,this);this.options.trackResize&&L.DomEvent.addListener(window,"resize",this.invalidateSize,this)},_onMouseClick:function(a){if(!this.dragging||!this.dragging.moved())this.fire("pre"+a.type),this._fireMouseEvent(a)},_fireMouseEvent:function(a){var b=a.type,b=b=="mouseenter"?"mouseover":b=="mouseleave"?"mouseout":b;this.hasEventListeners(b)&&
+this.fire(b,{latlng:this.mouseEventToLatLng(a),layerPoint:this.mouseEventToLayerPoint(a)})},_initInteraction:function(){var a={dragging:L.Handler.MapDrag,touchZoom:L.Handler.TouchZoom,doubleClickZoom:L.Handler.DoubleClickZoom,scrollWheelZoom:L.Handler.ScrollWheelZoom,shiftDragZoom:L.Handler.ShiftDragZoom},b;for(b in a)a.hasOwnProperty(b)&&a[b]&&(this[b]=new a[b](this),this.options[b]&&this[b].enable())},_onTileLayerLoad:function(){this._tileLayersToLoad--;if(this._tileLayersNum&&!this._tileLayersToLoad&&
+this._tileBg)clearTimeout(this._clearTileBgTimer),this._clearTileBgTimer=setTimeout(L.Util.bind(this._clearTileBg,this),500)},_getTopLeftPoint:function(){if(!this._loaded)throw Error("Set map center and zoom first.");return this._initialTopLeftPoint.subtract(L.DomUtil.getPosition(this._mapPane))},_getNewTopLeftPoint:function(a){var b=this.getSize().divideBy(2);return this.project(a).subtract(b).round()},_limitZoom:function(a){var b=this.getMinZoom(),c=this.getMaxZoom();return Math.max(b,Math.min(c,
+a))}});L.Map.include({locate:function(a){var b={timeout:1E4};L.Util.extend(b,a);navigator.geolocation?navigator.geolocation.getCurrentPosition(L.Util.bind(this._handleGeolocationResponse,this),L.Util.bind(this._handleGeolocationError,this),b):this.fire("locationerror",{code:0,message:"Geolocation not supported."});return this},locateAndSetView:function(a,b){this._setViewOnLocate=!0;this._maxLocateZoom=a||Infinity;return this.locate(b)},_handleGeolocationError:function(a){var a=a.code,b=a==1?"permission denied":
+a==2?"position unavailable":"timeout";if(this._setViewOnLocate)this.fitWorld(),this._setViewOnLocate=!1;this.fire("locationerror",{code:a,message:"Geolocation error: "+b+"."})},_handleGeolocationResponse:function(a){var b=180*a.coords.accuracy/4E7,c=b*2,d=a.coords.latitude,e=a.coords.longitude,f=new L.LatLng(d-b,e-c),b=new L.LatLng(d+b,e+c),f=new L.LatLngBounds(f,b);if(this._setViewOnLocate)b=Math.min(this.getBoundsZoom(f),this._maxLocateZoom),this.setView(f.getCenter(),b),this._setViewOnLocate=!1;
+this.fire("locationfound",{latlng:new L.LatLng(d,e),bounds:f,accuracy:a.coords.accuracy})}});L.Map.include({openPopup:function(a){this.closePopup();this._popup=a;return this.addLayer(a)},closePopup:function(){this._popup&&this.removeLayer(this._popup);return this}});L.Map.include(!L.Transition||!L.Transition.implemented()?{}:{setView:function(a,b,c){var b=this._limitZoom(b),d=this._zoom!=b;if(this._loaded&&!c&&this._layers&&(c=this._getNewTopLeftPoint(a).subtract(this._getTopLeftPoint()),d?this._zoomToIfCenterInView&&this._zoomToIfCenterInView(a,b,c):this._panByIfClose(c)))return this;this._resetView(a,b);return this},panBy:function(a){if(!this._panTransition)this._panTransition=new L.Transition(this._mapPane,{duration:0.3}),this._panTransition.on("step",this._onPanTransitionStep,
+this),this._panTransition.on("end",this._onPanTransitionEnd,this);this.fire(this,"movestart");this._panTransition.run({position:L.DomUtil.getPosition(this._mapPane).subtract(a)});return this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){this.fire("moveend")},_panByIfClose:function(a){if(this._offsetIsWithinView(a))return this.panBy(a),!0;return!1},_offsetIsWithinView:function(a,b){var c=b||1,d=this.getSize();return Math.abs(a.x)<=d.x*c&&Math.abs(a.y)<=d.y*c}});L.Map.include(!L.DomUtil.TRANSITION?{}:{_zoomToIfCenterInView:function(a,b,c){if(this._animatingZoom)return!0;if(!this.options.zoomAnimation)return!1;var d=Math.pow(2,b-this._zoom),c=c.divideBy(1-1/d);if(!this._offsetIsWithinView(c,1))return!1;this._mapPane.className+=" leaflet-zoom-anim";c=this.containerPointToLayerPoint(this.getSize().divideBy(2)).add(c);this._prepareTileBg();this._runAnimation(a,b,d,c);return!0},_runAnimation:function(a,b,c,d){this._animatingZoom=!0;this._animateToCenter=a;this._animateToZoom=
+b;a=L.DomUtil.TRANSFORM;if(L.Browser.gecko||window.opera)this._tileBg.style[a]+=" translate(0,0)";L.Browser.android?(this._tileBg.style[a+"Origin"]=d.x+"px "+d.y+"px",c="scale("+c+")"):c=L.DomUtil.getScaleString(c,d);L.Util.falseFn(this._tileBg.offsetWidth);d={};d[a]=this._tileBg.style[a]+" "+c;this._tileBg.transition.run(d)},_prepareTileBg:function(){if(!this._tileBg)this._tileBg=this._createPane("leaflet-tile-pane",this._mapPane),this._tileBg.style.zIndex=1;var a=this._tilePane,b=this._tileBg;b.style[L.DomUtil.TRANSFORM]=
+"";b.style.visibility="hidden";b.empty=!0;a.empty=!1;this._tilePane=this._panes.tilePane=b;this._tileBg=a;if(!this._tileBg.transition)this._tileBg.transition=new L.Transition(this._tileBg,{duration:0.3,easing:"cubic-bezier(0.25,0.1,0.25,0.75)"}),this._tileBg.transition.on("end",this._onZoomTransitionEnd,this);this._stopLoadingBgTiles()},_stopLoadingBgTiles:function(){for(var a=[].slice.call(this._tileBg.getElementsByTagName("img")),b=0,c=a.length;b<c;b++)if(!a[b].complete)a[b].src="",a[b].parentNode.removeChild(a[b])},
+_onZoomTransitionEnd:function(){this._restoreTileFront();L.Util.falseFn(this._tileBg.offsetWidth);this._resetView(this._animateToCenter,this._animateToZoom,!0);this._mapPane.className=this._mapPane.className.replace(" leaflet-zoom-anim","");this._animatingZoom=!1},_restoreTileFront:function(){this._tilePane.innerHTML="";this._tilePane.style.visibility="";this._tilePane.style.zIndex=2;this._tileBg.style.zIndex=1},_clearTileBg:function(){if(!this._animatingZoom&&!this.touchZoom._zooming)this._tileBg.innerHTML=
+""}});L.Map.include({addControl:function(a){a.onAdd(this);var b=a.getPosition(),c=this._controlCorners[b],a=a.getContainer();L.DomUtil.addClass(a,"leaflet-control");b.indexOf("bottom")!=-1?c.insertBefore(a,c.firstChild):c.appendChild(a);return this},removeControl:function(a){var b=this._controlCorners[a.getPosition()],c=a.getContainer();b.removeChild(c);if(a.onRemove)a.onRemove(this);return this},_initControlPos:function(){var a=this._controlCorners={},b=L.DomUtil.create("div","leaflet-control-container",
+this._container);L.Browser.mobileWebkit&&(b.className+=" leaflet-big-buttons");a.topLeft=L.DomUtil.create("div","leaflet-top leaflet-left",b);a.topRight=L.DomUtil.create("div","leaflet-top leaflet-right",b);a.bottomLeft=L.DomUtil.create("div","leaflet-bottom leaflet-left",b);a.bottomRight=L.DomUtil.create("div","leaflet-bottom leaflet-right",b)}});
--- a/project/templates/talk/conf_schedule.html Mon Jan 30 15:18:14 2012 +0530
+++ b/project/templates/talk/conf_schedule.html Mon Jan 30 15:19:23 2012 +0530
@@ -1,6 +1,6 @@
{% extends "base.html" %}
{% block content %}
-<h1 class="title">SciPy.in 2010 Conference Schedule</h1>
+<h1 class="title">SciPy.in 2011 Conference Schedule</h1>
<h2 id="sec-1">Day 1 </h2>
@@ -13,37 +13,28 @@
<tr><th scope="col" class="right">Time</th><th scope="col" class="left">Speaker</th><th scope="col" class="left">Title</th></tr>
</thead>
<tbody>
-<tr><td class="right">09:00-09:30</td><td class="left"></td><td class="left">Inauguration</td></tr>
-<tr><td class="right">09:30-10:30</td><td class="left">Perry Greenfield</td><td class="left"><b>Keynote</b>: <a href="#sec-3_1">How Python Slithered into Astronomy</a></td></tr>
-<tr><td class="right">10:30-10:45</td><td class="left"></td><td class="left">Tea Break</td></tr>
-<tr><td class="right">10:45-11:30</td><td class="left">Fernando Perez</td><td class="left"><b>Special Talk</b>: <a href="#sec-3_2">IPython : Beyond the Simple Shell</a></td></tr>
-<tr><td class="right">11:30-11:50</td><td class="left">Farhat Habib</td><td class="left"><a href="#sec-4_1">Python as a Platform for Scientific Computing Literacy for 10+2 Students: Weighing the Balance</a></td></tr>
-<tr><td class="right">11:50-12:10</td><td class="left">Jayesh Gandhi</td><td class="left"><a href="#sec-4_14">Microcontroller experiment and its simulation using Python</a></td></tr>
-<tr><td class="right">12:10-12:40</td><td class="left">Vaidhy Mayilrangam</td><td class="left"><a href="#sec-4_17">Natural Language Processing Using Python</a></td></tr>
-<tr><td class="right">12:40-13:10</td><td class="left">Georges Khaznadar</td><td class="left"><a href="#sec-4_10">Live media for training in experimental sciences</a></td></tr>
-<tr><td class="right">13:10-14:10</td><td class="left"></td><td class="left">Lunch</td></tr>
-<tr><td class="right">14:10-14:20</td><td class="left">Shubham Chakraborty</td><td class="left"><a href="#sec-4_11">Use of Python and Phoenix-M interface in Robotics</a></td></tr>
-<tr><td class="right">14:20-14:30</td><td class="left">Erroju Rama Krishna</td><td class="left"><a href="#sec-4_8">Simplified and effective Network Simulation using ns-3</a></td></tr>
-<tr><td class="right">14:30-14:40</td><td class="left"></td><td class="left">More Lightning Talks</td></tr>
-<tr><td class="right">14:40-15:10</td><td class="left">Asokan Pichai</td><td class="left"><b>Invited Talk</b>: <a href="#sec-3_3">Teaching Programming with Python</a></td></tr>
-<tr><td class="right">15:10-15:30</td><td class="left">Hemanth Chandran</td><td class="left"><a href="#sec-4_19">Performance Evaluation of HYBRID MAC for 802.11ad: Next Generation Multi-Gbps Wi-Fi using SimPy</a></td></tr>
-<tr><td class="right">15:30-15:50</td><td class="left">Karthikeyan selvaraj</td><td class="left"><a href="#sec-4_9">PyCenter</a></td></tr>
-<tr><td class="right">15:50-16:10</td><td class="left"></td><td class="left">Tea Break</td></tr>
-<tr><td class="right">16:10-16:40</td><td class="left">Satrajit Ghosh</td><td class="left"><b>Invited Talk</b>: <a href="#sec-3_6">Nipype: Opensource platform for unified and replicable interaction with existing neuroimaging tools</a></td></tr>
-<tr><td class="right">16:40-17:00</td><td class="left">Nek Sharan</td><td class="left"><a href="#sec-4_7">Parallel Computation of Axisymmetric Jets</a></td></tr>
-<tr><td class="right">17:00-17:20</td><td class="left">pankaj pandey</td><td class="left"><a href="#sec-4_20">PySPH: Smooth Particle Hydrodynamics with Python</a></td></tr>
+<tr><td class="right">09:00-09:15</td><td class="left"></td><td class="left">Inauguration</td></tr>
+<tr><td class="right">09:15-10:15</td><td class="left">[Invited Speaker] Eric Jones</td><td class="left"><b>Keynote: What Matters in Scientific Software Projects? 10 Years of Success and Failure Distilled</b></td></tr>
+<tr><td class="right">10:15-10:45</td><td class="left"></td><td class="left">Tea Break</td></tr>
+<tr><td class="right">10:45-11:05</td><td class="left">Ankur Gupta</td><td class="left"><a href="#sec2.2">Multiprocessing module and Gearman</a></td></tr>
+<tr><td class="right">11:05-11:35</td><td class="left">Kunal Puri</td><td class="left"><a href="#sec2.9">Smoothed Particle Hydrodynamics with Python</a></td></tr>
+<tr><td class="right">11:35-12:20</td><td class="left">[Invited Speaker] Mateusz Paprocki</td><td class="left"><b><a href = "#sec2.26">Understanding importance of automated software testing</b></a></td></tr>
+<tr><td class="right">12:20-13:20</td><td class="left"></td><td class="left"><b>Lunch</b></td></tr>
+<tr><td class="right">13:20-14:05</td><td class="left">[Invited Speaker] Ajith Kumar</td><td class="left"><b>Invited Talk</b></td></tr>
+<tr><td class="right">14:05-14:25</td><td class="left">Bala Subrahmanyam Varanasi</td><td class="left"><a href="#sec2.6">Sentiment Analysis</a></td></tr>
+<tr><td class="right">14:25-14:55</td><td class="left">Jayneil Dalal</td><td class="left"><a href="#sec2.8">Building Embedded Systems for Image Processing using Python</a></td></tr>
+<tr><td class="right">14:55-15:05</td><td class="left">IITB Students[Changed to Day 2 lightning talk slot]</td><td class="left"><a href="#sec2.24">Project Presentation</a></td></tr>
+<tr><td class="right">15:05-15:35</td><td class="left"></td><td class="left"><b>Tea Break</b></td></tr>
+<tr><td class="right">15:35-16:20</td><td class="left">[Invited Speaker] Prabhu Ramachandran</td><td class="left"><b>Invited Talk</b></td></tr>
+
+<tr><td class="right">16:20-16:40</td><td class="left">William Natharaj P.S</td><td class="left"><a href="#sec2.3">Automated Measurement of Magnetic properties of Ferro-Magnetic materials using Python</a></td></tr>
+<tr><td class="right">16:40-17:00</td><td class="left">Nivedita Datta</td><td class="left"><a href="#sec2.10">Encryptedly yours : Python & Cryptography</a></td></tr>
+<tr><td class="right">17:10-17:30</td><td class="left"></td><td class="left"><b>Lightning Talks</b></td></tr>
</tbody>
</table>
-
-
-
-
-
<h2 id="sec-2">Day 2 </h2>
-
-
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption></caption>
<colgroup><col class="right" /><col class="left" /><col class="left" />
@@ -52,1434 +43,446 @@
<tr><th scope="col" class="right">Time</th><th scope="col" class="left">Speaker</th><th scope="col" class="left">Title</th></tr>
</thead>
<tbody>
-<tr><td class="right">09:00-10:00</td><td class="left">John Hunter</td><td class="left"><b>Special Talk</b>: <a href="#sec-3_4">matplotlib: Beyond the simple plot</a></td></tr>
-<tr><td class="right">10:00-10:45</td><td class="left">Prabhu Ramachandran</td><td class="left"><b>Invited Talk</b>: <a href="#sec-3_5">Mayavi : Bringing Data to Life</a></td></tr>
-<tr><td class="right">10:45-11:00</td><td class="left"></td><td class="left">Tea</td></tr>
-<tr><td class="right">11:00-11:45</td><td class="left">Stéfan van der Walt</td><td class="left"><b>Invited Talk</b>: <a href="#sec-3_7">In Pursuit of a Pythonic PhD</a></td></tr>
-<tr><td class="right">11:45-12:15</td><td class="left">Dharhas Pothina</td><td class="left"><a href="#sec-4_6">HyPy & HydroPic: Using python to analyze hydrographic survey data</a></td></tr>
-<tr><td class="right">12:15-12:35</td><td class="left">Prashant Agrawal</td><td class="left"><a href="#sec-4_18">A Parallel 3D Flow Solver in Python Based on Vortex Methods</a></td></tr>
-<tr><td class="right">12:35-13:05</td><td class="left">Ajith Kumar</td><td class="left"><a href="#sec-4_12">Python in Science Experiments using Phoenix</a></td></tr>
-<tr><td class="right">13:05-14:05</td><td class="left"></td><td class="left">Lunch</td></tr>
-<tr><td class="right">14:05-14:15</td><td class="left">Harikrishna</td><td class="left"><a href="#sec-4_23">Python based Galaxy workflow integration on GARUDA Grid</a></td></tr>
-<tr><td class="right">14:15-14:25</td><td class="left">Arun C. H.</td><td class="left"><a href="#sec-4_3">Automation of an Optical Spectrometer</a></td></tr>
-<tr><td class="right">14:25-14:35</td><td class="left"></td><td class="left"><a href="#More==Lightning==Talks">More Lightning Talks</a></td></tr>
-<tr><td class="right">14:35-14:55</td><td class="left">Krishnakant Mane</td><td class="left"><a href="#sec-4_22">Convincing Universities to include Python</a></td></tr>
-<tr><td class="right">14:55-15:15</td><td class="left">Shantanu Choudhary</td><td class="left"><a href="#sec-4_4">"Python" Swiss army knife for Prototyping, Research and Fun.</a></td></tr>
-<tr><td class="right">15:15-15:35</td><td class="left">Puneeth Chaganti</td><td class="left"><a href="#sec-4_21">Pictures, Songs and Python</a></td></tr>
-<tr><td class="right">15:35-15:55</td><td class="left">Hrishikesh Deshpande</td><td class="left"><a href="#sec-4_5">Wavelet based denoising of ECG using Python</a></td></tr>
-<tr><td class="right">15:55-16:10</td><td class="left"></td><td class="left">Tea-Break</td></tr>
-<tr><td class="right">16:10-16:40</td><td class="left">Jarrod Millman</td><td class="left"><b>Invited Talk</b><a href="#sec-3_8">Building an open development community for neuroimaging analysis</a></td></tr>
-<tr><td class="right">16:40-17:00</td><td class="left">Ramakrishna Reddy Yekulla</td><td class="left"><a href="#sec-4_13">Building and Packaging your Scientific Python Application For Linux Distributions</a></td></tr>
-<tr><td class="right">17:00-17:20</td><td class="left">Yogesh Karpate</td><td class="left"><a href="#sec-4_16">Automatic Proteomic Finger Printing using Scipy</a></td></tr>
-<tr><td class="right">17:20-17:40</td><td class="left">Manjusha Joshi</td><td class="left"><a href="#sec-4_15">SAGE for Scientific computing and Education enhancement</a></td></tr>
+<tr><td class="right">09:00-09:45</td><td class="left">[Invited Speaker] Gaël Varoquaux</td><td class="left"><a href="#sec2.23"><b>Machine learning as a tool for Neuroscience</b></td></tr>
+<tr><td class="right">09:45-10:15</td><td class="left">[Invited Speaker] Kannan Moudgalya</td><td class="left"><b>National Mission on Education Through ICT</b></td></tr>
+<tr><td class="right">10:15-10:45</td><td class="left"></td><td class="left"><b>Tea</b></td></tr>
+<tr><td class="right">10:45-11:05</td><td class="left">Hrishikesh Deshpande</td><td class="left"><a href="#sec2.14">Higher Order Statistics in Python</a></td></tr>
+<tr><td class="right">11:05-11:25</td><td class="left">Jaidev Deshpande</td><td class="left"><a href="#sec2.18">A Python Toolbox for the Hilbert-Huang Transform</a></td></tr>
+<tr><td class="right">11:25-12:10</td><td class="left">[Invited Speaker] Emmanuelle Gouillart</td><td class="left"><a href="#sec2.27"><b>3-D image processing and visualization with the scientific-Python stack</b></a></td></tr>
+<tr><td class="right">12:10-13:10</td><td class="left"></td><td class="left"><b>Lunch</b></td></tr>
+<tr><td class="right">13:10-13:50</td><td class="left">[Invited Speaker] Ole Nielsen/Panel Discussion with Invited Speakers</td><td class="left"><a href="#sec2.25"><b>7 Steps to Python Software That Works<a/> / Community Building in Open Source Projects</b></td></tr>
+<tr><td class="right">13:50-14:20</td><td class="left">Kunal Puri</td><td class="left"><a href="#sec2.21">GPU Accelerated Computational Fluid Dynamics with Python</a></td></tr>
+<tr><td class="right">14:20-14:50</td><td class="left">Chetan Giridhar</td><td class="left"><a href="#sec2.19">Diving in to Byte-code optimization in Python</a></td></tr>
+<tr><td class="right">14:50-15:20</td><td class="left">Vishal Kanaujia</td><td class="left"><a href="#sec2.7">Exploiting the power of multicore for scientific computing in Python</a></td></tr>
+<tr><td class="right">15:20-15:50</td><td class="left"></td><td class="left"><b>Tea</b></td></tr>
+<tr><td class="right">15:50-16:10</td><td class="left">Mahendra Naik</td><td class="left"><a href="#sec2.13">Large amounts of data downloading and processing in python with facebook data as reference</a></td></tr>
+<tr><td class="right">16:10-16:20</td><td class="left">Sachin Shinde</td><td class="left"><a href="#sec2.22">Reverse Engineering and python</a></td></tr>
+<tr><td class="right">16:20-17:00</td><td class="left"></td><td class="left"><b>Lightning Talks</b></td></tr>
</tbody>
</table>
-
-
-
-
-
-
-
-<h2 id="sec-3">Invited Talks </h2>
-
-
-
-
-
-
-<h3 id="sec-3_1">How Python Slithered into Astronomy </h3>
-
-
-<p>Perry Greenfield
-</p>
-
-
-
-<h4 id="sec-3_1_1">Talk/Paper Abstract </h4>
-
-
-<p>I will talk about how Python was used to solve our problems for
-the Hubble Space Telescope. From humble beginnings as a glue
-element for our legacy software, it has become a cornerstone of
-our scientific software for HST and the next large space
-telescope, the James Webb Space Telescope, as well as many other
-astronomy projects. The talk will also cover some of the history
-of essential elements for scientific Python and where future
-work is needed, and why Python is so well suited for scientific
-software.
-</p>
-
+<br/><br/>
-
-
-
-
-<h3 id="sec-3_2">IPython : Beyond the Simple Shell </h3>
-
-
-<p>Fernando Perez
-</p>
-
-
-
-<h4 id="sec-3_2_1">Talk/Paper Abstract </h4>
-
-
-<p>IPython is a widely used system for interactive computing in
-Python that extends the capabilities of the Python shell with
-operating system access, powerful object introspection,
-customizable "magic" commands and many more features. It also
-contains a set of tools to control parallel computations via
-high-level interfaces that can be used either interactively or
-in long-running batch mode. In this talk I will outline some of
-the main features of IPython as it has been widely adopted by
-the scientific Python user base, and will then focus on recent
-developments. Using the high performance ZeroMQ networking
-library, we have recently restructured IPython to decouple the
-kernel executing user code from the control interface. This
-allows us to expose multiple clients with different
-capabilities, including a terminal-based one, a rich Qt client
-and a web-based one with full matplotlib support. In conjunction
-with the new HTML5 matplotlib backend, this architecture opens
-the door for a rich web-based environment for interactive,
-collaborative and parallel computing. There is much interesting
-development to be done on this front, and I hope to encourage
-participants at the sprints during the conference to join this
-effort.
-</p>
+<h2> Coverage</h2>
+<h3 id="sec2.2">Ankur Gupta : Multiprocessing module and Gearman</h3>
+<h4>Abstract</h4>
+<p class="abstract">Large Data Sets and Multi-Core computers are becoming a common place in today's world.
+Code that utilizes all cores at disposal is prerequisite to process large data sets.
+Scaling over multiple machines/cluster allows for horizontal scaling.
+Drawing on experience of working with a Team at HP that created an near real time
+early warning software named OSSA. OSSA processed over 40TB+ compressed data at HP using 32 cores spread over
+a cluster of machine. Multiprocessing and Gearman ( a distributed job queue with Python bindings ) allows
+any simple python script to go distributed with minimal refactoring.</p>
+<h4>Slides</h4>
+<p>To be uploaded</p>
-
-
-
-
-
-<h3 id="sec-3_3">Teaching Programming with Python </h3>
-
-
-<p>Asokan Pichai
-</p>
-
-
-
-<h4 id="sec-3_3_1">Talk/Paper Abstract </h4>
-
-
-<p>As a trainer I have been engaged a lot for teaching fresh
-Software Engineers and software job aspirants. Before starting
-on the language, platform specific areas I teach a part I refer
-to as Problem Solving and Programming Logic. I have used Python
-for this portion of training in the last 12+years. In this talk
-I wish to share my experiences and approaches. This talk is
-intended at Teachers, Trainers, Python Evangelists, and HR
-Managers [if they lose their way and miraculously find
-themselves in SciPy :-)]
-</p>
-
-
-
-
-
-
-<h3 id="sec-3_4">matplotlib: Beyond the simple plot </h3>
-
-
-<p>John Hunter
+<h3 id="sec2.3">William Natharaj P.S: Automated Measurement of Magnetic properties of Ferro-Magnetic materials using Python</h3>
+<h4>Abstract</h4>
+<p>Hysterisis is basically a phenomenon where the behaviour of a system depends on the way the system moves.
+On increasing the magnetizing field H applied to a magnetic material ,
+the corresponding induction B traces a different path when it increases from that when the field
+decreases tracing a loop. It is often referred to as the B-H loop.</p>
+<p>A ferromagnetic specimen is placed co-axially in an applied magnetic field.
+The specimen gets magnetised and the magnetisation undergoes a variation due to the varying field .
+This variation is picked up by a pickup coil which is placed co-axially with the specimen.
+The dB/dt signal thus pickedup is propotional to dB/dt, which on integration gives the desired B.
+The H field is sampled as proportional to the energyzing current.</p>
+<p>Data acquisition of H and dB/dt is done using a microcontroller
+based Data acquisition system which is implimented in Python.
+The signal is acquired alternately choosing the H and the dB/dt.
+The acquired data is nose reduced by averaging over various cycles.
+The processed signal dB/dt is integrated numerically making sure that
+the constant of integration chosen makes B swing equally on both sides of the H axis .
+The electronic circuitry used introduces an extra phase shift.
+This is nulled by running the experiment in air where B-H curve is only a straight line.
+The retentivity, coercivity and the susceptibility of the specimen are calculated as the modulus
+of the X and the modulus of the Y intercepts .
+The result for steel agrees with reported values.
+This method also gives a way of calculating the hysterysis loss in the sample percycle.
</p>
-
-
-
-<h4 id="sec-3_4_1">Talk/Paper Abstract </h4>
-
-
-<p>matplotlib, a python package for making sophisticated
-publication quality 2D graphics, and some 3D, has long supported
-a wide variety of basic plotting types such line graphs, bar
-charts, images, spectral plots, and more. In this talk, we will
-look at some of the new features and performance enhancements in
-matplotlib as well as some of the comparatively undiscovered
-features such as interacting with your data and graphics, and
-animating plot elements with the new animations API. We will
-explore the performance with large datasets utilizing the new
-path simplification algorithm, and discuss areas where
-performance improvements are still needed. Finally, we will
-demonstrate the new HTML5 backend, which in combination with the
-new HTML5 IPython front-end under development, will enable an
-interactive Python shell with interactive graphics in a web
-browser.
-</p>
-
-
-
-
-
-<h3 id="sec-3_5">Mayavi : Bringing Data to Life </h3>
-
-
-<p>Prabhu Ramachandran
-</p>
-
-
-
-<h4 id="sec-3_5_1">Talk/Paper Abstract </h4>
-
+<h4>Slides</h4>
+<p>To be uploaded</p>
-<p>Mayavi is a powerful 3D plotting package implemented in
-Python. It includes both a standalone user interface along with
-a powerful yet simple scripting interface. The key feature of
-Mayavi though is that it allows a Python user to rapidly
-visualize data in the form of NumPy arrays. Apart from these
-basic features, Mayavi has some advanced features. These
-include, automatic script recording, embedding into a custom
-user dialog and application. Mayavi can also be run in an
-offscreen mode and be embedded in a sage notebook
-(<a href="http://www.sagemath.org">http://www.sagemath.org</a>). We will first rapidly demonstrate
-these key features of Mayavi. We will then discuss some of the
-underlying technologies like enthought.traits, traitsUI and TVTK
-that form the basis of Mayavi. The objective of this is to
-demonstrate the wide range of capabilities that both Mayavi and
-its underlying technologies provide the Python programmer.
-</p>
-
-
-
-
-
-<h3 id="sec-3_6">Nipype: Opensource platform for unified and replicable interaction with existing neuroimaging tools </h3>
-
-
-<p>Satrajit Ghosh
-</p>
-
-
-
-<h4 id="sec-3_6_1">Talk/Paper Abstract </h4>
-
+<h3 id="sec2.6">Bala Subrahmanyam Varanasi : Sentiment Analysis</h3>
+<h4>Abstract</h4>
+<p>This talk will start with a quick overview of my topic - Sentiment analysis, its
+Applications, Opportunities and various Challenges involved in Sentiment Mining.
+Later, we present our machine learning experiments conducted using Natural Language Tool Kit
+(NLTK) with regard to sentiment analysis for the language "Telugu", where this work is less implemented.</p>
+<p>We have developed a Sentiment analyzer for Telugu Language.
+For that we developed movie review corpus from a popular website telugu.oneindia.com as our
+data set which is classified according to subjectivity/objectivity and negative/positive attitude.
+We used different approaches in extracting text features such as bag-of-words model,
+using large movie reviews corpus, restricting to adjectives and adverbs,
+handling negations and bounding word frequencies by a threshold.
+We conclude our study with explanation of observed trends in accuracy rates and providing directions for future work.</p>
+<h4>Slides</h4>
+<p>To be uploaded</p>
+<h3 id="sec2.7">Vishal Kanaujia : Exploiting the power of multicore for scientific computing in Python</h3>
+<h4>Abstract</h4>
+<p>Multicore systems offer abundant potential for parallel computing,
+and Python developers are flocking to tap this power.
+Python is gaining popularity in high performance computing with rich set of libraries and frameworks.</p>
+<p>Typically, scientific applications viz. modeling weather patterns,
+seismographic data, astronomical analysis etc, deal with huge data-set.
+Processing of this raw data for further analysis is a highly CPU-intensive task.
+Hence it is critical that design and development of these applications should
+look towards utilizing multiple CPU cores in an efficient manner for high performance.</p>
-<p>Current neuroimaging software offer users an incredible
-opportunity to analyze their data in different ways, with
-different underlying assumptions. However, this has resulted in
-a heterogeneous collection of specialized applications without
-transparent interoperability or a uniform operating
-interface. Nipype, an open-source, community-developed
-initiative under the umbrella of Nipy, is a Python project that
-solves these issues by providing a uniform interface to existing
-neuroimaging software and by facilitating interaction between
-these packages within a single workflow. Nipype provides an
-environment that encourages interactive exploration of
-neuroimaging algorithms from different packages, eases the
-design of workflows within and between packages, and reduces the
-learning curve necessary to use different packages. Nipype is
-creating a collaborative platform for neuroimaging software
-development in a high-level language and addressing limitations
-of existing pipeline systems.
-</p>
-
-
-
-
-
-
-
-
-
-<h3 id="sec-3_7">In Pursuit of a Pythonic PhD </h3>
-
-
-<p>Stéfan van der Walt
-</p>
-
-
-
-<h4 id="sec-3_7_1">Talk/Paper Abstract </h4>
-
-
-<p>In May of 2005, I started a pilgrimage to transform myself into
-a doctor of engineering. Little did I know, then, that my
-journey would bring me in touch with some of the most creative,
-vibrant and inspiring minds in the open source world, and that
-an opportunity would arise to help realise their (and now my)
-dream: a completely free and open environment for performing
-cutting edge science. In this talk, I take you on my journey,
-and along the way introduce the NumPy and SciPy projects, our
-community, the early days of packaging, our documentation
-project, the publication of conference proceedings as well as
-work-shops and sprints around the world. I may even tell you a
-bit about my PhD on super-resolution imaging!
-</p>
-
-
-
+<p>This talk discusses different methods to achieve parallelism in
+Python applications and analyze these methods for effectiveness and suitability.</p>
-
-
-<h3 id="sec-3_8">Building an open development community for neuroimaging analysis</h3>
-
-
-<p>Jarrod Millman
-</p>
-
-
-
-<h4 id="sec-3_8_1">Talk/Paper Abstract </h4>
-
-
-<p>Programming is becoming increasingly important to scientific activity. As its
-importance grows, the need for better software tools becomes more and more
-central to scientific practice. However, many fields of science rely on
-badly written, poorly documented, and insufficiently tested codebases.
-Moreover, scientific software packages often implement only the approaches
-and algorithms needed or promoted by the specific lab where the software
-was written.</p>
-
-<p>In this talk, I will illustrate this situation by discussing some of the
-weaknesses of the software ecosystem for neuroimaging analysis circa 2004.
-I will then describe how several of my colleagues and I are attempting
-to rectify this situation with a project called Neuroimaging in Python
-(http://nipy.org). Specifically, I will discuss the approach we've taken
-(e.g., using Python) and the lessons we've learned.
-</p>
-
-
-
-
-
-
-
-
-<h2 id="sec-4">Submitted Talks </h2>
-
-
-
-
-
+<h4>Agenda</h4>
+<ul>
+ <li>Problem context: Big data problem</li>
+ <li>Designing Python programs for multicores</li>
+ <li>Achieving parallelism
+ <ul>
+ <li>Multithreading and the infamous GIL</li>
+ <li>Exploring multiprocessing</li>
+ <li>Jython concurrency</li>
+ </ul>
+ </li>
+</ul>
+<h4>Slides</h4>
+<p>To be uploaded</p>
-<h3 id="sec-4_1">Python as a Platform for Scientific Computing Literacy for 10+2 Students: Weighing the Balance </h3>
-
-
-<p>Farhat Habib
-</p>
-
-
-
-<h4 id="sec-4_1_1">Talk/Paper Abstract </h4>
-
-
-<p>The use of Python as a language for introducing computing is
-becoming increasingly widespread. Here we report out findings
-from two years of running an introduction to computing course
-with Python as the programming language, and building upon it,
-using SciPy as a scientific computing language in a course on
-scientific computing.
+<h3 id="sec2.8">Jayneil Dalal : Building Embedded Systems for Image Processing using Python</h3>
+<h4>Abstract</h4>
+<p>I plan to teach everyone how to import the very popular and powerful
+OpenCV library to Python and use it for image processing.
+I will also cover the installation of the same as it is a very
+cumbersome and a bit difficult task. Then we will do basic image processing programs .
+Then I will teach how to interact with an embedded system(Arduino) using Pyserial
+module and carry out different actions(Turn on LED etc.)
+So finally we will develop a full fledged embedded system.
+For e.g.: We will do image processing to detect a certain object in a given
+image and based on the output of that, the embedded system will do a certain task.
+If in a given image using facial recognition, a face is detected then an LED will be turned ON! All using python.
</p>
-
-<p>
-The course is designed as a general computing course for
-introducing computing to first year undergraduate students of
-science. We find that a large majority of our incoming students
-have no prior exposure to programming and none of the students
-had any exposure to Python. Thus, the design of the course is
-such that it allows everybody to be brought up to speed with
-general programming concepts. Later, the students will later
-specialize in varied topics from Biology to pure Mathematics,
-thus, the course emphasizes general computing concepts over
-specialized techniques. At a second course in Scien- tific
-Computing numerical methods are introduced with the aid of
-Scipy. The introduction to computing course has been taught
-twice in Fall 2009 and 2010 to batches of around 100 students
-each. In this paper we report our experience with teaching
-Python and student and faculty feedback related to the course.
-</p>
-
-
-
-
-
-
-<h3 id="sec-4_2">Usb Connectivity Using Python </h3>
+<h4>Slides</h4>
+<p>To be uploaded</p>
-<p>Arun C. H.
-</p>
-
-
-
-<h4 id="sec-4_2_1">Talk/Paper Abstract </h4>
-
+<h3 id="sec2.9">Kunal Puri : Smoothed Particle Hydrodynamics with Python</h3>
+<h4>Abstract</h4>
+<p>We present PySPH as a framework for smoothed particle hydrodynamics simulations in Python.
+PySPH can be used for a wide class of problems including fluid dynamics, solid mechanics and
+compressible gas dynamics. We demonstrate how to run simulations and view the results with PySPH from the end-user's perspective.
+</p>
-<p>Host software using Python interpreter language to communicate
-with the USB Mass Storage class device is developed and
-tested. The <sub>usic18F4550</sub>.pyd module encapsulating all the
-functions needed to configure USB is developed. The Python
-extension .pyd using C/C++ functions compatible for Windows make
-use of SWIG, distutils and MinGW. SWIG gives the flexibility to
-access lower level C/C++ code through more convenient and higher
-level languages such as Python, Java, etc. Simplified Wrapper and
-Interface Generator (SWIG) is a middle interface between Python
-and C/C++. The purpose of the Python interface is to allow the
-user to initialize and configure USB through a convenient
-scripting layer. The module is built around libusb which can
-control an USB device with just a few lines. Libusb-win32 is a
-port of the USB library to the Windows operating system. The
-library allows user space applications to access any USB device on
-Windows in a generic way without writing any line of kernel driver
-code. A simple data acquisition system for measuring analog
-voltage, setting and reading the status of a particular pin of the
-micro controller is fabricated. It is interfaced to PC using USB
-port that confirms to library USB win32 device. The USB DAQ
-hardware consists of a PIC18F4550 micro-controller and the
-essential components needed for USB configuration.
-</p>
-
-
-
-
-
-
-
-
-<h3 id="sec-4_3">Automation of an Optical Spectrometer </h3>
-
+<p>Note: This is intended to be a magazine-style article as the PySPH architecture is discussed elsewhere.</p>
+<h4>Slides</h4>
+<p>To be uploaded</p>
-<p>Arun C. H.
-</p>
-
-
-
-<h4 id="sec-4_3_1">Talk/Paper Abstract </h4>
-
-
-<p>This paper describes the automation performed for an Optical
-Spectrometer in order to precisely monitor angles, change
-dispersing angle and hence measure wave length of light using a
-data logger, necessary hardware and Python. Automating instruments
-through programs provides great deal of power, flexibility and
-precision. Optical Spectrometers are devices which analyze the
-wave length of light, and are typically used to identify
-materials, and study their optical properties. A broad spectrum of
-light is dispersed using a grating and the dispersed light is
-measured using a photo transistor. The signal is processed and
-acquired using a data logger. Transfer of data, changing angle of
-diffraction are all done using the Python. The angle of
-diffraction is varied by rotating the detector to pick up lines
-using a stepper motor. The Stepper motor has 180 steps or 2
-degrees per step. A resolution of 0.1 degree is achieved in the
-spectrometer by using the proper gear ratio. The data logger is
-interfaced to the computer through a serial port. The stepper
-motor is also interfaced to the computer through another serial
-port. Python is chosen here for its succinct notation and is
-implemented in a Linux environment.
-</p>
-
-
-
-
-
-
-
-
-<h3 id="sec-4_4">"Python" Swiss army knife for Prototyping, Research and Fun. </h3>
-
-
-<p>Shantanu Choudhary
+<h3 id="sec2.10">Nivedita Datta : Encryptedly yours : Python & Cryptography</h3>
+<h4>Abstract</h4>
+<p>In today's world, the hard truth about protecting electronic messages and
+transactions is that no matter how advanced the technology being used,
+there is no guarantee of absolute security. As quickly as researchers develop
+ever-more-rigorous methods for keeping private information private,
+others figure out how to skirt those safeguards. That's particularly worrisome as our
+society becomes more and more dependent on e-commerce. Scientists say that even measures
+now considered virtually 'unbreakable' might someday be broken, by either mathematicians or
+computers that develop new algorithms to crack the protective code.
</p>
-
-
-<h4 id="sec-4_4_1">Talk/Paper Abstract </h4>
-
-
-<p>This talk would be covering usage of Python in different scenarios which helped me through my work:
-</p><ul>
-<li>
-Small mlab(Mayavi) scripts which helped in better understanding
-of problem statement.
-</li>
-<li>
-Python3.0 and its blender API's for writing plugins which are
-used for Open Source Animation movie project
-Tube(tube.freefac.org)
-</li>
-<li>
-PyOpenCL Python's interfacing for OpenCL which helped in
-prototyping and speed up of application.
-</li>
+<h4>Agenda</h4>
+<ul>
+ <li>What is cryptography</li>
+ <li>Why cryptography</li>
+ <li>Basic terminologies</li>
+ <li>
+ Classification of cryptographic algorithms
+ <ul>
+ <li>Stream cipher and block ciphers</li>
+ <li>Public key and private key algorithms</li>
+ </ul>
+ </li>
+ <li>Introduction to hashing</li>
+ <li>Introduction to pycrypto module</li>
+ <li>pycrypto installation steps</li>
+ <li>Code for few cryptographic and hashing algorithms</li>
</ul>
-
-
-
-
-
-
-
-<h3 id="sec-4_5">Wavelet based denoising of ECG using Python </h3>
-
-
-<p>Hrishikesh Deshpande
-</p>
-
-
-
-<h4 id="sec-4_5_1">Talk/Paper Abstract </h4>
-
+<h4>Slides</h4>
+<p>To be uploaded</p>
-<p>The python module "RemNoise" is presented. It allows user to
-automatically denoise one-dimensional signal using wavelet
-transform. It also removes baseline wandering and motion
-artifacts. While RemNoise is developed primarily for biological
-signals like ECG, its design is generic enough that it should be
-useful to applications involving one-dimensional signals. The
-basic idea behind this work is to use multi-resolution property of
-wavelet transform that allows to study non-stationary signals in
-greater depth. Any signal can be decomposed into detail and
-approximation coefficients, which can further be decomposed into
-higher levels and this approach can be used to analyze the signal
-in time-frequency domain. The very first step in any
-data-processing application is to pre-process the data to make it
-noise-free. Removing noise using wavelet transform involves
-transforming the dataset into wavelet domain, zero out all
-transform coefficients using suitable thresholding method and
-reconstruct the data by taking its inverse wavelet transform. This
-module makes use of PyWavelets, Numpy and Matplotlib libraries in
-Python, and involves thresholding wavelet coefficients of the data
-using one of the several thresholding methods. It also allows
-multiplicative threshold rescaling to take into consideration
-detail coefficients in each level of wavelet decomposition. The
-user can select wavelet family and level of decompositions as
-required. To evaluate the module, we experimented with several
-complex one-dimensional signals and compared the results with
-equivalent procedures in MATLAB. The results showed that RemNoise
-is excellent module to preprocess data for noise-removal.
-</p>
+<h3 id="sec2.13">Mahendra Naik : Large amounts of data downloading and processing in python with facebook data as reference</h3>
+<p>Python is an easy to learn language which helps for rapid development of applications.
+The only visbile hindrance to python is the speed of processing ,primarily because it is a scripting language.
+Scientific computing involves processing large amounts of data in a very short period of time.
+This paper talks about an efficient algorithm to process massive(GB's) textual data in time interval of less than a second.
+There will not be any changes to core python.
+The existing python libraries will be used to process this data.
+The main aspect of the project is that we will not be dealing with the old data stored in the filesystem .
+We will be downloading data from the internet and the processing will happen in real-time.
+So, an effective caching , if any used should be implemented.
+A database like MYSQL will be used to store the data.</p>
+<p>Pythreads will be used for parallel downloading and processing of data.
+So a constant stream of huge data will be downloaded and later processed for the required data.
+This algorithm can find use in scientific applications where a large data needs to processes in real-time.
+And this will be achieved without making any changes to core python.
+The data we will be processing on would be retrieved from facebook.
+Facebook was choosen because of its massive userbase and the massive data stored for almost every user.
+Another reason for choosing facebook was the availability of api's to access data.
+Facebook exposes its data to developers through facebook platform.
+We will be using facebook's graph api to download data from facebook.
+Graph api stores each and every element from facebook as an id.
+The data from all the id's from 1 to a very huge number (eg:10 billion)
+will be extracted from facebook and will be processed to retrieve the required data.
+The main intention of the project is to implement an algorithm to process massive amounts of data in real time using python .
+As explained above we will take facebook as the reference data.</p>
+<h4>Slides</h4>
+<p>To be uploaded</p>
-
-
-
-
-
-
-
-<h3 id="sec-4_6">HyPy & HydroPic: Using python to analyze hydrographic survey data </h3>
-
-
-<p>Dharhas Pothina
-</p>
-
-
-
-<h4 id="sec-4_6_1">Talk/Paper Abstract </h4>
-
+<h3 id="sec2.14">Hrishikesh Deshpande : Higher Order Statistics in Python</h3>
+<h4>Abstract</h4>
+<p>In many signal and image processing applications, correlation and power spectrum have been used as primary tools; the information contained in the power spectrum is provided by auto-correlation and is sufficient for complete statistical descriptions of Gaussian signals of known means. However, there exist some practical situations where one needs to look beyond auto-correlation operation to extract information pertaining to deviation from Gaussianity and the presence of phase relations. Higher Order Statistics (HOS) are the extensions of second order measures to higher orders and have proven to be useful in problems where non-gaussianity, non-minimal phase or non-linearity has some role to play. In recent years, the field of HOS has continued its expansion, and applications have been found in fields as diverse as economics, speech, medical, seismic data processing, plasma physics and optics. In this paper, we present a module named PyHOS, which provides elementary higher order statistics functions in Python and further discuss an application of HOS for biomedical signals. This module makes use of SciPy, Numpy and Matplotlib libraries in Python. To evaluate the module, we experimented with several complex signals and compared the results with equivalent procedures in MATLAB. The results showed that PyHOS is excellent module to analyze or study signals using their higher order statistics features.</p>
+<h4>Slides</h4>
+<p>To be uploaded</p>
-<p>
-The Texas Water Development Board(TWDB) collects hydrographic
-survey data in lakes, rivers and estuaries. The data collected
-includes single, dual and tri-frequency echo sounder data
-collected in conjunction with survey grade GPS systems. This raw
-data is processed to develop accurate representations of
-bathymetry and sedimentation in the water bodies surveyed.
-</p>
-<p>
-This talk provides an overview of how the Texas Water Development
-Board (TWDB) is using python to streamline and automate the
-process of converting raw hydrographic survey data to finished
-products that can then be used in other engineering applications
-such as hydrodynamic models, determining lake
-elevation-area-capacity relationships and sediment contour maps,
-etc.
-</p>
-<p>
-The first part of this talk will present HyPy, a python module
-(i.e. function library) for hydrographic survey data
-analysis. This module contains functions to read in data from
-several brands of depth sounders, conduct anisotropic
-interpolations along river channels, apply tidal and elevation
-corrections, apply corrections to boat path due to loss of GPS
-signals as well as a variety of convenience functions for dealing
-with spatial data.
+<h3 id="sec2.18">Jaidev Deshpande : A Python Toolbox for the Hilbert-Huang Transform</h3>
+<h4>Abstract</h4>
+<p>This paper introduces the PyHHT project. The aim of the project is to develop a Python toolbox for the Hilbert-Huang Transform (HHT) for nonlinear and nonstationary data analysis. The HHT is an algorithmic tool particularly useful for the time-frequency analysis of nonlinear and nonstationary data. It uses an iterative algorithm called Empirical Mode Decomposition (EMD) to break a signal down into so-called Intrinsic Mode Functions (IMFs). These IMFs are characterized by being piecewise narrowband and amplitude/frequency modulated, thus making them suitable for Hilbert spectral analysis.</p>
+
+<p>HHT is primarily an algorithmic tool and is relatively simple to implement. Therefore, even a crude implementation of the HHT is quite powerful for a given class of signals. Thus, one of the motivations for building a toolbox is to sustain the power of HHT across a variety of applications. This can be achieved by bringing together different heuristics associated with HHT on one programming platform (since HHT is largely algorithmic, there are a great many heuristics). It is thus the purpose of the toolbox to provide those implementations of the HHT that are popular in the literature. Along with making the application of HHT more dexterous and flexible, the toolbox will also be a good research tool as it provides a platform for comparison of different HHT implementations. It also supports comparison with conventional data analysis tools like Fourier and Wavelets.</p>
+
+<p>Most of the existing implementations of the HHT have functions that are drawn from different numerical computing packages, and hence are generalized, not optimized particularly for HHT. PyHHT includes functions that are optimized specifically for analysis with HHT. They are designed to operate at the least possible computational complexity, thus greatly increasing the performance of the analysis. The paper includes examples of such components of EMD which have been optimized to operate at the least possible expense – in comparison with conventional implementations. This optimization can be done in a number of ways. One example of optimizing conventional algorithms for PyHHT discussed in the paper is that of cubic spline interpolation. It is a major bottleneck in the EMD method (needs to be performed twice over the entire range of the signal in a single iteration). Most implementations for cubic splines involve the use of Gaussian elimination, whereas for PyHHT the much simpler tridiagonal system of equations will suffice. Furthermore, it can be improved using many different methods like using NumPy vectorization, the weave and blitz functions in SciPy, or by using the Python-C/C++ API. Thus, the portability of Python comes in handy when optimizing the algorithm on so many different levels. The paper also discusses the possibility of further improving such functions that are the biggest bottlenecks in the EMD algorithm.</p>
+
+<p>Other heuristics of the HHT include imposing different stopping conditions for the iterative EMD process. Once the IMFs of the original signal are obtained, their time-frequency-energy distributions can be obtained. PyHHT uses Matplotlib to visualize the distributions. The IMFs can further be used in computer vision and machine learning applications. PyHHT uses a number of statistical and information theoretic screening tools to detect the useful IMFs from among the decomposed data.</p>
+
+<p>Finally we perform HHT on a few test signals and compare it with the corresponding Fourier and Wavelet analyses. We comment on the advantages and limitations of the HHT method and discuss future improvements in the PyHHT project.</p>
+<h4>Slides</h4>
+<p>To be uploaded</p>
+
+<h3 id="sec2.19">Chetan Giridhar : Diving in to Byte-code optimization in Python</h3>
+<h4>Abstract</h4>
+<p>The rapid development cycle and performance makes Python as a preferred choice for HPC applications. Python is an interpreted language , running on Python Virtual Machine. Python VM then translates and executes byte-code on native platform. A Python application follows classical phases of compilation and byte-code generation is very similar to intermediate code. The byte-codes are platform neutral and enables Python applications with the power of portability. Performance of a Python application could factored on:
+<ul>
+ <li>Quality of generated byte-code</li>
+ <li>Efficiency of Python VM</li>
+</ul>
</p>
-<p>
-In the second part of the talk we present HydroPic, a simple
-Traits based application built of top of HyPy. HydroPic is
-designed to semi-automate the determination of sediment volume in
-a lake. Current techniques require the visual inspection of images
-of echo sounder returns along each individual profile. We show
-that this current methodology is slow and subject to high human
-variability. We present a new technique that uses computer vision
-edge detection algorithms available in python to semi-automate
-this process. HydroPic wraps these algorithms into a easy to use
-interface that allows efficient processing of data for an entire
-lake.
-</p>
+<p>This talk discusses the internals of Python byte code, generation and potential optimization to improve run time performance of applications.</p>
-
-
-
-
-
-<h3 id="sec-4_7">Parallel Computation of Axisymmetric Jets </h3>
-
+<h4>Agenda</h4>
+<ul>Python Virtual Machine: internals
+<li>Reverse engineering: Python byte code ("pyc" files)
+ <ul><li>Exploring Python dis-assembler for pyc</li></ul></li>
+<li>Optimizing python byte code for time-efficiency
+ <ul><li>Peephole optimization</li>
+ <li>Tweaking the Python VM</li></ul></li>
+<li>Does PyPy helps?</li>
+</ul>
+<h4>Slides</h4>
+<p>To be uploaded</p>
-<p>Nek Sharan
-</p>
-
-
-
-<h4 id="sec-4_7_1">Talk/Paper Abstract </h4>
-
+<h3 id="sec2.21">Kunal puri : GPU Accelerated Computational Fluid Dynamics with Python</h3>
+<h4>Abstract</h4>
+<p>Computational fluid dynamics (CFD) is a field dominated by code that
+is written in either Fortran or C/C++. An example is the well known
+open source CFD tool, OpenFOAM, that adopts C++ as the language of
+implementation.\newline A language like Python would be the ideal
+choice but for the performance penalty incurred. Indeed, equivalent
+Python code is at least an order of magnitude slower than C/C++ or
+Fortran.</p>
-<p>Flow field for imperfectly expanded jet has been simulated using
-Python for prediction of jet screech frequency. This plays an
-important role in the design of advanced aircraft engine nozzle,
-since screech could cause sonic fatigue failure. For computation,
-unsteady axisymmetric Navier-Stokes equation is solved using fifth
-order Weighted Essentially Non-Oscillatory (WENO) scheme with a
-subgrid scale Large-Eddy Simulation (LES) model. Smagorinsky’s
-eddy viscosity model is used for subgrid scale modeling with
-second order (Total Variation Diminishing) TVD Runge Kutta time
-stepping. The performance of Python code is enhanced by using
-different Cython constructs like declaration of variables and
-numpy arrays, switching off bound check and wrap around etc. Speed
-up obtained from these methods have been individually clocked and
-compared with the Python code as well as an existing in-house C
-code. Profiling was used to highlight and eliminate the expensive
-sections of the code.
+<p>A common approach is to combine the best of both worlds wherein the
+computationally expensive routines that form a small core is written
+in a high performance language and the rest of the software framework
+is built around this core using Python. We adopt such a model to
+develop a code for the incompressible Navier Stokes equations using
+OpenCL as the underlying language and target graphics processing units
+(GPUs) as the execution device.
</p>
<p>
-Further, both shared and distributed memory architectures have
-been employed for parallelization. Shared memory parallel
-processing is implemented through a thread based model by manual
-release of Global Interpreter Lock (GIL). GIL ensures safe and
-exclusive access of Python interpreter internals to running
-thread. Hence while one thread is running with GIL the other
-threads are put on hold until the running thread ends or is forced
-to wait. Therefore to run two threads simultaneously, GIL was
-manually released using "with nogil" statement. The relative
-independence of radial and axial spatial derivative computation
-provides an option of putting them in parallel threads. On the
-other hand, distributed memory parallel processing is through MPI
-based domain decomposition, where the domain is split radially
-with an interface of three grid points. Each sub-domain is
-delegated to a different processor and communication, in the form
-of message transmission, ensures update of interface grid
-points. Performance analyses with increase in number of processors
-indicate a trade-off between computation and communication. A
-combined thread and MPI based model is attempted to harness the
-benefits from both forms of architectures.
-</p>
-
-
-
-
-
-
-
-
-<h3 id="sec-4_8">Simplified and effective Network Simulation using ns-3 </h3>
-
-
-<p>Erroju Rama Krishna
-</p>
-
-
-
-<h4 id="sec-4_8_1">Talk/Paper Abstract </h4>
-
-
-
-<p>
-Network simulation has great significance in the research areas of
-modern networks. The ns-2 is the popular simulation tool which
-proved this, in the successive path of ns-2 by maintaining the
-efficiency of the existing mechanism it has been explored with a
-new face and enhanced power of python scripting in ns-3. Python
-scripting can be added to legacy projects just as well as new
-ones, so developers don't have to abandon their old C/C++ code
-libraries, but in the ns-2 it is not possible to run a simulation
-purely from C++ (i.e., as a main() program without any OTcl), ns-3
-does have new capabilities (such as handling multiple interfaces
-on nodes correctly, use of IP addressing and more alignment with
-Internet protocols and designs, more detailed 802.11 models, etc.)
-</p>
-<p>
-In ns-3, the simulator is written entirely in C++, with optional
-Python bindings. Simulation scripts can therefore be written in
-C++ or in Python. The results of some simulations can be
-visualized by nam, but new animators are under development. Since
-ns-3 generates pcap packet trace files, other utilities can be
-used to analyze traces as well.
-</p>
-<p>
-In this paper the efficiency and effectiveness of IP addressing
-simulation model of ns-3 is compared with the ns-2 simulation
-model,ns-3 model consisting of the scripts written in Python which
-makes the modeling simpler and effective
-</p>
-
-
-
-
-
-
-
-<h3 id="sec-4_9">PyCenter </h3>
-
-
-<p>Karthikeyan selvaraj
-</p>
-
-
-
-<h4 id="sec-4_9_1">Talk/Paper Abstract </h4>
-
-
-<p>The primary objective is defining a centralized testing
-environment and a model of testing framework which integrates all
-projects in testing in a single unit.
-</p>
-<p>
-The implementation of concurrent processing systems and adopting
-client server architecture and with partitioned server zones for
-environment manipulation, allows the server to run test requests
-from different projects with different environment and testing
-requests. The implementation provides features of auto-test
-generation, scheduled job run from server, thin and thick clients.
+The data-parallel nature of most CFD algorithms renders them ideal for
+execution on the highly parallel GPU architectures, which are designed
+to run tens of thousands of light-weight threads simultaneously. The
+result is that well designed GPU code can outperform it's CPU
+counterpart by an order of magnitude in terms of speed.
</p>
<p>
-The core engine facilitates the management of tests from all the
-clients with priority and remote scheduling. It has an extended
-configuration utility to manipulate test parameters and watch
-dynamic changes. It not only acts as a request pre-preprocessor
-but also a sophisticated test bed by its implementation. It is
-provided with storage and manipulation segment for every
-registered project in the server zone. The system schedules and
-records events and user activities thereby the results can be
-drilled and examined to core code level with activates and system
-states at the test event point.
-</p>
-<p>
-The system generates test cases both in human readable as well as
-executable system formats. The generated tests are based on a
-pre-defined logic in the system which can be extended to adopt new
-cases based on user requests. These are facilitated by a template
-system which has a predefined set of cases for various test types
-like compatibility, load, performance, code coverage, dependency
-and compliance testing. It is also extended with capabilities like
-centralized directory systems for user management with roles and
-privileges for authentication and authorization, global mailer
-utilities, Result consolidator and Visualizer.
-</p>
-<p>
-With the effective implementation of the system with its minimal
-requirements, the entire testing procedure can be automated with
-the testers being effectively used for configuring, ideating and
-managing the test system and scenarios. The overhead of managing
-the test procedures like environment pre-processing, test
-execution, results collection and presentation are completely
-evaded from the testing life cycle.
-</p>
-
-
-
-
-
-
-
-
-<h3 id="sec-4_10">Live media for training in experimental sciences </h3>
-
-
-<p>Georges Khaznadar
-</p>
-
-
-
-<h4 id="sec-4_10_1">Talk/Paper Abstract </h4>
-
-
-<p>A system for distance learning in the field of Physics and
-Electricity has been used for three years with some success for 15
-years old students. The students are given a little case
-containing a PHOENIX box (see
-<a href="http://www.iuac.res.in/~elab/phoenix/">http://www.iuac.res.in/~elab/phoenix/</a>) featuring electric analog
-and digital I/O interfaces, some unexpensive discrete components
-and a live (bootable) USB stick.
-</p>
-<p>
-The PHOENIX project was started by Inter University Accelerator
-Centre in New Delhi, with the objective of improving the
-laboratory facilities at Indian Universities, and growing with the
-support of the user community. PHOENIX depends heavily on Python
-language. The data acquisition, analysis and writing simulation
-programs to teach science and computation.
-</p>
-<p>
-The hardware design of PHOENIX box is freely available.
-</p>
-<p>
-The live bootable stick provides a free/libre operating system,
-and a few dozens educational applications, including applications
-developed with Scipy to drive the PHOENIX box and manage the
-acquired measurements. The user interface has been made as
-intuitive as possible: the main window shows a photo of the front
-face of the PHOENIX acquisition device, its connections behaving
-like widgets to express their states, and a subwindow displays in
-real time the signals connected to it. A booklet gives
-general-purpose hints for the usage of the acquisition device. The
-educational interaction is done with a free learning management
-system.
-</p>
-<p>
-The talk will show how such live media can be used as powerful
-training systems, allowing students to access at home exactly the
-same environment they can find in the school, and providing them a
-lot of structured examples.
-</p>
-<p>
-This talk addresses people who are involved in education and
-training in scientific fields. It describes one method which
-allows distance learning (however requiring a few initial lessons
-to be given non-remotely), and enables students to become fluent
-with Python and its scientific extensions, while learning physics
-and electricity. This method uses Internet connections to allow
-remote interactions, but does not rely on a wide bandwidth, as the
-complete learning environment is provided by the live medium,
-which is shared by teacher and students after their beginning
-lessons.
-</p>
-
-
-
-
-
-
-
-<h3 id="sec-4_11">Use of Python and Phoenix-M interface in Robotics </h3>
-
-
-<p>Shubham Chakraborty
-</p>
-
-
-
-<h4 id="sec-4_11_1">Talk/Paper Abstract </h4>
-
-
-<p>In this paper I will show how to use Python programming with a
-computer interface such as Phoenix-M to drive simple robots. In my
-quest towards Artificial Intelligence (AI) I am experimenting with
-a lot of different possibilities in Robotics. This one is trying
-to mimic the working of a simple insect's autonomous nervous
-system using hard wiring and some minimal software usage. This is
-the precursor to my advanced robotics and AI integration where I
-plan to use an new paradigm of AI based on Machine Learning and
-Self Consciousness via Knowledge Feedback and Update process.
-</p>
-
-
-
-
-
-
-
-
-<h3 id="sec-4_12">Python in Science Experiments using Phoenix </h3>
-
-
-<p>Ajith Kumar
-</p>
-
-
-
-<h4 id="sec-4_12_1">Talk/Paper Abstract </h4>
-
-
-<p>Phoenix is a hardware plus software framework for developing
-computer interfaced science experiments. Sensor and control
-elements connected to Phoenix can be accessed using Python. Text
-based and GUI programs are available for several
-experiments. Python programming language is used as a tool for
-data acquisition, analysis and visualization.
-</p>
-<p>
-Objective of the project is to improve the laboratory facilities
-at the Universities and also to utilize computers in a better
-manner to teach science. The hardware design is freely
-available. The project is based on Free Software tools and the
-code is distributed under GNU General Public License.
-</p>
-
-
-
-
-
-
-<h3 id="sec-4_13">Building and Packaging your Scientific Python Application For Linux Distributions </h3>
-
-
-<p>Ramakrishna Reddy Yekulla
+We use the Python binding for OpenCL, PyOpenCL to run the code on the
+GPU. The result is an almost pure Python CFD code that is faster than
+it's CPU counterpart and is relatively easy to extend to more
+complicated problems. We consider only two dimensional domains with
+structured Cartesian meshes for simplicity. We focus on GPU specific
+optimizations of the code like memory coalescing, cache utilization
+and memory transfer bandwidth which are essential for good
+performance. Our target platform is a system with four Tesla c2050
+Nvidia GPUs, each having 3 Gigabytes of global memory.\newline The
+code is validated against solutions from an equivalent CPU version and
+we present results for the transient incompressible flow past an
+impulsively started cylinder.
</p>
-
-
-<h4 id="sec-4_13_1">Talk/Paper Abstract </h4>
-
+<h4>Slides</h4>
+<p>To be uploaded</p>
-<p>If you are an Independent Researcher, Academic Project or an
-Enterprise software Company building large scale scientific python
-applications, there is a huge community of packagers who look at
-upstream python projects to get those packages into upstream
-distributions. This talk focuses on practices, making your
-applications easy to package so that they can be bundled with
-Linux distributions. Additionally this talk would be more hands
-on, more like a workshop. The audience are encouraged to bring as
-many python applications possible, using the techniques showed in
-the talk and help them package it for fedora.
-</p>
-
-
-
-
-
-
-
+<h3 id="sec2.22">Sachin Shinde : Reverse Engineering and python</h3>
+<h4>Abstract</h4>
+<p>The paper is about how we can use python for writing tools for reverse engineering and assembly code analysis it will talk about basic and modules those are available for doing reverse engineering. </p>
+<h4>Slides</h4>
+<p>To be uploaded</p>
-<h3 id="sec-4_14">Microcontroller experiment and its simulation using Python </h3>
-
-
-<p>Jayesh Gandhi
-</p>
-
-
-
-<h4 id="sec-4_14_1">Talk/Paper Abstract </h4>
-
-
-<p>Electronics in industrial has been passing through revolution due
-to extensive use of Microcontroller. These electronic devices are
-having a high capability to handle multiple events. Their
-capability to communicate with the computers has made the
-revolution possible. Therefore it is very important to have
-trained Personnel in Microcontroller. In the present work
-experiments for study of Microcontrollers and its peripherals with
-Simulation using Python is carried out. This facilitates the
-teachers to demonstrate the experiments in the classroom sessions
-using simulations. Then the same experiments can be carried out in
-the labs (using the same simulation setup) and the microcontroller
-hardware to visualize and understand the experiments. Python is
-selected due to its versatility and also to promote the use of
-open source software in the education.
+<h3 id="sec2.23">Gael Varoquaux(Affiliation: INRIA Parietal, Neurospin, Saclay, France): Machine learning as a tool for Neuroscience</h3>
+<h4>Abstract</h4>
+<p>For now two decades, functional brain imaging has provided a tool for
+building models of cognitive processes. However, these models are
+ultimately introduced without a formal data analysis step. Indeed,
+cognition arise from the interplay of many elementary functions. There
+are an exponential amount of competing possible models, that cannot be
+discriminated with a finite amount of data. This data analysis problem is
+common in many experimental science settings, although seldom diagnosed.
+In statistics, it is known as the <b>curse of dimensionality</b>, and can be
+tackled efficiently with machine learning tools.</p>
+<p>
+For these reasons, imaging neuroscience has recently seen a
+multiplication of complex data analysis methods. Yet, machine learning is
+a rapidly-evolving research field, often leading to impenetrable
+publication and challenging algorithms, of which neuroscience data
+analysts only scratch the surface.
</p>
<p>
-Here we demonstrate the experiment of driving seven segment
-displays by microcontroller. Four seven segment displays are
-interfaced with the microcontroller through a single BCD to seven
-segments Display Decoder/Driver (74LS47) and switching
-transistors. The microcontroller switches on the first transistor
-connected to the first display and puts the number to be displayed
-on 74LS47. Then it pause a while, switches off the first display
-and puts the number to be displayed on the second display and
-switches it on. A similar action is carried out for all the
-display and the cycle is repeated again and again. Now we can
-control the microcontroller action using the serial port of the
-computer through python. Simulating the seven segment display
-using VPYTHON module and communicating the same action to the
-microcontroller, we can demonstrate the switching action of the
-display at a very slow rate. It is possible to actually see each
-display glowing individually one after another. Now we can
-gradually increase the rate of switching the display. You see each
-display glowing for a few milliseconds. Finally the refresh rate
-is taken very high to around more than 25 times a second we see
-that all the display glowing simultaneously.
+I will present our efforts to foster a general-purpose machine-learning
+Python module, <b>scikit-learn</b>, for scientific data analysis. As it aims
+to bridge the gap between machine-learning researchers and end-users, the
+package is focused on ease of use and high-quality documentation while
+maintaining state-of-the-art performance. It is enjoying a growing
+success in research laboratories, but also in communities with strong
+industrial links such as web-analytics or natural language processing.
+</p>
+<p>
+We combine this module with high-end interactive
+visualization using <b>Mayavi</b> and neuroimaging-specific tools in <b>nipy</b> to
+apply state of the art machine learning techniques to neuroscience:
+learning from the data new models of brain activity, focused on
+predictive or descriptive power. These models can be used to perform
+"brain reading": predicting behavior our thoughts from brain images. This
+is a well-posed <b>supervised learning</b> problem. In <b>unsupervised</b>
+settings, that is in the absence of behavioral observations, we focus on
+learning probabilistic models of the signal. For instance, interaction
+graphs between brain regions at rest reveal structures well-known to be
+recruited in tasks.
</p>
<p>
-Hence it is possible to simulate and demonstrate experiments and
-understand the capabilities of the microcontroller with a lot of
-ease and at a very low cost.
-</p>
-
-
-
-
-
-
-
-<h3 id="sec-4_15">SAGE for Scientific computing and Education enhancement </h3>
-
-
-<p>Manjusha Joshi
-</p>
-
-
-
-<h4 id="sec-4_15_1">Talk/Paper Abstract </h4>
-
-
-
-<p>
-Sage is Free open source software for Mathematics.
-</p>
-<p>
-Sage can handle long integer computations, symbolic computing,
-Matrices etc. Sage is used for Cryptography, Number Theory, Graph
-Theory in education field. Note book feature in Sage, allow user
-to record all work on worksheet for future use. These worksheets
-can be publish for information sharing, students and trainer can
-exchange knowledge, share, experiment through worksheets.
+Optimal use of the data available from a brain imaging session raises
+computational challenges that are well-known in large data analytics. The
+<b>scipy</b> stack, including <b>Cython</b> and <b>scikit-learn</b>, used with care, can
+provide a high-performance environment, matching dedicated solutions. I
+will highlight how the <b>scikit-learn</b> performs efficient data analysis in
+Python.
</p>
<p>
-Sage is an advanced computing tool which can enhance education in
-India.
+The challenges discussed here go beyond neuroscience. Imaging
+neuroscience is a test bed for advanced data analysis in science, as it
+faces the challenge of integrating new data without relying on
+well-established fundamental laws. However, with the data available in
+experimental sciences growing rapidly, high-dimensional statistical
+inference and data processing are becoming key in many other fields.
+Python is set to provide a thriving ecosystem for these tasks, as it
+unites scientific communities and web-based industries.
</p>
-
-
-
-
-
-
-
-
-
-<h3 id="sec-4_16">Automatic Proteomic Finger Printing using Scipy </h3>
-
-
-<p>Yogesh Karpate
-</p>
-
-
-
-<h4 id="sec-4_16_1">Talk/Paper Abstract </h4>
-
+<h4>Slides</h4>
+<p>To be uploaded</p>
-<p>The idea is to demonstrate the PyProt (Python Proteomics), an
-approach to classify mass spectrometry data and efficient use of
-statistical methods to look for the potential prevalent disease
-markers and proteomic pattern diagnostics. Serum proteomic pattern
-diagnostics can be used to differentiate samples from the patients
-with and without disease. Profile patterns are generated using
-surface-enhanced laser desorption and ionization (SELDI) protein
-mass spectrometry. This technology has the potential to improve
-clinical diagnostic tests for cancer pathologies. There are two
-datasets used in this study which are taken from the FDA-NCI
-Clinical Proteomics Program Databank. First data is of ovarian
-cancer and second is of Premalignant Pancreatic Cancer .The Pyprot
-uses the high-resolution ovarian cancer data set that was
-generated using the WCX2 protein array. The ovarian cancer dataset
-includes 95 controls and 121 ovarian cancer sets, where as
-pancreatic cancer dataset has 101 controls and 80 pancreatic
-cancer sets. There are two modules designed and implemented in
-python using Numpy , Scipy and Matplotlib. There are two different
-kinds of classifications implemented here, first to classify the
-ovarian cancer data set. Second type focuses on randomly
-commingled study set of murine sera. it explores the ability of
-the low molecular weight information archive to classify and
-discriminate premalignant pancreatic cancer compared to the
-control animals.
+<h3 id="sec2.24">IITB Students : Project Presentation</h3>
+<h4>Abstract</h4>
+<p>
+The following 2 projects(part of the <a href="http://fossee.in/sdes">SDES</a> course) which obtained the highest marks;
+would be presented by respective project members.
+</p>
+<li>Digital Logic circuit simulator</li>
+<li>Analysis and modelling of cellular systems</li>
+<h4>Slides</h4>
+<p>To be uploaded</p>
+
+<h3 id="sec2.25">Dr Ole Nielsen : 7 Steps to Python Software That Works</h3>
+<h4>Abstract</h4>
+<p>
+I will give an overview of Python projects I have been leading over
+the past decade in academia, science agencies and government. These
+include large scale datamining, parallel computing, hydrodynamic
+modelling of tsunami impact and analysis of impact from natural
+disasters. All projects are based on Python (and numpy). The purpose
+of this talk is to summarise the practices I have come to see as
+essential to produce software that works robustly and sensibly
+is user and developer friendly, i.e. can be used and developed by a
+diverse and changing team eventually takes on a life of its own
+without input from the core development team.
</p>
<p>
-A crucial issue for classification is feature selection which
-selects the relevant features in order to focus the learning
-search. A relaxed setting for feature selection is known as
-feature ranking, which ranks the features with respect to their
-relevance. Pyprot comprises of two modules; First includes
-implementation of feature ranking in Python using fisher ratio and
-t square statistical test to avoid large feature space. In second
-module, Multilayer perceptron (MLP) feed forward neural network
-model with static back propagation algorithm is used to classify
-.The results are excellent and matched with databank results and
-concludes that PyProt is useful tool for proteomic finger
-printing.
+Much of this will be known to many of you, but having worked in this
+field for some time now and seen much software it is my view that
+there is still a lot of Python code that could really shine if
+testing, source control, style guides, exception handling etc were
+observed more generally. To keep it real, I'll show real examples where appropriate.
</p>
-
-
-
-
-
-
-
-
-
-
-<h3 id="sec-4_17">Natural Language Processing Using Python </h3>
-
-
-<p>Vaidhy Mayilrangam
-</p>
-
-
-
-<h4 id="sec-4_17_1">Talk/Paper Abstract </h4>
+<h4>Slides</h4>
+<p>To be uploaded</p>
-<p>The purpose of this talk is to give a high-level overview of
-various text mining techniques, the statistical approaches and the
-interesting problems.
-</p>
+<h3 id="sec2.26">Mateusz Paprocki : Understanding importance of automated software testing</h3>
+<h4>Abstract</h4>
<p>
-The talk will start with a short summary of two key areas – namely
-information retrieval (IR) and information extraction (IE). We
-will then discuss how to use the knowledge gained for
-summarization and translation. We will talk about how to measure
-the correctness of results. As part of measuring the correctness,
-we will discuss about different kinds of statistical approaches
-for classifying and clustering data.
+Development of scientific programs isn't much different than development of computer programs of any other kind. One of the key characteristic of computer programs is correctness. No matter whether we create programs for our own purpose or for other parties, we do not want to spent hours or days waiting for results of computations that will be flawed from the very beginning. As long as programs consist of few lines of code, we may be able to verify correctness of all cases in those programs manually after every change or even try to prove their correctness. However, real life programs consist of thousands, hundred thousands or even millions of lines of code, and even more states. In such a setup we need tools and methods that would allow to automate the process of software testing.
</p>
<p>
-We will do a short dive into NLP specific problems - identifying
-sentence boundaries, parts of speech, noun and verb phrases and
-named entities. We will also have a sample session on how to use
-Python’s NLTK to accomplish these tasks.
-</p>
-
-
-
-
-
-
-
-<h3 id="sec-4_18">A Parallel 3D Flow Solver in Python Based on Vortex Methods </h3>
-
-
-<p>Prashant Agrawal
-</p>
-
-
-
-<h4 id="sec-4_18_1">Talk/Paper Abstract </h4>
-
-
-<p>A 3D flow solver for incompressible flow around arbitrary 3D
-bodies is developed. The solver is based on vortex methods whose
-grid-free nature makes it very general. It uses vortex particles
-to represent the flow-field. Vortex particles (or blobs) are
-released from the boundary, and these advect, stretch and diffuse
-according to the Navier-Stokes equations.
-</p>
-<p>
-The solver is based on a generic and extensible design. This has
-been made possible mainly by following a universal theme of using
-blobs in every component of the solver. Advection of the
-particles is implemented using a parallel fast multipole
-method. Diffusion is simulated using the Vorticity Redistribution
-Technique (VRT). To control the number of blobs, merging of nearby
-blobs is also performed.
-</p>
-<p>
-Each component of the solver is parallelized. The boundary,
-advection and stretching algorithms are based on the same parallel
-velocity algorithm. Domain decomposition for parallel velocity
-calculator is performed using Space Filling Curves. Diffusion,
-which requires knowledge of each particle's neighbours, uses a
-parallelized fast neighbour finder which is based on a bin data
-structure. The same neighbour finder is used in merging also.
-</p>
-<p>
-The code is written completely in Python. It is well-documented
-and well-tested. The code base is around 4500 lines long. The
-design follows an object oriented approach which makes it
-extensible enough to add new features and alternate algorithms to
-perform specific tasks.
-</p>
-<p>
-The solver is also designed to run in a parallel environment
-involving multiple processors. This parallel implementation is
-written using mpi4py, an MPI implementation in Python.
-</p>
-<p>
-Rigorous testing is performed using Python's unittest module. Some
-standard example cases are also solved using the present solver.
+Python, a programming language with a weak dynamic type system, makes the use of automated software testing even more important because in this case test suites and the testing framework of choice have to accommodate for the weaknesses of the language. Also, agile software development techniques may intrinsically require automated testing as their core component to guarantee effectiveness of those methods.
</p>
<p>
-In this talk we will outline the overall design of the solver and
-the algorithms used. We discuss the benefits of Python and also
-some of the current limitations with respect to parallel testing.
+In this talk I will show how to do automated testing of programs written in Python. Test automation tools will be described and common issues and pitfalls outlined. I will also discuss the notion of code coverage with tests and testing via examples (doctests).
</p>
-
-
-
-
-
-
+<h4>Slides</h4>
+<p>To be uploaded</p>
-<h3 id="sec-4_19">Performance Evaluation of HYBRID MAC for 802.11ad: Next Generation Multi-Gbps Wi-Fi using SimPy </h3>
-
-
-<p>Hemanth Chandran
-</p>
-
-
-
-<h4 id="sec-4_19_1">Talk/Paper Abstract </h4>
-
+<h3 id="sec2.27">Emmanuelle Gouillart (joint laboratory CNRS/Saint-Gobain UMR 125,
+39 quai Lucien Lefranc 93303 Aubervilliers, France): 3-D image processing and visualization with the scientific-Python stack</h3>
+<h4>Abstract</h4>
+<p>
-<p>Next generation Wireless Local Area Networks (WLAN) is targeting
-at multi giga bits per second throughput by utilizing the
-unlicensed spectrum available at 60 GHz, millimeter wavelength
-(mmwave).Towards achieving the above goal a new standard namely
-the 802.11ad is under consideration. Due to the limited range and
-other typical characteristics like high path loss etc., of these
-mmwave radios the requirement of the Medium Access Control (MAC)
-are totally different.
-</p>
-<p>
-The conventional MAC protocols tend to achieve different
-objectives under different conditions. For example, the (Carrier
-Sense Multiple Access / Collision Avoidance) CSMA/CA technique is
-robust and simple and works well in overlapping network
-scenarios. It is also suitable for bursty type of traffic. On the
-other hand CSMA/CA is not suitable for power management since it
-needs the stations to be awake always. Moreover it requires an
-omni directional antenna pattern for the receiver which is
-practically not feasible in 60 GHz band.
-</p>
-<p>
-A Time Division Multiple Access (TDMA) based MAC is efficient for
-Quality of Service (QoS) sensitive traffic. It is also useful for
-power saving since the station knows their schedule and can
-therefore power down in non scheduled periods.
+Synchrotron X-ray tomography images the inner 3-D micro-structure of
+objects. Recent progress bringing acquisition rates down to a few seconds
+have opened the door to in-situ monitoring of material transformations
+during, e.g., mechanical or heat treatments. However, this powerful
+imaging technique presents many challenges, such as the huge size of
+typical datasets, or the poor signal over noise ratio. In this talk, we
+will present how the standard modules of the scientific Python stack,
+combined with a few additional developments, are used to process and
+visualize such 3-D tomography images for research purposes. The data
+presented in this talk consist of 3-D images of window-glass raw
+materials, that react together at high temperature to form liquids, and
+images of glasses undergoing phase separation.3
</p>
<p>
-For 60 GHz usages especially applications like wireless display,
-sync and go, and large file transfer, TDMA appears to be a
-suitable choice. Whereas for applications that require low latency
-channel access (e.g. Internet access etc.)TDMA appears to be
-inefficient due to the latency involved in bandwidth reservation.
-</p>
-<p>
-Another choice is the polling MAC which is highly efficient for
-the directional communication in the 60 GHz band. This provides an
-improved data rates with directional communication as well as acts
-as an interference mitigation scheme. On the contrary polling may
-not be efficient for power saving and also not efficient to take
-advantage of statistical traffic multiplexing. This technique also
-leads to wastage of power due to polling the stations without
-traffic to transmit.
-</p>
-<p>
-Having the above facts in mind and considering the variety of
-applications involved in the next generation WLAN systems
-operating at 60 GHz, it can be concluded that no individual MAC
-scheme can support the traffic requirements.
+
+Using the Traits module, it was possible to write at minimal cost a
+custom graphical application with an embedded Mayavi scene to perform
+"4-D visualization", that is, to display cuts through a 3-D volume that
+can be updated with the next or previous image of the dataset. Easy
+interaction with the data (placing markers) could also be added at
+minimal cost. Efficient state-of-the-art algorithms for denoising images
+and segmenting (extracting) objects were implemented using scipy, and
+PyAMG for multigrid resolution of linear systems.
</p>
<p>
-In this paper we use SimPy to do a Discrete Event Simulation
-modeling of a proposed hybrid MAC protocol which dynamically
-adjusts the channel times between contention and reservation based
-MAC schemes, based on the traffic demand in the network.
+
+Finally, we will show how this work led us "naturally" to take part in
+development efforts of open-source Scientific-python packages. Improving
+the documentation of scipy.ndimage on the documentation wiki was a first
+easy contribution. Then, one segmentation algorithm as well as one
+denoising algorithm were contributed to the scikits-image package. We
+will finish the talk by a brief overview of scikits-image and its
+development process.
</p>
<p>
-We plan to model the problem of admission control and scheduling
-using DES using SimPy. SimPy v2.1.0 is being used for the
-simulation purposes of the proposed Hybrid MAC. We are new to
-using Python for scientific purposes and have just begun using
-this powerful tool to get meaningful and useful results. We plan
-to share our learning experience and how SimPy is increasingly
-becoming a useful tool (apart from regular modeling tools like
-Opnet / NS2).
-</p>
-
-
-
-
-
-
-
-
-<h3 id="sec-4_20">PySPH: Smooth Particle Hydrodynamics with Python </h3>
-
-
-<p>pankaj pandey
-</p>
-
+<h4>Slides</h4>
+<p>To be uploaded</p>
-<h4 id="sec-4_20_1">Talk/Paper Abstract </h4>
-
-
-
-<p>
-We present a python/cython implementation of an SPH framework
-called PySPH. SPH (Smooth Particle Hydrodynamics) is a numerical
-technique for the solution of the continuum equations of fluid and
-solid mechanics.
-</p>
-<p>
-PySPH was written to be a tool which requires only a basic working
-knowledge of python. Although PySPH may be run on distributed
-memory machines, no working knowledge of parallelism is required
-of the user as the same code may be run either in serial or in
-parallel only by proper invocation of the mpirun command.
-</p>
-<p>
-In PySPH, we follow the message passing paradigm, using the mpi4py
-python binding. The performance critical aspects of the SPH
-algorithm are optimized with cython which provides the look and
-feel of python but the performance near to that of a C/C++
-implementation.
-</p>
-<p>
-PySPH is divided into three main modules. The base module provides
-the data structures for the particles, and algorithms for nearest
-neighbor retrieval. The sph module builds on this to describe the
-interactions between particles and defines classes to manage this
-interaction. These two modules provide the basic functionality as
-dictated by the SPH algorithm and of these, a developer would most
-likely be working with the sph module to enhance the functionality
-of PySPH. The solver module typically manages the simulation being
-run. Most of the functions and classes in this module are written
-in pure python which makes is relatively easy to write new solvers
-based on the provided functionality.
-</p>
-<p>
-We use PySPH to solve the shock tube problem in gas dynamics and
-the classical dam break problem for incompressible fluids. We also
-demonstrate how to extend PySPH to solve a problem in solid
-mechanics which requires additions to the sph module.
-</p>
-
-
-
-
-
-
-<h3 id="sec-4_21">Pictures, Songs and Python </h3>
-
-
-<p>Puneeth Chaganti
-</p>
-
-
-
-<h4 id="sec-4_21_1">Talk/Paper Abstract </h4>
-
+{% endblock content %}
-<p>The aim of this talk is to get students, specially undergrads
-excited about Python. Most of what will be shown, is out there on
-the Open web. We just wish to draw attention of the students and
-get them excited about Python and possibly image processing and
-may be even cognition. We hope that this talk will help retain
-more participants for the tutorials and sprint sessions.
-</p>
-<p>
-The talk will have two parts. The talk will not consist of any
-deep research or amazing code. It's a mash-up of some weekend
-hacks, if they could be called so. We reiterate that the idea is
-not to show the algorithms or the code and ideas. It is, to show
-the power that Python gives.
-</p>
-<p>
-The first part of the talk will deal with the colour Blue. We'll
-show some code to illustrate how our eyes suck at blue (1), if
-they really do. But, ironically, a statistical analysis that we
-did on "Rolling Stones Magazine's Top 500 Songs of All time" (2),
-revealed that the occurrences of blue are more than twice the
-number of occurrences of red and green! We'll show the code used
-to fetch the lyrics and count the occurrences.
-</p>
-<p>
-The second part of the talk will show some simple hacks with
-images. First, a simple script that converts images into ASCII
-art. We hacked up a very rudimentary algo to convert images to
-ASCII and it works well for "machine generated images." Next, a
-sample program that uses OpenCV (3) that can detect faces. We wish
-to show OpenCV since it has some really powerful stuff for image
-processing.
-</p>
-<p>
-(1) <a href="http://nfggames.com/games/ntsc/visual.shtm">http://nfggames.com/games/ntsc/visual.shtm</a>
-(2) <a href="http://web.archive.org/web/20080622145429/www.rollingstone.com/news/coverstory/500songs">http://web.archive.org/web/20080622145429/www.rollingstone.com/news/coverstory/500songs</a>
-(3) <a href="http://en.wikipedia.org/wiki/OpenCV">http://en.wikipedia.org/wiki/OpenCV</a>
-</p>
-
-
-
-
-
-
-
-
-
-<h3 id="sec-4_22">Convincing Universities to include Python </h3>
-
-
-<p>Krishnakant Mane
-</p>
-
-
-
-<h4 id="sec-4_22_1">Talk/Paper Abstract </h4>
-
-
-<p>Python has been around for a long enough time now that it needs
-serious attention from the educational institutes which teach
-computer science. Today Python is known for its simple syntax
-yet powerful performance (if not the fastest performance which
-is any ways not needed all the time ). From Scientific computing
-till graphical user interfaces and from system administration
-till web application development, it is used in many
-domains. However due to Industrial propaganda leading to
-promotion of other interpreted languages (free or proprietary)?
-Python has not got the justice in educational sector which it
-deserves. This paper will talk on methodologies which can be
-adopted to convince the universities for including Python in
-their curriculum. The speaker will provide an insight into his
-experience on success in getting Python included in some
-Universities. A case of SNDT University will be discussed where
-the curriculum designers have decided to have Python in their
-courses from the next year. The speaker will share his ideas
-which led to this inclusion. these will include,
-</p>
-<ul>
-<li>
-Begin by doing series of Python workshops
-</li>
-<li>
-Provide information and opportunities for python based projects
-</li>
-<li>
-make the faculties aware of teaching ease
-</li>
-<li>
-clear the FUD regarding jobs
-</li>
-</ul>
-
-
-
-
-
-
-
-
-<h3 id="sec-4_23">Python based Galaxy workflow integration on GARUDA Grid </h3>
-
-
-<p>Harikrishna
-</p>
-
-
-
-<h4 id="sec-4_23_1">Talk/Paper Abstract </h4>
-
-
-<p>Bioinformatics applications being complex problem involving
-multiple comparisons, alignment, mapping and analysis can be
-managed better using workflow solutions. Galaxy is an open web
-based platform developed in Python for genomic research. Python
-is a light weight dynamic language making Galaxy to be modular
-and expandable. Bioinformatics applications being compute and
-data intensive scale well in grid computing environments. In
-this paper we describe bringing the Galaxy workflow to the
-Garuda Grid computing infrastructure for enabling bioinformatics
-applications. GAURDA grid is an aggregation of heterogeneous
-resources and advanced capabilities for scientific
-applications. Here we present the integration of galaxy workflow
-tool with GARUDA grid middleware to enable computational
-biologists to perform complex problems on the grid environment
-through a web browser.
-</p>
-
-{% endblock content %}