diff --git a/.gitignore b/.gitignore index 7c050ad..d29777d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ slides_sources/build .idea .DS_Store +.cache* #ignore compiled files, sublime workspace and project files *.pyc *junk* @@ -8,8 +9,15 @@ slides_sources/build #ignore sublime workspace files *.sublime* +# emacs +*.*~ + +.project +.pydevproject # ignore .gitignore, so we can each have our own. .gitignore -*.pyc build/ + +.ipynb_checkpoints +.coverage diff --git a/Examples/advancedOO/constrained_int/constrained_int.py b/Examples/advancedOO/constrained_int/constrained_int.py new file mode 100644 index 0000000..d8eca17 --- /dev/null +++ b/Examples/advancedOO/constrained_int/constrained_int.py @@ -0,0 +1,9 @@ +class ConstrainedInt(int): + """keeps value between 0 and 255""" + def __new__(cls, value): + value = value % 256 + self = int.__new__(cls, value) + return self + + def __add__(self, other): + return int(self) + int(other) diff --git a/Examples/advancedOO/constrained_int/readme.rst b/Examples/advancedOO/constrained_int/readme.rst new file mode 100644 index 0000000..b6f50ab --- /dev/null +++ b/Examples/advancedOO/constrained_int/readme.rst @@ -0,0 +1,59 @@ +__new__ example +--------------- + +A little excercise for __new__ and making a new class act like a regular type. + +Here is a replacement for int which can only take new values between 0 and 255: + +:: + + class ConstrainedInt(int): + def __new__(cls, value): + value = value % 256 + self = int.__new__(cls, value) + return self + +A reminder of Magic methods: +----------------------------- + +Magic Methods + +They all start with and end with '__', and do things like support operators and comparisons, and provide handlers for the object lifecycle. + +__cmp__(self, other) + +__eq__(self, other) + +__add__(self, other) + +Also, __call__, __str__, __repr__, __sizeof__, +__setattr__, __getattr__, __len__, __iter__, +__contains__, __lshift__, __rshift__, __xor__, +__div__, __enter__, __exit__, + +and my personal favorite __rxor__(self,other)...... + +The list is really long, it's mostly important to get a flavor of how +they are used in Python so you can find and implement the right one when +you need it. + +See ``http://www.rafekettler.com/magicmethods.html`` for more + +Exercise +--------- + +Our ConstrainedInt handles initialization for us, but doesn't handle +modification of the value + +Develop ConstrainedInt until it passes all tests in +``test_constrained_int.py`` + +:: + + class ConstrainedInt(int): + """keeps value between 0 and 255""" + def __new__(cls, value): + value = value % 256 + self = int.__new__(cls, value) + return self + diff --git a/Examples/advancedOO/constrained_int/test_constrained_int.py b/Examples/advancedOO/constrained_int/test_constrained_int.py new file mode 100644 index 0000000..02c014a --- /dev/null +++ b/Examples/advancedOO/constrained_int/test_constrained_int.py @@ -0,0 +1,19 @@ +import unittest + +from constrained_int import ConstrainedInt + + +class TestConstrainedInt(unittest.TestCase): + + def test_constrainedint(self): + x = ConstrainedInt(10) + self.assertEqual(x, 10) + + def test_constrainedint_mods_correctly(self): + x = ConstrainedInt(256) + self.assertEqual(x, 0) + + def test_constrainedint_handles_addition(self): + x = ConstrainedInt(10) + x += 246 + self.assertEqual(x, 0) diff --git a/Examples/advancedOO/diamond.py b/Examples/advancedOO/diamond.py new file mode 100644 index 0000000..bdeae19 --- /dev/null +++ b/Examples/advancedOO/diamond.py @@ -0,0 +1,40 @@ +class A(object): + def do_your_stuff(self): + print("doing A's stuff") + + +class B(A): + def do_your_stuff(self): + A.do_your_stuff(self) + print("doing B's stuff") + + +class C(A): + def do_your_stuff(self): + A.do_your_stuff(self) + print("doing C's stuff") + + +class D(B, C): + def do_your_stuff(self): + B.do_your_stuff(self) + C.do_your_stuff(self) + print("doing D's stuff") + + +if __name__ == '__main__': + a = A() + print("\ncalling A's method") + a.do_your_stuff() + + print("\ncalling B's method") + b = B() + b.do_your_stuff() + + print("\ncalling C's method") + c = C() + c.do_your_stuff() + + print("\ncalling D's method") + d = D() + d.do_your_stuff() diff --git a/Examples/advancedOO/even_int.py b/Examples/advancedOO/even_int.py new file mode 100644 index 0000000..a02a3f3 --- /dev/null +++ b/Examples/advancedOO/even_int.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +""" +Using new to create an even integer + +rounds the input to the nearest even integer. + +will even convert a string to an int... + +""" + + +class EvenInt(int): + """ + An integer that is always even + """ + pass diff --git a/Examples/advancedOO/even_int_solution.py b/Examples/advancedOO/even_int_solution.py new file mode 100644 index 0000000..ba7ab67 --- /dev/null +++ b/Examples/advancedOO/even_int_solution.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +""" +Using new to create an even integer + +rounds the input to the nearest even integer. + +will even convert a string to an int... + +""" + + +class EvenInt(int): + """ + An integer that is always even + """ + def __new__(cls, number): + num = round(float(number) / 2) * 2 + + return int.__new__(cls, num) + diff --git a/Examples/advancedOO/invalid_mro.py b/Examples/advancedOO/invalid_mro.py new file mode 100644 index 0000000..30c0857 --- /dev/null +++ b/Examples/advancedOO/invalid_mro.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 + + +class X(): + pass + + +class Y(): + pass + + +class A(X, Y): + pass + + +class B(Y, X): + pass + + +class C(A, B): + pass diff --git a/Examples/advancedOO/kwargs.py b/Examples/advancedOO/kwargs.py new file mode 100644 index 0000000..e1881b7 --- /dev/null +++ b/Examples/advancedOO/kwargs.py @@ -0,0 +1,5 @@ +def foo(bar, **kwargs): + print(bar) + +foo("lion") +foo(bar="lion") diff --git a/Examples/advancedOO/logging_dict.py b/Examples/advancedOO/logging_dict.py new file mode 100644 index 0000000..0b9052d --- /dev/null +++ b/Examples/advancedOO/logging_dict.py @@ -0,0 +1,40 @@ +import collections +import logging + +logger = logging.getLogger() +logger.setLevel(logging.INFO) + + +class Base(): + def __str__(self): + return "\n".join(['%s : %s' % (key, self[key]) for key in self.keys()]) + + +class LoggingDict(Base, dict): + def __setitem__(self, key, value): + logging.info('Setting %s to %s' % (key, value)) + super(LoggingDict, self).__setitem__(key, value) + + def __getitem__(self, key): + value = super(LoggingDict, self).__getitem__(key) + logging.info('Getting %s (%s)' % (key, value)) + return value + + +class UpperCaseDict(Base, dict): + def __setitem__(self, key, value): + super(UpperCaseDict, self).__setitem__(key.upper(), value.upper()) + + +class LoggingOrderedDict(UpperCaseDict, LoggingDict, collections.OrderedDict): + pass + +d = logging_dict = LoggingDict() +d = upper_case_dict = UpperCaseDict() +d = logging_ordered_dict = LoggingOrderedDict() + +d['a_key'] = 'my_value' +d['b_key'] = 'my_value' +d['c_key'] = 'my_value' + +print(d) diff --git a/Examples/advancedOO/mixins.py b/Examples/advancedOO/mixins.py new file mode 100644 index 0000000..13db5f1 --- /dev/null +++ b/Examples/advancedOO/mixins.py @@ -0,0 +1,50 @@ +import time + + +class Base(): + def log(self): + pass + + +class LoggingMixin(Base): + def log(self): + print("time is: %s" % time.time()) + # print("this is:", self) + super().log() + + +class Vehicle(Base): + def log(self): + print("this is:", self.__repr__()) + super().log() + + +class TwoWheeledVehicle(Vehicle): + pass + + +class LightVehicle(Vehicle): + pass + + +class HeavyVehicle(Vehicle): + pass + + +class Bike(LoggingMixin, TwoWheeledVehicle, LightVehicle): + pass + + +class MotorCycle(TwoWheeledVehicle, HeavyVehicle): + pass + + +class Tank(HeavyVehicle): + pass + + +bike = Bike() +tank = Tank() + +bike.log() +tank.log() diff --git a/Examples/advancedOO/mro.py b/Examples/advancedOO/mro.py new file mode 100644 index 0000000..760d70a --- /dev/null +++ b/Examples/advancedOO/mro.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python + + +class A(object): + def my_method(self): + print("called A") + + +class B(A): + def my_method(self): + print("called B") + super(B, self).my_method() + + +class C(A): + def my_method(self): + print("called C") + super(C, self).my_method() + + +class B1(B): + def my_method(self): + print("called B1") + super(B1, self).my_method() + + +class C1(C): + def my_method(self): + print("called C1") + super(C1, self).my_method() + + +class D(B1, C1): + def my_method(self): + print("called D") + super(D, self).my_method() + +print(D.mro()) +d = D() +print(d.my_method()) diff --git a/Examples/advancedOO/new_example.py b/Examples/advancedOO/new_example.py new file mode 100644 index 0000000..1e1da1f --- /dev/null +++ b/Examples/advancedOO/new_example.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python + +""" +example of __new__ +""" + + +# the general case: +class Test(): + def __new__(cls, arg): + print("in __new__:") + print(arg) + obj = super().__new__(cls) + # you _could_ do something with arg here: + obj.arg = arg + # but it's usally better to save that for the __init__ + return obj + + def __init__(self, arg): + print("in __init__") + print(arg) + self.that = arg + + +# subclassing a string + +class CapitalString(str): + """ + A string class that is always capitalized... + """ + def __new__(cls, in_string): + print("in CapitalString.__new__") + print(cls) + # return str.__new__(cls, in_string.title()) + return super().__new__(cls, in_string.title()) + +if __name__ == "__main__": + print(CapitalString("this is a string")) diff --git a/Examples/advancedOO/shapes.py b/Examples/advancedOO/shapes.py new file mode 100644 index 0000000..cbc3545 --- /dev/null +++ b/Examples/advancedOO/shapes.py @@ -0,0 +1,25 @@ +class Shape: + def __str__(self): + return "Shape:{}".format(self.__class__.__name__) + + +class Rectangle(Shape): + def __init__(self, width, height): + # validate inputs: + assert(width > 0) + assert(height > 0) + + self.width = width + self.height = height + + def area(self): + """returns the area of this Rectangle""" + return self.width * self.height + + +class Square(Rectangle): + def __init__(self, length): + self.width = length + self.height = length + +print(Square(10).area()) diff --git a/Examples/advancedOO/super_test.ipynb b/Examples/advancedOO/super_test.ipynb new file mode 100644 index 0000000..c9c23dd --- /dev/null +++ b/Examples/advancedOO/super_test.ipynb @@ -0,0 +1,607 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Some example code demonstrating some super() behaviour\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "class A():\n", + " def __init__(self):\n", + " print(\"in A __init__\")\n", + " print(\"self's class is:\", self.__class__)\n", + " s = super().__init__()\n", + "\n", + "class B():\n", + " def __init__(self):\n", + " print(\"in B.__init__\")\n", + " s = super().__init__()\n", + "\n", + "class C():\n", + " def __init__(self):\n", + " print(\"in C.__init__\")\n", + " s = super().__init__()\n", + "\n", + "class D(C, B, A):\n", + " def __init__(self):\n", + " print(\"self's class is:\", self.__class__)\n", + " super().__init__()\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "D's mro: (, , , , )\n", + "self's class is: \n", + "in C.__init__\n", + "in B.__init__\n", + "in A __init__\n", + "self's class is: \n" + ] + } + ], + "source": [ + "print(\"D's mro:\", D.__mro__)\n", + "d = D()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## super's parameters\n", + "\n", + "To do its thing, super() needs to know two things:\n", + "\n", + "``super(type, obj)``\n", + "\n", + "It needs to know that type (class) that you want the super-classes of, AND it needs to know the actual object instance at the time it is called.\n", + "\n", + "python3 fills these in for you at run time, but in python2, you needed to specify them:\n", + "\n", + "```\n", + "class A(object):\n", + " def __init__(self):\n", + " super(A, self).__init__()\n", + "```\n", + "\n", + "But why do you need BOTH `A` and `self`? -- isn't `self` an instance of `A`?\n", + "\n", + "Not neccesarily -- if A's method is being called from a subclass, then `self` will be an instance of the subclass. `super()` requires that the object be an instance of the class (or a subclass).\n", + "\n", + "This distiction will come up later....\n", + "\n", + "Again, py3 takes care of this for you, though you CAN still spell it out." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ", >\n" + ] + } + ], + "source": [ + "s_c = super(C, d)\n", + "print(s_c)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This works because `d` is a `D` object, which is a subclass of `C`." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "in C.__init__\n" + ] + } + ], + "source": [ + "c = C()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "TypeError", + "evalue": "super(type, obj): obj must be an instance or subtype of type", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mD\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m: super(type, obj): obj must be an instance or subtype of type" + ] + } + ], + "source": [ + "super(D, c)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But this fails: `C` is NOT a subclass of `D`" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ", >\n" + ] + } + ], + "source": [ + "s_a = super(A, d)\n", + "print(s_a)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + ", >\n" + ] + } + ], + "source": [ + "s_b = super(B, d)\n", + "print(s_b)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(, , , , )\n" + ] + } + ], + "source": [ + "print(D.__mro__)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "## Use super() everywhere." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# without super()\n", + "\n", + "class A():\n", + " def this(self):\n", + " print(\"in A.this\")\n", + "\n", + "class B():\n", + " def this(self):\n", + " print(\"in B.this\")\n", + "\n", + "class C(A,B):\n", + " def this(self):\n", + " print(\"in C.this\")\n", + " A.this(self)\n", + " B.this(self)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running without super()\n", + "in C.this\n", + "in A.this\n", + "in B.this\n" + ] + } + ], + "source": [ + "print(\"Running without super()\")\n", + "c = C()\n", + "c.this()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "C's `this` explicitly called both A and B's methods -- so they all get called." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Using super in just C:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "class A():\n", + " def this(self):\n", + " print(\"in A.this\")\n", + "\n", + "class B(A):\n", + " def this(self):\n", + " print(\"in B.this\")\n", + "\n", + "class C(B):\n", + " def this(self):\n", + " print(\"in C.this\")\n", + " super().this()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(, , , )\n", + "in C.this\n", + "in B.this\n" + ] + } + ], + "source": [ + "print(C.__mro__)\n", + "c = C()\n", + "c.this()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note:** `A.this` did NOT get called!\n", + "\n", + "Even though it is in in the MRO.\n", + "\n", + "Python stopped when it found the method in B." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Using super everywhere:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "class Base():\n", + " def this(self):\n", + " pass # just so there is a base that has the method\n", + "\n", + "class A(Base):\n", + " def this(self):\n", + " print(\"in A.this\")\n", + " super().this()\n", + "\n", + "class B(Base):\n", + " def this(self):\n", + " print(\"in B.this\")\n", + " super().this()\n", + "class C(A,B):\n", + " def this(self):\n", + " print(\"in C.this\")\n", + " super().this()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "in C.this\n", + "in A.this\n", + "in B.this\n", + "(, )\n" + ] + } + ], + "source": [ + "c = C()\n", + "c.this()\n", + "print(Base.__mro__)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now both A and B's methods get called -- probably what you want.\n", + "\n", + "But if you don't want both called -- better to just be Explicit, rather than use super():" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "class Base():\n", + " def this(self):\n", + " pass # just so there is a base that has the method\n", + "\n", + "class A(Base):\n", + " def this(self):\n", + " print(\"in A.this\")\n", + " super().this()\n", + "\n", + "class B(Base):\n", + " def this(self):\n", + " print(\"in B.this\")\n", + " super().this()\n", + "\n", + "class C(A,B):\n", + " def this(self):\n", + " print(\"in C.this\")\n", + " A.this(self)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "in C.this\n", + "in A.this\n", + "in B.this\n" + ] + } + ], + "source": [ + "c = C()\n", + "c.this()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Whoa** -- A and B's method DID get called! -- why?" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(__main__.A, __main__.Base, object)" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A.__mro__" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "B is not there.\n", + "\n", + "But:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "class Base():\n", + " def this(self):\n", + " pass # just so there is a base that has the method\n", + "\n", + "class A(Base):\n", + " def this(self):\n", + " print(\"in A.this\")\n", + " print(\"self's class:\", self.__class__)\n", + " super().this()\n", + "\n", + "class B(Base):\n", + " def this(self):\n", + " print(\"in B.this\")\n", + " super().this()\n", + "\n", + "class C(A,B):\n", + " def this(self):\n", + " print(\"in C.this\")\n", + " A.this(self)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "in C.this\n", + "in A.this\n", + "self's class: \n", + "in B.this\n", + "(, , , , )\n" + ] + } + ], + "source": [ + "c = C()\n", + "c.this()\n", + "print(C.__mro__)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Remember, `super()` is dynamic -- what it calls is determined at run time.\n", + "\n", + "That's how it knows to call ``B``'s method too. Which is why we say that using `super()` is *part* of the interface of the class." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.0" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Examples/advancedOO/test_even_int.py b/Examples/advancedOO/test_even_int.py new file mode 100644 index 0000000..783da6d --- /dev/null +++ b/Examples/advancedOO/test_even_int.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python + +""" +tests for an even integer class +""" + +from even_int import EvenInt +# from even_int_solution import EvenInt + + +# And some tests -- try with py.test or nosetests... +def test_subclass(): + assert issubclass(EvenInt, int) + + +def test_instance(): + i = EvenInt(3) + assert isinstance(i, int) + + +def test_isinstance(): + i = EvenInt(2) + assert isinstance(i, EvenInt) + + +def test_even(): + assert EvenInt(4) == 4 + + +def test_odd1(): + assert EvenInt(3) == 4 + + +def test_odd2(): + assert EvenInt(2.99) == 2 + + +def test_negative(): + assert EvenInt(-2) == -2 + + +def test_negative_odd(): + assert EvenInt(-1) == 0 + + +def test_negative_odd2(): + assert EvenInt(-1.1) == -2 + + +def test_string_odd(): + assert EvenInt("3") == 4 + + +def test_string_even(): + assert EvenInt("12") == 12 + + +def test_string_float(): + assert EvenInt("4.45") == 4 diff --git a/Examples/advancedOO/unpickle.py b/Examples/advancedOO/unpickle.py new file mode 100644 index 0000000..59c59c0 --- /dev/null +++ b/Examples/advancedOO/unpickle.py @@ -0,0 +1,12 @@ +import pickle + + +class Foo: + def __init__(self): + print("init called") + +foo = Foo() + +foo_pickle = pickle.dumps(foo) + +new_foo = pickle.loads(foo_pickle) diff --git a/Examples/capitalize/cap_script.py b/Examples/capitalize/cap_script.py new file mode 100755 index 0000000..2e5089c --- /dev/null +++ b/Examples/capitalize/cap_script.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +""" +A really simple script just to demonstrate disutils +""" + +import sys, os +import capital_mod + + +if __name__ == "__main__": + try: + infilename = sys.argv[1] + except IndexError: + print("you need to pass in a file to process") + + root, ext = os.path.splitext(infilename) + outfilename = root + "_cap" + ext + + # do the real work: + print("Capitalizing: %s and storing it in %s"%(infilename, outfilename)) + capital_mod.capitalize(infilename, outfilename) + + print("I'm done") + diff --git a/Examples/capitalize/capital_mod.py b/Examples/capitalize/capital_mod.py new file mode 100644 index 0000000..dfe054f --- /dev/null +++ b/Examples/capitalize/capital_mod.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python + +""" +A really simple module, just to demonstrate packaging +""" + +def capitalize_line(instr): + """ + capitalizes the input string + + :param instr: the string to capitalize it should be a single line. + :type instr: string + + :returns: a capitalized version of instr + """ + + return " ".join( word.capitalize() for word in instr.split() ) + + +def capitalize(infilename, outfilename): + """ + reads the contents of infilename, and writes it to outfilename, but with + every word capitalized + + note: very primitive -- it will mess some files up! + + this is called by the capitalize script + + :param infilename: The file name you want to process + :type infilename: string + + :param outfilename: the name of the new file that will be created + :type outfilename: string + + :returns: None + + :raises: IOError if infilename doesn't exist. + """ + infile = open(infilename, 'U') + outfile = open(outfilename, 'w') + + for line in infile: + outfile.write(capitalize_line(line)) + outfile.write("\n") + + return None + + +class Something(object): + """ + this is the class docstring + """ + def __init__(self, input): + """ + the __init__ docstring + + :param input: someinput + :type input: some_type + """ + pass diff --git a/Examples/capitalize/sample_text_file.txt b/Examples/capitalize/sample_text_file.txt new file mode 100644 index 0000000..a64b50f --- /dev/null +++ b/Examples/capitalize/sample_text_file.txt @@ -0,0 +1,7 @@ +This is a really simple Text file. +It is here so that I can test the capitalize script. + +And that's only there to try out distutils. + +So there. + \ No newline at end of file diff --git a/Examples/capitalize/sample_text_file_cap.txt b/Examples/capitalize/sample_text_file_cap.txt new file mode 100644 index 0000000..1a192bc --- /dev/null +++ b/Examples/capitalize/sample_text_file_cap.txt @@ -0,0 +1,7 @@ +This Is A Really Simple Text File. +It Is Here So That I Can Test The Capitalize Script. + +And That's Only There To Try Out Distutils. + +So There. + diff --git a/Examples/capitalize/test_capital_mod.py b/Examples/capitalize/test_capital_mod.py new file mode 100644 index 0000000..7cd6cc6 --- /dev/null +++ b/Examples/capitalize/test_capital_mod.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +""" +test code for capitalize module + +can be run with py.test or nosetests +""" + +import capital_mod + +#print(capitalize.__file__) + +def test_capitalize_line(): + line = "this is a Line to capitalize" + expected = "This Is A Line To Capitalize" + + assert capital_mod.capitalize_line(line) == expected + +def test_capitalize(): + """ test an actual string """ + capital_mod.capitalize("sample_text_file.txt", "sample_text_file_cap.txt") + contents = open("sample_text_file_cap.txt", 'U').read() + expected = """This Is A Really Simple Text File. +It Is Here So That I Can Test The Capitalize Script. + +And That's Only There To Try Out Distutils. + +So There.""" + assert contents.strip() == expected + + + diff --git a/Examples/datetime_example.py b/Examples/datetime_example.py new file mode 100644 index 0000000..3717497 --- /dev/null +++ b/Examples/datetime_example.py @@ -0,0 +1,41 @@ +import datetime + +today = datetime.date.today() +print(today) +print('ctime :', today.ctime()) +tt = today.timetuple() +print('tuple : tm_year =', tt.tm_year) +print(' tm_mon =', tt.tm_mon) +print(' tm_mday =', tt.tm_mday) +print(' tm_hour =', tt.tm_hour) +print(' tm_min =', tt.tm_min) +print(' tm_sec =', tt.tm_sec) +print(' tm_wday =', tt.tm_wday) +print(' tm_yday =', tt.tm_yday) +print(' tm_isdst =', tt.tm_isdst) +print('ordinal:', today.toordinal()) +print('Year :', today.year) +print('Mon :', today.month) +print('Day :', today.day) + +d1 = datetime.date(2008, 3, 29) +print('d1:', d1.ctime()) + +d2 = d1.replace(year=2009) +print('d2:', d2.ctime()) + +today = datetime.date.today() +print('Today :', today) + +one_day = datetime.timedelta(days=1) +print('One day :', one_day) + +yesterday = today - one_day +print('Yesterday:', yesterday) + +tomorrow = today + one_day +print('Tomorrow :', tomorrow) + +print() +print('tomorrow - yesterday:', tomorrow - yesterday) +print('yesterday - tomorrow:', yesterday - tomorrow) diff --git a/Examples/debugging/long_loop.py b/Examples/debugging/long_loop.py new file mode 100644 index 0000000..3da4c5e --- /dev/null +++ b/Examples/debugging/long_loop.py @@ -0,0 +1,13 @@ + +def long_loop(): + for i in range(int(1e04)): + i+1 + if i == 777: + raise Exception("terrible bug") + result = 1 + 1 + return result + +print(long_loop()) + +s = "next statement" +print(s) diff --git a/Examples/debugging/wikidef/api.py b/Examples/debugging/wikidef/api.py new file mode 100644 index 0000000..e9401b5 --- /dev/null +++ b/Examples/debugging/wikidef/api.py @@ -0,0 +1,30 @@ +import requests + + +class ParseError(Exception): + pass + + +class Wikipedia(object): + """Wikipedia API interface""" + + api_endpoint = "http://en.wikipedia.org/w/api.php?" + + @classmethod + def article(cls, title): + """Return contents of article + + arguments: + + title -- title of article + """ + data = {'action': 'parse', 'format': 'json', 'prop':'text', 'page': title} + response = requests.get(cls.api_endpoint, params=data) + json_response = response.json() + + try: + contents = json_response['parse']['text']['*'] + except KeyError: + raise ParseError(json_response) + + return contents diff --git a/Examples/debugging/wikidef/define.py b/Examples/debugging/wikidef/define.py new file mode 100755 index 0000000..5677bbb --- /dev/null +++ b/Examples/debugging/wikidef/define.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 + +""" +Script to contact Wikipedia and get articles on a specified topic. +python define.py interesting_topic +""" + +import sys + +from definitions import Definitions +from html2text import html2text + +title = len(sys.argv) == 2 and sys.argv[1] or "" + +definition = Definitions.article(title) +txt = html2text(definition) +print(txt.encode('utf-8')) + diff --git a/Examples/week-01-testing/wikidef/definitions.py b/Examples/debugging/wikidef/definitions.py similarity index 100% rename from Examples/week-01-testing/wikidef/definitions.py rename to Examples/debugging/wikidef/definitions.py diff --git a/Examples/debugging/wikidef/html2text.py b/Examples/debugging/wikidef/html2text.py new file mode 100644 index 0000000..1540a7b --- /dev/null +++ b/Examples/debugging/wikidef/html2text.py @@ -0,0 +1,767 @@ +#!/usr/bin/env python3 +"""html2text: Turn HTML into equivalent Markdown-structured text.""" +__version__ = "3.1" +__author__ = "Aaron Swartz (me@aaronsw.com)" +__copyright__ = "(C) 2004-2008 Aaron Swartz. GNU GPL 3." +__contributors__ = ["Martin 'Joey' Schulze", "Ricardo Reyes", "Kevin Jay North"] + +# TODO: +# Support decoded entities with unifiable. + +try: + True +except NameError: + setattr(__builtins__, 'True', 1) + setattr(__builtins__, 'False', 0) + +def has_key(x, y): + if hasattr(x, 'has_key'): return x.has_key(y) + else: return y in x + +try: + import htmlentitydefs + import urlparse + import HTMLParser +except ImportError: #Python3 + import html.entities as htmlentitydefs + import urllib.parse as urlparse + import html.parser as HTMLParser +try: #Python3 + import urllib.request as urllib +except: + import urllib +import optparse, re, sys, codecs, types + +try: from textwrap import wrap +except: pass + +# Use Unicode characters instead of their ascii psuedo-replacements +UNICODE_SNOB = 0 + +# Put the links after each paragraph instead of at the end. +LINKS_EACH_PARAGRAPH = 0 + +# Wrap long lines at position. 0 for no wrapping. (Requires Python 2.3.) +BODY_WIDTH = 78 + +# Don't show internal links (href="#local-anchor") -- corresponding link targets +# won't be visible in the plain text file anyway. +SKIP_INTERNAL_LINKS = True + +# Use inline, rather than reference, formatting for images and links +INLINE_LINKS = True + +# Number of pixels Google indents nested lists +GOOGLE_LIST_INDENT = 36 + +IGNORE_ANCHORS = False +IGNORE_IMAGES = False + +### Entity Nonsense ### + +def name2cp(k): + if k == 'apos': return ord("'") + if hasattr(htmlentitydefs, "name2codepoint"): # requires Python 2.3 + return htmlentitydefs.name2codepoint[k] + else: + k = htmlentitydefs.entitydefs[k] + if k.startswith("&#") and k.endswith(";"): return int(k[2:-1]) # not in latin-1 + return ord(codecs.latin_1_decode(k)[0]) + +unifiable = {'rsquo':"'", 'lsquo':"'", 'rdquo':'"', 'ldquo':'"', +'copy':'(C)', 'mdash':'--', 'nbsp':' ', 'rarr':'->', 'larr':'<-', 'middot':'*', +'ndash':'-', 'oelig':'oe', 'aelig':'ae', +'agrave':'a', 'aacute':'a', 'acirc':'a', 'atilde':'a', 'auml':'a', 'aring':'a', +'egrave':'e', 'eacute':'e', 'ecirc':'e', 'euml':'e', +'igrave':'i', 'iacute':'i', 'icirc':'i', 'iuml':'i', +'ograve':'o', 'oacute':'o', 'ocirc':'o', 'otilde':'o', 'ouml':'o', +'ugrave':'u', 'uacute':'u', 'ucirc':'u', 'uuml':'u', +'lrm':'', 'rlm':''} + +unifiable_n = {} + +for k in unifiable.keys(): + unifiable_n[name2cp(k)] = unifiable[k] + +def charref(name): + if name[0] in ['x','X']: + c = int(name[1:], 16) + else: + c = int(name) + + if not UNICODE_SNOB and c in unifiable_n.keys(): + return unifiable_n[c] + else: + try: + return unichr(c) + except NameError: #Python3 + return chr(c) + +def entityref(c): + if not UNICODE_SNOB and c in unifiable.keys(): + return unifiable[c] + else: + try: name2cp(c) + except KeyError: return "&" + c + ';' + else: + try: + return unichr(name2cp(c)) + except NameError: #Python3 + return chr(name2cp(c)) + +def replaceEntities(s): + s = s.group(1) + if s[0] == "#": + return charref(s[1:]) + else: return entityref(s) + +r_unescape = re.compile(r"&(#?[xX]?(?:[0-9a-fA-F]+|\w{1,8}));") +def unescape(s): + return r_unescape.sub(replaceEntities, s) + +### End Entity Nonsense ### + +def onlywhite(line): + """Return true if the line does only consist of whitespace characters.""" + for c in line: + if c is not ' ' and c is not ' ': + return c is ' ' + return line + +def optwrap(text): + """Wrap all paragraphs in the provided text.""" + if not BODY_WIDTH: + return text + + assert wrap, "Requires Python 2.3." + result = '' + newlines = 0 + for para in text.split("\n"): + if len(para) > 0: + if para[0] != ' ' and para[0] != '-' and para[0] != '*': + for line in wrap(para, BODY_WIDTH): + result += line + "\n" + result += "\n" + newlines = 2 + else: + if not onlywhite(para): + result += para + "\n" + newlines = 1 + else: + if newlines < 2: + result += "\n" + newlines += 1 + return result + +def hn(tag): + if tag[0] == 'h' and len(tag) == 2: + try: + n = int(tag[1]) + if n in range(1, 10): return n + except ValueError: return 0 + +def dumb_property_dict(style): + """returns a hash of css attributes""" + return dict([(x.strip(), y.strip()) for x, y in [z.split(':', 1) for z in style.split(';') if ':' in z]]); + +def dumb_css_parser(data): + """returns a hash of css selectors, each of which contains a hash of css attributes""" + # remove @import sentences + importIndex = data.find('@import') + while importIndex != -1: + data = data[0:importIndex] + data[data.find(';', importIndex) + 1:] + importIndex = data.find('@import') + + # parse the css. reverted from dictionary compehension in order to support older pythons + elements = [x.split('{') for x in data.split('}') if '{' in x.strip()] + elements = dict([(a.strip(), dumb_property_dict(b)) for a, b in elements]) + + return elements + +def element_style(attrs, style_def, parent_style): + """returns a hash of the 'final' style attributes of the element""" + style = parent_style.copy() + if 'class' in attrs: + for css_class in attrs['class'].split(): + css_style = style_def['.' + css_class] + style.update(css_style) + if 'style' in attrs: + immediate_style = dumb_property_dict(attrs['style']) + style.update(immediate_style) + return style + +def google_list_style(style): + """finds out whether this is an ordered or unordered list""" + if 'list-style-type' in style: + list_style = style['list-style-type'] + if list_style in ['disc', 'circle', 'square', 'none']: + return 'ul' + return 'ol' + +def google_nest_count(style): + """calculate the nesting count of google doc lists""" + nest_count = 0 + if 'margin-left' in style: + nest_count = int(style['margin-left'][:-2]) / GOOGLE_LIST_INDENT + return nest_count + +def google_has_height(style): + """check if the style of the element has the 'height' attribute explicitly defined""" + if 'height' in style: + return True + return False + +def google_text_emphasis(style): + """return a list of all emphasis modifiers of the element""" + emphasis = [] + if 'text-decoration' in style: + emphasis.append(style['text-decoration']) + if 'font-style' in style: + emphasis.append(style['font-style']) + if 'font-weight' in style: + emphasis.append(style['font-weight']) + return emphasis + +def google_fixed_width_font(style): + """check if the css of the current element defines a fixed width font""" + font_family = '' + if 'font-family' in style: + font_family = style['font-family'] + if 'Courier New' == font_family or 'Consolas' == font_family: + return True + return False + +def list_numbering_start(attrs): + """extract numbering from list element attributes""" + if 'start' in attrs: + return int(attrs['start']) - 1 + else: + return 0 + +class _html2text(HTMLParser.HTMLParser): + def __init__(self, out=None, baseurl=''): + HTMLParser.HTMLParser.__init__(self) + + if out is None: self.out = self.outtextf + else: self.out = out + self.outtextlist = [] # empty list to store output characters before they are "joined" + try: + self.outtext = unicode() + except NameError: # Python3 + self.outtext = str() + self.quiet = 0 + self.p_p = 0 # number of newline character to print before next output + self.outcount = 0 + self.start = 1 + self.space = 0 + self.a = [] + self.astack = [] + self.acount = 0 + self.list = [] + self.blockquote = 0 + self.pre = 0 + self.startpre = 0 + self.code = False + self.br_toggle = '' + self.lastWasNL = 0 + self.lastWasList = False + self.style = 0 + self.style_def = {} + self.tag_stack = [] + self.emphasis = 0 + self.drop_white_space = 0 + self.inheader = False + self.abbr_title = None # current abbreviation definition + self.abbr_data = None # last inner HTML (for abbr being defined) + self.abbr_list = {} # stack of abbreviations to write later + self.baseurl = baseurl + + if options.google_doc: + del unifiable_n[name2cp('nbsp')] + unifiable['nbsp'] = ' _place_holder;' + + def feed(self, data): + data = data.replace("", "") + HTMLParser.HTMLParser.feed(self, data) + + def outtextf(self, s): + self.outtextlist.append(s) + if s: self.lastWasNL = s[-1] == '\n' + + def close(self): + HTMLParser.HTMLParser.close(self) + + self.pbr() + self.o('', 0, 'end') + + self.outtext = self.outtext.join(self.outtextlist) + + if options.google_doc: + self.outtext = self.outtext.replace(' _place_holder;', ' '); + + return self.outtext + + def handle_charref(self, c): + self.o(charref(c), 1) + + def handle_entityref(self, c): + self.o(entityref(c), 1) + + def handle_starttag(self, tag, attrs): + self.handle_tag(tag, attrs, 1) + + def handle_endtag(self, tag): + self.handle_tag(tag, None, 0) + + def previousIndex(self, attrs): + """ returns the index of certain set of attributes (of a link) in the + self.a list + + If the set of attributes is not found, returns None + """ + if not has_key(attrs, 'href'): return None + + i = -1 + for a in self.a: + i += 1 + match = 0 + + if has_key(a, 'href') and a['href'] == attrs['href']: + if has_key(a, 'title') or has_key(attrs, 'title'): + if (has_key(a, 'title') and has_key(attrs, 'title') and + a['title'] == attrs['title']): + match = True + else: + match = True + + if match: return i + + def drop_last(self, nLetters): + if not self.quiet: + self.outtext = self.outtext[:-nLetters] + + def handle_emphasis(self, start, tag_style, parent_style): + """handles various text emphases""" + tag_emphasis = google_text_emphasis(tag_style) + parent_emphasis = google_text_emphasis(parent_style) + + # handle Google's text emphasis + strikethrough = 'line-through' in tag_emphasis and options.hide_strikethrough + bold = 'bold' in tag_emphasis and not 'bold' in parent_emphasis + italic = 'italic' in tag_emphasis and not 'italic' in parent_emphasis + fixed = google_fixed_width_font(tag_style) and not \ + google_fixed_width_font(parent_style) and not self.pre + + if start: + # crossed-out text must be handled before other attributes + # in order not to output qualifiers unnecessarily + if bold or italic or fixed: + self.emphasis += 1 + if strikethrough: + self.quiet += 1 + if italic: + self.o("_") + self.drop_white_space += 1 + if bold: + self.o("**") + self.drop_white_space += 1 + if fixed: + self.o('`') + self.drop_white_space += 1 + self.code = True + else: + if bold or italic or fixed: + # there must not be whitespace before closing emphasis mark + self.emphasis -= 1 + self.space = 0 + self.outtext = self.outtext.rstrip() + if fixed: + if self.drop_white_space: + # empty emphasis, drop it + self.drop_last(1) + self.drop_white_space -= 1 + else: + self.o('`') + self.code = False + if bold: + if self.drop_white_space: + # empty emphasis, drop it + self.drop_last(2) + self.drop_white_space -= 1 + else: + self.o("**") + if italic: + if self.drop_white_space: + # empty emphasis, drop it + self.drop_last(1) + self.drop_white_space -= 1 + else: + self.o("_") + # space is only allowed after *all* emphasis marks + if (bold or italic) and not self.emphasis: + self.o(" ") + if strikethrough: + self.quiet -= 1 + + def handle_tag(self, tag, attrs, start): + #attrs = fixattrs(attrs) + if attrs is None: + attrs = {} + else: + attrs = dict(attrs) + + if options.google_doc: + # the attrs parameter is empty for a closing tag. in addition, we + # need the attributes of the parent nodes in order to get a + # complete style description for the current element. we assume + # that google docs export well formed html. + parent_style = {} + if start: + if self.tag_stack: + parent_style = self.tag_stack[-1][2] + tag_style = element_style(attrs, self.style_def, parent_style) + self.tag_stack.append((tag, attrs, tag_style)) + else: + dummy, attrs, tag_style = self.tag_stack.pop() + if self.tag_stack: + parent_style = self.tag_stack[-1][2] + + if hn(tag): + self.p() + if start: + self.inheader = True + self.o(hn(tag)*"#" + ' ') + else: + self.inheader = False + return # prevent redundant emphasis marks on headers + + if tag in ['p', 'div']: + if options.google_doc: + if start and google_has_height(tag_style): + self.p() + else: + self.soft_br() + else: + self.p() + + if tag == "br" and start: self.o(" \n") + + if tag == "hr" and start: + self.p() + self.o("* * *") + self.p() + + if tag in ["head", "style", 'script']: + if start: self.quiet += 1 + else: self.quiet -= 1 + + if tag == "style": + if start: self.style += 1 + else: self.style -= 1 + + if tag in ["body"]: + self.quiet = 0 # sites like 9rules.com never close + + if tag == "blockquote": + if start: + self.p(); self.o('> ', 0, 1); self.start = 1 + self.blockquote += 1 + else: + self.blockquote -= 1 + self.p() + + if tag in ['em', 'i', 'u']: self.o("_") + if tag in ['strong', 'b']: self.o("**") + if tag in ['del', 'strike']: + if start: + self.o("<"+tag+">") + else: + self.o("") + + if options.google_doc: + if not self.inheader: + # handle some font attributes, but leave headers clean + self.handle_emphasis(start, tag_style, parent_style) + + if tag == "code" and not self.pre: self.o('`') #TODO: `` `this` `` + if tag == "abbr": + if start: + self.abbr_title = None + self.abbr_data = '' + if has_key(attrs, 'title'): + self.abbr_title = attrs['title'] + else: + if self.abbr_title != None: + self.abbr_list[self.abbr_data] = self.abbr_title + self.abbr_title = None + self.abbr_data = '' + + if tag == "a" and not IGNORE_ANCHORS: + if start: + if has_key(attrs, 'href') and not (SKIP_INTERNAL_LINKS and attrs['href'].startswith('#')): + self.astack.append(attrs) + self.o("[") + else: + self.astack.append(None) + else: + if self.astack: + a = self.astack.pop() + if a: + if INLINE_LINKS: + self.o("](" + a['href'] + ")") + else: + i = self.previousIndex(a) + if i is not None: + a = self.a[i] + else: + self.acount += 1 + a['count'] = self.acount + a['outcount'] = self.outcount + self.a.append(a) + self.o("][" + str(a['count']) + "]") + + if tag == "img" and start and not IGNORE_IMAGES: + if has_key(attrs, 'src'): + attrs['href'] = attrs['src'] + alt = attrs.get('alt', '') + if INLINE_LINKS: + self.o("![") + self.o(alt) + self.o("]("+ attrs['href'] +")") + else: + i = self.previousIndex(attrs) + if i is not None: + attrs = self.a[i] + else: + self.acount += 1 + attrs['count'] = self.acount + attrs['outcount'] = self.outcount + self.a.append(attrs) + self.o("![") + self.o(alt) + self.o("]["+ str(attrs['count']) +"]") + + if tag == 'dl' and start: self.p() + if tag == 'dt' and not start: self.pbr() + if tag == 'dd' and start: self.o(' ') + if tag == 'dd' and not start: self.pbr() + + if tag in ["ol", "ul"]: + # Google Docs create sub lists as top level lists + if (not self.list) and (not self.lastWasList): + self.p() + if start: + if options.google_doc: + list_style = google_list_style(tag_style) + else: + list_style = tag + numbering_start = list_numbering_start(attrs) + self.list.append({'name':list_style, 'num':numbering_start}) + else: + if self.list: self.list.pop() + self.lastWasList = True + else: + self.lastWasList = False + + if tag == 'li': + self.pbr() + if start: + if self.list: li = self.list[-1] + else: li = {'name':'ul', 'num':0} + if options.google_doc: + nest_count = google_nest_count(tag_style) + else: + nest_count = len(self.list) + self.o(" " * nest_count) #TODO: line up
  1. s > 9 correctly. + if li['name'] == "ul": self.o(options.ul_item_mark + " ") + elif li['name'] == "ol": + li['num'] += 1 + self.o(str(li['num'])+". ") + self.start = 1 + + if tag in ["table", "tr"] and start: self.p() + if tag == 'td': self.pbr() + + if tag == "pre": + if start: + self.startpre = 1 + self.pre = 1 + else: + self.pre = 0 + self.p() + + def pbr(self): + if self.p_p == 0: self.p_p = 1 + + def p(self): self.p_p = 2 + + def soft_br(self): + self.pbr() + self.br_toggle = ' ' + + def o(self, data, puredata=0, force=0): + if self.abbr_data is not None: self.abbr_data += data + + if not self.quiet: + if options.google_doc: + # prevent white space immediately after 'begin emphasis' marks ('**' and '_') + lstripped_data = data.lstrip() + if self.drop_white_space and not (self.pre or self.code): + data = lstripped_data + if lstripped_data != '': + self.drop_white_space = 0 + + if puredata and not self.pre: + data = re.sub('\s+', ' ', data) + if data and data[0] == ' ': + self.space = 1 + data = data[1:] + if not data and not force: return + + if self.startpre: + #self.out(" :") #TODO: not output when already one there + self.startpre = 0 + + bq = (">" * self.blockquote) + if not (force and data and data[0] == ">") and self.blockquote: bq += " " + + if self.pre: + bq += " " + data = data.replace("\n", "\n"+bq) + + if self.start: + self.space = 0 + self.p_p = 0 + self.start = 0 + + if force == 'end': + # It's the end. + self.p_p = 0 + self.out("\n") + self.space = 0 + + if self.p_p: + self.out((self.br_toggle+'\n'+bq)*self.p_p) + self.space = 0 + self.br_toggle = '' + + if self.space: + if not self.lastWasNL: self.out(' ') + self.space = 0 + + if self.a and ((self.p_p == 2 and LINKS_EACH_PARAGRAPH) or force == "end"): + if force == "end": self.out("\n") + + newa = [] + for link in self.a: + if self.outcount > link['outcount']: + self.out(" ["+ str(link['count']) +"]: " + urlparse.urljoin(self.baseurl, link['href'])) + if has_key(link, 'title'): self.out(" ("+link['title']+")") + self.out("\n") + else: + newa.append(link) + + if self.a != newa: self.out("\n") # Don't need an extra line when nothing was done. + + self.a = newa + + if self.abbr_list and force == "end": + for abbr, definition in self.abbr_list.items(): + self.out(" *[" + abbr + "]: " + definition + "\n") + + self.p_p = 0 + self.out(data) + self.outcount += 1 + + def handle_data(self, data): + if r'\/script>' in data: self.quiet -= 1 + + if self.style: + self.style_def.update(dumb_css_parser(data)) + + self.o(data, 1) + + def unknown_decl(self, data): pass + +def wrapwrite(text): + text = text.encode('utf-8') + try: #Python3 + sys.stdout.buffer.write(text) + except AttributeError: + sys.stdout.write(text) + +def html2text_file(html, out=wrapwrite, baseurl=''): + h = _html2text(out, baseurl) + h.feed(html) + h.feed("") + return h.close() + +def html2text(html, baseurl=''): + return optwrap(html2text_file(html, None, baseurl)) + +class Storage: pass +options = Storage() +options.google_doc = False +options.ul_item_mark = '*' + +if __name__ == "__main__": + baseurl = '' + + p = optparse.OptionParser('%prog [(filename|url) [encoding]]', + version='%prog ' + __version__) + p.add_option("-g", "--google-doc", action="store_true", dest="google_doc", + default=False, help="convert an html-exported Google Document") + p.add_option("-d", "--dash-unordered-list", action="store_true", dest="ul_style_dash", + default=False, help="use a dash rather than a star for unordered list items") + p.add_option("-b", "--body-width", dest="body_width", action="store", type="int", + default=78, help="number of characters per output line, 0 for no wrap") + p.add_option("-i", "--google-list-indent", dest="list_indent", action="store", type="int", + default=GOOGLE_LIST_INDENT, help="number of pixels Google indents nested lists") + p.add_option("-s", "--hide-strikethrough", action="store_true", dest="hide_strikethrough", + default=False, help="hide strike-through text. only relevent when -g is specified as well") + (options, args) = p.parse_args() + + # handle options + if options.ul_style_dash: + options.ul_item_mark = '-' + else: + options.ul_item_mark = '*' + + BODY_WIDTH = options.body_width + GOOGLE_LIST_INDENT = options.list_indent + + # process input + if len(args) > 0: + file_ = args[0] + encoding = None + if len(args) == 2: + encoding = args[1] + if len(args) > 2: + p.error('Too many arguments') + + if file_.startswith('http://') or file_.startswith('https://'): + baseurl = file_ + j = urllib.urlopen(baseurl) + text = j.read() + if encoding is None: + try: + from feedparser import _getCharacterEncoding as enc + except ImportError: + enc = lambda x, y: ('utf-8', 1) + encoding = enc(j.headers, text)[0] + if encoding == 'us-ascii': + encoding = 'utf-8' + data = text.decode(encoding) + + else: + data = open(file_, 'rb').read() + if encoding is None: + try: + from chardet import detect + except ImportError: + detect = lambda x: {'encoding': 'utf-8'} + encoding = detect(data)['encoding'] + data = data.decode(encoding) + else: + data = sys.stdin.read() + wrapwrite(html2text(data, baseurl)) diff --git a/Examples/debugging/wikidef/test_wikidef.py b/Examples/debugging/wikidef/test_wikidef.py new file mode 100644 index 0000000..0601444 --- /dev/null +++ b/Examples/debugging/wikidef/test_wikidef.py @@ -0,0 +1,21 @@ +import unittest + +from api import Wikipedia, ParseError +from definitions import Definitions + +class WikiDefTest(unittest.TestCase): + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_article_success(self): + article = Definitions.article("Robot") + self.assertIn("mechanical", article) + + def test_missing_article_failure(self): + missing_article_title = "!!!!!-NonExistentArticle" + self.assertRaises(ParseError, Definitions.article, missing_article_title) + diff --git a/Examples/debugging/wikidef/test_wikidef_with_mock.py b/Examples/debugging/wikidef/test_wikidef_with_mock.py new file mode 100644 index 0000000..1423b54 --- /dev/null +++ b/Examples/debugging/wikidef/test_wikidef_with_mock.py @@ -0,0 +1,40 @@ +import unittest + +from mock import patch + +from api import Wikipedia, ParseError +from definitions import Definitions + +class WikiDefTest(unittest.TestCase): + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_article_success(self): + article = Definitions.article("Robot") + self.assertIn("mechanical", article) + + def test_missing_article_failure(self): + missing_article_title = "!!!!!-NonExistentArticle" + self.assertRaises(ParseError, Definitions.article, missing_article_title) + + # patch with a decorator + @patch('definitions.Wikipedia.article') + def test_article_success_decorator_mocked(self, mock_method): + article = Definitions.article("Robot") + mock_method.assert_called_once_with("Robot") + + @patch.object(Wikipedia, 'article') + def test_article_success_decorator_mocked(self, mock_method): + article = Definitions.article("Robot") + mock_method.assert_called_once_with("Robot") + + # patch with a context manager + def test_article_success_context_manager_mocked(self): + with patch.object(Wikipedia, 'article') as mock_method: + article = Definitions.article("Robot") + mock_method.assert_called_once_with("Robot") + diff --git a/Examples/documentation/Capitalize/CHANGES.txt b/Examples/documentation/Capitalize/CHANGES.txt new file mode 100644 index 0000000..41ae95a --- /dev/null +++ b/Examples/documentation/Capitalize/CHANGES.txt @@ -0,0 +1,2 @@ +v 0.0.1, 2014:03:23 -- Initial release. + diff --git a/Examples/documentation/Capitalize/LICENSE.txt b/Examples/documentation/Capitalize/LICENSE.txt new file mode 100644 index 0000000..258cd06 --- /dev/null +++ b/Examples/documentation/Capitalize/LICENSE.txt @@ -0,0 +1,4 @@ +The license for the capitalize package + +Public Domain: do with it what you will. + diff --git a/Examples/documentation/Capitalize/MANIFEST.txt b/Examples/documentation/Capitalize/MANIFEST.txt new file mode 100644 index 0000000..86604e4 --- /dev/null +++ b/Examples/documentation/Capitalize/MANIFEST.txt @@ -0,0 +1 @@ +include *.txt \ No newline at end of file diff --git a/Examples/documentation/Capitalize/README.txt b/Examples/documentation/Capitalize/README.txt new file mode 100644 index 0000000..2e92101 --- /dev/null +++ b/Examples/documentation/Capitalize/README.txt @@ -0,0 +1,11 @@ +=================== +Capitalize Package +=================== + +A basic pacakge for Capitalizing text in files + +Purpose +======== + +Nothing useful, just something to demonstrate packaging with. + diff --git a/Examples/documentation/Capitalize/bin/cap_script.py b/Examples/documentation/Capitalize/bin/cap_script.py new file mode 100755 index 0000000..08f999e --- /dev/null +++ b/Examples/documentation/Capitalize/bin/cap_script.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +""" +A really simple script just to demonstrate disutils +""" + +import sys, os +from capitalize import capital_mod + + +if __name__ == "__main__": + try: + infilename = sys.argv[1] + except IndexError: + print "you need to pass in a file to process" + + root, ext = os.path.splitext(infilename) + outfilename = root + "_cap" + ext + + # do the real work: + print "Capitalizing: %s and storing it in %s"%(infilename, outfilename) + capital_mod.capitalize(infilename, outfilename) + + print "I'm done" + \ No newline at end of file diff --git a/Examples/documentation/Capitalize/capitalize/__init__.py b/Examples/documentation/Capitalize/capitalize/__init__.py new file mode 100644 index 0000000..de8010b --- /dev/null +++ b/Examples/documentation/Capitalize/capitalize/__init__.py @@ -0,0 +1,9 @@ +# init for Capitalize package + +""" +A little package to make it easy to Capitalize things. + +Really useless -- but here to demostrate packaging and documentation +""" + +__version__ = "0.1.1" diff --git a/Examples/documentation/Capitalize/capitalize/capital_mod.py b/Examples/documentation/Capitalize/capitalize/capital_mod.py new file mode 100644 index 0000000..b6c23a9 --- /dev/null +++ b/Examples/documentation/Capitalize/capitalize/capital_mod.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python + +""" +A really simple module, just to demonstrate packaging and documentation +""" + + +def capitalize_line(instr): + """ + capitalizes the input string + + :param instr: the string to capitalize: it should be a single line. + :type instr: string + + :returns: a capitalized version of instr + """ + + return " ".join(word.capitalize() for word in instr.split()) + + +def capitalize(infilename, outfilename): + """ + reads the contents of infilename, and writes it to outfilename, but with + every word capitalized + + note: very primitive -- it will mess some files up! + + This is called by the capitalize script + + :param infilename: The file name you want to process + :type infilename: string + + :param outfilename: the name of the new file that will be created + :type outfilename: string + + :returns: None + + :raises: IOError if infilename doesn't exist. + """ + infile = open(infilename, 'U') + outfile = open(outfilename, 'w') + + for line in infile: + outfile.write(capitalize_line(line)) + outfile.write("\n") + + return None + + +class Something(object): + """ + this is the class docstring + + this is only here to demostrate how classes get documented. + """ + def __init__(self, input): + """ + the __init__ docstring + + :param input: someinput + :type input: some_type + """ + pass diff --git a/Examples/documentation/Capitalize/capitalize/test/__init__.py b/Examples/documentation/Capitalize/capitalize/test/__init__.py new file mode 100644 index 0000000..02d4ce5 --- /dev/null +++ b/Examples/documentation/Capitalize/capitalize/test/__init__.py @@ -0,0 +1,10 @@ +""" +Test package for capitalize module +""" + +import os + + +def runall(): + import pytest + pytest.main(os.path.split(__file__)[0]) diff --git a/Examples/documentation/Capitalize/capitalize/test/sample_text_file.txt b/Examples/documentation/Capitalize/capitalize/test/sample_text_file.txt new file mode 100644 index 0000000..8619a8b --- /dev/null +++ b/Examples/documentation/Capitalize/capitalize/test/sample_text_file.txt @@ -0,0 +1,6 @@ +This is a really simple Text file. +It is here so that I can test the capitalize script. + +And that's only there to try out packaging and documentation. + +So there. diff --git a/Examples/documentation/Capitalize/capitalize/test/test_capital_mod.py b/Examples/documentation/Capitalize/capitalize/test/test_capital_mod.py new file mode 100644 index 0000000..19da70a --- /dev/null +++ b/Examples/documentation/Capitalize/capitalize/test/test_capital_mod.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python + +""" +test code for capitalize module + +can be run with py.test or nosetests +""" + +import tempfile +import pytest + +from capitalize import capital_mod + + +# a sample pyteset fixture: +# this one creates a temp file, writes somethign to it, and returns the +# name of that file to the whatever uses the fixture. +@pytest.fixture +def test_textfile(): + f = tempfile.NamedTemporaryFile(mode='w', + encoding='utf-8', + newline=None, + delete=False) + f.write("""This is a really simple Text file. +It is here so that I can test the capitalize script. + +And that's only there to try out packaging and documentation. + +So there. +""" + ) + + return f.name + + +def test_capitalize_line(): + line = "this is a Line to capitalize" + expected = "This Is A Line To Capitalize" + + assert capital_mod.capitalize_line(line) == expected + + +def test_capitalize(test_textfile): + """ test an actual file """ + # capitalize the file + capital_mod.capitalize(test_textfile, "sample_text_file_cap.txt") + + # now check it + with open("sample_text_file_cap.txt", 'U') as infile: + contents = infile.read() + + expected = """This Is A Really Simple Text File. +It Is Here So That I Can Test The Capitalize Script. + +And That's Only There To Try Out Packaging And Documentation. + +So There.""" + + assert contents.strip() == expected diff --git a/Examples/documentation/Capitalize/doc/Makefile b/Examples/documentation/Capitalize/doc/Makefile new file mode 100644 index 0000000..38245c3 --- /dev/null +++ b/Examples/documentation/Capitalize/doc/Makefile @@ -0,0 +1,230 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = build + +# User-friendly check for sphinx-build +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) + $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don\'t have Sphinx installed, grab it from http://sphinx-doc.org/) +endif + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source + +.PHONY: help +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " applehelp to make an Apple Help Book" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " epub3 to make an epub3" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " coverage to run coverage check of the documentation (if enabled)" + @echo " dummy to check syntax errors of document sources" + +.PHONY: clean +clean: + rm -rf $(BUILDDIR)/* + +.PHONY: html +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +.PHONY: dirhtml +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +.PHONY: singlehtml +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +.PHONY: pickle +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +.PHONY: json +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +.PHONY: htmlhelp +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +.PHONY: qthelp +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/capitalize.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/capitalize.qhc" + +.PHONY: applehelp +applehelp: + $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp + @echo + @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." + @echo "N.B. You won't be able to view it unless you put it in" \ + "~/Library/Documentation/Help or install it in your application" \ + "bundle." + +.PHONY: devhelp +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/capitalize" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/capitalize" + @echo "# devhelp" + +.PHONY: epub +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +.PHONY: epub3 +epub3: + $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3 + @echo + @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3." + +.PHONY: latex +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +.PHONY: latexpdf +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: latexpdfja +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: text +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +.PHONY: man +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +.PHONY: texinfo +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +.PHONY: info +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +.PHONY: gettext +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +.PHONY: changes +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +.PHONY: linkcheck +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +.PHONY: doctest +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +.PHONY: coverage +coverage: + $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage + @echo "Testing of coverage in the sources finished, look at the " \ + "results in $(BUILDDIR)/coverage/python.txt." + +.PHONY: xml +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +.PHONY: pseudoxml +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." + +.PHONY: dummy +dummy: + $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy + @echo + @echo "Build finished. Dummy builder generates no files." diff --git a/Examples/documentation/Capitalize/doc/make.bat b/Examples/documentation/Capitalize/doc/make.bat new file mode 100644 index 0000000..977466e --- /dev/null +++ b/Examples/documentation/Capitalize/doc/make.bat @@ -0,0 +1,281 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set BUILDDIR=build +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% source +set I18NSPHINXOPTS=%SPHINXOPTS% source +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% + set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. singlehtml to make a single large HTML file + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. devhelp to make HTML files and a Devhelp project + echo. epub to make an epub + echo. epub3 to make an epub3 + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. text to make text files + echo. man to make manual pages + echo. texinfo to make Texinfo files + echo. gettext to make PO message catalogs + echo. changes to make an overview over all changed/added/deprecated items + echo. xml to make Docutils-native XML files + echo. pseudoxml to make pseudoxml-XML files for display purposes + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + echo. coverage to run coverage check of the documentation if enabled + echo. dummy to check syntax errors of document sources + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + + +REM Check if sphinx-build is available and fallback to Python version if any +%SPHINXBUILD% 1>NUL 2>NUL +if errorlevel 9009 goto sphinx_python +goto sphinx_ok + +:sphinx_python + +set SPHINXBUILD=python -m sphinx.__init__ +%SPHINXBUILD% 2> nul +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +:sphinx_ok + + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end +) + +if "%1" == "singlehtml" ( + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in %BUILDDIR%/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in %BUILDDIR%/qthelp, like this: + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\capitalize.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\capitalize.ghc + goto end +) + +if "%1" == "devhelp" ( + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. + goto end +) + +if "%1" == "epub" ( + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub file is in %BUILDDIR%/epub. + goto end +) + +if "%1" == "epub3" ( + %SPHINXBUILD% -b epub3 %ALLSPHINXOPTS% %BUILDDIR%/epub3 + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub3 file is in %BUILDDIR%/epub3. + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdf" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf + cd %~dp0 + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdfja" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf-ja + cd %~dp0 + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "text" ( + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The text files are in %BUILDDIR%/text. + goto end +) + +if "%1" == "man" ( + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The manual pages are in %BUILDDIR%/man. + goto end +) + +if "%1" == "texinfo" ( + %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. + goto end +) + +if "%1" == "gettext" ( + %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The message catalogs are in %BUILDDIR%/locale. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + if errorlevel 1 exit /b 1 + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + if errorlevel 1 exit /b 1 + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + if errorlevel 1 exit /b 1 + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in %BUILDDIR%/doctest/output.txt. + goto end +) + +if "%1" == "coverage" ( + %SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage + if errorlevel 1 exit /b 1 + echo. + echo.Testing of coverage in the sources finished, look at the ^ +results in %BUILDDIR%/coverage/python.txt. + goto end +) + +if "%1" == "xml" ( + %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The XML files are in %BUILDDIR%/xml. + goto end +) + +if "%1" == "pseudoxml" ( + %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. + goto end +) + +if "%1" == "dummy" ( + %SPHINXBUILD% -b dummy %ALLSPHINXOPTS% %BUILDDIR%/dummy + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. Dummy builder generates no files. + goto end +) + +:end diff --git a/Examples/documentation/Capitalize/doc/source/conf.py b/Examples/documentation/Capitalize/doc/source/conf.py new file mode 100644 index 0000000..3c76e48 --- /dev/null +++ b/Examples/documentation/Capitalize/doc/source/conf.py @@ -0,0 +1,293 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# capitalize documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 19 19:51:59 2016. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.coverage', + 'sphinx.ext.viewcode', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = 'capitalize' +copyright = '2016, Chris Barker' +author = 'Chris Barker' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '0.1.0' +# The full version, including alpha/beta/rc tags. +release = '0.1.0' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +#keep_warnings = False + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. + +html_theme = 'haiku' +# html_theme = 'alabaster' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. +# " v documentation" by default. +#html_title = 'capitalize v0.1.0' + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (relative to this directory) to use as a favicon of +# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +#html_extra_path = [] + +# If not None, a 'Last updated on:' timestamp is inserted at every page +# bottom, using the given strftime format. +# The empty string is equivalent to '%b %d, %Y'. +#html_last_updated_fmt = None + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Language to be used for generating the HTML full-text search index. +# Sphinx supports the following languages: +# 'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja' +# 'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr', 'zh' +#html_search_language = 'en' + +# A dictionary with options for the search language support, empty by default. +# 'ja' uses this config value. +# 'zh' user can custom change `jieba` dictionary path. +#html_search_options = {'type': 'default'} + +# The name of a javascript file (relative to the configuration directory) that +# implements a search results scorer. If empty, the default will be used. +#html_search_scorer = 'scorer.js' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'capitalizedoc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', + +# Latex figure (float) alignment +#'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'capitalize.tex', 'capitalize Documentation', + 'Chris Barker', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'capitalize', 'capitalize Documentation', + [author], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'capitalize', 'capitalize Documentation', + author, 'capitalize', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +#texinfo_no_detailmenu = False diff --git a/Examples/documentation/Capitalize/doc/source/index.rst b/Examples/documentation/Capitalize/doc/source/index.rst new file mode 100644 index 0000000..c4a966f --- /dev/null +++ b/Examples/documentation/Capitalize/doc/source/index.rst @@ -0,0 +1,27 @@ +.. capitalize documentation master file, created by + sphinx-quickstart on Tue Apr 19 19:51:59 2016. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to capitalize's documentation! +====================================== + +Capitalize is a small packge that helps you capitilze text files. + +Contents: + +.. toctree:: + :maxdepth: 2 + + tutorial.rst + reference.rst + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/Examples/documentation/Capitalize/doc/source/reference.rst b/Examples/documentation/Capitalize/doc/source/reference.rst new file mode 100644 index 0000000..d1683e9 --- /dev/null +++ b/Examples/documentation/Capitalize/doc/source/reference.rst @@ -0,0 +1,17 @@ +============= +Lib Reference +============= + +the reference docs + +The capitalize packge +===================== + +.. automodule:: capitalize + +capital_mod module +------------------- + +.. automodule:: capitalize.capital_mod + :members: + diff --git a/Examples/documentation/Capitalize/doc/source/tutorial.rst b/Examples/documentation/Capitalize/doc/source/tutorial.rst new file mode 100644 index 0000000..8fd8eaa --- /dev/null +++ b/Examples/documentation/Capitalize/doc/source/tutorial.rst @@ -0,0 +1,17 @@ +======== +Tutorial +======== + +A short tutorial for capitalize + +Easy Start +========== + +just do: + +.. code-block:: bash + + $ capitalize.py a_text_file + + + diff --git a/Examples/documentation/Capitalize/setup.cfg b/Examples/documentation/Capitalize/setup.cfg new file mode 100644 index 0000000..9af7e6f --- /dev/null +++ b/Examples/documentation/Capitalize/setup.cfg @@ -0,0 +1,2 @@ +[aliases] +test=pytest \ No newline at end of file diff --git a/Examples/documentation/Capitalize/setup.py b/Examples/documentation/Capitalize/setup.py new file mode 100755 index 0000000..4a6957e --- /dev/null +++ b/Examples/documentation/Capitalize/setup.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python + +""" +This is about as simple a setup.py as you can have + +It installs the capitalize module and script + +""" + +from setuptools import setup + +import capitalize # to get __version__ + +setup( + name='Capitalize', + version=capitalize.__version__, + author='Chris Barker', + author_email='PythonCHB@gmail.com', + packages=['capitalize', + 'capitalize/test'], + scripts=['bin/cap_script.py', ], + setup_requires=['pytest-runner'], + tests_require=['pytest'], + license='LICENSE.txt', + description='Not very useful capitalizing module and script', + long_description=open('README.txt').read(), +) diff --git a/Examples/extensions/c-api/add.c b/Examples/extensions/c-api/add.c new file mode 100644 index 0000000..7104782 --- /dev/null +++ b/Examples/extensions/c-api/add.c @@ -0,0 +1,29 @@ +#include + +static PyObject * +add(PyObject *self, PyObject *args) +{ + int x; + int y; + int sts; + + if (!PyArg_ParseTuple(args, "ii", &x, &y)) + return NULL; + sts = x+y; + return Py_BuildValue("i", sts); +} + +// Module's method table and initialization function +// see: https://docs.python.org/2/extending/extending.html#the-module-s-method-table-and-initialization-function +static PyMethodDef AddMethods[] = { + {"add", add, METH_VARARGS, "add two numbers"}, + {NULL, NULL, 0, NULL} // sentinel +}; + + +PyMODINIT_FUNC +initadd(void) { + // Module's initialization function + // Will be called again if you use Python's reload() + (void) Py_InitModule("add", AddMethods); +} diff --git a/Examples/extensions/c-api/divide/divide.c b/Examples/extensions/c-api/divide/divide.c new file mode 100644 index 0000000..6ebad27 --- /dev/null +++ b/Examples/extensions/c-api/divide/divide.c @@ -0,0 +1,29 @@ +#include + +static PyObject * +divide(PyObject *self, PyObject *args) +{ + double x; + double y; + double sts; + + if (!PyArg_ParseTuple(args, "dd", &x, &y)) + return NULL; + sts = x/y; + return Py_BuildValue("d", sts); +} + +// Module's method table and initialization function +// See: http://docs.python.org/extending/extending.html#the-module-s-method-table-and-initialization-function +static PyMethodDef DivideMethods[] = { + {"divide", divide, METH_VARARGS, "divide two numbers"}, + {NULL, NULL, 0, NULL} +}; + +PyMODINIT_FUNC // does the right thing on Windows, Linux, etc. +initdivide(void) { + // Module's initialization function + // Will be called again if you use Python's reload() + + Py_InitModule("divide", DivideMethods); +} diff --git a/Examples/extensions/c-api/divide/setup.py b/Examples/extensions/c-api/divide/setup.py new file mode 100755 index 0000000..d5810ab --- /dev/null +++ b/Examples/extensions/c-api/divide/setup.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from setuptools import setup, Extension + +setup( + name='Cdiv', + version='1.0', + description='sample method that does exceptions', + ext_modules=[Extension('divide', sources=['divide.c'])], +) diff --git a/Examples/extensions/c-api/divide/test_divide.py b/Examples/extensions/c-api/divide/test_divide.py new file mode 100644 index 0000000..15e3698 --- /dev/null +++ b/Examples/extensions/c-api/divide/test_divide.py @@ -0,0 +1,17 @@ +""" +test file for the divide function +""" + +import pytest + +from divide import divide + + +def test_divide(): + assert divide(3, 4) == 0.75 + + +def test_divide_zero(): + # if it acts like python, it should raise an exception + with pytest.raises(ZeroDivisionError): + divide(3, 0) diff --git a/Examples/extensions/c-api/setup.py b/Examples/extensions/c-api/setup.py new file mode 100755 index 0000000..b571728 --- /dev/null +++ b/Examples/extensions/c-api/setup.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from setuptools import setup, Extension + +setup( + name='Cadd', + version='1.0', + description='simple c extension for an example', + ext_modules=[Extension('add', sources=['add.c'])], +) diff --git a/Examples/extensions/c-api/test_add.py b/Examples/extensions/c-api/test_add.py new file mode 100644 index 0000000..259ca28 --- /dev/null +++ b/Examples/extensions/c-api/test_add.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +""" +simple test for the add C extension +""" + +import pytest + +import add + +def test_basic(): + assert add.add(3,4) == 7 + +def test_negative(): + assert add.add(-12, 5) == -7 + +def test_float(): + with pytest.raises(TypeError): + add.add(3, 4.0) + + diff --git a/Examples/extensions/ctypes/Makefile b/Examples/extensions/ctypes/Makefile new file mode 100644 index 0000000..6ac01dd --- /dev/null +++ b/Examples/extensions/ctypes/Makefile @@ -0,0 +1 @@ +all: add; gcc -shared -o add.so add.c diff --git a/Examples/extensions/ctypes/add.c b/Examples/extensions/ctypes/add.c new file mode 100644 index 0000000..38d99ad --- /dev/null +++ b/Examples/extensions/ctypes/add.c @@ -0,0 +1,10 @@ +#include + +int add(int x, int y) { + return x+y; +} +int main(void) { + int w = 3; + int q = 2; + printf("%d + %d = %d\n\n", w, q, add(w,q)); +} diff --git a/Examples/extensions/ctypes/add.dll b/Examples/extensions/ctypes/add.dll new file mode 100644 index 0000000..29de56d Binary files /dev/null and b/Examples/extensions/ctypes/add.dll differ diff --git a/Examples/extensions/ctypes/pointers.py b/Examples/extensions/ctypes/pointers.py new file mode 100755 index 0000000..4991d41 --- /dev/null +++ b/Examples/extensions/ctypes/pointers.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from ctypes import * + +libc = CDLL("libc.dylib") + +i = c_int() +f = c_float() +s = create_string_buffer('\000' * 32) +print i.value, f.value, repr(s.value) +libc.sscanf("1 3.14 Hello", "%d %f %s",byref(i), byref(f), s) +print i.value, f.value, repr(s.value) diff --git a/Examples/extensions/ctypes/qsort_test.py b/Examples/extensions/ctypes/qsort_test.py new file mode 100755 index 0000000..279915d --- /dev/null +++ b/Examples/extensions/ctypes/qsort_test.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python + +from ctypes import * + +libc = CDLL("libc.dylib") + +TenInts = c_int * 10 +data = TenInts(*range(10,0,-1)) + +# http://www.gnu.org/software/libc/manual/html_node/Array-Sort-Function.html +# void qsort (void *array, size_t count, size_t size, comparison_fn_t compare) + +# http://docs.python.org/2/library/ctypes.html#ctypes.CFUNCTYPE +CMPFUNC = CFUNCTYPE(c_int, POINTER(c_int), POINTER(c_int)) + +def py_cmp_func(a, b): + # print "py_cmp_func", a[0], b[0] + return a[0] - b[0] + +for i in data: + print i + +libc.qsort(data, len(data), sizeof(c_int), CMPFUNC(py_cmp_func)) + +for i in data: + print i diff --git a/Examples/extensions/ctypes/test_add.py b/Examples/extensions/ctypes/test_add.py new file mode 100644 index 0000000..58aa9cf --- /dev/null +++ b/Examples/extensions/ctypes/test_add.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python + +import sys + +lib_ext = ('.so' if ('darwin' in sys.platform or + 'linux' in sys.platform) + else ".dll") + +import ctypes +import ctypes.util + +# # now load our own shared library +# add = ctypes.cdll.LoadLibrary("add"+lib_ext) + +# print "This should be 7:", +# print add.add(3,4) + +# Using an already-loaded shared library: +## loading libc and libm (math) +if 'darwin' in sys.platform: + # OS-X likes full paths... + libc_name = ctypes.util.find_library("libc") + libm_name = ctypes.util.find_library("libm") + print libc_name + libc = ctypes.CDLL(libc_name) + libm = ctypes.CDLL(libm_name) +elif 'linux' in sys.platform: + # linux uses the shared lib search path +# libc = ctypes.CDLL("libc.so") + libc = ctypes.util.find_library("libc") + libc = ctypes.CDLL("/lib/x86_64-linux-gnu/libc.so.6") + libm = ctypes.CDLL("/lib/x86_64-linux-gnu/libm.so.6") +elif 'win' in sys.platform: + # Windows can find already loaded dlls by name + libc = ctypes.cdll.msvcrt # lib c and libm are in msvcrt + libm = ctypes.cdll.msvcrt + +libc.printf("printed via libc printf()\n") + +print "passing different types to printf:" +#libc.printf("An int %d, a double %f\n", 1234, 3.14) +libc.printf("An int %d, a double %f\n", 1234, ctypes.c_double(3.14)) +#libc.printf("An int %d, a double %f\n", 1234) + + +## Calling libm +## prototype for pow(): +## double pow ( double x, double y ) + +print "This should be 81.0:", +print libm.pow(ctypes.c_double(3), ctypes.c_double(4)) + +## need to set the return type! +libm.pow.restype = ctypes.c_double +print "This should be 81.0:", +print libm.pow(ctypes.c_double(3), ctypes.c_double(4)) + +## if you are going to call the same function a lot, +## you can specify the arument types: + +libm.pow.restype = ctypes.c_double +libm.pow.argtypes = [ctypes.c_double, ctypes.c_double] +print "This should be 81.0:", +print libm.pow(3, 4.0) + +## much easier! + + + + + + + + diff --git a/Examples/extensions/cython/AGC_example/README.rst b/Examples/extensions/cython/AGC_example/README.rst new file mode 100644 index 0000000..a33e243 --- /dev/null +++ b/Examples/extensions/cython/AGC_example/README.rst @@ -0,0 +1,26 @@ +Automatic Gain Control Example +============================== + +Automatic Gain Control is a signal processing procedure: + +http://seismicreflections.globeclaritas.com/2013/04/agc-equaliser.html + +This is an example of using fortran, C, and Cython to produce a fast AGC +filter for Python/numpy. + +Thanks for the folks at IRIS (http://www.iris.edu) for this example and +the Fortran code. + +Using these examples: +===================== + +The c and cython versions should be usable with any pyton set up to +compile extensions. They use setuptools to call the compiler. + +The Fortran / f2c version requires a compatible Fortran compiler. g77 +should work fine, but getting a compatible build on anything but Linux +is a trick, and out of scope for this README (sorry). Google for it -- +you should find what you need. + + + diff --git a/Examples/extensions/cython/AGC_example/agc_c.c b/Examples/extensions/cython/AGC_example/agc_c.c new file mode 100644 index 0000000..7e8a6ae --- /dev/null +++ b/Examples/extensions/cython/AGC_example/agc_c.c @@ -0,0 +1,32 @@ +/* C version of AGC code */ + +#include +#include + +void AGC(int nAGC, int npts, float *amp, float *ampAGC); + +void AGC(int nAGC, int npts, float *amp, float *ampAGC) { + + float fmax; + float absamp[npts]; + int i, j, nAGC2; + + + for (i = 0; i < npts; i++){ + ampAGC[i] = 0.0; + absamp[i] = fabs(amp[i]); + } + nAGC2 = nAGC / 2; + + for (i = nAGC2; i < npts-nAGC2; i++){ + fmax = 0.0; + for ( j=(i-nAGC2); j < i+nAGC2+1; j++ ){ + if ( absamp[j] > fmax ) { + fmax = absamp[j]; + } + } + ampAGC[i] = amp[i] / fmax; + } + return; + } + diff --git a/Examples/extensions/cython/AGC_example/agc_c_cy.pyx b/Examples/extensions/cython/AGC_example/agc_c_cy.pyx new file mode 100644 index 0000000..dc1f720 --- /dev/null +++ b/Examples/extensions/cython/AGC_example/agc_c_cy.pyx @@ -0,0 +1,22 @@ +""" +Cython file to call the C routine +""" + +import numpy as np +cimport numpy as cnp + +cdef extern: + void AGC(int nAGC, int npts, float *amp, float *ampAGC) + + +def agc (int nAGC, float[:] amp): + + # create the output array + cdef cnp.ndarray[float, ndim=1] ampAGC = np.zeros_like(amp) + + npts = amp.shape[0] + + # call the C function + AGC(nAGC, npts, &[0], &AGC[0]) + + return ampAGC diff --git a/Examples/extensions/cython/AGC_example/agc_cython.pyx b/Examples/extensions/cython/AGC_example/agc_cython.pyx new file mode 100644 index 0000000..2495e8e --- /dev/null +++ b/Examples/extensions/cython/AGC_example/agc_cython.pyx @@ -0,0 +1,80 @@ +#!/usr/bin/env python + +""" +cython version version of the Automatic Gain Control function + +Timings: + first version (pure python): + +In [23]: timeit agc_cython.agc(10, np.arange(1000, dtype=np.float32)) +100 loops, best of 3: 10.7 ms per loop + +typing inputs: + +100 loops, best of 3: 17.3 ms per loop + +Typing counters and memoryviews of arrays +1000 loops, best of 3: 1.68 ms per loop + +typing loop counters +1000 loops, best of 3: 613 us per loop + +forgot to type fmax: +10000 loops, best of 3: 119 us per loop + +added boundscheck=False +10000 loops, best of 3: 117 us per loop + +use memoryviews of cython arrays +10000 loops, best of 3: 39.4 us per loop + +use cython arrays: +100 loops, best of 3: 6.12 ms per loop + +c array for temp array: +100 loops, best of 3: 6.34 ms per loop + +""" + +import cython +import numpy as np +cimport numpy as cnp + +#from libc.stdlib cimport malloc, free + +@cython.boundscheck(False) +@cython.cdivision(True) +def agc( int nAGC, cnp.ndarray[float, ndim=1, mode='c'] amp): + """ + run an automatic gain control filter onver the input array + + :param nAGC: width of window, number of elements. + :type nAGC: integer + + :param amp: input amplitude data + :type amp: 1-d numpy array of float32 + + :returns ampAGC: a numpy array of the filtered data. + + """ + + cdef float fmax + cdef unsigned int i, j + + cdef unsigned int npts = amp.shape[0] + + cdef unsigned int nAGC2 = nAGC / 2 + + cdef cnp.ndarray[float, ndim=1, mode='c'] ampAGC = np.zeros_like(amp) + cdef cnp.ndarray[float, ndim=1, mode='c'] absamp = np.abs(amp) + + + for i in range(nAGC2, npts - nAGC2): + fmax=0.0 + for j in range(i-nAGC2,i+nAGC2+1): + if absamp[j] > fmax: + fmax = absamp[j] + ampAGC[i] = amp[i]/fmax + + return ampAGC + diff --git a/Examples/extensions/cython/AGC_example/agc_program.f b/Examples/extensions/cython/AGC_example/agc_program.f new file mode 100644 index 0000000..2a01c65 --- /dev/null +++ b/Examples/extensions/cython/AGC_example/agc_program.f @@ -0,0 +1,95 @@ +c +c Program to read in a time series, AGC it, dump out a new time series. +c +c +c +c +c23456789012345678901234567890123456789012345678901234567890123456789012 + + parameter(npts0=1000000) + character*180 infile,outfile + real amp(npts0),ampAGC(npts0),ampAGC2(npts0),absamp(npts0) + + print *,'Enter input timeseries' + read (*,'(a)') infile + + print *,'Enter output filename ' + read (*,'(a)') outfile + + print *,'Enter npts length of AGC window' + read *,nAGC + + nAGC2=nAGC/2 + nrepeat=20 + +c--------- read in file & zero out the ampAGC array + + open(4,file=infile) + do i=1,npts0 + read(4,*,end=201) amp(i) + ampAGC(i)=0. + ampAGC2(i)=0. + absamp(i)=abs(amp(i)) + enddo +201 close(4) + npts=i-1 + +c-------- less code, simpler, waaay slower + + call system_clock(count_rate=icr) + call system_clock (i1) + do irepeat=1,nrepeat !----- loop over it many times, just for timing purposes + + do i=nAGC2+1,npts-nAGC2 + fmax=0. + do j=i-nAGC2,i+nAGC2 + if (absamp(j).gt.fmax) fmax=absamp(j) + enddo + ampAGC(i)=amp(i)/fmax + enddo + + enddo !----- do irepeat=1,nrepeat + call system_clock (i2) + print *, 'Slow time= ', real(i2-i1)/icr + +c--------- Automatic Gain Control +c Only 'rescan' the window for a max if the previous window's +c max came from the very first point in it's window. + + call system_clock(count_rate=icr) + call system_clock (i1) + do irepeat=1,nrepeat + + fmax=0. + do i=1,nAGC + if (absamp(i).gt.fmax) fmax=absamp(i) + enddo + ampAGC2(nAGC2+1)=amp(nAGC2+1)/fmax + do i=nAGC2+2,npts-nAGC2 + j0=i-nAGC2-1 + j1=i-nAGC2 + j2=i+nAGC2 + fmax=max(fmax,absamp(j2)) + if (absamp(j0).eq.fmax) then + fmax=0. + do j=j1,j2 + if (absamp(j).gt.fmax) fmax=absamp(j) + enddo + endif + ampAGC2(i)=amp(i)/fmax + enddo + + enddo !----- do irepeat=1,nrepeat + call system_clock (i2) + print *, 'Fast time= ', real(i2-i1)/icr + +c--------- write output + + open(4,file=outfile) + do i=1,npts + write(4,*) i,amp(i),ampAGC(i),ampAGC2(i) + enddo + close(4) + + end + diff --git a/Examples/extensions/cython/AGC_example/agc_python.py b/Examples/extensions/cython/AGC_example/agc_python.py new file mode 100644 index 0000000..1d4539a --- /dev/null +++ b/Examples/extensions/cython/AGC_example/agc_python.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python + +""" +Pure python (and not very numpy smart) version of the +Automatic Gain Control function +""" + +import numpy as np + + +def agc(nAGC, amp): + """ + run an automatic gain control filter onver the input array + + :param nAGC: width of window, number of elements. + :type nAGC: integer + + :param amp: input amplitude data + :type amp: 1-d numpy array of float32 + + :returns ampAGC: a numpy array of the filtered data. + + """ + + # make sure input array is as expected: + amp = np.asarray(amp, dtype=np.float32) + + if len(amp.shape) != 1: + raise ValueError("amp must be a rank-1 array") + + npts = amp.shape[0] + + nAGC2 = nAGC / 2 + ampAGC = np.zeros_like(amp) + absamp = np.zeros_like(amp) + + absamp = np.abs(amp) + + for i in xrange(nAGC2, npts - nAGC2): + fmax = 0.0 + for j in range(i - nAGC2, i + nAGC2 + 1): + if absamp[j] > fmax: + fmax = absamp[j] + ampAGC[i] = amp[i] / fmax + + return ampAGC diff --git a/Examples/extensions/cython/AGC_example/agc_subroutine.f b/Examples/extensions/cython/AGC_example/agc_subroutine.f new file mode 100644 index 0000000..365f2e2 --- /dev/null +++ b/Examples/extensions/cython/AGC_example/agc_subroutine.f @@ -0,0 +1,31 @@ +c +c Subrooutine to compute an automatic gain control filter. +c +c + subroutine AGC(nAGC,npts,amp,ampAGC) + +CF2PY INTENT(OUT) :: ampAGC +CF2PY INTENT(HIDE) :: npts + + real fmax,amp(npts),absamp(npts),ampAGC(npts) + integer i,j,npts,nAGC,nAGC2 + + do i=1,npts + ampAGC(i)=0. + absamp(i)=abs(amp(i)) + enddo + + nAGC2=nAGC/2 + + do i=nAGC2+1,npts-nAGC2 + fmax=0. + do j=i-nAGC2,i+nAGC2 + if (absamp(j).gt.fmax) fmax=absamp(j) + enddo + ampAGC(i)=amp(i)/fmax + enddo + + return + + end + diff --git a/Examples/extensions/cython/AGC_example/agc_subroutine.pyf b/Examples/extensions/cython/AGC_example/agc_subroutine.pyf new file mode 100644 index 0000000..53dfa82 --- /dev/null +++ b/Examples/extensions/cython/AGC_example/agc_subroutine.pyf @@ -0,0 +1,16 @@ +! -*- f90 -*- +! Note: the context of this file is case sensitive. + +python module agc_subroutine ! in + interface ! in :agc_subroutine + subroutine agc(nagc,npts,amp,ampagc) ! in :agc_subroutine:agc_subroutine.f + integer :: nagc + integer, optional,intent(hide),check(len(amp)>=npts),depend(amp) :: npts=len(amp) + real dimension(npts) :: amp + real dimension(npts),intent(out),depend(npts) :: ampagc + end subroutine agc + end interface +end python module agc_subroutine + +! This file was auto-generated with f2py (version:2). +! See http://cens.ioc.ee/projects/f2py2e/ diff --git a/Examples/extensions/cython/AGC_example/plot_agc.py b/Examples/extensions/cython/AGC_example/plot_agc.py new file mode 100644 index 0000000..76738f8 --- /dev/null +++ b/Examples/extensions/cython/AGC_example/plot_agc.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python + +""" +test code for the "agc_subroutine" extension, generated from fortran by f2py +""" +import numpy as np +import matplotlib.pyplot as plt + +import agc_subroutine +import agc_python + +print "the doctring for agc:" +print agc_subroutine.agc.__doc__ + +# to call it: +# create a noisy array: + +t = np.linspace(0,20,100).astype(np.float32) + +signal = np.sin(t) + +# add some noise +signal += (np.random.random(signal.shape)-0.5) * 0.3 + +# create an array for the result: +#filtered = np.zeros_like(signal) + +# run it through the AGC filter: +filtered = agc_subroutine.agc(10, signal) + +# try the python version +filtered2 = agc_python.agc(10, signal) + +if np.allclose(filtered2, filtered2): + print "the same" +else: + print "not the same" + +## plot the results + +fig = plt.figure(figsize=(10,5)) +ax = fig.add_subplot(1,1,1) +ax.plot(t, signal, t, filtered, t, filtered2) + +plt.show() + + + + diff --git a/Examples/extensions/cython/AGC_example/setup.py b/Examples/extensions/cython/AGC_example/setup.py new file mode 100755 index 0000000..deb3be5 --- /dev/null +++ b/Examples/extensions/cython/AGC_example/setup.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +from setuptools import setup, Extension +from Cython.Build import cythonize + +import numpy + +cy = Extension("agc_cython", + ["agc_cython.pyx"], + include_dirs=[numpy.get_include()], + ) +c_wrap = Extension("agc_c_cy", + ["agc_c_cy.pyx", "agc_c.c"], + include_dirs=[numpy.get_include()] + ) + +setup(ext_modules=cythonize([cy, c_wrap])) diff --git a/Examples/extensions/cython/AGC_example/test_agc.py b/Examples/extensions/cython/AGC_example/test_agc.py new file mode 100644 index 0000000..3a75dea --- /dev/null +++ b/Examples/extensions/cython/AGC_example/test_agc.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python + +""" +test code for various AGC modules + +designed to be run with py.test or nose + +some timing code to cut&paste into iPython: + +import numpy as np +import agc_cython +import agc_python +import agc_subroutine +import agc_c_cy + +timeit agc_cython.agc(10, np.arange(1000, dtype=np.float32)) + +timeit agc_python.agc(10, np.arange(1000, dtype=np.float32)) + +timeit agc_subroutine.agc(10, np.arange(1000, dtype=np.float32)) + +timeit agc_c_cy.agc(10, np.arange(1000, dtype=np.float32)) + +""" + +import numpy as np + +import agc_cython +import agc_python +import agc_c_cy + +# The Fortran / f2py version +# import agc_subroutine + + +def test_cython(): + # just make sure it runs. + signal = np.arange(20, dtype=np.float32) + + result = agc_cython.agc(4, signal) + + +def test_c_wrap(): + # just make sure it runs. + signal = np.arange(20, dtype=np.float32) + + result = agc_c_cy.agc(4, signal) + + +# def test_subroutine(): +# # the Fortran / f2py version +# # just make sure it runs. +# signal = np.arange(20, dtype=np.float32) + +# result = agc_subroutine.agc(4, signal) + + +def test_cy_py_same(): + signal = np.arange(20, dtype=np.float32) + + cy_result = agc_cython.agc(4, signal) + py_result = agc_python.agc(4, signal) + c_cy_result = agc_c_cy.agc(4, signal) +# sub_result = agc_subroutine.agc(4, signal) + + print "cy:", cy_result + print "py:", py_result + print "c_cy", c_cy_result +# print "subroutine", sub_result + + assert np.array_equal(cy_result, py_result) + assert np.array_equal(cy_result, c_cy_result) +# assert np.array_equal(cy_result, sub_result) diff --git a/Examples/extensions/cython/NotesAboutCythonExample.txt b/Examples/extensions/cython/NotesAboutCythonExample.txt new file mode 100644 index 0000000..159c474 --- /dev/null +++ b/Examples/extensions/cython/NotesAboutCythonExample.txt @@ -0,0 +1,41 @@ +# Notes about Cython examples: + +## Installing Cython: + +$ pip install Cython + +Cython files are named with the "pyx" extension (Pyrex legacy) + +Note: Python syntax highlighting works pretty well in most editors. + + +## For simple functions: + +def is callable from Python + +cdef is only callable from Cython (or C) + + +## generating C code: + +$ cython cy_add.pyx + +generating "annotated" C code (HTML): + +$ cython -a cy_add.pyx + +Look at the html -- the yellow highlights are places where calls into the Python runtime are used. + +## To build extension: + +python cy_setup.py build_ext --inplace + +(or develop or install....) + +running nose or py.test should run all the tests. Or you can run each one on it's own. + + + + + + diff --git a/Examples/extensions/cython/add.c b/Examples/extensions/cython/add.c new file mode 100644 index 0000000..725a3c6 --- /dev/null +++ b/Examples/extensions/cython/add.c @@ -0,0 +1,6 @@ +#include +#include "add.h" + +int add(int x, int y) { + return x+y; +} diff --git a/Examples/extensions/cython/add.h b/Examples/extensions/cython/add.h new file mode 100644 index 0000000..50cf633 --- /dev/null +++ b/Examples/extensions/cython/add.h @@ -0,0 +1,4 @@ + +int add(int x, int y); + + diff --git a/Examples/extensions/cython/cy_add1.pyx b/Examples/extensions/cython/cy_add1.pyx new file mode 100644 index 0000000..3cc8a2c --- /dev/null +++ b/Examples/extensions/cython/cy_add1.pyx @@ -0,0 +1,22 @@ +""" +Cython implementation of the add.c example + +This one pure python + +""" + +def add(x, y): + + result = x + y + + return result + + + + + + + + + + diff --git a/Examples/extensions/cython/cy_add2.pyx b/Examples/extensions/cython/cy_add2.pyx new file mode 100644 index 0000000..0e794f5 --- /dev/null +++ b/Examples/extensions/cython/cy_add2.pyx @@ -0,0 +1,23 @@ +""" +Cython implementation of the add.c example + +This one with type defs + +""" + +def add(int x, int y): + + cdef int result=0 + result = x + y + + return result + + + + + + + + + + diff --git a/Examples/extensions/cython/cy_add_c.pyx b/Examples/extensions/cython/cy_add_c.pyx new file mode 100644 index 0000000..414b9d9 --- /dev/null +++ b/Examples/extensions/cython/cy_add_c.pyx @@ -0,0 +1,28 @@ +# distutils: sources = add.c + +""" +Cython implementation of the add.c example + +This one calls an actual C function to do the work + +creates a cython function to call the C function. + +""" + + +# telling cython what the function we want to call looks like. +cdef extern from "add.h": + # pull in C add function, renaming to c_add for Cython + int c_add "add" (int x, int y) + + +def add(x, y): + return c_add(x, y) + + + + + + + + diff --git a/Examples/extensions/cython/integrate/cy_integrate1.pyx b/Examples/extensions/cython/integrate/cy_integrate1.pyx new file mode 100644 index 0000000..af930fc --- /dev/null +++ b/Examples/extensions/cython/integrate/cy_integrate1.pyx @@ -0,0 +1,30 @@ +#!/usr/bin/env python + +# a cython version with no changes -- pure python! + +import cython + +cdef double f(double x): + """simple objective function to integrate""" + + return x**2.0 - x + +@cython.cdivision(True) +def double integrate_f(double a, double b, int N): + """ + integrates the function: + + f(x) = x**2 - x + + from a to b, using N steps, using the simple rectangle rule approach. + """ + + cdef double s = 0.0 + cdef double dx = 0.0 + cdef int i = 0 + + dx = (b - a) / N + + for i in range(N): + s += f(a + i * dx) + return s * dx diff --git a/Examples/extensions/cython/integrate/cy_integrate2.pyx b/Examples/extensions/cython/integrate/cy_integrate2.pyx new file mode 100644 index 0000000..37ccead --- /dev/null +++ b/Examples/extensions/cython/integrate/cy_integrate2.pyx @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +# a cython version with some static typing + + +# The objective function is only called from within Cython, +# so we can make it a cdef function: + +cdef f(x): + """simple objective function to integrate""" + return x**2-x + +def integrate_f(a, b, N): + """ + integrates the function: + + f(x) = x**2 - x + + from a to b, using N steps, using the simple recatngle rule approach. + """ + + s = 0 + dx = (b-a)/N + for i in range(N): + s += f(a+i*dx) + return s * dx + + diff --git a/Examples/extensions/cython/integrate/cy_integrate3.pyx b/Examples/extensions/cython/integrate/cy_integrate3.pyx new file mode 100644 index 0000000..3249725 --- /dev/null +++ b/Examples/extensions/cython/integrate/cy_integrate3.pyx @@ -0,0 +1,30 @@ +#!/usr/bin/env python + +# a cython version with some static typing + + +# The objective function is only called from within Cython, +# so we can make it a cdef function: + +# but a non-typed cdef isn't any faster -- so add the type defs: + +cdef double f(double x): + """simple objective function to integrate""" + return x**2 - x + +def integrate_f(a, b, N): + """ + integrates the function: + + f(x) = x**2 - x + + from a to b, using N steps, using the simple recatngle rule approach. + """ + + s = 0 + dx = (b-a)/N + for i in range(N): + s += f(a+i*dx) + return s * dx + + diff --git a/Examples/extensions/cython/integrate/cy_integrate4.pyx b/Examples/extensions/cython/integrate/cy_integrate4.pyx new file mode 100644 index 0000000..71d55e0 --- /dev/null +++ b/Examples/extensions/cython/integrate/cy_integrate4.pyx @@ -0,0 +1,35 @@ +#!/usr/bin/env python + +# a cython version with some static typing + + +# The objective function is only called from within Cython, +# so we can make it a cdef function: + +# but a non-typed cdef isn't any faster -- so add the type defs: + +cdef double f(double x): + """simple objective function to integrate""" + return x**2 - x + +# But this function isn't typed, so it still needs +# to convert py_objects to/from the f() +# so add some more type definitions: + +def integrate_f(a, b, N): + """ + integrates the function: + + f(x) = x**2 - x + + from a to b, using N steps, using the simple recatngle rule approach. + """ + cdef double s, dx + + s = 0 + dx = (b-a)/N + for i in range(N): + s += f(a+i*dx) + return s * dx + + diff --git a/Examples/extensions/cython/integrate/cy_integrate5.pyx b/Examples/extensions/cython/integrate/cy_integrate5.pyx new file mode 100644 index 0000000..10da193 --- /dev/null +++ b/Examples/extensions/cython/integrate/cy_integrate5.pyx @@ -0,0 +1,38 @@ +#!/usr/bin/env python + +# a cython version with some static typing + + +# The objective function is only called from within Cython, +# so we can make it a cdef function: + +# but a non-typed cdef isn't any faster -- so add the type defs: + +cdef double f(double x): + """simple objective function to integrate""" + return x**2 - x + +# But this function isn't typed, so it still needs +# to convert py_objects to/from the f() +# so add some more type definitions: + +# typeeverythign passed in to the funciton, +# should be pure C speed from there: + +def integrate_f(double a, double b, int N): + """ + integrates the function: + + f(x) = x**2 - x + + from a to b, using N steps, using the simple recatngle rule approach. + """ + cdef double s, dx + + s = 0 + dx = (b-a) / N + for i in range(N): + s += f(a+i*dx) + return s * dx + + diff --git a/Examples/extensions/cython/integrate/cy_integrate6.pyx b/Examples/extensions/cython/integrate/cy_integrate6.pyx new file mode 100644 index 0000000..f15395d --- /dev/null +++ b/Examples/extensions/cython/integrate/cy_integrate6.pyx @@ -0,0 +1,46 @@ +#!/usr/bin/env python + +# a cython version with some static typing + + +# The objective function is only called from within Cython, +# so we can make it a cdef function: + +# but a non-typed cdef isn't any faster -- so add the type defs: + +cdef double f(double x): + """simple objective function to integrate""" + return x**2 - x + +# But this function isn't typed, so it still needs +# to convert py_objects to/from the f() +# so add some more type definitions: + +# type everythign passed in to the funciton, +# should be pure C speed from there: + +# not much help -- what did we miss? +# check out the annotated version: +# cython -a cy_integrate5.pyx +# still a lot of yellow in that loop! +# +# oops! didn't type def the counter, i! + +def integrate_f(double a, double b, int N): + """ + integrates the function: + + f(x) = x**2 - x + + from a to b, using N steps, using the simple recatngle rule approach. + """ + cdef double s, dx + cdef int i + + s = 0 + dx = (b-a) / N + for i in range(N): + s += f(a + i*dx) + return s * dx + + diff --git a/Examples/extensions/cython/integrate/cy_integrate7.pyx b/Examples/extensions/cython/integrate/cy_integrate7.pyx new file mode 100644 index 0000000..7f38f3e --- /dev/null +++ b/Examples/extensions/cython/integrate/cy_integrate7.pyx @@ -0,0 +1,56 @@ +#!/usr/bin/env python + +import cython + +# a cython version with some static typing + + +# The objective function is only called from within Cython, +# so we can make it a cdef function: + +# but a non-typed cdef isn't any faster -- so add the type defs: + +cdef double f(double x): + """simple objective function to integrate""" + return x**2 - x + +# But this function isn't typed, so it still needs +# to convert py_objects to/from the f() +# so add some more type definitions: + +# type everythign passed in to the funciton, +# should be pure C speed from there: + +# not much help -- what did we miss? +# check out the annotated version: +# cython -a cy_integrate5.pyx +# still a lot of yellow in that loop! +# +# oops! didn't type def the counter, i! + +# much better! -- but still a bit of yellow in one line: +# dx = (b-a) / N +# C has different rules for roudning division for negative numbers +# than python. Cython acts like python unless you tell it not to +# with the "cdvision" decorator: (you need to import cython for this) + + +@cython.cdivision(True) +def integrate_f(double a, double b, int N): + """ + integrates the function: + + f(x) = x**2 - x + + from a to b, using N steps, using the simple recatngle rule approach. + """ + cdef double s, dx + cdef int i + + s = 0 + dx = (b-a) / N + for i in range(N): + s += f(a + i*dx) + return s * dx + + diff --git a/Examples/extensions/cython/integrate/integrate.py b/Examples/extensions/cython/integrate/integrate.py new file mode 100644 index 0000000..6d3b21c --- /dev/null +++ b/Examples/extensions/cython/integrate/integrate.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python + +cdef f(double x): + """simple objective function to integrate""" + + return x**2.0 - x + +def integrate_f(a, b, N): + """ + integrates the function: + + f(x) = x**2 - x + + from a to b, using N steps, using the simple recatngle rule approach. + """ + + s = 0 + dx = (b-a)/N + for i in range(N): + s += f(a+i*dx) + return s * dx diff --git a/Examples/extensions/cython/integrate/setup.py b/Examples/extensions/cython/integrate/setup.py new file mode 100755 index 0000000..dfaee3d --- /dev/null +++ b/Examples/extensions/cython/integrate/setup.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python + +from setuptools import setup +from Cython.Build import cythonize + +setup(name="cython_example", + ext_modules=cythonize(['cy_integrate1.pyx', +# 'cy_integrate2.pyx', +# 'cy_integrate3.pyx', +# 'cy_integrate4.pyx', +# 'cy_integrate5.pyx', +# 'cy_integrate6.pyx', +# 'cy_integrate7.pyx', + ]) + ) diff --git a/Examples/extensions/cython/integrate/test_integrate.py b/Examples/extensions/cython/integrate/test_integrate.py new file mode 100755 index 0000000..219b088 --- /dev/null +++ b/Examples/extensions/cython/integrate/test_integrate.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python + +""" +Simple test script to get gross timings + +Not unit tests +""" + +from timer_context import Timer + + +def run_test(msg): + print msg + with Timer(): + result = integrate_f(0.0, 10.0, 1000000) + print "result:", result + print + +from integrate import integrate_f +run_test("Pure Python version:") + +from cy_integrate1 import integrate_f +run_test("First Cython version:") + +from cy_integrate2 import integrate_f +run_test("Second Cython version:") + +from cy_integrate3 import integrate_f +run_test("Third Cython version:") + +from cy_integrate4 import integrate_f +run_test("Fourth Cython version:") + +from cy_integrate5 import integrate_f +run_test("Fifth Cython version:") + +from cy_integrate6 import integrate_f +run_test("Sixth Cython version:") + +from cy_integrate7 import integrate_f +run_test("Seventh Cython version:") + diff --git a/Examples/extensions/cython/integrate/timer_context.py b/Examples/extensions/cython/integrate/timer_context.py new file mode 100644 index 0000000..d8ef93e --- /dev/null +++ b/Examples/extensions/cython/integrate/timer_context.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +""" +timer_context + +A context manager that does simple code timing + +Adapted from: + +http://preshing.com/20110924/timing-your-code-using-pythons-with-statement/ + +NOTE: this is only good for crude timing -- use the timeit module to do it better. +""" + +import time + +class Timer(object): + def __enter__(self): + self.start = time.clock() + return self + + def __exit__(self, *args): + self.end = time.clock() + self.interval = self.end - self.start + print "this code took %f seconds"%self.interval diff --git a/Examples/extensions/cython/setup.py b/Examples/extensions/cython/setup.py new file mode 100755 index 0000000..11c797a --- /dev/null +++ b/Examples/extensions/cython/setup.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python + +from setuptools import setup +from Cython.Build import cythonize + +setup(name="cython_example", + ext_modules=cythonize(['cy_add_c.pyx', + 'cy_add1.pyx', + 'cy_add2.pyx', + ]) + + ) diff --git a/Examples/extensions/cython/test_cy_add1.py b/Examples/extensions/cython/test_cy_add1.py new file mode 100755 index 0000000..27069e0 --- /dev/null +++ b/Examples/extensions/cython/test_cy_add1.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python + +""" +simple test code for cy_add1 + +can be run by itself, or with nose or pytest +""" + +import cy_add1 + + +def test_1(): + assert cy_add1.add(3, 4) == 7 + +def test_2(): + assert cy_add1.add(5, 6) == 11 + +def test_error(): + """ + you should get an TypeError if you try to add something other than numbers + """ + try: + print cy_add1.add('this', 5) + assert False # shouldn't get here! + except TypeError: + # should have gotten an exception + pass + +if __name__ == "__main__": + test_1() + test_2() + test_error() + + print "if you didn't get an assertion, it worked" + + + diff --git a/Examples/extensions/cython/test_cy_add2.py b/Examples/extensions/cython/test_cy_add2.py new file mode 100644 index 0000000..e7e8b79 --- /dev/null +++ b/Examples/extensions/cython/test_cy_add2.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python + +""" +simple test code for cy_add1 + +can be run by itself, or with nose or pytest +""" + +import cy_add2 + + +def test_1(): + assert cy_add2.add(3, 4) == 7 + +def test_2(): + assert cy_add2.add(5, 6) == 11 + +def test_error(): + """ + you should get an TypeError if you try to add something other than numbers + """ + try: + print cy_add2.add('this', 5) + assert False # shouldn't get here! + except TypeError: + # should have gotten an exception + pass + +if __name__ == "__main__": + test_1() + test_2() + test_error() + + print "if you didn't get an assertion, it worked" + + + diff --git a/Examples/extensions/cython/test_cy_add_c.py b/Examples/extensions/cython/test_cy_add_c.py new file mode 100644 index 0000000..6c9d425 --- /dev/null +++ b/Examples/extensions/cython/test_cy_add_c.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python + +""" +simple test code for cy_add1 + +can be run by itself, or with nose or pytest +""" + +import cy_add_c + + +def test_1(): + assert cy_add_c.add(3, 4) == 7 + +def test_2(): + assert cy_add_c.add(5, 6) == 11 + +def test_error(): + """ + you should get an TypeError if you try to add something other than numbers + """ + try: + print cy_add_c.add('this', 5) + assert False # shouldn't get here! + except TypeError: + # should have gotten an exception + pass + +if __name__ == "__main__": + test_1() + test_2() + test_error() + + print "if you didn't get an assertion, it worked" + + + diff --git a/Examples/extensions/distutils/add.py b/Examples/extensions/distutils/add.py new file mode 100644 index 0000000..1404096 --- /dev/null +++ b/Examples/extensions/distutils/add.py @@ -0,0 +1,2 @@ +def add(x, y): + return x+y diff --git a/Examples/extensions/distutils/setup.py b/Examples/extensions/distutils/setup.py new file mode 100644 index 0000000..1c68d60 --- /dev/null +++ b/Examples/extensions/distutils/setup.py @@ -0,0 +1,9 @@ +from setuptools import setup + +setup( + name='add', + version='1.0', + description='Add description', + ext_modules=[], + py_modules=['add'] +) diff --git a/Examples/extensions/pure-c/Makefile b/Examples/extensions/pure-c/Makefile new file mode 100644 index 0000000..0da750b --- /dev/null +++ b/Examples/extensions/pure-c/Makefile @@ -0,0 +1 @@ +all: add; gcc -o add add.c diff --git a/Examples/extensions/pure-c/add.c b/Examples/extensions/pure-c/add.c new file mode 100644 index 0000000..38d99ad --- /dev/null +++ b/Examples/extensions/pure-c/add.c @@ -0,0 +1,10 @@ +#include + +int add(int x, int y) { + return x+y; +} +int main(void) { + int w = 3; + int q = 2; + printf("%d + %d = %d\n\n", w, q, add(w,q)); +} diff --git a/Examples/extensions/swig/README.rst b/Examples/extensions/swig/README.rst new file mode 100644 index 0000000..a3fd7fa --- /dev/null +++ b/Examples/extensions/swig/README.rst @@ -0,0 +1,16 @@ +Simple SWIG Example +=================== + +This dir has a very, very simple example of using SWIG to generate a +wrapper around a simple C function. + +The logic, such as it is, is in the add.i interface file. + +To build, siply call: + +python ./setup.py build_ext --in_place + +distutils understands SWIG, so it will run SWIG for you. + +You, of course, need to have SWIG isntalled on your system. + diff --git a/Examples/extensions/swig/add.c b/Examples/extensions/swig/add.c new file mode 100644 index 0000000..38d99ad --- /dev/null +++ b/Examples/extensions/swig/add.c @@ -0,0 +1,10 @@ +#include + +int add(int x, int y) { + return x+y; +} +int main(void) { + int w = 3; + int q = 2; + printf("%d + %d = %d\n\n", w, q, add(w,q)); +} diff --git a/Examples/extensions/swig/add.i b/Examples/extensions/swig/add.i new file mode 100644 index 0000000..7d5d868 --- /dev/null +++ b/Examples/extensions/swig/add.i @@ -0,0 +1,5 @@ +%module add +%{ +%} + +extern int add(int x, int y); diff --git a/Examples/extensions/swig/add.py b/Examples/extensions/swig/add.py new file mode 100644 index 0000000..e2f4dd2 --- /dev/null +++ b/Examples/extensions/swig/add.py @@ -0,0 +1,99 @@ +# This file was automatically generated by SWIG (http://www.swig.org). +# Version 3.0.5 +# +# Do not make changes to this file unless you know what you are doing--modify +# the SWIG interface file instead. + + + + + +from sys import version_info +if version_info >= (2, 6, 0): + def swig_import_helper(): + from os.path import dirname + import imp + fp = None + try: + fp, pathname, description = imp.find_module('_add', [dirname(__file__)]) + except ImportError: + import _add + return _add + if fp is not None: + try: + _mod = imp.load_module('_add', fp, pathname, description) + finally: + fp.close() + return _mod + _add = swig_import_helper() + del swig_import_helper +else: + import _add +del version_info +try: + _swig_property = property +except NameError: + pass # Python < 2.2 doesn't have 'property'. + + +def _swig_setattr_nondynamic(self, class_type, name, value, static=1): + if (name == "thisown"): + return self.this.own(value) + if (name == "this"): + if type(value).__name__ == 'SwigPyObject': + self.__dict__[name] = value + return + method = class_type.__swig_setmethods__.get(name, None) + if method: + return method(self, value) + if (not static): + if _newclass: + object.__setattr__(self, name, value) + else: + self.__dict__[name] = value + else: + raise AttributeError("You cannot add attributes to %s" % self) + + +def _swig_setattr(self, class_type, name, value): + return _swig_setattr_nondynamic(self, class_type, name, value, 0) + + +def _swig_getattr_nondynamic(self, class_type, name, static=1): + if (name == "thisown"): + return self.this.own() + method = class_type.__swig_getmethods__.get(name, None) + if method: + return method(self) + if (not static): + return object.__getattr__(self, name) + else: + raise AttributeError(name) + +def _swig_getattr(self, class_type, name): + return _swig_getattr_nondynamic(self, class_type, name, 0) + + +def _swig_repr(self): + try: + strthis = "proxy of " + self.this.__repr__() + except: + strthis = "" + return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,) + +try: + _object = object + _newclass = 1 +except AttributeError: + class _object: + pass + _newclass = 0 + + + +def add(x, y): + return _add.add(x, y) +add = _add.add +# This file is compatible with both classic and new-style classes. + + diff --git a/Examples/extensions/swig/ruby/add.c b/Examples/extensions/swig/ruby/add.c new file mode 100644 index 0000000..38d99ad --- /dev/null +++ b/Examples/extensions/swig/ruby/add.c @@ -0,0 +1,10 @@ +#include + +int add(int x, int y) { + return x+y; +} +int main(void) { + int w = 3; + int q = 2; + printf("%d + %d = %d\n\n", w, q, add(w,q)); +} diff --git a/Examples/extensions/swig/ruby/add.i b/Examples/extensions/swig/ruby/add.i new file mode 100644 index 0000000..c0c7e12 --- /dev/null +++ b/Examples/extensions/swig/ruby/add.i @@ -0,0 +1,6 @@ +%module add +%{ +extern int add(int x, int y); +%} + +extern int add(int x, int y); diff --git a/Examples/extensions/swig/ruby/extconf.rb b/Examples/extensions/swig/ruby/extconf.rb new file mode 100644 index 0000000..f528034 --- /dev/null +++ b/Examples/extensions/swig/ruby/extconf.rb @@ -0,0 +1,3 @@ +require 'mkmf' +create_makefile('add') + diff --git a/Examples/extensions/swig/setup.py b/Examples/extensions/swig/setup.py new file mode 100644 index 0000000..9c5809d --- /dev/null +++ b/Examples/extensions/swig/setup.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +from setuptools import setup, Extension + +setup( + name='add', + py_modules=['add'], + ext_modules=[ + Extension('_add', sources=['add.c', 'add.i']) + ] +) diff --git a/Examples/extensions/swig/test_add.py b/Examples/extensions/swig/test_add.py new file mode 100644 index 0000000..915d006 --- /dev/null +++ b/Examples/extensions/swig/test_add.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python + +""" +simple test file for SWIG-ified add function +""" + +import pytest + +from add import add + + +def test_add1(): + assert add(3, 4) == 7 + + +def test_add_float(): + # only integers! + with pytest.raises(TypeError): + assert add(3.1, 4.1) == 7.2 + + +def test_add_string(): + # only integers! + with pytest.raises(TypeError): + assert add('2', 4) == 6 diff --git a/Examples/logging/example.py b/Examples/logging/example.py new file mode 100755 index 0000000..d8f0bb9 --- /dev/null +++ b/Examples/logging/example.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 + +""" +Example code for using logging in a complex system +""" +import sys +import logging +import random +import time +import worker + +# The logging configuration: +# In real life, you might be pulling this from a config file, or ... + +# each level of logging gives more information +# uncomment the level you want +# log_level = logging.CRITICAL +# log_level = logging.ERROR +# log_level = logging.WARNING +# log_level = logging.INFO +log_level = logging.DEBUG + +# pretty simple format -- time stamp and the message +# this can get fancy: +# https://docs.python.org/3/library/logging.html#logrecord-attributes +format = '%(asctime)s %(levelname)s - %(module)8s - line:%(lineno)d - %(message)s' + +# configure the logger +# basicConfig configures the "root logger" -- usually the one you want. +# this sets it up to write to a file +logging.basicConfig(filename='example.log', + filemode='a', # use 'a' if you want to preserve the old log file + format=format, + level=log_level) + +# and this will make it write to stdout as well +# you would turn this off in production... +if True: # turn this off with False + std_handler = logging.StreamHandler(sys.stdout) + # give this a different formatter: + formatter = logging.Formatter('%(levelname)9s - %(module)s - %(message)s') + std_handler.setFormatter(formatter) + std_handler.setLevel(logging.DEBUG) + logging.getLogger().addHandler(std_handler) + +# Run the "application": +while True: # keep it running "forever" + # do something random: + logging.debug("calling a random worker") + random.choice(worker.workers)() + # wait a random length of time : + time.sleep(random.random()) diff --git a/Examples/logging/worker.py b/Examples/logging/worker.py new file mode 100644 index 0000000..14e8804 --- /dev/null +++ b/Examples/logging/worker.py @@ -0,0 +1,51 @@ +""" +A module with lots of random stuff that may happen + +This is designed to simulate a complex system -- +maybe event driven, etc. + +""" + +import logging + +import random + + +def work1(): + logging.info("work1 doing a job") + + +def work2(): + """ + This one randomly logs a warning + """ + logging.info("work2 doing a job") + if random.randint(1, 5) == 1: + logging.warning("something weird happened in work2!") + + +def work3(): + """ + This one randomly logs an error + """ + logging.info("work3 doing a job") + if random.randint(1, 5) == 1: + logging.error("Error in work3: bad input") + + +called = [0] + + +def work4(): + """ + Here something critical can go wrong and crash the system + """ + logging.info("work4 doing something") + called[0] += 1 + logging.debug("work4 called {:d} times".format(called[0])) + if called[0] >= 4: # don't want it to crash right away :-) + if random.randint(1, 5) == 1: + logging.critical("Something went terribly wrong! Aborting!!!") + raise ValueError("got really, really bad input") + +workers = [work1, work2, work3, work4] diff --git a/Examples/matplotlib/lena.png b/Examples/matplotlib/lena.png new file mode 100644 index 0000000..b333140 Binary files /dev/null and b/Examples/matplotlib/lena.png differ diff --git a/Examples/matplotlib/matplotlib-instructor.ipynb b/Examples/matplotlib/matplotlib-instructor.ipynb new file mode 100644 index 0000000..9988403 --- /dev/null +++ b/Examples/matplotlib/matplotlib-instructor.ipynb @@ -0,0 +1,1304 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Plotting with matplotlib\n", + "\n", + "__Software Carpentry Bootcamp \n", + "eResearch NZ 2013__ \n", + "\n", + "Prepared by: Ariel Rokem\n", + "Thanks to: Justin Kitzes, Paul Ivanov\n", + "\n", + "(updated for py3 for UWPCE: Christopher Barker: 2016)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Getting Started" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1 What is matplotlib?\n", + "\n", + "Matplotlib is the most popular and mature library for plotting data using Python. It has all of the functionality you would expect, including the ability to control the formatting of plots and figures at a very fine level.\n", + "\n", + "The official matplotlib documentation is at http://matplotlib.org/ \n", + "The matplotlib gallery is at http://matplotlib.org/gallery.html" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 1.1.1 Architecture\n", + "Matplotlib is designed be be used in a wide variety of ways: for interactive plotting, generating images for publication or web sites, embedding in GUI programs, etc. It can generate PNG images, PDF, SVG, and native images for a number of GUI toolkits.\n", + "\n", + "To support this, it has a varierty of \"back ends\" -- each for a different purpose, or for use with a different GUI toolkit. The system is designed to abstract the all the plotting commands and interaction, so that the code you wirte to gernerate plot is almost identical regradless of how you use it.\n", + "\n", + "One use-case is embedding it for inline display in an iPython noteboo, such as this one. That is what this tutorial uses, but the plotting commands and principles are the same regardless of your use case.\n", + "\n", + "#### 1.1.2 APIs\n", + "\n", + "Matplotlib has essentially two APIs: the core object oreiented API that mpl itself is written in, and a MATLAB-like \"state machine\" API (pylab). While the pylab API makes it a bit easier to quickly plot things up at the command line, it creates (or encourages, anyway) a very hard to maintain and re-use codeing style. And in most cases, the object oriented API requires only a few extra keystrokes, but keeps things much cleaner if (when) you want to move your plotting ocde to be a part of a larger application.\n", + "\n", + "This tutoroal woill use the OO API as much as possible, but many examples use the other API, so it can be helful to understand the realtionship between them." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.2 Importing matplotlib\n", + "\n", + "Matplotlib is often used through 'pyplot', which provides a high-level interface for plotting." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# The inline flag means that images will be shown here in the notebooks, rather\n", + "# than in pop-up windows.\n", + "\n", + "%matplotlib inline\n", + "\n", + "# If you are using 'regular' Python, however, you'll want the following. You'll\n", + "# need to also separately import numpy and any other packages that you might need.\n", + "\n", + "# We, of course, need numpy:\n", + "import numpy as np\n", + "\n", + "# The more-or-less accepted way to import MPL\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Creating Figures\n", + "\n", + "There are two major challenges with creating figures. First is understanding the\n", + "syntax to actually make the basic plot appear. Second is formatting the basic plot to look\n", + "exactly how you would like it to look. In general, the formatting will probably take you\n", + "longer...\n", + "\n", + "Within pyplot (currently imported as 'plt'), there are two basic ways to go about making\n", + "plots - using the Matlab-like clone, and using the object-oriented approach. The latter\n", + "provides better control over plot features, while only requiring slightly more typing. It's\n", + "easy to quickly outgrow the Matlab clone, so we'll go right to the object-oriented syntax." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1 A first plot\n", + "\n", + "In simple matplotlib plotting, there are two concepts to distinguish:\n", + "\n", + "- __Figure__ - the entire figure, like what you might see in a journal, including all\n", + "subplots, axes, lines, labels, etc. The whole enchilada. IT is more or less like a piece of paper.\n", + " \n", + "- __Subplot/Axes__ - one of the sub-sections of the figure, labeled (a), (b), etc. in articles. Each subplot will contain one Axes object, which is the container where all of the useful stuff, such as actual lines, legends, labels, etc., are actually housed.\n", + "\n", + "Also -- in MAtplotlib, the axes object does most of teh work -- it is the interface to all plotting.\n", + "\n", + "For example, here's how to make one figure with two subplots, the second of which contains two lines." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Make some data to plot\n", + "x = np.linspace(0, 2*np.pi)\n", + "y1 = np.sin(x)\n", + "y2 = np.cos(x)\n", + "\n", + "# First, create an empty figure with 2 subplots\n", + "# - The arguments (1, 2) indicate 1 row and 2 cols\n", + "# - The function plt.subplots returns an object for the figure and for\n", + "# each axes\n", + "# - There are multiple ways to accomplish this same goal, but this is\n", + "# probably the simplest and most extensible -- notice that each\n", + "# subplot is associated with one of the axes objects.\n", + "\n", + "fig, (ax1, ax2) = plt.subplots(1, 2)\n", + "\n", + "# The axes objects have a huge nuber of methods -- the core plotting routines,\n", + "# and the methods to manipluate the plots.\n", + "\n", + "# Next, put one line on the first axis and both lines on the second axis\n", + "ax1.plot(x, y1)\n", + "\n", + "ax2.plot(x, y1, label='sin') # The labels are what appear in the legend\n", + "ax2.plot(x, y2, label='cos')\n", + "# - On the second axes, add a legend to distinguish the two lines\n", + "ax2.legend()\n", + "\n", + "# Finally, save the figure as a png file\n", + "# if you want to save it for use elsewhere.\n", + "# note that in inline mode, the notebook displays the plot.\n", + "fig.savefig('myfig.png') " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 1 - Simple formatting\n", + "\n", + "There are lots of formatting options to play with. Modify the code above to make some changes to the\n", + "formatting of these plots.\n", + "\n", + "First, make some changes to the axes. HINT: These adjustments are methods to the ax1 and ax2 objects,\n", + "and (conveniently) they all start with the text 'set_'. Try typing 'ax1.set_' and hitting tab to\n", + "see some options.\n", + "\n", + "* Change the x axis on ax1 to run from 0 to 4. (HINT: set_xlim)\n", + "* Add labels to the x axis on both subplots (HINT: set_xlabel, set_ylabel)\n", + "\n", + "Second, make some changes to the lines that you plotted using ax1.plot(...). These changes can be made\n", + "by looking at the various arguments that you can give to the plot method. You can do this easily by\n", + "typing ax1.plot? in the cell below and running it - this will give you pop-up help for the plot method.\n", + "\n", + "* Make the sine line on ax1 red and dashed.\n", + "* Put a circular black marker on top of the cos line on ax2. Make it really big.\n", + "\n", + "_Bonus_: Eliminate the box around the legend on the second subplot." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "#ax1.plot?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2 Other types of plots\n", + "\n", + "In the example above, we used the plot method to make line plots. There \n", + "are also methods to make scatter plots, barplots, histograms, loglog\n", + "plots, semilog plots, etc." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# to see the methods, try typing:\n", + "# ax1." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Make some data to plot\n", + "x = np.arange(0, 100)\n", + "y = np.random.rand(100) # 100 random numbers\n", + "\n", + "# Make a figure with 6 subplots and axes\n", + "fig, ((ax1, ax2), (ax3, ax4), (ax5, ax6)) = plt.subplots(3, 2)\n", + "\n", + "# Add data to each axis. Optional arguments to each method will customize each plot.\n", + "ax1.plot(x, y)\n", + "ax2.hist(y)\n", + "ax3.scatter(x, y)\n", + "ax4.boxplot(y)\n", + "ax5.loglog(x, y)\n", + "ax6.semilogx(x, y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3 Plotting images\n", + "\n", + "Matplotlib also makes it easy to plot images. For this, you can use the plot method imshow\n", + "(syntax borrowed from Matlab)." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Read an image file for first subplot, generate random array for second\n", + "img1 = plt.imread('lena.png')\n", + "img2 = np.random.rand(128, 128)\n", + "\n", + "# Make figure\n", + "fig, (ax1, ax2) = plt.subplots(1, 2)\n", + "ax1.imshow(img1)\n", + "ax2.imshow(img2)\n", + "\n", + "ax1.set_axis_off() # Hide \"spines\" on first axis" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. The matplotlib gallery\n", + "\n", + "It can be very intimidating to try to craft exactly the figure that you want, especially if\n", + "you are used to being able to adjust things visually using a program like Excel.\n", + "\n", + "If you get stuck and don't know where to start, or just want to learn more about what\n", + "matplotlib can do, a great option is to have a look at the matplotlib gallery, which can be\n", + "found at http://matplotlib.org/gallery.html. A good way to get started is to find a figure\n", + "here that sort of looks like what you want, copy the code, and modify it for your own needs." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 2 - Exploring the matplotlib gallery\n", + "\n", + "Have a look at the matplotlib gallery, find a cool looking figure, copy the code\n", + "into the box below, and modify it. Note that some of the examples might require packages that\n", + "are not installed on your machine (in particular those that make maps) -\n", + "if this is the case, pick another example for the purposes of this exercise.\n", + "\n", + "In IPython, you can use the \"load magic\". Type %loadpy and then the URL of the py file containing the\n", + "code, and it will automatically copy it into a cell below. Run the cell with the code to see the\n", + "figure." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nQgjhQf4fsOQl2kzWEicAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nh3XI9s9//pNjx45RUFCAo6Mjy5cv5/jx47z++uvk5uby/PPPU1paipSS77//nk6dOnH8+HG+//57\n2rZtS0FBAWvXrqVVq1a88847ADRt2pTr16/z3//+9675qlQq0tLSiI6OJioqiqioKCIiIoiIiCA9\nPZ1evXrRt29f+vfvz4ABA+jbt2+Df751smRTCGGDWuk7VBHWTkp5XfN7ELBdSmlzn+kqSl+hTsnP\nz2fr1q2sW7eOrKwsXnjhBZ599tkGvRNWSklkZCQ+Pj74+/sTEBBAamoqTk5OWn89Tk5O2NnZaXvh\ntUFZWRllZWWUl5djZGREYWGh1vSSlpZGdnY2TZs2/UvP/dSpU+Tm5mobIFCbmrZt20ZRURFz587F\nwsLigeTJzc0lLCyMCxcuaBvAy5cvY29vj4uLi9ZHjpWV1cMXvg6pdaUvhNiK2iTTFrgOfAQYAlJK\n+YMQ4lXgZaAUKAQWSSkD7zNtRekr1AmJiYmsXr2aDRs2MGzYMF555RUee+yxBmmnl1ISHR2t3el7\n6tQpWrZsiaurK8OGDcPFxYXevXs3WtPGw1BYWMi5c+cICAjA19cXHx8fTE1NcXd3Z9SoUYwaNQpz\nc3Ndi1ktyuYsBYVquHTpEl988QV//PEHzzzzDAsXLmyQm31KSko4deoU+/bt48CBAxQVFTF69GhG\njRqFu7u7dnWMwt9DpVIRHh6u9Y9z6tQpevTowYQJE/D09KR///717jsEitJXUKiCkJAQli5dytmz\nZ1m0aBEvvfQSJiYmuhbrb1FcXMyhQ4fYsWMHBw8exM7OjsmTJzNx4kQcHBzqnTJqDJSUlODv7691\nj1BYWMjUqVOZOXMmw4YNqxcjQ0XpKyhUIjIykvfff5+AgAD+9a9/8cILL2BkZKRrse4bKSV+fn5s\n3LiRnTt34uDgwKxZs3j88cdp3769rsV7pJBScvnyZby8vPj999/Jyclhzpw5PPXUU/Tp00dncilK\nX0EBuHnzJh999BHbtm3j7bff5tVXX61XH/C+F9nZ2fzyyy/alSrPPfccc+fObXCTjI2ZS5cusWXL\nFjZv3oylpSULFixg9uzZde4ptTqlj5SyXh9qERUUHhyVSiV//vlnaWFhIV9++WWZkZGha5H+FvHx\n8XLhwoXS1NRUzpkzR54+fVqqVCpdi6VQDWVlZXL//v1y8uTJsk2bNnLRokUyLi6uzvLX6M0qdaru\njU8KCrVIamoqEydO5JtvvuGPP/5gzZo199xAVF+Ii4vjueeeo3///rRo0YLw8HC2bt2Kq6urYquv\n5+jr6zNx4kT27NnDuXPn0NfXx9nZmTlz5hAaWqVfyjpDUfoKjZajR48yYMAABg0aRHBwMP369dO1\nSPdFdnY2b731Fs7OznTu3Jno6Gi++OKLBr1P4FHG2tqar776itjYWPr378/YsWOZMWMGERG68USj\nKH2FRsn333/P008/zZYtW1i6dClNmjTRtUj3xY4dO+jVqxe3bt0iPDycZcuWPVLulxszxsbGLF68\nmOjoaAYOHIibmxsvvfQS6enpdSqHMpGr0Oj45JNP+PXXXzl8+DBdunTRtTj3xa1bt1iwYAGhoaFs\n2LCBIUOG6FqkGqGwsJBr166Rnp5OZmYm2dnZ5Obmkp+fT3FxMWVlZVqnawYGBhgZGdGiRQtatmyJ\nqakpbdu2xcLCgnbt2jWoSff7ISsri48//phNmzbx4Ycf8sorr9TYZjll9Y7CI8OPP/7IF198gZ+f\nH+3atdO1OPfF5cuXmTp1Kh4eHvznP/9pUMtHQe1aITIykkuXLhEREUFUVBSxsbHEx8eTm5tL+/bt\nadeuHW3btsXU1BRjY2OaNWuGkZERBgYG6OnpoVKpKCsro6ioiIKCAnJycsjOziYzM5P09HSuX79O\n8+bN6dy5MzY2Ntja2tKzZ0/s7e1xcHBo0O6rIyMjWbBgASqVig0bNtCzZ8+HTlNR+gqPBGFhYbi7\nu+Pv70/37t11Lc59cf78ecaPH89nn33G/PnzdS3OfVFUVIS/vz8nTpzAx8eHs2fPYmlpSd++fbG3\nt6dHjx5069YNGxsbzM3Na2SzkpSSzMxMEhISiIuLIzo6mitXrhAeHk54eDhWVlYMGjSIoUOH4urq\nir29fb3YJHW/qFQq1qxZw7Jly/jyyy959tlnH2qyXlH6Co8EI0aMYN68ebz00ku6FuW+uHr1Kq6u\nrnz//fdMmzZN1+JUS35+Prt37+b333/nxIkT9OnTBw8PD1xdXXFxccHU1FRnspWVlREREUFgYCD+\n/v6cPn2anJwcHnvsMSZPnsyECRMazEggPDycmTNn4uLiwtq1a6v9+Hl1KOv0FRo9Z8+eldbW1rKs\nrEzXotwXBQUF0sHBQa5du1bXolRLaGiofPHFF6WpqakcP3683Lhxo7x586auxbonCQkJ8r///a8c\nP368bNWqlZw8ebLctm2bLCoq0rVo9yQvL09OnTpVjhgx4oHrGmWdvkJj588//2T69OkNxmvkypUr\nsbW1rbejkqioKGbOnMljjz2GtbU14eHhHDx4kKeeeqpBrCbq3LkzCxYs4ODBgyQlJTFt2jTWr19P\n586dee+990hJSdG1iHelRYsW7Ny5k379+jFq1Chu3rznZ0f+ForSV2gUxMTENBg7flFREV9//TUr\nVqyod5usysvL+fTTTxk6dCj9+/cnJiaG9957r0HvETAxMeHpp5/m6NGjWtOPg4MDr776KtevX9e1\neFWip6fHypUrGT16NGPHjiU/P7/m0q6xlBQUdIixsTG5ubm6FuO+OH78OPb29vWukcrLy2P8+PEc\nPnyYCxcusGTJkjr3GVPb9OzZk++++46oqCiaNm1K7969WbFiBWVlZboW7Q6EEKxYsQIHBweefPLJ\nCnP3Q6MofYVGwcCBAzl+/LiuxbgvwsPDGTRokK7F+AulpaXMmDEDS0tLjh071uiduJmZmfGf//yH\nwMBAjhw5wogRI4iNjdW1WHcghGDdunWkpqayatWqGklTUfoKjYLJkycTHBxMWFiYrkW5J3l5efWu\nB7169WpKS0tZv349BgYGuhanzujWrRuHDx9mxowZDB06lICAAF2LdAeGhoZs3bqV5cuXEx8f/9Dp\nKUpfoVHQsmVLli5dyksvvURJSYmuxamWTp061cg/b01RXl7Ol19+yddff/1IKfwK9PT0WLRoET/9\n9BOTJ08mMPC+vuRap3Tr1o1//vOfvPvuuw+dlrJOX6HRUF5ezowZM2jZsiW//PJLvd2cExsbi4uL\nC6mpqfVCycbFxTFixAiSkpJ0LYrO2bt3L6+++iohISEP/LH12iI3NxcbGxvOnTuHtbV1tXGrW6df\nI/8VQoifhBDXhRB39RkqhFglhLgqhLgghHCqiXwVFCqjr6/P5s2biYuLY968eRQXF+tapCrp2rUr\n9vb2bNq0SdeiAOpPLj7oJqDGxuTJk5k2bRrLli3TtSh30KpVK2bNmsVvv/32UOnUVFfoZ2Ds3QKF\nEOOBblLK7sBLwLoayldB4S80b96cw4cPU1JSgoeHBwkJCboWqUo+//xzPvjgA27cuKFrUbC1tSUj\nI6Ner12vS9577z22bNlCdna2rkW5g8mTJ3Po0KGHSqNGlL6U0hfIqibKFGCjJm4gYCKEaBjesBQa\nHM2aNWPHjh1MnTqVgQMHsnXr1hpb7lZTDBkyhHnz5vHUU0/pfLmggYEBCxYs4JNPPtGpHPUFc3Nz\n+vfvz5kP9T4HAAAgAElEQVQzZ3Qtyh04Oztz4cKFh3qf68roaQlUNhimaK4pKNQKenp6LF68mP37\n9/PFF18wduxYoqOjdS3WX6hQsvPnz0elUulUliVLlnDo0CF27NihUznqCx06dKjxnbA1gZmZGcXF\nxQ9luqx3M11CCDchxNKKQ9fyKDRsBg0aREhICGPGjGHw4MG88cYb9cKkAtCkSRN27txJUlISc+bM\noaioSGeymJmZ4e3tzauvvoqXl5fO5KgvJCcn07ZtW12LUSX6+vqUlpbeM15lPSqEcNMG3M0pz989\nAGsg9C5h64BZlc4vA+3uM90HcjikoHA7165dk6+++qo0MzOTS5curTeOwwoLC+WsWbPk0KFDZVJS\nkk5lOX/+vLS0tJTLli2TpaWlOpVFVyQnJ0tjY2NZUFCga1HuIDc3VxoZGUmVSlVtPOrI4ZrQHFWx\nF3ha0/q4ANlSyvrp9EKh0dKuXTtWr16Nv78/8fHx2Nra8v7775ORkaFTuYyMjNi6dSsTJkzA2dmZ\ngwcP6kwWJycnAgMD8fHxYfjw4YSHh+tMFl3x5ptvsnDhQpo1a6ZrUe7g/PnzODo6PpzPpru1Bn/n\nALYCqUAxkAg8h3qVzoJKcVYD0cBFoP/fSPvhm0cFhSqIjY2VCxYskKampvKFF16QERERuhZJnjp1\nStrY2MhnnnlGpyOR8vJyuWbNGmlubi5ffPFFmZKSojNZ6pJPP/1U9u7dW+bn5+talCpZsmSJfOed\nd+4Zj2p6+jr3l3+vQ1H6CrVNenq6XLp0qbSwsJBjx46Ve/fu1alf/tzcXLlw4ULZoUMH+fPPP8vy\n8nKdyXLz5k25ePFi2bp1a/nKK6/Iq1ev6kyW2uby5cvS1ta23jZwxcXF0tLSUoaGht4zbnVKX9mR\nq6CgoaioiO3bt7N69WoyMjL4xz/+wbPPPquzb+0GBQXx+uuvI6XkP//5D8OGDdOJHABpaWmsXr2a\nH374gSFDhvDiiy8ybtw4mjRpojOZHoTy8vJqv7lQUFBQbz/AvnbtWvbu3Xtf6/SVL2cpKPxNgoKC\n5Pz586Wpqal84okn5B9//KGT3n95ebn89ddfZefOneWkSZPkxYsX61yGyuTn58v169fLoUOHSgsL\nC/nqq69KX19fnY5GbqekpEQmJSXJW7duSSnVdejt7S179+4tZ82aJU+dOiWllPecDK1PXL9+XVpY\nWMhz587dV3wU846CwoNx69YtuW7dOtm/f3/ZqVMn+d577+nExFFUVCS/+eYb2a5dO/n444/Ls2fP\n1rkMtxMdHS0//vhj2bt3b9muXTv57LPPym3btskbN27Uet4qlUpGR0fLP//8U27fvl3bIAcHB8t+\n/frJiRMnynfffVdKKWVqaqocO3aszM7OlmFhYbJfv361Ll9NUlZWJsePHy+XLFly3/coSl9BoQa4\nePGiXLRokTQ3N5eurq5y/fr1Mjs7u05lyM/Pl99++620srKSY8eOlYcPH64XPdaYmBi5evVqOWnS\nJGlsbCz79+8vX3/9dbl161Z59erVB5JRpVLJhIQEee3atb9cLykpkStWrJBdunSRixYtkqtWrZLF\nxcWysLBQvvDCC1qb99SpU+Xp06dlSkqKHDlypPb+mTNn3nePuT7w9ttvy5EjR8qSkpL7vqc6pa/Y\n9BUU/iYlJSUcOHCAzZs3c/ToUcaNG8dTTz3F2LFj68zGXVxczJYtW1i5ciUAixYtYs6cOfVimWFJ\nSQnBwcH4+voSGBhIcHAweXl5ODk54ejoSJ8+fejZsyddu3alQ4cOVdrYpZS4uroSExPDyy+/zIcf\nfviX8F9//ZWYmBjmzp2LsbGx9nOODg4OnDlzhpYtW7J582aSk5N57LHHWLNmDV9++SVt27Zl4cKF\njBs3jokTJ9a7z1Xezueff87mzZs5deoUZmZm931frXvZVFB4lDA0NOTxxx9n586dxMXF4e7uzuef\nf07Hjh155ZVX8PPzo7Y7Kk2bNmX+/PmEhoby9ddf4+XlRadOnXjzzTe5evVqreZ9LwwNDRk2bBjv\nvPMOu3btIikpiStXrrBkyRKsrKzw9/fnX//6FwMHDqR58+ZERETckYYQgl27drF+/Xr09PTucDvQ\ntm1bfHx8eP/991m4cCEHDhwA1J/NrHC30bp1a+3O1aZNm2q/YVBeXk5BQUG9VvgqlYq3336bX3/9\nlSNHjvwthX8vFKWvoPAQtGnThn/84x/4+fkRFBSElZUVL774Il27dmXJkiUP7RzrXgghGDNmDAcP\nHiQoKIgmTZowbNgwRo0axZYtWygsLKy1vP8OFhYWjB07lsWLF/Pzzz/j5+dHWloat27domfPnne9\nR09Pj4KCArKy1P4cK+py5MiRnDhxAi8vL5599lkOHDjArVu36N69u7YRyc/PR0rJgAEDKCkpISgo\nCFAr1ApfR/XRipCTk8PMmTPx8/PDz8+vxj9Kryh9BYUaokuXLrz77ruEh4fj7e0NwOOPP07v3r1Z\nvnw5V65cqdX8u3btyhdffEFSUhIvvfQSmzdvxtLSUtso6dqpW1UYGRlVu4TS1NQUgPT0dOB/SrpV\nq1baOE5OThgYGHDjxg1GjBjB+fPnyczMJCIiQmvueuWVV4iMjKRHjx6YmJjg6ekJUO96+yEhITg7\nO2Nubs6xY8dqxf+PYtNXUKhFpJQEBASwbds2duzYgbm5ObNmzWLWrFl069at1vNPTk5m48aNbN68\nmYKCAubOncvcuXPp06dPreddE1y9epUdO3Ywfvx4+vXrp71eUlLCtWvXyM/PZ8eOHRQWFvL5559T\nVFTEzp07WblyJYMGDeKNN96gR48egPrbxE2bNq2XewuKior4+OOP+fHHH/nmm2+YM2fOQ6VXnU1f\nUfoKCnWESqXC19eX33//HS8vL6ysrJgxYwYzZsyo9QZASsnFixfZsmUL27Zto1WrVsyYMYPp06fT\np0+fetfjrSAiIoJvvvkGAwMDPD09sbCwIDk5mZEjR/LGG2+QkZGBvb09s2fPZsCAAboW928jpWTP\nnj289dZbODk58d1339GhQ4eHTldR+gq1TnFxMRkZGWRmZnLjxg2ysrLIysoiJyeH3Nxc8vLyyM/P\np6CggKKiIoqLiyktLaWsrIzy8nJtOkII9PX1adKkCU2aNMHIyAgjIyOaN29OixYtaNmyJcbGxpiY\nmNC6dWvatGmDmZkZZmZmtGnTplpTQX2irKwMHx8ftm/fzq5du7QNwLRp0+jevXut5q1SqQgMDGTH\njh3s3LkTIyMjpk6dypQpUxg8eHC9qcPS0lJmz55NQUEB1tbWeHh4MGrUKKSUNTqxqSsqJqIzMzNZ\nuXIljz32WI2lrSh9hYeioKCAhIQE4uPjSUhIIDExkeTkZFJSUkhLSyMtLY38/Hyt8jUzM8PU1JTW\nrVtjYmJCq1ataNWqFc2bN6d58+Y0bdoUIyMjmjRpgoGBAfr6+tqepkqlory8nLKyMkpKSigqKqKo\nqIjCwkLy8vLIzc0lNzeX7OxssrKyuHnzJjdv3iQ9PZ2cnBzMzMxo3749HTt2xMrKCisrKzp37oy1\ntTU2NjZYWVnVi4+RV6asrIzTp0/j5eWFt7c37dq1Y/r06UyfPh07O7tazVtKydmzZ9mzZw979uzh\n+vXrTJw4kUmTJjF69GhMTExqNf9HDSklR48e5bPPPiMhIYH333+fp59+usbfSUXpK9yTkpISoqOj\nuXz5MpcvXyYqKoro6GhiYmLIysrC2tpaqzg7depEp06dsLS0pGPHjnTo0AFTU1P09HS7LqC0tJSM\njAzS0tJITU0lOTmZ5ORkEhIStI1Weno6VlZW2Nra0r17d3r06IGdnR12dnZYWVnpvAzl5eX4+fnh\n5eXFzp07MTExYdq0aUybNo2+ffvWuhkmLi6O/fv3c+DAAfz8/OjXrx9jx45lzJgx9O/fv96MAhoa\nubm5bNmyhdWrVwOwePFi5s6dW2vzC4rSV9CiUqmIjY0lNDSU0NBQwsLCCA8PJy4ujs6dO2sVYI8e\nPejevTvdunWjY8eOOleGNUVxcTHx8fFER0cTHR3NlStXtA1dbm4uvXr1onfv3jg4OODo6Ejfvn0x\nNzfXiawVZphdu3bh5eWFvr4+U6dO5YknnsDFxeVvPZP8/HyaNGmCoaHhfd9TUFDAqVOnOHz4MIcP\nH+batWu4ubnh7u6Om5sb9vb2jea9qA1UKhWnTp1i06ZN7N69Gzc3NxYuXIi7u3utN96K0n9EKS8v\nJzIykpCQEM6dO8e5c+e4ePEirVu3xtHREUdHRxwcHLC3t6dnz540bdpU1yLrlKysLCIjIwkLCyMs\nLIyLFy8SGhpK8+bN6devH/3792fAgAEMGDAAS0vLOp38lFJy4cIFvL298fb2JjMzk6lTp/L4448z\ncuTIapV5ZmYmn3zyCQEBAXTp0oX169fTokWLvy1DSkoKJ06c4MSJE5w8eZJbt24xfPhwXF1dGTZs\nGP369Xvk36GysjJ8fX3x9vbGy8sLCwsL5s2bx7x582pkgvZ+UZT+I0JycjIBAQEEBgYSGBjI+fPn\n6dChg1ZR9e/fHycnJ9q0aaNrURsMUkoSEhI4f/68tvE8e/Ys+vr6DBw4kMGDB+Pi4sLAgQMxNjau\nM7mioqLw9vZm9+7dXLlyhd27dzNixIg74pWWlvLtt98SFxfH999/z+eff063bt2YOXOmtnxJSUm0\nb9/+b40CQP2++fj44OPjw5kzZ4iKisLR0ZHBgwczcOBABg4ciK2tbaMfDSQlJXHkyBH+/PNPjhw5\nQpcuXZgyZQozZsygV69eOpFJUfqNkLKyMi5evIivry/+/v74+/tTVFSEi4sLQ4YMYdCgQTg7O2s3\ntyjUHFJKEhMTCQoK+ksD27VrV4YOHcqwYcMYPnw4NjY2dTIaSE1NxdjYmJYtW94RFhkZyebNm/H0\n9MTFxYVFixbRunVrrS+bpKQkPv74Y44ePUr//v2ZOXOmtkH4u+Tl5XH27FmCgoIIDg4mODiYmzdv\n4ujoqPW7UzGybKgTxKWlpURERBAQEIC/vz8+Pj7k5ubi4eHBmDFjGDduHJaWlroWU1H6jYHi4mKC\ng4M5deoUp0+fJiAgACsrK4YPH86wYcMYOnQo3bp1q7frrRs7JSUlXLhwAX9/f3x9ffH19cXAwIAR\nI0YwYsQIRo4ciZ2dXZ0/n3379nH27FnefvttWrRowcSJE3n//fcZMmQIgHbS+Omnn8bIyIiYmBgm\nTZoEwIULF8jIyMDDw+OBJ3Bv3rzJhQsXtKaysLAwIiMjMTExoVevXvTs2RNbW1tsbW3p0qULNjY2\nVTZedY1KpSIpKYmoqCgiIiIICwsjNDSU8PBwOnXqhIuLCy4uLgwfPpxevXrVu9GMovQbIKWlpQQH\nB2ttqIGBgfTs2ZORI0cyYsQIhg8fXitbtBVqBiklMTExnD59mtOnT3Py5EkKCwu1E6GjRo3C1ta2\n1huBnTt3cuTIEdatW0dKSgpz5sxh//79WlNUUFAQH374Ibm5uSxZskTrnuDbb7/VTni3bduWzz77\nrMZ8wKhUKhITE7l8+TJXrlzRrhKLjY0lISGB5s2b07lz57+sDrOwsMDc3Jy2bdvSpk0bTExMtKOb\npk2b3lc9lpeXk5+fT05ODrdu3eLmzZvcuHGD9PR00tLSSElJITExUbvaq02bNvTo0YNevXrRp08f\n7cR+ZRcQ9ZVaV/pCiHHAN6h9+fwkpVxxW/hIYA8Qq7m0S0r5yX2m/UgofSklERERHDlyhKNHj+Lj\n40OXLl3w8PDA3d0dV1dXxVTTwImPj+fkyZMcP36c48ePI4Rg9OjR2qM2Psu4d+9e/vjjD9asWcPK\nlSu5cOECv/76KyqV6i+908jISD788EPWr19Pq1atcHJy4siRI7Rv354pU6bwwQcf4OzsjI+PD5s3\nb0YIwQcffFDjpgwpJenp6SQlJf1lH0h6erp2819WVha3bt0iJyeHvLw8SktLadq0qdbFgp6eHkII\n7Z6P0tJS7WbAFi1aYGxsjLGxsXZjn4WFBR06dMDS0pJOnTphbW1Nly5d6u1nE++HWlX6Qgg9IAoY\nBaQCwcBsKeXlSnFGAm9KKSc/QPqNVulnZGRw5MgR7ZK4pk2bMmbMGEaNGoWHh0ej2HWoUDVSSq5e\nvcrRo0c5cuQIJ0+epHPnzowZM4axY8cyfPhwjIyMHjqf7OxsPv/8c/bv38/8+fMZOXIk9vb2dyi0\njIwMVqxYwYwZMygqKmLZsmUcP36cGzdusGbNGoYNG0afPn0YNWoUP//8M6dOnaK8vJzFixfr3LRR\nXl5OUVERJSUllJaWUl5eru35GxgYYGhoiKGh4X2PCBoDta30XYCPpJTjNedLUH+1ZUWlOCOBt6SU\nng+QfqNR+uXl5QQGBnLo0CH+/PNPoqKicHNzY8yYMYwZMwZbW1tdi6igI8rKyggKCtJ2AMLCwhgx\nYgTjxo1j/PjxNeKbp7y8nPT0dHbs2ME//vEP9u3bh5SS6dOns3v3bg4fPsy7777L999/j4mJCUuW\nLCEsLIy9e/fSo0cPSktLCQoKYuXKlVy+fJlnnnmGwMBA9deYHhFl2lCoTunXxN5fSyCp0nkyMKiK\neEOEEBeAFGCxlPLOLyc0QjIzM/njjz84cOAAhw8fpmPHjkyYMIEvv/ySoUOH/u1lcgqNEwMDA4YO\nHcrQoUNZunQpWVlZHDlyhEOHDvHpp59ibGzMhAkTmDBhAiNGjHig9fD6+vp06NCB119/HVB/C2DD\nhg2sWrUKMzMz/u///g8rKyuuX7/OuHHjAPVkLoClpSUHDhzAw8MDUM8FjB49Gqh/7okVqqcmevrT\ngLFSygWa8yeBQVLK1yvFaQmopJQFQojxwLdSyh53Sc8NcKt06aOG1NOvsM3v27eP/fv3c+nSJdzd\n3bX/sFZWVroW8ZHi4sWLlJWVAf9z5mZoaEiPHj0ajEsBlUrFhQsXOHDgAAcPHiQyMpJRo0YxadIk\nJk6ciIWFxUPnkZaWpt085Ovry+rVq5k9ezZr165l6dKl9O3blylTprBx40Y6dOjAW2+9Rd++fZk9\ne3a9dFX8qKNpiJdVunRSSnkSas68s1RKOU5zfod5p4p74oABUsqb95F+vTfvlJaW4uvry549e9i3\nbx9lZWV4enoyceJE3N3da8Q2q6Dmt99+IzY2lqSkJFJTU7l+/ToZGRlcunSpyl2mLi4ulJSUVAx3\nKS8vp6SkhHPnzlX5Pdnhw4fTsmVL2rVrR/v27bWTe56envXGUVt6ejoHDx5k//79HD16FHt7eyZP\nnsyUKVMeallohZmmuLiYzZs3ExkZyfDhw5k6dSopKSk888wzHD16lJKSEtzc3Ni6dSs2NjY1WziF\nB6Zi1/aWLVv4+uuva9Wmrw9cQT2RmwYEAXOklJGV4rSTUl7X/B4EbJdS2txn+vVS6efl5fHHH3+w\nZ88eDh48SNeuXZkyZQqTJ0/GwcFBGfI+IEVFRVy8eBFHR8cqlfKrr76KsbExVlZWWFpa0r59e8zN\nzbGxsamRnntwcDAZGRmkp6eTmpqqPby8vO6YsFSpVGzduhU7Ozt69er1QK4NHpbi4mJOnjzJ3r17\n2bt3r9ZN8tSpU3Fxcamx0Ux5eTmrVq1iw4YNuLi40LFjR5YtW3bHKqDMzEwWLlzIyJEjcXV1rZdr\n2BsTUkrCwsLw8vJi+/btFBUVMXfuXD777LM6WbL5Lf9bsvmFEOIltUzyByHEq8DLQClQCCySUgbe\nZ9r1RunfuHGDffv24e3tzcmTJxkyZIhW0StmmwcjOztbu+HMz8+PS5cu0aNHD7y8vOrky1IPQ25u\nLgsWLCAiIoKrV69iaWlJ3759cXFx4a233qpzeaSUnDt3jj179rB7927S09OZPHkyTzzxBB4eHjUy\nf5SYmEhubi52dnZVNii5ubns2LFDuz8hJydHu4Fw2LBhDBgw4JH3z/OwlJaW4u/vz759+9izZw8l\nJSVMmzaNmTNnMnjwYIQQyuashyE1NRVvb2927txJSEgIo0eP5oknnmDixInKuvkaYO7cuWRkZODm\n5oarqyvOzs4Ncn10WVkZUVFRhIaGkpGRwWuvvXZHnOLiYqSUdWbui4mJ0Tpoi4iIYMKECUybNo1x\n48bVWR2npKTg4+Oj/cj3lStXcHR01O5oHTx4MNbW1srI+B7ExsZy9OhRDh8+zLFjx+jatSuTJk1i\nypQp9OvX7476U5T+3yQhIQEvLy927dpFZGQkEydOZNq0aYwdO7ZKk4NC9Ugpyc/Pr3J7/aO03O/E\niRNMmjSJvn374urqipubG8OHD6+THZ5paWns3r2bnTt3EhwczGOPPca0adOYNGlSne4wrfDPExAQ\nQEBAAEFBQZSWluLs7Kx1Cti/f/9HuiGQUhIVFYWvry+nT5/m1KlTFBcX4+Hhof22Qfv27atNQ1H6\n90FcXBxeXl54eXkRGxvLlClTmD59eo0Nix9FMjIy2LhxIxs2bGDkyJGsWbNG1yLpnPz8fAIDA7Wu\nGc6ePcs777zDBx98UGcyZGZmsnfvXnbs2IGfnx/u7u7MmDEDT0/POvUUWkFKSgpnz54lJCSE8+fP\nc+7cOQoKCrTuv/v06UPv3r2xt7dvdB5iK7ycVnhxDQ4OJigoCGNjY4YOHYqrq+sD+W1SlP5dSEhI\nYMeOHWzfvp34+HimTp3KjBkzcHNzU5ahPQTnzp3jm2++Yd++fUyZMoX58+czfPhwZUKvCgoLC8nJ\nyanSBUNJSUmtdziysrLYu3cvXl5enD59Gnd3d2bOnImnp6dOfcxkZGRw8eJFLl26xKVLlwgPDycy\nMpLmzZv/5SM/tra2dOvWjS5dutRrnzgqlYrk5GSuXr3K5cuXiYiIIDw8nNDQUAwNDXFycsLZ2Rln\nZ2cGDRr00H6OFKVfiZSUFLZv3862bduIiYnh8ccfZ9asWbi5udWbJXkNmYKCAgYPHszTTz/N888/\n3+h6ZnXJrFmzuHr1Kp6enkydOhUnJ6daNXlkZ2ezZ88etm/fjo+PD6NHj2b27NlMnDhRJyuTbkdK\nSWpqKpGRkURFRXH16lWio6OJjY0lLi4OIyMjrK2ttZ/yrFjd1a5dO9q1a4eZmRlt2rTB2Ni4xjog\nUkoKCgq4ceOGdtVXhfO2pKQkEhMTiY+PJzExkdatW9OjRw969uypdeLm4OBQKz6XHnmlf/36dby8\nvPj9998JCwtj6tSpzJ49G3d3d6VHXws8Snb62qSsrAx/f3/27t2Lt7c3KpWKxx9/nA8//LDWFxHc\nvHmTPXv2sG3bNgIDAxk3bhyzZs1i/Pjx9XLfiZSSjIwMEhMTtd9GTk1N1Tprq3DYdvPmTQoKCmjV\nqpXWS2fz5s1p1qwZTZs2xdDQEH19fe3KpMpO20pKSigsLKSwsJC8vDytt04DAwPMzMwwMzOjXbt2\ndOjQgY4dO2JlZUXnzp2xsbHBxsamThcoPJJKPzs7G29vb3777TeCgoKYNGkSM2fOZOzYscqSsRri\n9jXajzrFxcV89dVXFBQU8Nxzz9G9e/caS1tKyaVLl9izZw/vvPNOnc4zZWRksGvXLrZt28bFixeZ\nMmUKc+bMwcPDo0GOjsvKysjJydF66SwoKKCwsFDribOsrEzrtK1iF3eTJk20njybN29Oy5YtMTY2\nxsTEpF7qk0dG6RcWFrJ//362bNnCiRMn8PDwYPbs2Xh6ejbIZYD1lZKSElasWIGPjw+HDx/WtTg6\np6LxKywsJDg4mOXLl9O9e3fWrl1bZ6OenJwcbty4QdeuXWs1nwrz6G+//UZ8fDwzZ85k7ty5DBky\nRBnd1SOqU/oNvptWVlbGoUOHeOqpp+jQoQM//PADU6ZMITExEW9vb2bNmqUo/Brk3LlzDBgwgMDA\nQH766Sddi1MvqBjtNGvWjBEjRjB06FAGDhwIqBsEUPfUQT3ncfnyZUpKSmpUhtDQUAYPHsyIESPY\nsGEDeXl5NZp+BZaWlixatIigoCDOnDlD+/btef755+natSv/+te/CAsLq5V8FWoQKWW9PtQi/hWV\nSiXPnDkjX3vtNWlhYSEHDRokV61aJdPS0u6Iq1AzlJeXy3//+9/S3Nxcbt68WapUKl2L9FDk5OTI\nsrKyKsN+++03+eOPP8pffvlFxsTEVJvOxo0b5dq1a2VcXJyUUsobN27I8ePHy+joaCmlvKOePv30\nUzl9+nTZu3dv+fvvvz98QSpRXFwsvb29paenpzQ1NZUvvviivHLlSo3mURUqlUqeP39evv3229LK\nyko6OjrKFStWyISEhFrPW6FqNHqzSp3aoHr60dHRLFu2jO7du/PMM89gZmaGr68vgYGBvPbaa/fc\nsKDw4Bw8eBAvLy+CgoKYN29egxrK79q1i3fffZcnnngCR0dHjI2Nad++PUlJSVXGP3/+PH5+fhw7\ndoy0tLRq0+7bty/x8fHs2rULUH+BSgihdSFRuZ727t1LVFQUmzZtYv/+/QQEBHDr1i0ANmzYwOuv\nv6512PcgGBoaMnXqVPbu3Ut4eDg2NjZkZWU9UFp/ByEETk5OrFixgoSEBFatWkV0dDT9+vXD3d2d\nH3/8kezs7FqXQ+H+aBA2/e+++45NmzYRHx/P7NmzefLJJ3F2dm5QiqehIzUeKhvixN2HH36IgYEB\nvXr1wtbWFhsbG0xNTWvl/fnll19ISEjgo48+QqVSaScDb968yapVq+jduzczZsygsLCQIUOGcOHC\nBb7//ntiYmIYMGAA27Zt49///jc9e/YE1K4Uunbt2iDf9eLiYg4ePMimTZs4duwYo0eP5qmnnmLC\nhAnKhsdapjqbvs7NN/c6ADlnzhx56NAhWVpaWtOjIIUGTklJiTxw4IB87rnn5MGDB+s8//Lyciml\nlAcOHJBPPvmktLa2lsuWLZNSyr+8r2FhYXLp0qXS19dXSinl7t275bRp02RmZqacNWuW1hz07bff\nysCbtYUAACAASURBVJ9++klKKeWGDRvkpEmTpIuLi9y4cWONyZyYmCiffPJJGRISUmNp3ousrCz5\nww8/SFdXV2lmZiZffvll6efn1+DNhPUVGrp5Z+vWrYwbN65B9jIVaoe4uDiWLFlC586d+eSTT+jb\nty9OTk51LkfFJO6ECRN47733eO2117h06RIhISEYGBiwa9cuiouLsbS0JDY2VvvBk/379+Pp6cmp\nU6fo1KmT1hzUpEkT8vPzOX/+PL/99hv79u1j48aN7N69u8ZkNjExwdHRkcmTJzNu3DhOnz6tnWiu\nLUxNTXnxxRc5ffo0QUFBWFpaMn/+fHr06MHy5cuJjY2t1fwV/keDUPoKdUtoaCjh4eG6FuOunDhx\ngoEDB1JaWsqJEyfw9/fnn//8p/bLT7rCzs6ON998kx07djBgwADKyspITEykadOmmJqaoqenx7lz\n5wgICCA5OZmxY8dy9epV+vbtC6hXop09e5ZBgwaxb98+hg8fDqj3nFhbW99zfuF+MTY2ZvHixcTE\nxDB9+nSef/55XF1dCQ0NrZH070WXLl147733iIyMZPPmzaSnpzN48GBcXV358ccftfMcCrXE3YYA\n9eWgitU7CrVHfHy8tLS0lDt27NC1KHeltLRU5uXl6VqMv01AQICcM2eOnDNnjvz/9u48qupq///4\n8y2OCA7XIdMcSLTMDEfqa63imuGQA5pjpTmVZjbo1XK417C8Xb3Lm6Y303LGsbpqTqWYEimahomz\niCkOiLMokgiyf3+A/KhE0cNhHzjvx1osOOd8PPvFUt982J/9ee9du3YZY4xZunSp+de//mWMMWbD\nhg2mR48eJjU11Tz55JPml19+McYYExoaav7xj3+YQ4cOOSVXamqqWbBgQeYUkw3Xr18333zzjenQ\noYMpXbq06dq1q1m1apVO6d4jbjO9ky8u5Lp6xoLi6tWrPPnkk/Ts2ZMhQ4bYjuMWjhw5Qr9+/bjv\nvvvw8vLixRdfpHHjxgQGBhIREQHAF198wYULFxg8eLBbXAA9f/48X375JXPmzOH48eO8/PLL9OzZ\nk0cffdR2tHzDbe7IVY7p2bMnIsKcOXNcYrXIvn372L9/Py+88ILtKE5hTPrduomJiWzevJny5cvT\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\ne/YsI0eO5IknnuC1116rEyYVgEaNGrFjxw4SExOZNWsWhYWFepPFysqKXbt2sWDBArZv3643OeoK\nSUlJWFqjorPxAAAgAElEQVRa6luMe2JoaEhJScl945XXo0IIb11ARU55HvQAHICwCsJWAzPKnV8C\nbKuY7kM5HFJQuJPr16/LBQsWSCsrK7l06dI64zisoKBAzpgxQ/bv318mJibqVZZz585JOzs7uWzZ\nMllSUqJXWfRFUlKSNDMzk/n5+foW5S5yc3OlsbGxVKvVlcajlhyuCe1xL/YCT2u/Pp5AtpSybjq9\nUKi32NrasmLFCgIDA0lISMDZ2Zl3332XjIwMvcplbGzM5s2bGTNmDB4eHhw8eFBvsri7uxMUFISf\nnx8DBw4kIiJCb7Loi9dff52FCxfStGlTfYtyF+fOnaN79+6P5rOpoq/BgxzAZiAFKAKuAc+imaUz\nv1ycFUAMcAHo9QBpP/rnUUHhHsTFxcn58+dLCwsL+dxzz8nIyEh9iyRPnDghHR0d5TPPPKPXnohK\npZIrV66U1tbW8vnnn5fJycl6k6U2+eSTT2TXrl1lXl6evkW5J0uWLJFvvfXWfeNRSUtf7/7y73co\nSl+hpklPT5dLly6VNjY20sfHR+7du1evfvlzc3PlwoULZevWreW6deukSqXSmyw3b96Uixcvli1a\ntJAvv/yyvHLlit5kqWkuXboknZ2d6+wHrqioSNrZ2cmwsLD7xq1M6SsrchUUtBQWFrJ161ZWrFhB\nRkYGL774InPnztXbXrvBwcG88sorSCn55ptvGDBggF7kAEhNTWXFihX89NNP9OvXj+eff55Ro0bR\nqFEjvcn0MKhUqkr3XMjPz6+zG7CvWrWKvXv3VmmevrJzloLCAxIcHCznzZsnLSws5JQpU+Qff/yh\nl9a/SqWSv/zyi2zXrp0cN26cvHDhQq3LUJ68vDy5Zs0a2b9/f2ljYyMXLFgg/f399dobuZPi4mKZ\nmJgob926JaXU1OGuXbtk165d5YwZM+SJEyeklPK+g6F1ibS0NGljYyNDQ0OrFB/FvKOg8HDcunVL\nrl69Wvbq1Uu2bdtWvvPOO3oxcRQWFspvv/1W2traysmTJ8szZ87Uugx3EhMTIz/66CPZtWtXaWtr\nK+fOnSu3bNkib9y4UeN5q9VqGRMTI//880+5detW3Qc5JCRE9uzZU44dO1a+/fbbUkopU1JSpI+P\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nmerNwT2scwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nETYzK+g/fDsg88fErWwAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# %load http://matplotlib.org/mpl_examples/pylab_examples/contour_demo.py\n", + "#!/usr/bin/env python\n", + "\"\"\"\n", + "Illustrate simple contour plotting, contours on an image with\n", + "a colorbar for the contours, and labelled contours.\n", + "\n", + "See also contour_image.py.\n", + "\"\"\"\n", + "import matplotlib\n", + "import numpy as np\n", + "import matplotlib.cm as cm\n", + "import matplotlib.mlab as mlab\n", + "import matplotlib.pyplot as plt\n", + "\n", + "matplotlib.rcParams['xtick.direction'] = 'out'\n", + "matplotlib.rcParams['ytick.direction'] = 'out'\n", + "\n", + "delta = 0.025\n", + "x = np.arange(-3.0, 3.0, delta)\n", + "y = np.arange(-2.0, 2.0, delta)\n", + "X, Y = np.meshgrid(x, y)\n", + "Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)\n", + "Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)\n", + "# difference of Gaussians\n", + "Z = 10.0 * (Z2 - Z1)\n", + "\n", + "\n", + "\n", + "# Create a simple contour plot with labels using default colors. The\n", + "# inline argument to clabel will control whether the labels are draw\n", + "# over the line segments of the contour, removing the lines beneath\n", + "# the label\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z)\n", + "plt.clabel(CS, inline=1, fontsize=10)\n", + "plt.title('Simplest default with labels')\n", + "\n", + "\n", + "# contour labels can be placed manually by providing list of positions\n", + "# (in data coordinate). See ginput_manual_clabel.py for interactive\n", + "# placement.\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z)\n", + "manual_locations = [(-1, -1.4), (-0.62, -0.7), (-2, 0.5), (1.7, 1.2), (2.0, 1.4), (2.4, 1.7)]\n", + "plt.clabel(CS, inline=1, fontsize=10, manual=manual_locations)\n", + "plt.title('labels at selected locations')\n", + "\n", + "\n", + "# You can force all the contours to be the same color.\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z, 6,\n", + " colors='k', # negative contours will be dashed by default\n", + " )\n", + "plt.clabel(CS, fontsize=9, inline=1)\n", + "plt.title('Single color - negative contours dashed')\n", + "\n", + "# You can set negative contours to be solid instead of dashed:\n", + "matplotlib.rcParams['contour.negative_linestyle'] = 'solid'\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z, 6,\n", + " colors='k', # negative contours will be dashed by default\n", + " )\n", + "plt.clabel(CS, fontsize=9, inline=1)\n", + "plt.title('Single color - negative contours solid')\n", + "\n", + "\n", + "# And you can manually specify the colors of the contour\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z, 6,\n", + " linewidths=np.arange(.5, 4, .5),\n", + " colors=('r', 'green', 'blue', (1,1,0), '#afeeee', '0.5')\n", + " )\n", + "plt.clabel(CS, fontsize=9, inline=1)\n", + "plt.title('Crazy lines')\n", + "\n", + "\n", + "# Or you can use a colormap to specify the colors; the default\n", + "# colormap will be used for the contour lines\n", + "plt.figure()\n", + "im = plt.imshow(Z, interpolation='bilinear', origin='lower',\n", + " cmap=cm.gray, extent=(-3,3,-2,2))\n", + "levels = np.arange(-1.2, 1.6, 0.2)\n", + "CS = plt.contour(Z, levels,\n", + " origin='lower',\n", + " linewidths=2,\n", + " extent=(-3,3,-2,2))\n", + "\n", + "#Thicken the zero contour.\n", + "zc = CS.collections[6]\n", + "plt.setp(zc, linewidth=4)\n", + "\n", + "plt.clabel(CS, levels[1::2], # label every second level\n", + " inline=1,\n", + " fmt='%1.1f',\n", + " fontsize=14)\n", + "\n", + "# make a colorbar for the contour lines\n", + "CB = plt.colorbar(CS, shrink=0.8, extend='both')\n", + "\n", + "plt.title('Lines with colorbar')\n", + "#plt.hot() # Now change the colormap for the contour lines and colorbar\n", + "plt.flag()\n", + "\n", + "# We can still add a colorbar for the image, too.\n", + "CBI = plt.colorbar(im, orientation='horizontal', shrink=0.8)\n", + "\n", + "# This makes the original colorbar look a bit out of place,\n", + "# so let's improve its position.\n", + "\n", + "l,b,w,h = plt.gca().get_position().bounds\n", + "ll,bb,ww,hh = CB.ax.get_position().bounds\n", + "CB.ax.set_position([ll, b+0.1*h, ww, h*0.8])\n", + "\n", + "\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nOrfCj+qQ7Z///Cd//PEHhYWFdO/enY8++ohjx47x2muvkZ+fz9///nfKysqQUvL999/Ttm1bjh07\nxvfff4+lpSWFhYWsXr0aU1NT3n77bQCaNGlCeno6//73v++br1qtJi0tjZiYGKKjo4mOjiYyMpLI\nyEgyMjLo0qULPXr0oFevXvTu3ZsePXo89s+3TpZsCiEc0Sh9t3uEtZJSpmu/9wW2SSkdq5muovQV\n6pSCggK2bNnCmjVryMnJ4YUXXmD27NmP9U5YKSVRUVEEBARw6tQpzpw5Q2pqKu7u7jp/Pe7u7ri4\nuOh64bVBeXk55eXlqFQqjI2NKSoq0ple0tLSyM3NpUmTJn/qufv7+5Ofn69rgEBjatq6dSvFxcXM\nnDkTGxubh5InPz+f8PBwLly4oGsAr1y5gqurK56enjofOfb29o9e+Dqk1pW+EGILGpOMJZAOfAg0\nBqSU8gchxDzgFaAMKAIWSCmDq5m2ovQV6oTr16+zcuVK1q1bx4ABA3j11VcZPnz4Y2mnl1ISExOj\n2+nr7+9P8+bN8fLyYsCAAXh6etK1a9cGa9p4FIqKiggLC+PMmTMEBgYSEBCAhYUFQ4YMYejQoQwd\nOhRra2t9i1klyuYsBYUquHz5Mp999hm//fYbzz33HPPnz38sN/uUlpbi7+/P/v37OXjwIMXFxQwb\nNoyhQ4cyZMgQ3eoYhb+GWq0mIiJC5x/H39+fTp06MXr0aMaNG0evXr3q3TkEitJXULgH586dY/Hi\nxZw9e5YFCxbw0ksvYW5urm+x/hIlJSX8+uuvbN++nUOHDuHi4sL48eMZM2YMbm5u9U4ZNQRKS0s5\ndeqUzj1CUVEREydOZOrUqQwYMKBejAwVpa+gUImoqCjee+89zpw5w//93//xwgsvYGxsrG+xqo2U\nkqCgIDZs2MDOnTtxc3Nj2rRpPP3007Ru3Vrf4j1RSCm5cuUKO3bs4JdffiEvL48ZM2bwzDPP0K1b\nN73JpSh9BQUgOzubDz/8kK1bt/LWW28xb968enWA94PIzc3lxx9/1K1Uef7555k5c+ZjN8nYkLl8\n+TKbN29m06ZN2NnZMXfuXKZPn17nnlKrUvpIKev1RyOigsLDo1ar5fr166WNjY185ZVXZGZmpr5F\n+kskJCTI+fPnSwsLCzljxgx58uRJqVar9S2WQhWUl5fLAwcOyPHjx8uWLVvKBQsWyPj4+DrLX6s3\n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\nNG3alO3btzNx4kT69OnDli1bamy5W03Rr18/Zs2axTPPPKP35YJGRkbMnTuXpUuX6lWO+oK1tTW9\nevXi9OnvzmcMAAAgAElEQVTT+hblLjw8PLhw4cIjvc91ZfS0AyobDFO01xQUagUDAwMWLlzIgQMH\n+Oyzz/D19SUmJkbfYv2JCiU7Z84c1Gq1XmVZtGgRv/76K9u3b9erHPWFNm3a1PhO2JrAysqKkpKS\nRzJd1ruZLiGEtxBiccVH3/IoPN707duXc+fOMWLECJ566ilef/31emFSAWjUqBE7d+4kKSmJGTNm\nUFxcrDdZrKys2L17N/PmzWPHjh16k6O+kJycjKWlpb7FuCeGhoaUlZU9MF5lPSqE8NYF3M8pz1/9\nAA7ApfuErQGmVfp9BWhVzXQfyuGQgsKd3LhxQ86bN09aWVnJxYsX1xvHYUVFRXLatGmyf//+Mikp\nSa+ynD9/XtrZ2cklS5bIsrIyvcqiL5KTk6WZmZksLCzUtyh3kZ+fL42NjaVara4yHnXkcE1oP/di\nH/CstvXxBHKllPXT6YVCg6VVq1asXLmSU6dOkZCQgLOzM++99x6ZmZl6lcvY2JgtW7YwevRoPDw8\nOHTokN5kcXd3Jzg4mICAAAYOHEhERITeZNEXb7zxBvPnz6dp06b6FuUuzp8/T/fu3R/NZ9P9WoO/\n8gG2AKlACXAdeB7NKp25leKsBGKAi0Cvv5D2ozePCgr3IC4uTs6dO1daWFjIF154QUZGRupbJOnv\n7y8dHR3lc889p9eRiEqlkqtWrZLW1tbyxRdflCkpKXqTpS755JNPZNeuXWVBQYG+RbknixYtkm+/\n/fYD41FFT1/v/vIf9FGUvkJtk5GRIRcvXixtbGykr6+v3Ldvn1798ufn58v58+fLNm3ayPXr10uV\nSqU3WbKzs+XChQtlixYt5KuvviqvXbumN1lqmytXrkhnZ+d628CVlJRIOzs7eenSpQfGrUrpKzty\nFRS0FBcXs23bNlauXElmZiYvv/wys2fP1ttZuyEhIbz22mtIKfn6668ZMGCAXuQASEtLY+XKlfzw\nww/069ePF198kZEjR9KoUSO9yfQwqFSqKs9cKCwsrLcHsK9evZp9+/ZVa52+cnKWgsJfJCQkRM6Z\nM0daWFjISZMmyd9++00vvX+VSiV/+ukn2a5dOzl27Fh58eLFOpehMgUFBXLt2rWyf//+0sbGRs6b\n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\nNjY28rXXXpMhISGKDbGOiIuLky4uLvLll1+WJSUl+hanSsrLy+Xp06flkiVLpI+PjzQ1NZVOTk5y\nylXnOjwAACAASURBVJQpcsmSJXLbtm0yLCxMZmdn19r7s379erl48WIppcbWX5FPVlaW/PDDD+W2\nbduklBr7f48ePaSUUq5cuVIuWLBAbtq0SY4dO1ZeuXJFl15MTMwjyapSqeTBgwflqFGjpJWVlXz7\n7bdlUlLSQ6f3VyguLpa7du2STz/9tDQzM5OTJk2Su3fvrvfvUUOAKmz6elfqD/oAcsaMGfLXX3+V\nZWVltVA9Cvfj/Pnz0tbWVn733Xf6FuW+lJaWyoMHD8rnn39eWllZyW7dusk33nhDHjhwQN68ebPW\n86+YxD148KD829/+Jh0cHOSSJUuklPJP72t4eLhcvHixDAwMlFJKuWfPHjl58mSZlZUlp02bJmNi\nYqSUUn7zzTfyv//9r5RSynXr1smxY8dKT09PuWHDhkeW9dq1a/Kf//ynbNGihZw1a5Y8d+7cI6dZ\nXXJycuQPP/wgvby8pJWVlXzllVeUCeBa5LFX+gp1T0hIiLSxsZE7duzQtyj3JC4uTr799tuydevW\nsl+/fnLFihUyISFBrzJFRUXJ//f//p+cMmWKPHv2rJRSyp07d8ri4mKZk5Mjn332WRkdHS2llPKF\nF16QP/74o9y1a5d88803dWmsWrVKfvvttzIsLEwOHz5cSilldHS0nDRpUo3JmZOTI7/44gtpZ2cn\nfX19pb+/f50q37i4OLl06VLZuXNn+f/bu/Pwmq79j+PvlZhq1gykJIYkhp9LEFIxC43yI2aVn6GE\n9vYqddvSKlV0cPUaW1eKmlrjvdoYqyUkQZEiRKhoEPMQikxKxu/vj0Ru2koMyTn7JGe9nuc8yTln\n56xPkuf5nn3WXvu73dzcZNq0aXL27FmzjW8N8iv6+rx47U+ioqLo3r07X375JX379jU6zu8cO3aM\nfv360aJFC9LS0ggNDWX//v2MHTuWmjVrGpqtfv36vP3226xfvx5PT0/S09O5ePEipUuXpnLlytjY\n2HDkyBHCw8O5fPkyXbp04fTp03h4eABZK9EOHz6Ml5cXW7ZsoU2bNkDWOSc1a9bk2rVrhZKzcuXK\njB8/nrNnz9KvXz9GjBhB27Zt2blz54MdLZOqXbs2kyZNIjo6mlWrVnHjxg2ef/552rZty5IlS0hI\n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\nYk9P72iP5OTkxMCBAy1uDt3T05MNGzYwePBgfaWtRzh8+DB+fn6sWLHCogo+wOeff05AQIAu+BZA\n7+lrOS5duoSHhwe//PILDg4ORsf5nQMHDtCrVy8+//xzXnrpJaPjWJy9e/fSt29flixZgp/fw9pi\nGefWrVu4u7sTFRVFjRo1jI5jFfSevvZYnJ2dCQsLw97e3ugof+Lt7U1wcDBvv/22bsX8B99++y19\n+vRh9erVFlfwAebOnUvfvn11wbcQek9fK1IuXbpE9+7d8fT0JDAwkDJlyhgdyTAiwqeffsq//vUv\ntmzZQtOmTY2O9Cc3b96kfv36REREUKtWLaPjWA29p68VG87Ozuzbt4+7d+/Spk0bi1lmam4JCQkM\nGDCADRs28NNPP1lkwQf45JNP8Pf31wXfguiirxU55cuXZ926dQwePJiWLVuyevVqq5ruCQ8Pp1mz\nZjg4OLB7926qV69udKSHOn36NKtWrbKIvk7af+npHa1IO3r0KIMHD6Z+/fr861//wsnJyehIJnP/\n/n0+/PBDli1bRmBgIH369DE6Ur569OhBmzZtdOdUA+jpHa3Yatq0KRERETRo0AAPDw8CAwPJyMgw\nOlahCw4OxsPDg5iYGCIjIy2+4G/evJmYmBjefPNNo6Nof6D39LXHkpGRYfFXOjpx4gSjR4/m9u3b\nzJw5E19fX4tpQfC0YmJieOedd4iKimLevHkWuTrnj5KTk2nYsCHLly/Hx8fH6DhWSe/pa08lJSWF\n69evA1n9cESEw4cPExUVZXCyh/vLX/5CaGgo06ZNY8yYMXTs2JHdu3cXyfn+2NhYRo4cSevWrfH2\n9ubkyZNFouADTJgwAR8fH13wLZWIWPQtK6JmhKioKOnRo4fExcXJnTt3pEOHDvLqq69K+/btZfbs\n2UbHy1daWposW7ZM3NzcxNvbW9avXy9paWlGx3qkQ4cOib+/v9jZ2cn7778vt2/fNjrSE9m1a5c8\n99xzRS53cZNdNx9eU/N6wlJuuugba/v27TJs2DDx9fWV6dOni4hIUlKSDBs2TOLj4w1O92jp6emy\nfv16ad26tdSoUUOmTJkisbGxRsf6nYSEBPnyyy/Fy8tLXFxcZNasWUXib/tHt2/fFmdnZ/n++++N\njmL18iv6ek5feygRQSnFjRs3aNu2LR988AGDBg0Csi6/d+jQIdasWWPx8/y5HTt2jKVLl7J27Vrc\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\ne/YsI0eO5IknnuC1116rEyYVgEaNGrFjxw4SExOZNWsWhYWFepPFysqKXbt2sWDBArZv3643OeoK\nSUlJWFqjorPxAAAgAElEQVRa6luMe2JoaEhJScl945XXo0IIb11ARU55HvQAHICwCsJWAzPKnV8C\nbKuY7kM5HFJQuJPr16/LBQsWSCsrK7l06dI64zisoKBAzpgxQ/bv318mJibqVZZz585JOzs7uWzZ\nMllSUqJXWfRFUlKSNDMzk/n5+foW5S5yc3OlsbGxVKvVlcajlhyuCe1xL/YCT2u/Pp5AtpSybjq9\nUKi32NrasmLFCgIDA0lISMDZ2Zl3332XjIwMvcplbGzM5s2bGTNmDB4eHhw8eFBvsri7uxMUFISf\nnx8DBw4kIiJCb7Loi9dff52FCxfStGlTfYtyF+fOnaN79+6P5rOpoq/BgxzAZiAFKAKuAc+imaUz\nv1ycFUAMcAHo9QBpP/rnUUHhHsTFxcn58+dLCwsL+dxzz8nIyEh9iyRPnDghHR0d5TPPPKPXnohK\npZIrV66U1tbW8vnnn5fJycl6k6U2+eSTT2TXrl1lXl6evkW5J0uWLJFvvfXWfeNRSUtf7/7y73co\nSl+hpklPT5dLly6VNjY20sfHR+7du1evfvlzc3PlwoULZevWreW6deukSqXSmyw3b96Uixcvli1a\ntJAvv/yyvHLlit5kqWkuXboknZ2d6+wHrqioSNrZ2cmwsLD7xq1M6SsrchUUtBQWFrJ161ZWrFhB\nRkYGL774InPnztXbXrvBwcG88sorSCn55ptvGDBggF7kAEhNTWXFihX89NNP9OvXj+eff55Ro0bR\nqFEjvcn0MKhUqkr3XMjPz6+zG7CvWrWKvXv3VmmevrJzloLCAxIcHCznzZsnLSws5JQpU+Qff/yh\nl9a/SqWSv/zyi2zXrp0cN26cvHDhQq3LUJ68vDy5Zs0a2b9/f2ljYyMXLFgg/f399dobuZPi4mKZ\nmJgob926JaXU1OGuXbtk165d5YwZM+SJEyeklPK+g6F1ibS0NGljYyNDQ0OrFB/FvKOg8HDcunVL\nrl69Wvbq1Uu2bdtWvvPOO3oxcRQWFspvv/1W2traysmTJ8szZ87Uugx3EhMTIz/66CPZtWtXaWtr\nK+fOnSu3bNkib9y4UeN5q9VqGRMTI//880+5detW3Qc5JCRE9uzZU44dO1a+/fbbUkopU1JSpI+P\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nmerNwT2scwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nETYzK+g/fDsg88fErWwAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#!/usr/bin/env python\n", + "\"\"\"\n", + "Illustrate simple contour plotting, contours on an image with\n", + "a colorbar for the contours, and labelled contours.\n", + "\n", + "See also contour_image.py.\n", + "\"\"\"\n", + "import matplotlib\n", + "import numpy as np\n", + "import matplotlib.cm as cm\n", + "import matplotlib.mlab as mlab\n", + "import matplotlib.pyplot as plt\n", + "\n", + "matplotlib.rcParams['xtick.direction'] = 'out'\n", + "matplotlib.rcParams['ytick.direction'] = 'out'\n", + "\n", + "delta = 0.025\n", + "x = np.arange(-3.0, 3.0, delta)\n", + "y = np.arange(-2.0, 2.0, delta)\n", + "X, Y = np.meshgrid(x, y)\n", + "Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)\n", + "Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)\n", + "# difference of Gaussians\n", + "Z = 10.0 * (Z2 - Z1)\n", + "\n", + "\n", + "\n", + "# Create a simple contour plot with labels using default colors. The\n", + "# inline argument to clabel will control whether the labels are draw\n", + "# over the line segments of the contour, removing the lines beneath\n", + "# the label\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z)\n", + "plt.clabel(CS, inline=1, fontsize=10)\n", + "plt.title('Simplest default with labels')\n", + "\n", + "\n", + "# contour labels can be placed manually by providing list of positions\n", + "# (in data coordinate). See ginput_manual_clabel.py for interactive\n", + "# placement.\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z)\n", + "manual_locations = [(-1, -1.4), (-0.62, -0.7), (-2, 0.5), (1.7, 1.2), (2.0, 1.4), (2.4, 1.7)]\n", + "plt.clabel(CS, inline=1, fontsize=10, manual=manual_locations)\n", + "plt.title('labels at selected locations')\n", + "\n", + "\n", + "# You can force all the contours to be the same color.\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z, 6,\n", + " colors='k', # negative contours will be dashed by default\n", + " )\n", + "plt.clabel(CS, fontsize=9, inline=1)\n", + "plt.title('Single color - negative contours dashed')\n", + "\n", + "# You can set negative contours to be solid instead of dashed:\n", + "matplotlib.rcParams['contour.negative_linestyle'] = 'solid'\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z, 6,\n", + " colors='k', # negative contours will be dashed by default\n", + " )\n", + "plt.clabel(CS, fontsize=9, inline=1)\n", + "plt.title('Single color - negative contours solid')\n", + "\n", + "\n", + "# And you can manually specify the colors of the contour\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z, 6,\n", + " linewidths=np.arange(.5, 4, .5),\n", + " colors=('r', 'green', 'blue', (1,1,0), '#afeeee', '0.5')\n", + " )\n", + "plt.clabel(CS, fontsize=9, inline=1)\n", + "plt.title('Crazy lines')\n", + "\n", + "\n", + "# Or you can use a colormap to specify the colors; the default\n", + "# colormap will be used for the contour lines\n", + "plt.figure()\n", + "im = plt.imshow(Z, interpolation='bilinear', origin='lower',\n", + " cmap=cm.gray, extent=(-3,3,-2,2))\n", + "levels = np.arange(-1.2, 1.6, 0.2)\n", + "CS = plt.contour(Z, levels,\n", + " origin='lower',\n", + " linewidths=2,\n", + " extent=(-3,3,-2,2))\n", + "\n", + "#Thicken the zero contour.\n", + "zc = CS.collections[6]\n", + "plt.setp(zc, linewidth=4)\n", + "\n", + "plt.clabel(CS, levels[1::2], # label every second level\n", + " inline=1,\n", + " fmt='%1.1f',\n", + " fontsize=14)\n", + "\n", + "# make a colorbar for the contour lines\n", + "CB = plt.colorbar(CS, shrink=0.8, extend='both')\n", + "\n", + "plt.title('Lines with colorbar')\n", + "#plt.hot() # Now change the colormap for the contour lines and colorbar\n", + "plt.flag()\n", + "\n", + "# We can still add a colorbar for the image, too.\n", + "CBI = plt.colorbar(im, orientation='horizontal', shrink=0.8)\n", + "\n", + "# This makes the original colorbar look a bit out of place,\n", + "# so let's improve its position.\n", + "\n", + "l,b,w,h = plt.gca().get_position().bounds\n", + "ll,bb,ww,hh = CB.ax.get_position().bounds\n", + "CB.ax.set_position([ll, b+0.1*h, ww, h*0.8])\n", + "\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Formatting figures\n", + "\n", + "The formatting of figures often takes longer than actually setting them up and adding data.\n", + "There are many different approaches to formatting figures in matplotlib (many goals can be\n", + "accomplished in different ways, using different commands), and you will come across many\n", + "of these as you learn more. The tips below give a few simple ways to get started." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.1 Common formatting tricks\n", + "\n", + "There are hundreds of formatting options available in matplotlib, many of which you will end\n", + "up using occasionally. There are a few options, however, that you will use very frequently.\n", + "A short list of these might include:\n", + "\n", + "- Changing axis limits\n", + "- Changing line colors\n", + "- Changing lines to dashed (for black and white figures)\n", + "- Adding markers to lines\n", + "- Make tick labels point outward instead of inward\n", + "- Get rid of the box surrounding the plot\n", + "- Adding subplot letters, like (a) and (b)\n", + "\n", + "Here's how to accomplish all of these things." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\ndWFhIc2bN0/pzuvyqsjfVVl79uxh7dq15OXlsWbNGq644gpOOumkmH9XmZmZTJ06lVNPPfVo3wkV\n+sJQsCSBUAKruDgIlzKBk/PWW9gHH5DlTo4Zdt55ZPXtC2edFdxOPrmSfiNJBrG+VFq1akV2djYP\nPPDAYc9t2bKFL7/8klatWpGWFn2a27F+CUp0lRGsmZmZzJ0797DjJ554Iunp6ZgZZ555Jq+++irH\nRR9kVKFgSaHeoOrrWK52DqhVC9q3D24EwZR7zjmMjQRqljsjCgvpuXYtNn06LFoUBMtZZ0Hnzl//\n2azZgWHVktoKCqKObaFhw4ZcddVVUZ9r3LgxjRs3PmK57dq1Y9asWTX26qKytGvX7piu+KJp0aJF\n1OOXXHIJkydPZuPGjXz88cdRQ6WoqIi6detW6HV1xVJNHbV5rbQ0uLL5z39g4cKv/0xL+/qKZn/g\ntG8fHC/DXXNuEq24uJhPPvmEf//73xQWFnL33Xcf9HxlNVlJ6jiWq8vPP/+cRo0aqSkslpoYLBVq\nXnOHgoIgZMoGzo4d0KnTQYGT88kn5A4dSq+//EVzbkISz9yQoqIi7rzzThYsWMCHH35Iy5Yt6dKl\nC+eccw7Dhg07rDw1WckxNrEpWGKpicESqq1bDwobX7iQEStWMNadEc2bM/bZZ7Fzz4WGDRNd05QV\nLQTat2/P7NmzD/oScHfGjx/PmWeeSefOnWnUqNFRy1WTlRwDBUssCpZwlW1my6ldG+vQgay1a+GM\nM+D884PbD3+owQFxKi4upk+fPuTm5h72nJqtJMEqFCzJtLqxpAB3J/eRR+gZ6bvJ2rePnBNOwDdv\nhv/9XzjpJJgwAdq2hTPPhJ//HF54IViVQKLq27dvuZYJEUl2ChYpl9wXX6TX4sUH/htjQNbixcx8\n7TX4r/+Cu+6C3Nyg+eyZZ6BdO5g6NbiaOe00uP56mDQpmI9zCHdnzMiRVLery9LSUhYvXszKlSuj\nPv/yyy/zk5/8JOpz0ZYJEUl2agqTcqnwnJvSUliyBN566+tb3bpfN52dfz45H31E7nXXJf2AgKN1\nsrs7y5Yt44033uCNN95g7ty5NGrUiHvvvZcBAwbELFMd7ZKE1McSi4IlCbnDihUHQsbffJMRhYXB\nqtHt2zP27bexZs0SXcvDxBMAzz33HL/+9a/JzMw8cGvVqlWsIg8qWx3tkmQULLEoWJJfzrRp2FVX\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Make some data to plot\n", + "x = np.linspace(0, 2*np.pi)\n", + "y1 = np.sin(x)\n", + "y2 = np.cos(x)\n", + "\n", + "# First, create an empty figure with 1 subplot\n", + "fig, ax1 = plt.subplots(1, 1)\n", + "\n", + "# Add title and labels\n", + "ax1.set_title('My Plot')\n", + "ax1.set_xlabel('x')\n", + "ax1.set_ylabel('y')\n", + "\n", + "# Change axis limits\n", + "ax1.set_xlim([0,2])\n", + "ax1.set_ylim([-1, 2])\n", + "\n", + "# Add the lines, changing their color, style, and marker\n", + "ax1.plot(x, y1, 'k--o', label='sin') # Black line, dashed, with 'o' markers\n", + "ax1.plot(x, y2, 'r-^', label='cos') # Red line, solid, with triangle-up markers\n", + "\n", + "# Adjust tick marks and get rid of 'box'\n", + "ax1.tick_params(direction='out', top=False, right=False) # Turn ticks out\n", + "ax1.spines['top'].set_visible(False) # Get rid of top axis line\n", + "ax1.spines['right'].set_visible(False) # Get rid of bottom axis line\n", + "\n", + "# Add subplot letter\n", + "ax1.annotate('(a)', (0.01, 0.96), size=12, xycoords='figure fraction')\n", + "\n", + "# Add legend\n", + "ax1.legend()\n", + "\n", + "# Finally, save the figure as a png file\n", + "fig.savefig('myfig-formatted.png')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.2 Advanced formatting with rcParams\n", + "\n", + "A fast way to control many aspects of figure formatting is to temporarily modify a dictionary\n", + "called rcParams. This dictionary allows you to set, in one place, many of the options that\n", + "you will need to change before submitting your figures for publication, including figure\n", + "fonts, font sizes, figure size, figure dpi, etc., as well as many options regarding how\n", + "elements are spaced in your figures (ie, the distance between different elements of subfigures).\n", + "\n", + "WARNING: The rcParams dictionary is GLOBAL to matplotlib's plot library - therefore, if you\n", + "make a change to it, all future plots that you make will also have those changes (until you\n", + "close your Python session). If you do modify rcParams, it's good hygiene to set it back to the\n", + "defaults after you've made your plot, as described below.\n", + "\n", + "A description of the rcParams options can be found at\n", + "http://matplotlib.org/users/customizing.html\n", + "\n", + "Run the code below to see all of the different options you can set here. Once you've looked\n", + "this over, hit the Toggle button on the left to hide the output again." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "RcParams({'agg.path.chunksize': 0,\n", + " 'animation.avconv_args': [],\n", + " 'animation.avconv_path': 'avconv',\n", + " 'animation.bitrate': -1,\n", + " 'animation.codec': 'mpeg4',\n", + " 'animation.convert_args': [],\n", + " 'animation.convert_path': 'convert',\n", + " 'animation.ffmpeg_args': [],\n", + " 'animation.ffmpeg_path': 'ffmpeg',\n", + " 'animation.frame_format': 'png',\n", + " 'animation.html': 'none',\n", + " 'animation.mencoder_args': [],\n", + " 'animation.mencoder_path': 'mencoder',\n", + " 'animation.writer': 'ffmpeg',\n", + " 'axes.axisbelow': False,\n", + " 'axes.edgecolor': 'k',\n", + " 'axes.facecolor': 'w',\n", + " 'axes.formatter.limits': [-7, 7],\n", + " 'axes.formatter.use_locale': False,\n", + " 'axes.formatter.use_mathtext': False,\n", + " 'axes.formatter.useoffset': True,\n", + " 'axes.grid': False,\n", + " 'axes.grid.axis': 'both',\n", + " 'axes.grid.which': 'major',\n", + " 'axes.hold': True,\n", + " 'axes.labelcolor': 'k',\n", + " 'axes.labelpad': 5.0,\n", + " 'axes.labelsize': 'medium',\n", + " 'axes.labelweight': 'normal',\n", + " 'axes.linewidth': 1.0,\n", + " 'axes.prop_cycle': cycler('color', ['b', 'g', 'r', 'c', 'm', 'y', 'k']),\n", + " 'axes.spines.bottom': True,\n", + " 'axes.spines.left': True,\n", + " 'axes.spines.right': True,\n", + " 'axes.spines.top': True,\n", + " 'axes.titlesize': 'large',\n", + " 'axes.titleweight': 'normal',\n", + " 'axes.unicode_minus': True,\n", + " 'axes.xmargin': 0.0,\n", + " 'axes.ymargin': 0.0,\n", + " 'axes3d.grid': True,\n", + " 'backend': 'module://ipykernel.pylab.backend_inline',\n", + " 'backend.qt4': 'PyQt4',\n", + " 'backend.qt5': 'PyQt5',\n", + " 'backend_fallback': True,\n", + " 'boxplot.bootstrap': None,\n", + " 'boxplot.boxprops.color': 'b',\n", + " 'boxplot.boxprops.linestyle': '-',\n", + " 'boxplot.boxprops.linewidth': 1.0,\n", + " 'boxplot.capprops.color': 'k',\n", + " 'boxplot.capprops.linestyle': '-',\n", + " 'boxplot.capprops.linewidth': 1.0,\n", + " 'boxplot.flierprops.color': 'b',\n", + " 'boxplot.flierprops.linestyle': 'none',\n", + " 'boxplot.flierprops.linewidth': 1.0,\n", + " 'boxplot.flierprops.marker': '+',\n", + " 'boxplot.flierprops.markeredgecolor': 'k',\n", + " 'boxplot.flierprops.markerfacecolor': 'b',\n", + " 'boxplot.flierprops.markersize': 6.0,\n", + " 'boxplot.meanline': False,\n", + " 'boxplot.meanprops.color': 'r',\n", + " 'boxplot.meanprops.linestyle': '-',\n", + " 'boxplot.meanprops.linewidth': 1.0,\n", + " 'boxplot.medianprops.color': 'r',\n", + " 'boxplot.medianprops.linestyle': '-',\n", + " 'boxplot.medianprops.linewidth': 1.0,\n", + " 'boxplot.notch': False,\n", + " 'boxplot.patchartist': False,\n", + " 'boxplot.showbox': True,\n", + " 'boxplot.showcaps': True,\n", + " 'boxplot.showfliers': True,\n", + " 'boxplot.showmeans': False,\n", + " 'boxplot.vertical': True,\n", + " 'boxplot.whiskerprops.color': 'b',\n", + " 'boxplot.whiskerprops.linestyle': '--',\n", + " 'boxplot.whiskerprops.linewidth': 1.0,\n", + " 'boxplot.whiskers': 1.5,\n", + " 'contour.corner_mask': True,\n", + " 'contour.negative_linestyle': 'solid',\n", + " 'datapath': '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/mpl-data',\n", + " 'docstring.hardcopy': False,\n", + " 'errorbar.capsize': 3.0,\n", + " 'examples.directory': '',\n", + " 'figure.autolayout': False,\n", + " 'figure.dpi': 80.0,\n", + " 'figure.edgecolor': (1, 1, 1, 0),\n", + " 'figure.facecolor': (1, 1, 1, 0),\n", + " 'figure.figsize': [6.0, 4.0],\n", + " 'figure.frameon': True,\n", + " 'figure.max_open_warning': 20,\n", + " 'figure.subplot.bottom': 0.125,\n", + " 'figure.subplot.hspace': 0.2,\n", + " 'figure.subplot.left': 0.125,\n", + " 'figure.subplot.right': 0.9,\n", + " 'figure.subplot.top': 0.9,\n", + " 'figure.subplot.wspace': 0.2,\n", + " 'figure.titlesize': 'medium',\n", + " 'figure.titleweight': 'normal',\n", + " 'font.cursive': ['Apple Chancery',\n", + " 'Textile',\n", + " 'Zapf Chancery',\n", + " 'Sand',\n", + " 'Script MT',\n", + " 'Felipa',\n", + " 'cursive'],\n", + " 'font.family': ['sans-serif'],\n", + " 'font.fantasy': ['Comic Sans MS',\n", + " 'Chicago',\n", + " 'Charcoal',\n", + " 'ImpactWestern',\n", + " 'Humor Sans',\n", + " 'fantasy'],\n", + " 'font.monospace': ['Bitstream Vera Sans Mono',\n", + " 'DejaVu Sans Mono',\n", + " 'Andale Mono',\n", + " 'Nimbus Mono L',\n", + " 'Courier New',\n", + " 'Courier',\n", + " 'Fixed',\n", + " 'Terminal',\n", + " 'monospace'],\n", + " 'font.sans-serif': ['Bitstream Vera Sans',\n", + " 'DejaVu Sans',\n", + " 'Lucida Grande',\n", + " 'Verdana',\n", + " 'Geneva',\n", + " 'Lucid',\n", + " 'Arial',\n", + " 'Helvetica',\n", + " 'Avant Garde',\n", + " 'sans-serif'],\n", + " 'font.serif': ['Bitstream Vera Serif',\n", + " 'DejaVu Serif',\n", + " 'New Century Schoolbook',\n", + " 'Century Schoolbook L',\n", + " 'Utopia',\n", + " 'ITC Bookman',\n", + " 'Bookman',\n", + " 'Nimbus Roman No9 L',\n", + " 'Times New Roman',\n", + " 'Times',\n", + " 'Palatino',\n", + " 'Charter',\n", + " 'serif'],\n", + " 'font.size': 10.0,\n", + " 'font.stretch': 'normal',\n", + " 'font.style': 'normal',\n", + " 'font.variant': 'normal',\n", + " 'font.weight': 'normal',\n", + " 'grid.alpha': 1.0,\n", + " 'grid.color': 'k',\n", + " 'grid.linestyle': ':',\n", + " 'grid.linewidth': 0.5,\n", + " 'image.aspect': 'equal',\n", + " 'image.cmap': 'flag',\n", + " 'image.composite_image': True,\n", + " 'image.interpolation': 'bilinear',\n", + " 'image.lut': 256,\n", + " 'image.origin': 'upper',\n", + " 'image.resample': False,\n", + " 'interactive': True,\n", + " 'keymap.all_axes': ['a'],\n", + " 'keymap.back': ['left', 'c', 'backspace'],\n", + " 'keymap.forward': ['right', 'v'],\n", + " 'keymap.fullscreen': ['f', 'ctrl+f'],\n", + " 'keymap.grid': ['g'],\n", + " 'keymap.home': ['h', 'r', 'home'],\n", + " 'keymap.pan': ['p'],\n", + " 'keymap.quit': ['ctrl+w', 'cmd+w'],\n", + " 'keymap.save': ['s', 'ctrl+s'],\n", + " 'keymap.xscale': ['k', 'L'],\n", + " 'keymap.yscale': ['l'],\n", + " 'keymap.zoom': ['o'],\n", + " 'legend.borderaxespad': 0.5,\n", + " 'legend.borderpad': 0.4,\n", + " 'legend.columnspacing': 2.0,\n", + " 'legend.edgecolor': 'inherit',\n", + " 'legend.facecolor': 'inherit',\n", + " 'legend.fancybox': False,\n", + " 'legend.fontsize': 'large',\n", + " 'legend.framealpha': None,\n", + " 'legend.frameon': True,\n", + " 'legend.handleheight': 0.7,\n", + " 'legend.handlelength': 2.0,\n", + " 'legend.handletextpad': 0.8,\n", + " 'legend.isaxes': True,\n", + " 'legend.labelspacing': 0.5,\n", + " 'legend.loc': 'upper right',\n", + " 'legend.markerscale': 1.0,\n", + " 'legend.numpoints': 2,\n", + " 'legend.scatterpoints': 3,\n", + " 'legend.shadow': False,\n", + " 'lines.antialiased': True,\n", + " 'lines.color': 'b',\n", + " 'lines.dash_capstyle': 'butt',\n", + " 'lines.dash_joinstyle': 'round',\n", + " 'lines.linestyle': '-',\n", + " 'lines.linewidth': 1.0,\n", + " 'lines.marker': 'None',\n", + " 'lines.markeredgewidth': 0.5,\n", + " 'lines.markersize': 6.0,\n", + " 'lines.solid_capstyle': 'projecting',\n", + " 'lines.solid_joinstyle': 'round',\n", + " 'markers.fillstyle': 'full',\n", + " 'mathtext.bf': 'serif:bold',\n", + " 'mathtext.cal': 'cursive',\n", + " 'mathtext.default': 'it',\n", + " 'mathtext.fallback_to_cm': True,\n", + " 'mathtext.fontset': 'cm',\n", + " 'mathtext.it': 'serif:italic',\n", + " 'mathtext.rm': 'serif',\n", + " 'mathtext.sf': 'sans\\\\-serif',\n", + " 'mathtext.tt': 'monospace',\n", + " 'nbagg.transparent': True,\n", + " 'patch.antialiased': True,\n", + " 'patch.edgecolor': 'k',\n", + " 'patch.facecolor': 'b',\n", + " 'patch.linewidth': 1.0,\n", + " 'path.effects': [],\n", + " 'path.simplify': True,\n", + " 'path.simplify_threshold': 0.1111111111111111,\n", + " 'path.sketch': None,\n", + " 'path.snap': True,\n", + " 'pdf.compression': 6,\n", + " 'pdf.fonttype': 3,\n", + " 'pdf.inheritcolor': False,\n", + " 'pdf.use14corefonts': False,\n", + " 'pgf.debug': False,\n", + " 'pgf.preamble': [],\n", + " 'pgf.rcfonts': True,\n", + " 'pgf.texsystem': 'xelatex',\n", + " 'plugins.directory': '.matplotlib_plugins',\n", + " 'polaraxes.grid': True,\n", + " 'ps.distiller.res': 6000,\n", + " 'ps.fonttype': 3,\n", + " 'ps.papersize': 'letter',\n", + " 'ps.useafm': False,\n", + " 'ps.usedistiller': False,\n", + " 'savefig.bbox': None,\n", + " 'savefig.directory': '~',\n", + " 'savefig.dpi': 72.0,\n", + " 'savefig.edgecolor': 'w',\n", + " 'savefig.facecolor': 'w',\n", + " 'savefig.format': 'png',\n", + " 'savefig.frameon': True,\n", + " 'savefig.jpeg_quality': 95,\n", + " 'savefig.orientation': 'portrait',\n", + " 'savefig.pad_inches': 0.1,\n", + " 'savefig.transparent': False,\n", + " 'svg.fonttype': 'path',\n", + " 'svg.image_inline': True,\n", + " 'svg.image_noscale': False,\n", + " 'text.antialiased': True,\n", + " 'text.color': 'k',\n", + " 'text.dvipnghack': None,\n", + " 'text.hinting': 'auto',\n", + " 'text.hinting_factor': 8,\n", + " 'text.latex.preamble': [],\n", + " 'text.latex.preview': False,\n", + " 'text.latex.unicode': False,\n", + " 'text.usetex': False,\n", + " 'timezone': 'UTC',\n", + " 'tk.window_focus': False,\n", + " 'toolbar': 'toolbar2',\n", + " 'verbose.fileo': 'sys.stdout',\n", + " 'verbose.level': 'silent',\n", + " 'webagg.open_in_browser': True,\n", + " 'webagg.port': 8988,\n", + " 'webagg.port_retries': 50,\n", + " 'xtick.color': 'k',\n", + " 'xtick.direction': 'out',\n", + " 'xtick.labelsize': 'medium',\n", + " 'xtick.major.pad': 4.0,\n", + " 'xtick.major.size': 4.0,\n", + " 'xtick.major.width': 0.5,\n", + " 'xtick.minor.pad': 4.0,\n", + " 'xtick.minor.size': 2.0,\n", + " 'xtick.minor.visible': False,\n", + " 'xtick.minor.width': 0.5,\n", + " 'ytick.color': 'k',\n", + " 'ytick.direction': 'out',\n", + " 'ytick.labelsize': 'medium',\n", + " 'ytick.major.pad': 4.0,\n", + " 'ytick.major.size': 4.0,\n", + " 'ytick.major.width': 0.5,\n", + " 'ytick.minor.pad': 4.0,\n", + " 'ytick.minor.size': 2.0,\n", + " 'ytick.minor.visible': False,\n", + " 'ytick.minor.width': 0.5})" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# View rcParams\n", + "matplotlib.rcParams" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, save the default rcParams dictionary so we can 'reset' everything after we change it.\n", + "In a 'regular' Python interpreter, or inside a Python module, you can just use\n", + "plt.rcdefaults() to reset the defaults, instead of saving them here then resetting them\n", + "manually later. However, this work in the notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Save default rcParams so we can reset them later\n", + "# WARNING: Do not run this cell after changing rcParams, as it will overwrite the\n", + "# defaults that we are trying to preserve.\n", + "rcdef = plt.rcParams.copy()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's make a simple plot, using mostly default formatting." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Make sure rcParams is at default settings, since we're messing with it\n", + "plt.rcParams.update(rcdef)\n", + "\n", + "# Make a simple figure with default formatting\n", + "fig, axall = plt.subplots(1, 2) # axall is the tuple containing both axis objects\n", + "\n", + "for ax in axall:\n", + " ax.plot(np.random.rand(100), 'k-o', label='Random')\n", + " ax.set_ylim([0, 1.2])\n", + " ax.set_ylabel('Value')\n", + " ax.legend()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are many obvious formatting problems here. The legend is too big, the axis labels are\n", + "too small, the legend shouldn't have a box (arguably), and the y-axis label on the second\n", + "subplot is hidden behind the first subplot. Also, although you can't see it here, the figure\n", + "resolution is too low to print without appearing fuzzy." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The code below changes a whole bunch of values in rcParams to get a figure to look juuuuust\n", + "right. Then it makes the figures, saves it, and puts rcParams back to its default." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Choose a bunch of new parameter values\n", + "# In practice, you'll try modifying these, running the code and saving the figure,\n", + "# looking at the figure, then making more modifications until you're happy.\n", + "newparams = {'axes.labelsize': 14, 'axes.linewidth': 1, 'savefig.dpi': 300, \n", + " 'lines.linewidth': 1.5, 'figure.figsize': (8, 3),\n", + " 'figure.subplot.wspace': 0.4,\n", + " 'ytick.labelsize': 12, 'xtick.labelsize': 12,\n", + " 'ytick.major.pad': 5, 'xtick.major.pad': 5,\n", + " 'legend.fontsize': 12, 'legend.frameon': False, \n", + " 'legend.handlelength': 1.5}\n", + "\n", + "# Update the global rcParams dictionary with the new parameter choices\n", + "# Before doing this, we reset rcParams to its default again, just in case\n", + "plt.rcParams.update(rcdef)\n", + "plt.rcParams.update(newparams)\n", + "\n", + "# Make the new figure with new formatting\n", + "fig, axall = plt.subplots(1, 2)\n", + "\n", + "for ax in axall:\n", + " ax.plot(np.random.rand(100), 'k-o', label='Random')\n", + " ax.set_ylim([0, 1.2])\n", + " ax.set_ylabel('Value')\n", + " ax.legend()\n", + " \n", + "fig.savefig('myfig-advanced.png')\n", + "\n", + "# Put rcParams back to default\n", + "plt.rcParams.update(rcdef)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You'll want to check that your formatting looks good by looking at the file that's being saved\n", + "to your hard disk, since that's exactly how it will look to the publisher or when inserted\n", + "into your manuscript." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.0" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Examples/matplotlib/matplotlib-learner.ipynb b/Examples/matplotlib/matplotlib-learner.ipynb new file mode 100644 index 0000000..cedb32d --- /dev/null +++ b/Examples/matplotlib/matplotlib-learner.ipynb @@ -0,0 +1,833 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Plotting with matplotlib\n", + "\n", + "__Software Carpentry Bootcamp \n", + "eResearch NZ 2013__ \n", + "\n", + "Prepared by: Ariel Rokem\n", + "Thanks to: Justin Kitzes, Paul Ivanov\n", + "(updated for py3 for UWPCE: Christopher Barker: 2016)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Getting Started" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1 What is matplotlib?\n", + "\n", + "Matplotlib is the most popular and mature library for plotting data using Python. It has all of the functionality you would expect, including the ability to control the formatting of plots and figures at a very fine level.\n", + "\n", + "The official matplotlib documentation is at http://matplotlib.org/ \n", + "The matplotlib gallery is at http://matplotlib.org/gallery.html" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 1.1.1 Architecture\n", + "Matplotlib is designed be be used in a wide variety of ways: for interactive plotting, generating images for publication or web sites, embedding in GUI programs, etc. It can generate PNG images, PDF, SVG, and native images for a number of GUI toolkits.\n", + "\n", + "To support this, it has a varierty of \"back ends\" -- each for a different purpose, or for use with a different GUI toolkit. The system is designed to abstract the all the plotting commands and interaction, so that the code you wirte to gernerate plot is almost identical regradless of how you use it.\n", + "\n", + "One use-case is embedding it for inline display in an iPython noteboo, such as this one. That is what this tutorial uses, but the plotting commands and principles are the same regardless of your use case.\n", + "\n", + "#### 1.1.2 APIs\n", + "\n", + "Matplotlib has essentially two APIs: the core object oreiented API that mpl itself is written in, and a MATLAB-like \"state machine\" API (pylab). While the pylab API makes it a bit easier to quickly plot things up at the command line, it creates (or encourages, anyway) a very hard to maintain and re-use codeing style. And in most cases, the object oriented API requires only a few extra keystrokes, but keeps things much cleaner if (when) you want to move your plotting ocde to be a part of a larger application.\n", + "\n", + "This tutoroal woill use the OO API as much as possible, but many examples use the other API, so it can be helful to understand the realtionship between them." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.2 Importing matplotlib\n", + "\n", + "Matplotlib is often used through 'pyplot', which provides a high-level interface for plotting." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# The inline flag means that images will be shown here in the notebooks, rather\n", + "# than in pop-up windows.\n", + "\n", + "%matplotlib inline\n", + "\n", + "# If you are using 'regular' Python, however, you'll want the following. You'll\n", + "# need to also separately import numpy and any other packages that you might need.\n", + "\n", + "# We, of course, need numpy:\n", + "import numpy as np\n", + "\n", + "# The more-or-less accepted way to import MPL\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Creating Figures\n", + "\n", + "There are two major challenges with creating figures. First is understanding the\n", + "syntax to actually make the basic plot appear. Second is formatting the basic plot to look\n", + "exactly how you would like it to look. In general, the formatting will probably take you\n", + "longer...\n", + "\n", + "Within pyplot (currently imported as 'plt'), there are two basic ways to go about making\n", + "plots - using the Matlab-like clone, and using the object-oriented approach. The latter\n", + "provides better control over plot features, while only requiring slightly more typing. It's\n", + "easy to quickly outgrow the Matlab clone, so we'll go right to the object-oriented syntax." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1 A first plot\n", + "\n", + "In simple matplotlib plotting, there are two concepts to distinguish:\n", + "\n", + "- __Figure__ - the entire figure, like what you might see in a journal, including all\n", + "subplots, axes, lines, labels, etc. The whole enchilada. IT is more or less like a piece of paper.\n", + " \n", + "- __Subplot/Axes__ - one of the sub-sections of the figure, labeled (a), (b), etc. in articles. Each subplot will contain one Axes object, which is the container where all of the useful stuff, such as actual lines, legends, labels, etc., are actually housed.\n", + "\n", + "Also -- in Matplotlib, the axes object does most of teh work -- it is the interface to all plotting.\n", + "\n", + "For example, here's how to make one figure with two subplots, the second of which contains two lines." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [], + "source": [ + "# Make some data to plot\n", + "x = np.linspace(0, 2*np.pi)\n", + "y1 = np.sin(x)\n", + "y2 = np.cos(x)\n", + "\n", + "# First, create an empty figure with 2 subplots\n", + "# - The arguments (1, 2) indicate 1 row and 2 cols\n", + "# - The function plt.subplots returns an object for the figure and for\n", + "# each axes\n", + "# - There are multiple ways to accomplish this same goal, but this is\n", + "# probably the simplest and most extensible -- notice that each\n", + "# subplot is associated with one of the axes objects.\n", + "\n", + "fig, (ax1, ax2) = plt.subplots(1, 2)\n", + "\n", + "# The axes objects have a huge nuber of methods -- the core plotting routines,\n", + "# and the methods to manipluate the plots.\n", + "\n", + "# Next, put one line on the first axis and both lines on the second axis\n", + "line = ax1.plot(x, y1, '--r')\n", + "print(line)\n", + "ax1.set_xlim(0,4)\n", + "ax1.set_ylim(-1.2, 1.2)\n", + "ax1.set_xlabel('a label in the x axis')\n", + "ax1.set_ylabel('$\\gamma$')\n", + "\n", + "ax2.plot(x, y1, label='sin') # The labels are what appear in the legend\n", + "ax2.plot(x, y2, label='cos')\n", + "# - On the second axes, add a legend to distinguish the two lines\n", + "ax2.legend()\n", + "\n", + "# Finally, save the figure as a png file\n", + "# if you want to save it for use elsewhere.\n", + "# note that in inline mode, the notebook displays the plot.\n", + "fig.savefig('myfig.png') " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 1 - Simple formatting\n", + "\n", + "There are lots of formatting options to play with. Modify the code above to make some changes to the\n", + "formatting of these plots.\n", + "\n", + "First, make some changes to the axes. HINT: These adjustments are methods to the ax1 and ax2 objects,\n", + "and (conveniently) they all start with the text 'set_'. Try typing 'ax1.set_' and hitting tab to\n", + "see some options.\n", + "\n", + "* Change the x axis on ax1 to run from 0 to 4. (HINT: set_xlim)\n", + "* Add labels to the x axis on both subplots (HINT: set_xlabel, set_ylabel)\n", + "\n", + "Second, make some changes to the lines that you plotted using ax1.plot(...). These changes can be made\n", + "by looking at the various arguments that you can give to the plot method. You can do this easily by\n", + "typing ax1.plot? in the cell below and running it - this will give you pop-up help for the plot method.\n", + "\n", + "* Make the sine line on ax1 red and dashed.\n", + "* Put a circular black marker on top of the cos line on ax2. Make it really big.\n", + "\n", + "_Bonus_: Eliminate the box around the legend on the second subplot." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ax1.plot?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2 Other types of plots\n", + "\n", + "In the example above, we used the plot method to make line plots. There \n", + "are also methods to make scatter plots, barplots, histograms, loglog\n", + "plots, semilog plots, etc." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# to see the methods, try typing:\n", + "ax1.\n", + "# and then a after the dot." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Make some data to plot\n", + "x = np.arange(0, 100)\n", + "y = np.random.rand(100) # 100 random numbers\n", + "\n", + "# Make a figure with 6 subplots and axes\n", + "fig, ((ax1, ax2), (ax3, ax4), (ax5, ax6)) = plt.subplots(3, 2)\n", + "\n", + "# Add data to each axis. Optional arguments to each method will customize each plot.\n", + "ax1.plot(x, y)\n", + "ax2.hist(y)\n", + "ax3.scatter(x, y)\n", + "ax4.boxplot(y)\n", + "ax5.loglog(x, y)\n", + "ax6.semilogx(x, y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3 Plotting images\n", + "\n", + "Matplotlib also makes it easy to plot images. For this, you can use the plot method imshow\n", + "(syntax borrowed from Matlab)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Read an image file for first subplot, generate random array for second\n", + "img1 = plt.imread('lena.png')\n", + "img2 = np.random.rand(128, 128)\n", + "\n", + "# Make figure\n", + "fig, (ax1, ax2) = plt.subplots(1, 2)\n", + "ax1.imshow(img1)\n", + "ax2.imshow(img2)\n", + "\n", + "ax1.set_axis_off() # Hide \"spines\" on first axis" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. The matplotlib gallery\n", + "\n", + "It can be very intimidating to try to craft exactly the figure that you want, especially if\n", + "you are used to being able to adjust things visually using a program like Excel.\n", + "\n", + "If you get stuck and don't know where to start, or just want to learn more about what\n", + "matplotlib can do, a great option is to have a look at the matplotlib gallery, which can be\n", + "found at http://matplotlib.org/gallery.html. A good way to get started is to find a figure\n", + "here that sort of looks like what you want, copy the code, and modify it for your own needs." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 2 - Exploring the matplotlib gallery\n", + "\n", + "Have a look at the matplotlib gallery, find a cool looking figure, copy the code\n", + "into the box below, and modify it. Note that some of the examples might require packages that\n", + "are not installed on your machine (in particular those that make maps) -\n", + "if this is the case, pick another example for the purposes of this exercise.\n", + "\n", + "In IPython, you can use the \"load magic\". Type %loadpy and then the URL of the py file containing the\n", + "code, and it will automatically copy it into a cell below. Run the cell with the code to see the\n", + "figure." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# %load http://matplotlib.org/mpl_examples/pylab_examples/contour_demo.py\n", + "#!/usr/bin/env python\n", + "\"\"\"\n", + "Illustrate simple contour plotting, contours on an image with\n", + "a colorbar for the contours, and labelled contours.\n", + "\n", + "See also contour_image.py.\n", + "\"\"\"\n", + "import matplotlib\n", + "import numpy as np\n", + "import matplotlib.cm as cm\n", + "import matplotlib.mlab as mlab\n", + "import matplotlib.pyplot as plt\n", + "\n", + "matplotlib.rcParams['xtick.direction'] = 'out'\n", + "matplotlib.rcParams['ytick.direction'] = 'out'\n", + "\n", + "delta = 0.025\n", + "x = np.arange(-3.0, 3.0, delta)\n", + "y = np.arange(-2.0, 2.0, delta)\n", + "X, Y = np.meshgrid(x, y)\n", + "Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)\n", + "Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)\n", + "# difference of Gaussians\n", + "Z = 10.0 * (Z2 - Z1)\n", + "\n", + "\n", + "\n", + "# Create a simple contour plot with labels using default colors. The\n", + "# inline argument to clabel will control whether the labels are draw\n", + "# over the line segments of the contour, removing the lines beneath\n", + "# the label\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z)\n", + "plt.clabel(CS, inline=1, fontsize=10)\n", + "plt.title('Simplest default with labels')\n", + "\n", + "\n", + "# contour labels can be placed manually by providing list of positions\n", + "# (in data coordinate). See ginput_manual_clabel.py for interactive\n", + "# placement.\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z)\n", + "manual_locations = [(-1, -1.4), (-0.62, -0.7), (-2, 0.5), (1.7, 1.2), (2.0, 1.4), (2.4, 1.7)]\n", + "plt.clabel(CS, inline=1, fontsize=10, manual=manual_locations)\n", + "plt.title('labels at selected locations')\n", + "\n", + "\n", + "# You can force all the contours to be the same color.\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z, 6,\n", + " colors='k', # negative contours will be dashed by default\n", + " )\n", + "plt.clabel(CS, fontsize=9, inline=1)\n", + "plt.title('Single color - negative contours dashed')\n", + "\n", + "# You can set negative contours to be solid instead of dashed:\n", + "matplotlib.rcParams['contour.negative_linestyle'] = 'solid'\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z, 6,\n", + " colors='k', # negative contours will be dashed by default\n", + " )\n", + "plt.clabel(CS, fontsize=9, inline=1)\n", + "plt.title('Single color - negative contours solid')\n", + "\n", + "\n", + "# And you can manually specify the colors of the contour\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z, 6,\n", + " linewidths=np.arange(.5, 4, .5),\n", + " colors=('r', 'green', 'blue', (1,1,0), '#afeeee', '0.5')\n", + " )\n", + "plt.clabel(CS, fontsize=9, inline=1)\n", + "plt.title('Crazy lines')\n", + "\n", + "\n", + "# Or you can use a colormap to specify the colors; the default\n", + "# colormap will be used for the contour lines\n", + "plt.figure()\n", + "im = plt.imshow(Z, interpolation='bilinear', origin='lower',\n", + " cmap=cm.gray, extent=(-3,3,-2,2))\n", + "levels = np.arange(-1.2, 1.6, 0.2)\n", + "CS = plt.contour(Z, levels,\n", + " origin='lower',\n", + " linewidths=2,\n", + " extent=(-3,3,-2,2))\n", + "\n", + "#Thicken the zero contour.\n", + "zc = CS.collections[6]\n", + "plt.setp(zc, linewidth=4)\n", + "\n", + "plt.clabel(CS, levels[1::2], # label every second level\n", + " inline=1,\n", + " fmt='%1.1f',\n", + " fontsize=14)\n", + "\n", + "# make a colorbar for the contour lines\n", + "CB = plt.colorbar(CS, shrink=0.8, extend='both')\n", + "\n", + "plt.title('Lines with colorbar')\n", + "#plt.hot() # Now change the colormap for the contour lines and colorbar\n", + "plt.flag()\n", + "\n", + "# We can still add a colorbar for the image, too.\n", + "CBI = plt.colorbar(im, orientation='horizontal', shrink=0.8)\n", + "\n", + "# This makes the original colorbar look a bit out of place,\n", + "# so let's improve its position.\n", + "\n", + "l,b,w,h = plt.gca().get_position().bounds\n", + "ll,bb,ww,hh = CB.ax.get_position().bounds\n", + "CB.ax.set_position([ll, b+0.1*h, ww, h*0.8])\n", + "\n", + "\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#!/usr/bin/env python\n", + "\"\"\"\n", + "Illustrate simple contour plotting, contours on an image with\n", + "a colorbar for the contours, and labelled contours.\n", + "\n", + "See also contour_image.py.\n", + "\"\"\"\n", + "import matplotlib\n", + "import numpy as np\n", + "import matplotlib.cm as cm\n", + "import matplotlib.mlab as mlab\n", + "import matplotlib.pyplot as plt\n", + "\n", + "matplotlib.rcParams['xtick.direction'] = 'out'\n", + "matplotlib.rcParams['ytick.direction'] = 'out'\n", + "\n", + "delta = 0.025\n", + "x = np.arange(-3.0, 3.0, delta)\n", + "y = np.arange(-2.0, 2.0, delta)\n", + "X, Y = np.meshgrid(x, y)\n", + "Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)\n", + "Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)\n", + "# difference of Gaussians\n", + "Z = 10.0 * (Z2 - Z1)\n", + "\n", + "\n", + "\n", + "# Create a simple contour plot with labels using default colors. The\n", + "# inline argument to clabel will control whether the labels are draw\n", + "# over the line segments of the contour, removing the lines beneath\n", + "# the label\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z)\n", + "plt.clabel(CS, inline=1, fontsize=10)\n", + "plt.title('Simplest default with labels')\n", + "\n", + "\n", + "# contour labels can be placed manually by providing list of positions\n", + "# (in data coordinate). See ginput_manual_clabel.py for interactive\n", + "# placement.\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z)\n", + "manual_locations = [(-1, -1.4), (-0.62, -0.7), (-2, 0.5), (1.7, 1.2), (2.0, 1.4), (2.4, 1.7)]\n", + "plt.clabel(CS, inline=1, fontsize=10, manual=manual_locations)\n", + "plt.title('labels at selected locations')\n", + "\n", + "\n", + "# You can force all the contours to be the same color.\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z, 6,\n", + " colors='k', # negative contours will be dashed by default\n", + " )\n", + "plt.clabel(CS, fontsize=9, inline=1)\n", + "plt.title('Single color - negative contours dashed')\n", + "\n", + "# You can set negative contours to be solid instead of dashed:\n", + "matplotlib.rcParams['contour.negative_linestyle'] = 'solid'\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z, 6,\n", + " colors='k', # negative contours will be dashed by default\n", + " )\n", + "plt.clabel(CS, fontsize=9, inline=1)\n", + "plt.title('Single color - negative contours solid')\n", + "\n", + "\n", + "# And you can manually specify the colors of the contour\n", + "plt.figure()\n", + "CS = plt.contour(X, Y, Z, 6,\n", + " linewidths=np.arange(.5, 4, .5),\n", + " colors=('r', 'green', 'blue', (1,1,0), '#afeeee', '0.5')\n", + " )\n", + "plt.clabel(CS, fontsize=9, inline=1)\n", + "plt.title('Crazy lines')\n", + "\n", + "\n", + "# Or you can use a colormap to specify the colors; the default\n", + "# colormap will be used for the contour lines\n", + "plt.figure()\n", + "im = plt.imshow(Z, interpolation='bilinear', origin='lower',\n", + " cmap=cm.gray, extent=(-3,3,-2,2))\n", + "levels = np.arange(-1.2, 1.6, 0.2)\n", + "CS = plt.contour(Z, levels,\n", + " origin='lower',\n", + " linewidths=2,\n", + " extent=(-3,3,-2,2))\n", + "\n", + "#Thicken the zero contour.\n", + "zc = CS.collections[6]\n", + "plt.setp(zc, linewidth=4)\n", + "\n", + "plt.clabel(CS, levels[1::2], # label every second level\n", + " inline=1,\n", + " fmt='%1.1f',\n", + " fontsize=14)\n", + "\n", + "# make a colorbar for the contour lines\n", + "CB = plt.colorbar(CS, shrink=0.8, extend='both')\n", + "\n", + "plt.title('Lines with colorbar')\n", + "#plt.hot() # Now change the colormap for the contour lines and colorbar\n", + "plt.flag()\n", + "\n", + "# We can still add a colorbar for the image, too.\n", + "CBI = plt.colorbar(im, orientation='horizontal', shrink=0.8)\n", + "\n", + "# This makes the original colorbar look a bit out of place,\n", + "# so let's improve its position.\n", + "\n", + "l,b,w,h = plt.gca().get_position().bounds\n", + "ll,bb,ww,hh = CB.ax.get_position().bounds\n", + "CB.ax.set_position([ll, b+0.1*h, ww, h*0.8])\n", + "\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Formatting figures\n", + "\n", + "The formatting of figures often takes longer than actually setting them up and adding data.\n", + "There are many different approaches to formatting figures in matplotlib (many goals can be\n", + "accomplished in different ways, using different commands), and you will come across many\n", + "of these as you learn more. The tips below give a few simple ways to get started." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.1 Common formatting tricks\n", + "\n", + "There are hundreds of formatting options available in matplotlib, many of which you will end\n", + "up using occasionally. There are a few options, however, that you will use very frequently.\n", + "A short list of these might include:\n", + "\n", + "- Changing axis limits\n", + "- Changing line colors\n", + "- Changing lines to dashed (for black and white figures)\n", + "- Adding markers to lines\n", + "- Make tick labels point outward instead of inward\n", + "- Get rid of the box surrounding the plot\n", + "- Adding subplot letters, like (a) and (b)\n", + "\n", + "Here's how to accomplish all of these things." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Make some data to plot\n", + "x = np.linspace(0, 2*np.pi)\n", + "y1 = np.sin(x)\n", + "y2 = np.cos(x)\n", + "\n", + "# First, create an empty figure with 1 subplot\n", + "fig, ax1 = plt.subplots(1, 1)\n", + "\n", + "# Add title and labels\n", + "ax1.set_title('My Plot')\n", + "ax1.set_xlabel('x')\n", + "ax1.set_ylabel('y')\n", + "\n", + "# Change axis limits\n", + "ax1.set_xlim([0,2])\n", + "ax1.set_ylim([-1, 2])\n", + "\n", + "# Add the lines, changing their color, style, and marker\n", + "ax1.plot(x, y1, 'k--o', label='sin') # Black line, dashed, with 'o' markers\n", + "ax1.plot(x, y2, 'r-^', label='cos') # Red line, solid, with triangle-up markers\n", + "\n", + "# Adjust tick marks and get rid of 'box'\n", + "ax1.tick_params(direction='out', top=False, right=False) # Turn ticks out\n", + "ax1.spines['top'].set_visible(False) # Get rid of top axis line\n", + "ax1.spines['right'].set_visible(False) # Get rid of bottom axis line\n", + "\n", + "# Add subplot letter\n", + "ax1.annotate('(a)', (0.01, 0.96), size=12, xycoords='figure fraction')\n", + "\n", + "# Add legend\n", + "ax1.legend()\n", + "\n", + "# Finally, save the figure as a png file\n", + "fig.savefig('myfig-formatted.png')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.2 Advanced formatting with rcParams\n", + "\n", + "A fast way to control many aspects of figure formatting is to temporarily modify a dictionary\n", + "called rcParams. This dictionary allows you to set, in one place, many of the options that\n", + "you will need to change before submitting your figures for publication, including figure\n", + "fonts, font sizes, figure size, figure dpi, etc., as well as many options regarding how\n", + "elements are spaced in your figures (ie, the distance between different elements of subfigures).\n", + "\n", + "WARNING: The rcParams dictionary is GLOBAL to matplotlib's plot library - therefore, if you\n", + "make a change to it, all future plots that you make will also have those changes (until you\n", + "close your Python session). If you do modify rcParams, it's good hygiene to set it back to the\n", + "defaults after you've made your plot, as described below.\n", + "\n", + "A description of the rcParams options can be found at\n", + "http://matplotlib.org/users/customizing.html\n", + "\n", + "Run the code below to see all of the different options you can set here. Once you've looked\n", + "this over, hit the Toggle button on the left to hide the output again." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# View rcParams\n", + "matplotlib.rcParams" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, save the default rcParams dictionary so we can 'reset' everything after we change it.\n", + "In a 'regular' Python interpreter, or inside a Python module, you can just use\n", + "plt.rcdefaults() to reset the defaults, instead of saving them here then resetting them\n", + "manually later. However, this work in the notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Save default rcParams so we can reset them later\n", + "# WARNING: Do not run this cell after changing rcParams, as it will overwrite the\n", + "# defaults that we are trying to preserve.\n", + "rcdef = plt.rcParams.copy()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's make a simple plot, using mostly default formatting." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Make sure rcParams is at default settings, since we're messing with it\n", + "plt.rcParams.update(rcdef)\n", + "\n", + "# Make a simple figure with default formatting\n", + "fig, axall = plt.subplots(1, 2) # axall is the tuple containing both axis objects\n", + "\n", + "for ax in axall:\n", + " ax.plot(np.random.rand(100), 'k-o', label='Random')\n", + " ax.set_ylim([0, 1.2])\n", + " ax.set_ylabel('Value')\n", + " ax.legend()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are many obvious formatting problems here. The legend is too big, the axis labels are\n", + "too small, the legend shouldn't have a box (arguably), and the y-axis label on the second\n", + "subplot is hidden behind the first subplot. Also, although you can't see it here, the figure\n", + "resolution is too low to print without appearing fuzzy." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The code below changes a whole bunch of values in rcParams to get a figure to look juuuuust\n", + "right. Then it makes the figures, saves it, and puts rcParams back to its default." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Choose a bunch of new parameter values\n", + "# In practice, you'll try modifying these, running the code and saving the figure,\n", + "# looking at the figure, then making more modifications until you're happy.\n", + "newparams = {'axes.labelsize': 14, 'axes.linewidth': 1, 'savefig.dpi': 300, \n", + " 'lines.linewidth': 1.5, 'figure.figsize': (8, 3),\n", + " 'figure.subplot.wspace': 0.4,\n", + " 'ytick.labelsize': 12, 'xtick.labelsize': 12,\n", + " 'ytick.major.pad': 5, 'xtick.major.pad': 5,\n", + " 'legend.fontsize': 12, 'legend.frameon': False, \n", + " 'legend.handlelength': 1.5}\n", + "\n", + "# Update the global rcParams dictionary with the new parameter choices\n", + "# Before doing this, we reset rcParams to its default again, just in case\n", + "plt.rcParams.update(rcdef)\n", + "plt.rcParams.update(newparams)\n", + "\n", + "# Make the new figure with new formatting\n", + "fig, axall = plt.subplots(1, 2)\n", + "\n", + "for ax in axall:\n", + " ax.plot(np.random.rand(100), 'k-o', label='Random')\n", + " ax.set_ylim([0, 1.2])\n", + " ax.set_ylabel('Value')\n", + " ax.legend()\n", + " \n", + "fig.savefig('myfig-advanced.png')\n", + "\n", + "# Put rcParams back to default\n", + "plt.rcParams.update(rcdef)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You'll want to check that your formatting looks good by looking at the file that's being saved\n", + "to your hard disk, since that's exactly how it will look to the publisher or when inserted\n", + "into your manuscript." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.0" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Examples/metaclasses/cool_meta.py b/Examples/metaclasses/cool_meta.py new file mode 100644 index 0000000..eb33fb9 --- /dev/null +++ b/Examples/metaclasses/cool_meta.py @@ -0,0 +1,17 @@ +class CoolMeta(type): + def __new__(meta, name, bases, dct): + print('Creating class', name) + return super(CoolMeta, meta).__new__(meta, name, bases, dct) + def __init__(cls, name, bases, dct): + print('Initializing class', name) + super(CoolMeta, cls).__init__(name, bases, dct) + def __call__(cls, *args, **kw): + print('calling CoolMeta to instantiate ', cls) + return type.__call__(cls, *args, **kw) + +class CoolClass(metaclass=CoolMeta): + def __init__(self): + print('And now my CoolClass object exists') + +print('everything loaded, instantiate a coolclass object now') +foo = CoolClass() diff --git a/Examples/metaclasses/mangler.py b/Examples/metaclasses/mangler.py new file mode 100755 index 0000000..fcf538f --- /dev/null +++ b/Examples/metaclasses/mangler.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 + + +class NameMangler(type): + + def __new__(cls, clsname, bases, _dict): + uppercase_attr = {} + for name, val in _dict.items(): + if not name.startswith('__'): + uppercase_attr[name.upper()] = val + uppercase_attr[name] = val + else: + uppercase_attr[name] = val + + return super().__new__(cls, clsname, bases, uppercase_attr) + + +class Foo(metaclass=NameMangler): + x = 1 + + +if __name__ == "__main__": + f = Foo() + print(f.x) + print(f.X) diff --git a/Examples/metaclasses/my_solution.py b/Examples/metaclasses/my_solution.py new file mode 100644 index 0000000..2605088 --- /dev/null +++ b/Examples/metaclasses/my_solution.py @@ -0,0 +1,55 @@ +# original class made as simple as possible +class TestClass(object): + + engine = None + + def __init__(self, config): + self.config = config + self.data = None + + def initialize(self): + print('initialize data') + self.data = 'initialized' + + def _get_engine(self): + if not TestClass.engine: + self.initialize() + TestClass.engine = 'on' + return TestClass.engine + + def get_privilege(self): + engine = self._get_engine() + return self.data, TestClass.engine + + +class MyClass(object): + + class __MyClass(object): + def __init__(self, db_config): + self.db_config = db_config + self.data = None + self.engine = None + + def initialize(self): + print('initialize data') + self.data = 'initialized' + + def _get_engine(self): + if not self.engine: + self.initialize() + self.engine = 'on' + return self.engine + + def get_privilege(self): + engine = self._get_engine() + return self.data, self.engine + + instance = None + + def __init__(self, db_config): + if not MyClass.instance: + MyClass.instance = MyClass.__MyClass(db_config) + + def __getattr__(self, name): + return getattr(self.instance, name) + diff --git a/Examples/metaclasses/singleton.py b/Examples/metaclasses/singleton.py new file mode 100644 index 0000000..890082b --- /dev/null +++ b/Examples/metaclasses/singleton.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 + +""" +example of using __metaclass__ to impliment the singleton pattern +""" + + +class Singleton(type): + instance = None + + def __call__(cls, *args, **kwargs): + if cls.instance is None: + cls.instance = super().__call__(*args, **kwargs) + return cls.instance + + +class MyClass(metaclass=Singleton): + pass + +object1 = MyClass() +object2 = MyClass() + +print(id(object1)) +print(id(object2)) diff --git a/Examples/metaclasses/start_class.py b/Examples/metaclasses/start_class.py new file mode 100644 index 0000000..dc8af24 --- /dev/null +++ b/Examples/metaclasses/start_class.py @@ -0,0 +1,55 @@ +import sqlalchemy + + +class AccessTable(object): + + engine = None + + def __init__(self, db_config): + self.db_config = db_config + + def initialize(self, engine): + """ + Set up schema if it does not already exist + """ + self.metadata = sqlalchemy.MetaData() + sqlalchemy.Table('access', self.metadata, + sqlalchemy.Column('name', sqlalchemy.String(256), primary_key=True), + sqlalchemy.Column('group', sqlalchemy.String(256), nullable=False), + sqlalchemy.Column('privilege', sqlalchemy.String(64), nullable=False), + sqlalchemy.Index('name', 'group', unique=True)) + self.metadata.create_all(engine) + + def _get_engine(self): + """ + Get a connection to the sqlalchemy db engine + + If the initial connection fails, it will try again next time + + The engine connection is kept as a class variable since sqlalchemy engines are intended to be + started once in the app's lifetime, not started up and shut down repeatedly. So this is just + a plain ol singleton + """ + if not AccessTable.engine: + AccessTable.engine = sqlalchemy.create_engine(self.db_config['engine']) + + self.initialize(AccessTable.engine) + return AccessTable.engine + + def get_privilege(self, name, group): + """ + Get the privilege for the given name and group + """ + # TODO consider making self.engine a @property instead + engine = self._get_engine() + + # TODO consider making self.metadata a @property + # Also, I don't like how self.metadata is not initialized until _get_engine is called ... should be more + # automatic than that + access = self.metadata.tables['access'] + select = sqlalchemy.select([access.c.privilege]).where(sqlalchemy.sql.and_(access.c.name == name, + access.c.group == group)) + + # TODO handle result including case where it doesn't find any records + _result = engine.execute(select) + return 'readwrite' diff --git a/Examples/nosql/address_book_model.py b/Examples/nosql/address_book_model.py new file mode 100644 index 0000000..942c3ed --- /dev/null +++ b/Examples/nosql/address_book_model.py @@ -0,0 +1,255 @@ +#!/usr/bin/env python + +""" +sample data for NOSQL examples + +This version has a non-trival data model + +""" + +class Person(object): + """ + class to represent an individual person + """ + def __init__(self, + last_name, + first_name='', + middle_name='', + cell_phone='', + email='', + ): + """ + initialize a Person object: + """ + self.first_name = first_name.strip() + self.last_name = last_name.strip() + self.middle_name = middle_name.strip() + self.cell_phone = cell_phone.strip() + self.email = email.strip() + + @property + def name(self): + return " ".join([self.first_name, self.middle_name, self.last_name]) + + def __str__(self): + msg = '{first_name} {middle_name} {last_name}'.format(**self.__dict__) + return msg + def __repr__(self): + """ + not a good ___repr__, but want to have something here + """ + return self.__str__() + + +class Address(object): + """ + class that represents an address + """ + def __init__(self, + line_1='', + line_2='', + city='', + state='', + zip_code='', + ): + """ + initialize an address + """ + + self.line_1=line_1.strip() + self.line_2=line_2.strip() + self.city=city.strip() + self.state=state.strip() + self.zip_code=str(zip_code).strip() + + def __str__(self): + msg = "{line_1}\n{line_2}\n{city} {state} {zip_code}\n".format(**self.__dict__) + return msg + +class Household(object): + """ + Class that represents a Household. + + A household has one or more people, and a Location + """ + + def __init__(self, + name = '', + people=(), + address=None, + phone='' + ): + self.name = name.strip() + self.people = list(people) + self.address = address + self.phone = phone.strip() + + def __str__(self): + msg = [self.name+":"] + msg += [" "+ person.name for person in self.people] + msg += [str(self.address)] + return "\n".join(msg) + def __repr__(self): + return self.__str__() + +class Business(Household): + """ + Class that represents a Business + + A business has one or more people, + and address and a phone number + """ + # Same as household now, but you never know. + pass + + +class AddressBook(object): + """ + And address book -- has people, households, businesses. + + All fully cross-referenced + """ + + def __init__(self, + people=(), + businesses=(), + households=(), + ): + self.people = list(people) + self.businesses = list(businesses) + self.households = list(households) + + def __str__(self): + msg = ["An Address Book:"] + msg += ["People:"] + msg += [" "+person.name for person in self.people] + msg += ["Households:"] + msg += [" "+house.name for house in self.households] + msg += ["Businesses:"] + msg += [" "+bus.name for bus in self.businesses] + + return "\n".join(msg) + + @property + def locations(self): + return self.households+self.businesses + + def find_people(self, name=''): + """ + find all the people with name in their name somewhere + """ + return [person for person in self.people if name.lower() in person.name.lower()] + + def find_zip_codes(self, zip_code): + """ + find all the locations with this zip_code + """ + return [location for location in self.locations if location.address.zip_code == str(zip_code).strip()] + + def find_state(self, state): + """ + find all the locations in this state + """ + return [location for location in self.locations if location.address.state == state] + + +def create_sample(): + """ + Create a sample Address Book + """ + + chris = Person(last_name = 'Barker', + first_name='Chris', + middle_name='H', + cell_phone='(123) 555-7890', + email = 'PythonCHB@gmail.com', + ) + + emma = Person(last_name = 'Barker', + first_name='Emma', + middle_name='L', + cell_phone='(345) 555-9012', + email = 'emma@something.com', + ) + + donna = Person(last_name = 'Barker', + first_name='Donna', + middle_name='L', + cell_phone='(111) 555-1111', + email = 'dbarker@something.com', + ) + + barker_address = Address(line_1='123 Some St', + line_2='Apt 1234', + city='Seattle', + state='WA', + zip_code='98000',) + + the_barkers = Household(name="The Barkers", + people=(chris, donna, emma), + address = barker_address) + + + joseph = Person(last_name = 'Sheedy', + first_name='Joseph', + cell_phone='(234) 555-8910', + email = 'js@some_thing.com', + ) + + cris = Person(last_name = 'Ewing', + first_name='Cris', + cell_phone='(345) 555-6789', + email = 'cris@a_fake_domain.com', + ) + + fulvio = Person(last_name = 'Casali', + first_name= 'Fulvio', + cell_phone='(345) 555-1234', + email = 'fulvio@a_fake_domain.com', + ) + + fred = Person(first_name="Fred", + last_name="Jones", + email='FredJones@some_company.com', + cell_phone="403-561-8911", + ) + + python_cert_address = Address('UW Professional and Continuing Education', + line_2='4333 Brooklyn Ave. NE', + city='Seattle', + state='WA', + zip_code='98105', + ) + + python_cert = Business(name = 'Python Certification Program', + people=(chris, joseph, cris, fulvio), + address = Address('UW Professional and Continuing Education', + line_2='4333 Brooklyn Ave. NE', + city='Seattle', + state='WA', + zip_code='98105', + ) + ) + + + address_book = AddressBook() + + address_book.people.append(chris) + address_book.people.append(donna) + address_book.people.append(emma) + address_book.people.append(cris) + address_book.people.append(joseph) + address_book.people.append(fulvio) + + address_book.households.append(the_barkers) + address_book.businesses.append(python_cert) + + return address_book + +if __name__ == "__main__": + address_book = create_sample() + + print("Here is the address book") + print(address_book) + + diff --git a/Examples/nosql/address_book_mongo.py b/Examples/nosql/address_book_mongo.py new file mode 100644 index 0000000..c9db526 --- /dev/null +++ b/Examples/nosql/address_book_mongo.py @@ -0,0 +1,366 @@ +#!/usr/bin/env python + +""" +sample data for NOSQL examples + +This version uses mongoDB to store the data. + +NOTE: you need to start up the DB first: + +$ mongod --dbpath=mongo_data/ + +""" + +from bson.objectid import ObjectId + + +class PersistObject(object): + """ + mix-in class for object you want to be able to put in a mongoDB + + defines the basic to_dict and from_dict methods + """ + def to_dict(self): + """ + returns a dictionary of all the data in the object + + pretty simple in this case, but might be more to it + for a more complicated class + """ + return self.__dict__ + @classmethod + def from_dict(cls, dct): + """ + Returns a new object initialized from the values in dct + + just calls the usual __init__ in this case. but could be more + to it in a more complex case. + """ + return cls(**dct) + + +class Person(PersistObject): + """ + class to represent an individual person + """ + def __init__(self, + last_name, + first_name='', + middle_name='', + cell_phone='', + email='', + _id=None, + ): + """ + initialize a Person object: + """ + self.first_name = first_name.strip() + self.last_name = last_name.strip() + self.middle_name = middle_name.strip() + self.cell_phone = cell_phone.strip() + self.email = email.strip() + self._id = ObjectId() if _id is None else _id + + + @property + def name(self): + return " ".join([self.first_name, self.middle_name, self.last_name]) + + def __str__(self): + msg = '{first_name} {middle_name} {last_name}'.format(**self.__dict__) + return msg + def __repr__(self): + """ + not a good ___repr__, but want to have something here + """ + return self.__str__() + + + +class Address(PersistObject): + """ + class that represents an address + """ + def __init__(self, + line_1='', + line_2='', + city='', + state='', + zip_code='', + **kwargs + ): + """ + initialize an address + """ + + self.line_1=line_1.strip() + self.line_2=line_2.strip() + self.city=city.strip() + self.state=state.strip().upper() + self.zip_code=str(zip_code).strip() + + def __str__(self): + msg = "{line_1}\n{line_2}\n{city} {state} {zip_code}\n".format(**self.__dict__) + return msg + +class Household(PersistObject): + """ + Class that represents a Household. + + A household has one or more people, and a Location + """ + + def __init__(self, + name = '', + people=(), + address=None, + phone='', + **kwargs + ): + self.name = name.strip() + ##if it's already a ObjectID, then do'nt need to extract it. + try: + self.people = [p._id for p in people] + except AttributeError: + self.people = people + self.address = address + self.phone = phone.strip() + + def to_dict(self): + """ + convert to dict -- stores ids of people + """ + dct = self.__dict__ + dct['address'] = self.address.to_dict() + return dct + + @classmethod + def from_dict(cls, dct): + """ + creates a household object from a dict representation + unpacks the people _ids and address. + """ + dct['address'] = Address(**dct['address']) + return cls(**dct) + + + def __str__(self): + msg = [self.name+":"] + msg += [str(self.address)] + return "\n".join(msg) + def __repr__(self): + return self.__str__() + +class Business(Household): + """ + Class that represents a Business + + A business has one or more people, + and address and a phone number + """ + # Same as household now, but you never know. + pass + + +class AddressBook(object): + """ + And address book -- has people, households, businesses. + + All cross-referenced + """ + + def __init__(self, + people=(), + businesses=(), + households=(), + fresh = True, + ): + # create the DB + from pymongo import MongoClient + + client = MongoClient('localhost', 27017) + db = client.address_book + if fresh: + ## clean out old one + db.people.drop() + db.businesses.drop() + db.households.drop() + + # Use the DB to hold the data + self.people = db.people + self.businesses = db.businesses + self.households = db.households + + def add_person(self, person): + self.people.insert(person.to_dict()) + + def add_household(self, household): + print("adding a household") + self.households.insert(household.to_dict()) + + def add_business(self, business): + self.businesses.insert(business.to_dict()) + + def __str__(self): + msg = ["An Address Book:"] + msg += ["People:"] + msg += [" "+person.name for person in self.find_people()] + msg += ["Households:"] + msg += [" "+house.name for house in self.find_households()] + msg += ["Businesses:"] + msg += [" "+bus.name for bus in self.find_businesses()] + + return "\n".join(msg) + + def find_people(self, name=''): + """ + find all the people with name in their name somewhere + """ + ## fixme -- can this query be combined? + ## like this: db.inventory.find( { $or: [ { qty: { $lt: 20 } }, { sale: true } ] } ) + + cursor = self.people.find({"first_name": {'$regex' : '.*' + name + '.*', + '$options':'i'}}) + results = [Person.from_dict(p) for p in cursor] + + cursor = self.people.find({"last_name": {'$regex' : '.*' + name + '.*', + '$options':'i'}}) + + return results + [Person.from_dict(p) for p in cursor] + + def find_households(self): + cursor = self.households.find() + return [Household.from_dict(p) for p in cursor] + + + def find_businesses(self): + cursor = self.businesses.find() + return [Business.from_dict(p) for p in cursor] + + def find_zip_codes(self, zip_code): + """ + find all the locations with this zip_code + """ + zip_code = str(zip_code).strip() + cursor = self.households.find({"addresses.zip_code":zip_code}) + results = [Household.from_dict(dct) for dct in cursor] + + cursor = self.businesses.find({"address.zip_code":zip_code}) + results += [Business.from_dict(dct) for dct in cursor] + + return results + + def find_state(self, state): + """ + find all the locations in this state + """ + state = state.strip().upper() + cursor = self.households.find({"address.state":state}) + results = [Household.from_dict(dct) for dct in cursor] + + cursor = self.businesses.find({"address.state":state}) + results += [Business.from_dict(dct) for dct in cursor] + + return results + + +def create_sample(): + """ + Create a sample Address Book + """ + + chris = Person(last_name = 'Barker', + first_name='Chris', + middle_name='H', + cell_phone='(123) 555-7890', + email = 'PythonCHB@gmail.com', + ) + + emma = Person(last_name = 'Barker', + first_name='Emma', + middle_name='L', + cell_phone='(345) 555-9012', + email = 'emma@something.com', + ) + + donna = Person(last_name = 'Barker', + first_name='Donna', + middle_name='L', + cell_phone='(111) 555-1111', + email = 'dbarker@something.com', + ) + + barker_address = Address(line_1='123 Some St', + line_2='Apt 1234', + city='Seattle', + state='WA', + zip_code='98000',) + + the_barkers = Household(name="The Barkers", + people=(chris, donna, emma), + address = barker_address) + + + joseph = Person(last_name = 'Sheedy', + first_name='Joseph', + cell_phone='(234) 555-8910', + email = 'js@some_thing.com', + ) + + cris = Person(last_name = 'Ewing', + first_name='Cris', + cell_phone='(345) 555-6789', + email = 'cris@a_fake_domain.com', + ) + + fulvio = Person(last_name = 'Casali', + first_name= 'Fulvio', + cell_phone='(345) 555-1234', + email = 'fulvio@a_fake_domain.com', + ) + + fred = Person(first_name="Fred", + last_name="Jones", + email='FredJones@some_company.com', + cell_phone="403-561-8911", + ) + + python_cert_address = Address('UW Professional and Continuing Education', + line_2='4333 Brooklyn Ave. NE', + city='Seattle', + state='WA', + zip_code='98105', + ) + + python_cert = Business(name = 'Python Certification Program', + people=(chris, joseph, cris, fulvio), + address = Address('UW Professional and Continuing Education', + line_2='4333 Brooklyn Ave. NE', + city='Seattle', + state='WA', + zip_code='98105', + ) + ) + + + address_book = AddressBook() + + address_book.add_person(chris) + address_book.add_person(donna) + address_book.add_person(emma) + address_book.add_person(cris) + address_book.add_person(joseph) + address_book.add_person(fulvio) + + address_book.add_household(the_barkers) + address_book.add_business(python_cert) + + return address_book + +if __name__ == "__main__": + address_book = create_sample() + + print("Here is the address book") + print(address_book) + + diff --git a/Examples/nosql/address_book_zodb.py b/Examples/nosql/address_book_zodb.py new file mode 100644 index 0000000..c5b7d4e --- /dev/null +++ b/Examples/nosql/address_book_zodb.py @@ -0,0 +1,285 @@ +#!/usr/bin/env python + +""" +sample data for NOSQL examples + +This version uses ZODB for the data management. + +""" + +import persistent # from ZODB +from persistent.list import PersistentList + +class Person(persistent.Persistent): + """ + class to represent an individual person + """ + def __init__(self, + last_name, + first_name='', + middle_name='', + cell_phone='', + email='', + ): + """ + initialize a Person object: + """ + self.first_name = first_name.strip() + self.last_name = last_name.strip() + self.middle_name = middle_name.strip() + self.cell_phone = cell_phone.strip() + self.email = email.strip() + + @property + def name(self): + return " ".join([self.first_name, self.middle_name, self.last_name]) + + def __str__(self): + msg = '{first_name} {middle_name} {last_name}'.format(**self.__dict__) + return msg + def __repr__(self): + """ + not a good ___repr__, but want to have something here + """ + return self.__str__() + + +class Address(persistent.Persistent): + """ + class that represents an address + """ + def __init__(self, + line_1='', + line_2='', + city='', + state='', + zip_code='', + ): + """ + initialize an address + """ + + self.line_1=line_1.strip() + self.line_2=line_2.strip() + self.city=city.strip() + self.state=state.strip() + self.zip_code=str(zip_code).strip() + + def __str__(self): + msg = "{line_1}\n{line_2}\n{city} {state} {zip_code}\n".format(**self.__dict__) + return msg + +class Household(persistent.Persistent): + """ + Class that represents a Household. + + A household has one or more people, and a Location + """ + + def __init__(self, + name = '', + people=(), + address=None, + phone='' + ): + self.name = name.strip() + self.people = list(people) + self.address = address + self.phone = phone.strip() + + def __str__(self): + msg = [self.name+":"] + msg += [" "+ person.name for person in self.people] + msg += [str(self.address)] + return "\n".join(msg) + def __repr__(self): + return self.__str__() + +class Business(Household): + """ + Class that represents a Business + + A business has one or more people, + and address and a phone number + """ + # Same as household now, but you never know. + pass + + +class AddressBook(persistent.Persistent): + """ + And address book -- has people, households, businesses. + + All fully cross-referenced + """ + + def __init__(self, + people=(), + businesses=(), + households=(), + ): + self.people = PersistentList(people) + self.businesses = PersistentList(businesses) + self.households = PersistentList(households) + + def __str__(self): + msg = ["An Address Book:"] + msg += ["People:"] + msg += [" "+person.name for person in self.people] + msg += ["Households:"] + msg += [" "+house.name for house in self.households] + msg += ["Businesses:"] + msg += [" "+bus.name for bus in self.businesses] + + return "\n".join(msg) + + @property + def locations(self): + return self.households+self.businesses + + def find_people(self, name=''): + """ + find all the people with name in their name somewhere + """ + return [person for person in self.people if name.lower() in person.name.lower()] + + def find_zip_codes(self, zip_code): + """ + find all the locations with this zip_code + """ + return [location for location in self.locations if location.address.zip_code == str(zip_code).strip()] + + def find_state(self, state): + """ + find all the locations in this state + """ + return [location for location in self.locations if location.address.state == state] + + +def create_sample(): + """ + Create a sample Address Book + + Uses the ZODB single file storage + + There are other storage options: + * In-memory + * Client/Server Model + """ + + import ZODB + + db = ZODB.DB('address_book_zodb.fs') + connection = db.open() + root = connection.root + import transaction + + ## now create some data. + chris = Person(last_name = 'Barker', + first_name='Chris', + middle_name='H', + cell_phone='(123) 555-7890', + email = 'PythonCHB@gmail.com', + ) + + emma = Person(last_name = 'Barker', + first_name='Emma', + middle_name='L', + cell_phone='(345) 555-9012', + email = 'emma@something.com', + ) + + donna = Person(last_name = 'Barker', + first_name='Donna', + middle_name='L', + cell_phone='(111) 555-1111', + email = 'dbarker@something.com', + ) + + barker_address = Address(line_1='123 Some St', + line_2='Apt 1234', + city='Seattle', + state='WA', + zip_code='98000',) + + the_barkers = Household(name="The Barkers", + people=(chris, donna, emma), + address = barker_address) + + + joseph = Person(last_name = 'Sheedy', + first_name='Joseph', + cell_phone='(234) 555-8910', + email = 'js@some_thing.com', + ) + + cris = Person(last_name = 'Ewing', + first_name='Cris', + cell_phone='(345) 555-6789', + email = 'cris@a_fake_domain.com', + ) + + fulvio = Person(last_name = 'Casali', + first_name= 'Fulvio', + cell_phone='(345) 555-1234', + email = 'fulvio@a_fake_domain.com', + ) + + fred = Person(first_name="Fred", + last_name="Jones", + email='FredJones@some_company.com', + cell_phone="403-561-8911", + ) + + python_cert_address = Address('UW Professional and Continuing Education', + line_2='4333 Brooklyn Ave. NE', + city='Seattle', + state='WA', + zip_code='98105', + ) + + python_cert = Business(name = 'Python Certification Program', + people=(chris, joseph, cris, fulvio), + address = Address('UW Professional and Continuing Education', + line_2='4333 Brooklyn Ave. NE', + city='Seattle', + state='WA', + zip_code='98105', + ) + ) + + + root.address_book = AddressBook() + + root.address_book.people.append(chris) + root.address_book.people.append(donna) + root.address_book.people.append(emma) + root.address_book.people.append(cris) + root.address_book.people.append(joseph) + root.address_book.people.append(fulvio) + + transaction.commit() + + root.address_book.households.append(the_barkers) + root.address_book.businesses.append(python_cert) + + transaction.commit() + + ## close the db + db.close() + + ## now open it again + + db = ZODB.DB('address_book_zodb.fs') + connection = db.open() + root = connection.root + + return root.address_book + +if __name__ == "__main__": + address_book = create_sample() + + print("Here is the address book") + print(address_book) + + diff --git a/Examples/nosql/mongo_test.py b/Examples/nosql/mongo_test.py new file mode 100644 index 0000000..21f40d6 --- /dev/null +++ b/Examples/nosql/mongo_test.py @@ -0,0 +1,30 @@ +#!usr/bin/env python + +""" +simple test file for mongoDB +remember to start database: +$ mongod --dbpath=mongo_data/ + +""" + +from pymongo import MongoClient + +client = MongoClient('localhost', 27017) + +db = client.test_database + +collection = db.test_collection + +chris = {'last_name':'Barker', + 'first_name':'Chris', + 'middle_name':'H', + 'cell_phone':'(123) 555-7890', + 'email':'PythonCHB@gmail.com', + } + +collection.insert(chris) + +print("all the collections") +print(db.collection_names()) + +print(collection.find_one()) diff --git a/Examples/nosql/test_address_book_model.py b/Examples/nosql/test_address_book_model.py new file mode 100755 index 0000000..ebb7395 --- /dev/null +++ b/Examples/nosql/test_address_book_model.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python + +""" +test code for address book model code +if testing mongo, remember to start database first +$ mongod --dbpath=mongo_data/ +""" + +# import address_book_model as model +# import address_book_zodb as model +import address_book_mongo as model + + +a_book = model.create_sample() + + +def test_name_search(): + """find a single person by first name""" + + people = a_book.find_people('chris') + + assert len(people) == 1 + assert people[0].first_name == 'Chris' + assert people[0].last_name == 'Barker' + + +def test_name_search2(): + people = a_book.find_people('barKer') + first_names = [p.first_name for p in people] + + assert 'Chris' in first_names + assert 'Emma' in first_names + assert 'Donna' in first_names + + +def test_zip_search(): + locations = a_book.find_zip_codes(98105) + + assert len(locations) == 1 + assert locations[0].name == 'Python Certification Program' + + +def test_state_search(): + locations = a_book.find_state('WA') + names = [l.name for l in locations] + + assert "The Barkers" in names + assert "Python Certification Program" in names diff --git a/Examples/nosql/test_address_book_mongo.py b/Examples/nosql/test_address_book_mongo.py new file mode 100644 index 0000000..6a09c00 --- /dev/null +++ b/Examples/nosql/test_address_book_mongo.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python + +""" +test code for address book model code +remember to start mongo database first +$ mongod --dbpath=mongo_data/ +""" + +import address_book_mongo as model + + +def test_person_to_dict(): + chris = model.Person(last_name = 'Barker', + first_name='Chris', + middle_name='H', + cell_phone='(123) 555-7890', + email = 'PythonCHB@gmail.com', + ) + + dct = chris.to_dict() + + assert dct['last_name'] == "Barker" + assert dct['email'] == 'PythonCHB@gmail.com' + +def test_person_to_from_dict(): + chris = model.Person(last_name = 'Barker', + first_name='Chris', + middle_name='H', + cell_phone='(123) 555-7890', + email = 'PythonCHB@gmail.com', + ) + + dct = chris.to_dict() + chris2 = model.Person.from_dict(dct) + + print(chris2) + + assert chris2.last_name == 'Barker' + assert chris2.first_name == 'Chris' + assert chris2.middle_name == 'H' + assert chris2.cell_phone == '(123) 555-7890' + assert chris2.email == 'PythonCHB@gmail.com' + + +def test_household_to_dict(): + chris = model.Person(last_name = 'Barker', + first_name='Chris', + middle_name='H', + cell_phone='(123) 555-7890', + email = 'PythonCHB@gmail.com', + ) + home = model.Household(name="The Barkers", + people=(chris,), + address=model.Address(line_1='123 Some St', + line_2='Apt 1234', + city='Seattle', + state='WA', + zip_code='98000',), + phone='123-456-8762', + ) + + home_dct = home.to_dict() + + assert home_dct['name'] == "The Barkers" + assert home_dct['address']['city'] == 'Seattle' + +def test_household_to_dict_to_object(): + chris = model.Person(last_name = 'Barker', + first_name='Chris', + middle_name='H', + cell_phone='(123) 555-7890', + email = 'PythonCHB@gmail.com', + ) + fred = model.Person(last_name = 'Jones', + first_name='Fred', + middle_name='B', + cell_phone='(123) 555-7890', + email = 'FredJones@gmail.com', + ) + home = model.Household(name="The Barkers", + people=(chris,), + address=model.Address(line_1='123 Some St', + line_2='Apt 1234', + city='Seattle', + state='WA', + zip_code='98000',), + phone='123-456-8762', + ) + + home2 = model.Household.from_dict(home.to_dict()) + + assert home2.name == home.name + assert home2.phone == home.phone + assert home2.address.line_1 == home.address.line_1 + assert home2.address.line_2 == home.address.line_2 + assert home2.people == home.people diff --git a/Examples/numpy/README.rst b/Examples/numpy/README.rst new file mode 100644 index 0000000..3f5a582 --- /dev/null +++ b/Examples/numpy/README.rst @@ -0,0 +1,51 @@ +===================== +Assorted numpy Demos +===================== + +This is an assortment of code that demonstrates various aspects of numpy. + +Jupyter notebooks +================= + +The *.ipynb files are jupyter notebook (formerly known as ipython notebook) files. + +To run them, you need the jupyter notebook installed:: + + $ python -m pip install -U jupyter + + +( -U means "upgrade" which should ensure that all the dependecies get upgraded, too) + +or, if you are running anaconda: + + $ conda install jupyter + +Once jupyter is installed, you can run it: + +To use these notebooks, cd to this directory, and start up the notebook:: + + $ cd Examples/numpy + $ jupyter notebook + +This should bring up your browser with a page with links to each of the enclosed notebooks. + +NOTE: If you have problems like "kernel stopped, trying to restart" you may have a version incompatiblily issue (I did April 24, 2016). There error message ends with somethign like: + +File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/ipywidgets/widgets/widget.py", line 154, in Widget in which to find _model_name. If empty, look in the global registry.""").tag(sync=True) + +AttributeError: 'Unicode' object has no attribute 'tag' + + +In that case try:: + + python -m pip install -U traitlets + +That will update traitlets, which is the source of the problem. + +Other files +============ + +``start.py`` has a couple utilites used by the other demos + +``sudoku-chb.py`` is a suduko game. The GUI is written with wxPython. But the interesting part (in this context) is the game board, which is represented by a numpy array, with each sub part of the board as views on that same array. + diff --git a/Examples/numpy/broadcasting.ipynb b/Examples/numpy/broadcasting.ipynb new file mode 100644 index 0000000..7404674 --- /dev/null +++ b/Examples/numpy/broadcasting.ipynb @@ -0,0 +1,565 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Intro to numpy broadcasting\n", + "-----------------------------" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a = np.ones((3,4))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 1. 1. 1. 1.]\n", + " [ 1. 1. 1. 1.]\n", + " [ 1. 1. 1. 1.]]\n" + ] + } + ], + "source": [ + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 3. 3. 3. 3.]\n", + " [ 3. 3. 3. 3.]\n", + " [ 3. 3. 3. 3.]]\n" + ] + } + ], + "source": [ + "# the multiplication is \"broadcast\" over the whole array:\n", + "print(a * 3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is core of \"vectorization\" -- doing operations over a whole array at the speed of C -- key to numpy performance.\n", + "\n", + "Regular python lists and comprehensions:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "l = range(10000)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1000 loops, best of 3: 871 µs per loop\n" + ] + } + ], + "source": [ + "# using regular python list comprehensions\n", + "%timeit [i*3 for i in l]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now the numpy way:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a = np.arange(10000) # create an array" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The slowest run took 24.07 times longer than the fastest. This could mean that an intermediate result is being cached.\n", + "100000 loops, best of 3: 6.85 µs per loop\n" + ] + } + ], + "source": [ + "timeit a * 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### in-place operations\n", + "\n", + "One of the primary reasons \"augemented assignemnt\" was added to Python \n", + "is support in-place operations:\n", + " `+=`, `*=`, etc..." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = np.arange(10)\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 3 4 5 6 7 8 9 10 11 12]\n" + ] + } + ], + "source": [ + "a+=3\n", + "print(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A was changed in place -- no new memory allocation, loop at the speed of C.\n", + "\n", + "So \"augmented assigment\" operators are not just syntacitc sugar!\n", + "\n", + "How do you broadcast to multiple dimensions?" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0. 3.33333333 6.66666667 10. ]]\n" + ] + } + ], + "source": [ + "x = np.linspace(0,10,4)\n", + "y = np.linspace(100,200,3)\n", + "\n", + "x.shape = (1, -1)\n", + "y.shape = (-1, 1)\n", + "\n", + "print(x)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 100.]\n", + " [ 150.]\n", + " [ 200.]]\n" + ] + } + ], + "source": [ + "print(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(4,)\n", + "(1, 4)\n", + "[[ 0. 3.33333333 13.33333333 30. ]]\n" + ] + } + ], + "source": [ + "a = np.arange(4)\n", + "print (a.shape)\n", + "print (x.shape)\n", + "print (a * x)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(4,)\n", + "(3, 1)\n", + "[[ 0. 100. 200. 300.]\n", + " [ 0. 150. 300. 450.]\n", + " [ 0. 200. 400. 600.]]\n" + ] + } + ], + "source": [ + "print(a.shape)\n", + "print(y.shape)\n", + "print(a * y)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0. 333.33333333 666.66666667 1000. ]\n", + " [ 0. 500. 1000. 1500. ]\n", + " [ 0. 666.66666667 1333.33333333 2000. ]]\n" + ] + } + ], + "source": [ + "print(np.sqrt(x**2 * y**2))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0 1 2 3]\n", + " [ 4 5 6 7]\n", + " [ 8 9 10 11]]\n", + "[[ 0 10 20 30]\n", + " [ 40 50 60 70]\n", + " [ 80 90 100 110]]\n" + ] + } + ], + "source": [ + "x = np.arange(12).reshape((3,4))\n", + "y = np.arange(12).reshape((3,4)) * 10\n", + "print(x)\n", + "print(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 11, 22, 33],\n", + " [ 44, 55, 66, 77],\n", + " [ 88, 99, 110, 121]])" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x + y" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "z = np.array([100, 200, 300, 400])" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[100 200 300 400]\n" + ] + } + ], + "source": [ + "print(z)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(3, 4)" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(4,)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "z.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 200, 600, 1200],\n", + " [ 400, 1000, 1800, 2800],\n", + " [ 800, 1800, 3000, 4400]])" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "z * x" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[100],\n", + " [200],\n", + " [300]])" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "z = np.array([100, 200, 300])\n", + "z.shape = (3,1)\n", + "z" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 100, 200, 300],\n", + " [ 800, 1000, 1200, 1400],\n", + " [2400, 2700, 3000, 3300]])" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "z * x" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.0" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Examples/numpy/constructors.ipynb b/Examples/numpy/constructors.ipynb new file mode 100644 index 0000000..da76c45 --- /dev/null +++ b/Examples/numpy/constructors.ipynb @@ -0,0 +1,460 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Assorted numpy Constructors\n", + "-----------------------------" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#Always need to import it... \n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The ones you will most commonly use\n", + "\n", + "Making arrays from scratch\n", + "\n", + "```\n", + "zeros()\n", + "ones()\n", + "linspace()\n", + "```\n", + "Or from existing data stracutures:\n", + "```\n", + "array()\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1., 1.],\n", + " [ 1., 1.],\n", + " [ 1., 1.]])" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# from scratch:\n", + "a = np.ones((3,2)) # default dtype is float64\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "float64\n" + ] + } + ], + "source": [ + "print(a.dtype)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0 0 0]\n", + " [0 0 0]]\n" + ] + } + ], + "source": [ + "print(np.zeros((2,3), dtype=np.int32))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0.00000000e+00 -2.52435490e-29 3.57649012e-29]\n", + " [ 8.58993459e+09 9.40395929e-38 1.40129846e-45]\n", + " [ 3.60225631e-39 1.40129846e-45 3.60225631e-39]]\n" + ] + } + ], + "source": [ + "print (np.empty((3,3), dtype=np.float32)) # not initilized!" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 2 4 6 8 10 12 14 16 18]\n" + ] + } + ], + "source": [ + "# for a range:\n", + "# integers (much like the regular range...)\n", + "print(np.arange(2, 20, 2))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]\n" + ] + } + ], + "source": [ + "# for floats\n", + "# from zero to 1 (inclusive)\n", + "# you want 11 total elements\n", + "print(np.linspace(0, 1, 11))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]\n" + ] + } + ], + "source": [ + "# you can do arange with floats, too\n", + "# but it can get wierd with floating point error!\n", + "print(np.arange(0,1.1, 0.1, dtype=np.float))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 1. 10. 100. 1000.]\n" + ] + } + ], + "source": [ + "# if you are a math/scicnce geek, and want a log axis...\n", + "print(np.logspace(0, 3, 4))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## From existing data:\n", + "```\n", + "array()\n", + "asarray()\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[(1, 2) (3, 4, 5) (5, 6)]\n" + ] + } + ], + "source": [ + "\n", + "# maybe the most common constructor \n", + "a = np.array([(1, 2),\n", + " (3, 4, 5),\n", + " (5, 6)]) # auto-determined dtype\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "((3,), dtype('O'))" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a.shape, a.dtype" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "# maybe an array?\n", + "a = np.arange(5)\n", + "b = np.asarray(a)\n", + "print(a is b)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "False\n" + ] + } + ], + "source": [ + "# or not:\n", + "a = range(5)\n", + "b = np.asarray(a)\n", + "print(a is b)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0 1 2 3 4]\n" + ] + } + ], + "source": [ + "print(np.ascontiguousarray(a))# forces contiguous datablock" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 97 98 99 100 101 102 103]\n" + ] + } + ], + "source": [ + "# from binary data:\n", + "s = b'abcdefg'\n", + "a = np.frombuffer(s, dtype=np.uint8)\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[18 4]\n" + ] + } + ], + "source": [ + "# \"fromstring\" is named from py2 when a string was a string of bytes\n", + "# you really want to use a bytes object here, not a string.\n", + "print(np.fromstring(b'\\x12\\x04', dtype=np.uint8))" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# from (and to) binary file:\n", + "a = np.arange(5, dtype=np.float32) # jsut a binary dump!\n", + "a.tofile('junk.dat')" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0 1065353216 1073741824 1077936128 1082130432]\n" + ] + } + ], + "source": [ + "# to read raw binary data you need the dtype.\n", + "# if you get it wrong, you get junk:\n", + "print(np.fromfile('junk.dat', dtype=np.int32))" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 1. 2. 3. 4.]\n" + ] + } + ], + "source": [ + "# this works better\n", + "print(np.fromfile('junk.dat', dtype=np.float32))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.0" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Examples/numpy/dtypes.ipynb b/Examples/numpy/dtypes.ipynb new file mode 100644 index 0000000..fb71c07 --- /dev/null +++ b/Examples/numpy/dtypes.ipynb @@ -0,0 +1,235 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "numpy custom data types\n", + "------------------------" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# data types\n", + "import numpy as np\n", + "from start import print_info" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# a custom dtype:\n", + "dt = np.dtype([('first_name', np.str_, 16),\n", + " ('last_name', np.str_, 24),\n", + " ('grades', np.float64, (2,)),\n", + " ])" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# create an array of this type:\n", + "a = np.empty((3,), dtype=dt)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "arr :\n", + "[('Fred', 'Jones', [92.3, 86.2]) ('Bob', 'Smith', [85.1, 88.4])\n", + " ('George', 'Roberts', [76.3, 91.5])]\n", + "arr.shape: (3,)\n", + "arr.dtype: [('first_name', ' 8\n", + "mask" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And you can assign to the sub-array, too -- very handy:\n", + "\n", + "Set all the values greater than 8 to 8:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([4, 8, 8, 0, 8, 8, 8])" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a[a > 8] = 8\n", + "a" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### array indexing\n", + "\n", + "But what if you know the indexes of the elements you want?\n", + "\n", + "you can pass those in:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([8, 0, 8, 0])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a[ [1, 3, 2, 3] ] # note that you can repeat the same index..." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 1, 2, 3, 4],\n", + " [20, 21, 22, 23, 24],\n", + " [30, 31, 32, 33, 34]])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# and it can work on higher rank arrays, also:\n", + "row_indices = [0, 2, 3]\n", + "A[row_indices]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1, 22, 34])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "col_indices = [1, 2, -1] # remember, index -1 means the last element\n", + "A[row_indices, col_indices]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Functions and methods for extracting data from arrays\n", + "\n", + "(these pre-date fancy indexing, and thus are less used. but sometimes the best way to do it)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### where\n", + "The index mask can be converted to position index using the where function" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([1, 2, 4, 5, 6]),)" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "indices = np.where(mask)\n", + "indices" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.85078687, 0.40800382, 0.32703315, 0.64197836, 0.30596153])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x = np.random.rand(8)\n", + "x[indices] # this indexing is equivalent to the fancy indexing x[mask]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But `where()` does more:\n", + "\n", + "`where(condition, [x, y])`\n", + "\n", + "Return elements, either from `x` or `y`, depending on `condition`." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.75489954, 0.85078687, 0.40800382, 0.10192573, 0.32703315,\n", + " 0.64197836, 0.30596153, 0.51362076])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 2, 0, 0, 0, 0, 0, 0])" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.where( x < 0.7, 0, [1,2,3,4,5,6,7,8])" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0 1 2 3 4]\n", + " [ 5 6 7 8 9]\n", + " [10 11 12 13 14]\n", + " [15 16 17 18 19]]\n", + "[[0 0 0 0 0]\n", + " [0 0 0 0 0]\n", + " [0 1 1 1 1]\n", + " [1 1 1 1 1]]\n" + ] + } + ], + "source": [ + "A = np.arange(20).reshape((4,5))\n", + "print(A)\n", + "mask1 = (A > 10).astype(np.uint8)\n", + "print(mask1)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1 1 1 1 1]\n", + " [1 1 1 1 1]\n", + " [1 1 0 0 0]\n", + " [0 0 0 0 0]]\n" + ] + } + ], + "source": [ + "mask2 = (A < 12).astype(np.uint8)\n", + "print(mask2)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1 1 1 1 1]\n", + " [1 1 1 1 1]\n", + " [1 2 1 1 1]\n", + " [1 1 1 1 1]]\n" + ] + } + ], + "source": [ + "print(mask1 + mask2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print(np.where(A > 10, 1, 0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### diag\n", + "With the diag function we can also extract the diagonal and subdiagonals of an array:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 1, 2, 3, 4],\n", + " [ 5, 6, 7, 8, 9],\n", + " [10, 11, 12, 13, 14],\n", + " [15, 16, 17, 18, 19]])" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 6, 12, 18])" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.diag(A)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 5, 11, 17])" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# you can get the diagonals that are not the main ones\n", + "np.diag(A, -1)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1, 7, 13, 19])" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.diag(A, 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### take\n", + "The take function is similar to fancy indexing described above\n", + "\n", + "`np.take(a, indices, axis=None, out=None, mode='raise')`\n", + "\n", + "Take elements from an array along an axis.\n", + "\n", + "This function does the same thing as \"fancy\" indexing (indexing arrays\n", + "using arrays); however, it can be easier to use if you need elements\n", + "along a given axis." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 1, 2, 3, 4],\n", + " [ 5, 6, 7, 8, 9],\n", + " [10, 11, 12, 13, 14],\n", + " [15, 16, 17, 18, 19]])" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's say we want the 0,2,3 rows.\n", + "Easy with \"fancy indexing\"" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 1, 2, 3, 4],\n", + " [10, 11, 12, 13, 14],\n", + " [15, 16, 17, 18, 19]])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A[ [0,2,3] ]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But what if we want the 0,2,3 columns?\n", + "\n", + "`take` makes that easy" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 2, 3],\n", + " [ 5, 7, 8],\n", + " [10, 12, 13],\n", + " [15, 17, 18]])" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A.take([0,2,3], axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 1, 2, 3, 4],\n", + " [10, 11, 12, 13, 14],\n", + " [15, 16, 17, 18, 19]])" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A.take([0,2,3], axis=0) # zero is the default axis" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 1, 2, 3, 4],\n", + " [10, 11, 12, 13, 14],\n", + " [15, 16, 17, 18, 19]])" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A[ [0,2,3] ]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`take` is also a function (not method), and so works on lists and other objects:" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-3, -1, 0])" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.take([-3, -2, -1, 0, 1, 2], row_indices)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Choose\n", + "Constructs an array by picking elements from several arrays:" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 5, -2, 7, 5])" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "which = [1, 0, 2, 1]\n", + "# we are choosing from three different arrays:\n", + "# 0, 1, 2\n", + "# so you need to pass in three arrays\n", + "choices = [[-2,-2,-2,-2],\n", + " [5, 5, 5, 5],\n", + " [7, 7, 7, 7]]\n", + "\n", + "np.choose(which, choices)\n", + "# what shape will the result be?\n", + "# hint: all arrays must be the same size" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This one is pretty tricky -- but handy when you need it." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.0" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Examples/numpy/filter_example.py b/Examples/numpy/filter_example.py new file mode 100644 index 0000000..37456af --- /dev/null +++ b/Examples/numpy/filter_example.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python + +""" +Example of using stride trick to implement a moving filter +""" + +import numpy as np + + +def convert_2d_window(input, width): + """ + returns a 2-d array, converted with stride_tricks from the input + array, to provide a moving window + + The resulting 2-d array is size: (length, width_of_window), so that + you can do vector math over the window + + :param input: The input array -- should be 1-d + :width input: the width of the window in number of elements (integer) + + """ + # assure that the input array is as we expect + input = np.asarray(input).flatten() + + len = input.shape[0] + itemsize = input.itemsize + + # compute the new shape and strides + # final length is the original length minus the window width + # -- so we don't drop off the end of the data array + # the second dimension is the width of the window + shape = (len - width + 1, width) + + # The new strides are the item size along the main axis, and also the + # item size along the cross axis -- so that you gt the next item as the + # start of the next row. + strides = (itemsize, itemsize) + + # use as_strided to set up the new shape and strides + return np.lib.stride_tricks.as_strided(input, shape, strides) + + +def moving_average(input, width): + """ + compute the simple moving average of the input series + """ + + expanded = convert_2d_window(input, width) + avg = expanded.mean(axis=1) + + return avg + + +def scaled_by_max(input, width): + """ + compute the time series, scaled by the max of a moving window + (there is a name for this!) + """ + expanded = convert_2d_window(input, width) + max = expanded.max(axis=1) + filtered = input[:len(expanded)] / max + + return filtered + + +if __name__ == "__main__": + + # run some examples: + a = np.arange(25) + np.random.shuffle(a) + + result = moving_average(a, 3) + print(result) + + result2 = scaled_by_max(a, 4) + print(result2) diff --git a/Examples/numpy/memory_structure.ipynb b/Examples/numpy/memory_structure.ipynb new file mode 100644 index 0000000..23c6f57 --- /dev/null +++ b/Examples/numpy/memory_structure.ipynb @@ -0,0 +1,394 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Intro to numpy memory use and structure\n", + "-----------------------------------------" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import sys\n", + "# Always use this import line!\n", + "import numpy as np\n", + "# handy utility for printing numpy array description.\n", + "from start import print_info" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "size of empty list: 64\n" + ] + } + ], + "source": [ + "empty_list = sys.getsizeof([])\n", + "print(\"size of empty list:\", empty_list)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "size of empty ndarray: 96\n" + ] + } + ], + "source": [ + "empty_array = sys.getsizeof(np.array([]))\n", + "print(\"size of empty ndarray:\", empty_array)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "size of python float: 24\n" + ] + } + ], + "source": [ + "py_float = sys.getsizeof(1.0)\n", + "print(\"size of python float:\", py_float)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "size of numpy float64: 8\n" + ] + } + ], + "source": [ + "numpy_float = np.array(1.0).itemsize\n", + "print(\"size of numpy float64:\", numpy_float)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A 1000 element list of floats:\n", + "32064 bytes\n" + ] + } + ], + "source": [ + "print(\"A 1000 element list of floats:\")\n", + "print(empty_list + 1000*8 + 1000*py_float, 'bytes')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A 1000 element list of floats:\n", + "8096 bytes\n" + ] + } + ], + "source": [ + "print(\"A 1000 element list of floats:\")\n", + "print(empty_array + 1000*numpy_float, 'bytes')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Demo of the underlying structure:\n", + "----------------------------------- " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "arr :\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11]\n", + "arr.shape: (12,)\n", + "arr.dtype: int64\n", + "arr.itemsize 8\n", + "arr.ndim: 1\n", + "arr.strides (8,)\n", + "arr.flags:\n", + " C_CONTIGUOUS : True\n", + " F_CONTIGUOUS : True\n", + " OWNDATA : True\n", + " WRITEABLE : True\n", + " ALIGNED : True\n", + " UPDATEIFCOPY : False\n" + ] + } + ], + "source": [ + "# create an array:\n", + "a = np.arange(12)\n", + "print_info(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "arr :\n", + "[[ 0 1 2 3]\n", + " [ 4 5 6 7]\n", + " [ 8 9 10 11]]\n", + "arr.shape: (3, 4)\n", + "arr.dtype: int64\n", + "arr.itemsize 8\n", + "arr.ndim: 2\n", + "arr.strides (32, 8)\n", + "arr.flags:\n", + " C_CONTIGUOUS : True\n", + " F_CONTIGUOUS : False\n", + " OWNDATA : True\n", + " WRITEABLE : True\n", + " ALIGNED : True\n", + " UPDATEIFCOPY : False\n" + ] + } + ], + "source": [ + "# reshape it\n", + "a.shape = (3,4)\n", + "print_info(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "arr :\n", + "[[ 0 4 8]\n", + " [ 1 5 9]\n", + " [ 2 6 10]\n", + " [ 3 7 11]]\n", + "arr.shape: (4, 3)\n", + "arr.dtype: int64\n", + "arr.itemsize 8\n", + "arr.ndim: 2\n", + "arr.strides (8, 32)\n", + "arr.flags:\n", + " C_CONTIGUOUS : False\n", + " F_CONTIGUOUS : True\n", + " OWNDATA : False\n", + " WRITEABLE : True\n", + " ALIGNED : True\n", + " UPDATEIFCOPY : False\n" + ] + } + ], + "source": [ + "# transpose it\n", + "b = a.transpose()\n", + "print_info(b) " + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "arr :\n", + "[[[ 0 1 2]\n", + " [ 3 4 5]]\n", + "\n", + " [[ 6 7 8]\n", + " [ 9 10 11]]]\n", + "arr.shape: (2, 2, 3)\n", + "arr.dtype: int64\n", + "arr.itemsize 8\n", + "arr.ndim: 3\n", + "arr.strides (48, 24, 8)\n", + "arr.flags:\n", + " C_CONTIGUOUS : True\n", + " F_CONTIGUOUS : False\n", + " OWNDATA : True\n", + " WRITEABLE : True\n", + " ALIGNED : True\n", + " UPDATEIFCOPY : False\n" + ] + } + ], + "source": [ + "# reshape again\n", + "a.shape = (2,2,3)\n", + "print_info(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + " C_CONTIGUOUS : True\n", + " F_CONTIGUOUS : False\n", + " OWNDATA : True\n", + " WRITEABLE : True\n", + " ALIGNED : True\n", + " UPDATEIFCOPY : False" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a.flags" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "arr :\n", + "[[ 3 4 5]\n", + " [ 9 10 11]]\n", + "arr.shape: (2, 3)\n", + "arr.dtype: int64\n", + "arr.itemsize 8\n", + "arr.ndim: 2\n", + "arr.strides (48, 8)\n", + "arr.flags:\n", + " C_CONTIGUOUS : False\n", + " F_CONTIGUOUS : False\n", + " OWNDATA : False\n", + " WRITEABLE : True\n", + " ALIGNED : True\n", + " UPDATEIFCOPY : False\n" + ] + } + ], + "source": [ + "# take a slice:\n", + "s = a[:,1,:]\n", + "print_info(s)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.0" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Examples/numpy/object.ipynb b/Examples/numpy/object.ipynb new file mode 100644 index 0000000..5708b75 --- /dev/null +++ b/Examples/numpy/object.ipynb @@ -0,0 +1,227 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "numpy data types and the object datatype\n", + "------------------------------------------" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# usually defaults to float(64 bit)\n", + "a = np.ones(3)\n", + "print(a.dtype)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# smart enough to match input:\n", + "a = np.array((3,5,7,8))\n", + "print(a.dtype)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# smart enough to match input:\n", + "a = np.array((3.0,5,7,8))\n", + "print(a.dtype)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# or you can specify:\n", + "a = np.array( (1,2,3), dtype=np.uint8 )\n", + "print(a.dtype)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#careful: integers overflow:\n", + "a = np.array( (1, 10, 100,), dtype=np.uint8)\n", + "\n", + "print(a)\n", + "\n", + "a *= 3\n", + "\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Object arrays:\n", + "# create an empty array:\n", + "\n", + "a = np.empty((2,3), dtype=np.object)\n", + "\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# put stuff into it:\n", + "\n", + "a[0,0] = \"a string\"\n", + "a[0,1] = 4.5\n", + "a[0,2] = (1,2,3)\n", + "a[1,:] = [6, {'a':3}, 3.4]\n", + "\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# a row:\n", + "print(a[1,:])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# a column:\n", + "print(a[:,1])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# an item (a dict in this case)\n", + "print(a[1,1])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print(a[1,1]['a'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# can we do regular numpy math?\n", + "a += 3\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.0" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Examples/numpy/reshaping.ipynb b/Examples/numpy/reshaping.ipynb new file mode 100644 index 0000000..45cea07 --- /dev/null +++ b/Examples/numpy/reshaping.ipynb @@ -0,0 +1,469 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from start import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Reshaping" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = np.arange(12)\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(12,)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0 1 2 3]\n", + " [ 4 5 6 7]\n", + " [ 8 9 10 11]]\n" + ] + } + ], + "source": [ + "b = np.reshape(a, (3,4) )\n", + "print(b)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b is a" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0 1]\n", + " [ 2 3]\n", + " [ 4 5]\n", + " [ 6 7]\n", + " [ 8 9]\n", + " [10 11]]\n" + ] + } + ], + "source": [ + "# unknown dimension\n", + "# -1 will be replaced by whatever is needed to make it fit.\n", + "a.shape = ( -1, 2)\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "1\n", + "2\n", + "3\n", + "4\n", + "5\n", + "6\n", + "7\n", + "8\n", + "9\n", + "10\n", + "11\n", + "\n" + ] + } + ], + "source": [ + "# flatten\n", + "for i in a.flat: # iterator\n", + " print(i) \n", + "print(a.flat)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0 1 2 3 4 5 6 7 8 9 10 11]\n" + ] + } + ], + "source": [ + "# ravel creates a new array with a view onto the same data \n", + "# oddly enough, means that same thing as unravel....\n", + "b = np.ravel(a)\n", + "b is a\n", + "print(b)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(6, 2)\n", + "[[ 0 2 4 6 8 10]\n", + " [ 1 3 5 7 9 11]]\n", + "(2, 6)\n" + ] + } + ], + "source": [ + "print(a.shape)\n", + "print(a.T) # Transpose -- swap dimensions\n", + "print(a.T.shape)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 2, 4, 6, 8, 10, 1, 3, 5, 7, 9, 11])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a.T.copy().ravel()" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 1],\n", + " [ 2, 3],\n", + " [ 4, 5],\n", + " [ 6, 7],\n", + " [ 8, 9],\n", + " [10, 11]])" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Checking dimensions:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 1],\n", + " [ 2, 3],\n", + " [ 4, 5],\n", + " [ 6, 7],\n", + " [ 8, 9],\n", + " [10, 11]])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = np.atleast_2d(a)\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(6, 2)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(1, 3)" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.atleast_2d(np.ones((3,))).shape" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(2, 1, 1, 6, 1)" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# reducing the number of dimensions:\n", + "a.shape = (2,1,1,6,1)\n", + "a.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(2, 6)" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b = np.squeeze(a)\n", + "b.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0 1 2 3 4 5]\n", + " [ 6 7 8 9 10 11]]\n", + "[[ 6 7 8 9 10 11]\n", + " [ 0 1 2 3 4 5]]\n" + ] + } + ], + "source": [ + "# re-arranging:\n", + "print(b)\n", + "print(np.flipud(b)) # flip up-down" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 5 4 3 2 1 0]\n", + " [11 10 9 8 7 6]]\n" + ] + } + ], + "source": [ + "print(np.fliplr(b)) # flip left-right" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.0" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Examples/numpy/slice.ipynb b/Examples/numpy/slice.ipynb new file mode 100644 index 0000000..53df7c8 --- /dev/null +++ b/Examples/numpy/slice.ipynb @@ -0,0 +1,828 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "numpy slicing demo\n", + "--------------------" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from start import print_info" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Slicing is much like regular python sequences\n", + "\n", + "Very much the same in 1-d" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = np.arange(10)\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3\n", + "[3 4 5]\n" + ] + } + ], + "source": [ + "#indexing\n", + "print(a[3])\n", + "\n", + "# slicing\n", + "print(a[3:6])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Look familar?\n", + "\n", + "Now for 2-d" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0 1 2 3 4]\n", + " [ 5 6 7 8 9]\n", + " [10 11 12 13 14]\n", + " [15 16 17 18 19]]\n" + ] + } + ], + "source": [ + "# create a 2d array:\n", + "a = np.arange(20).reshape((4,5)) # note the nifty reshape!\n", + "print(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "7" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#index in 2-d:\n", + "a[1, 2] # row 1, column 2 " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 7, 8],\n", + " [12, 13]])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# slices get you a rectangular block\n", + "\n", + "a[1:3, 2:4]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 2, 7, 12, 17])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a[:,2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Indexing reduces rank..\n", + "\n", + "(rank is numpy-spek for the number of dimensions)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(4, 5)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[10 11 12 13 14]\n", + "(5,)\n" + ] + } + ], + "source": [ + "r = a[2] # pulls out a row\n", + "print(r)\n", + "print(r.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 2 7 12 17]\n", + "(4,)\n" + ] + } + ], + "source": [ + "# now 1-d\n", + "# pulling our a column\n", + "c = a[:,2] # all rows, column 2\n", + "print(c)\n", + "print(c.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that that is a 1-d array, not a \"column\" nor a \"row\"\n", + "\n", + "If you to preserve the rank, you can use a size-1 slice:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 2]\n", + " [ 7]\n", + " [12]\n", + " [17]]\n", + "(4, 1)\n" + ] + } + ], + "source": [ + "c = a[:, 2:3] # all rows, columns 2 to 3 (i.e only column 2)\n", + "print (c)\n", + "print (c.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So still 2-d, but a single column: a \"column vector\" in linear algebra." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Slice is a view\n", + "\n", + "It's a new array, but a view on the data held by that array\n", + "\n", + "Kinda-sorta like a shallow copy with lists, etc.\n", + "\n", + "Here are some tests to see what's going on" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "arr :\n", + "[ 0 1 2 3 4 5 6 7 8 9 10 11]\n", + "arr.shape: (12,)\n", + "arr.dtype: int32\n", + "arr.itemsize 4\n", + "arr.ndim: 1\n", + "arr.strides (4,)\n", + "arr.flags:\n", + " C_CONTIGUOUS : True\n", + " F_CONTIGUOUS : True\n", + " OWNDATA : True\n", + " WRITEABLE : True\n", + " ALIGNED : True\n", + " UPDATEIFCOPY : False\n" + ] + } + ], + "source": [ + "# create an array:\n", + "a = np.arange(12, dtype=np.int32)\n", + "print_info(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[3 4 5]\n", + "b :\n", + "[3 4 5]\n", + "b.shape: (3,)\n", + "b.dtype: int32\n", + "b.itemsize 4\n", + "b.ndim: 1\n", + "b.strides (4,)\n", + "b.flags:\n", + " C_CONTIGUOUS : True\n", + " F_CONTIGUOUS : True\n", + " OWNDATA : False\n", + " WRITEABLE : True\n", + " ALIGNED : True\n", + " UPDATEIFCOPY : False\n" + ] + } + ], + "source": [ + "# A slice is a view: (look at the OWNDATA flag)\n", + "b = a[3:6]\n", + "print(b)\n", + "print_info(b, 'b')" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0 1 2 3 4 5 6 7 8 9 10 11]\n", + "[3 4 5]\n" + ] + } + ], + "source": [ + "print(a)\n", + "print(b)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 3 35 5]\n" + ] + } + ], + "source": [ + "b[1] = 35\n", + "print(b)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 1, 2, 3, 35, 5, 6, 7, 8, 9, 10, 11], dtype=int32)" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[44 35 5]\n", + "[ 0 1 2 44 35 5 6 7 8 9 10 11]\n" + ] + } + ], + "source": [ + "# note \"OWNDATA\" flag -- b does not \"own\" its data.\n", + "\n", + "b[0] = 44\n", + "\n", + "print(b)\n", + "print(a)\n", + "\n", + "# a has changed!" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a :\n", + "[[ 0 1 2 3]\n", + " [ 4 5 6 7]\n", + " [ 8 9 10 11]]\n", + "a.shape: (3, 4)\n", + "a.dtype: int64\n", + "a.itemsize 8\n", + "a.ndim: 2\n", + "a.strides (32, 8)\n", + "a.flags:\n", + " C_CONTIGUOUS : True\n", + " F_CONTIGUOUS : False\n", + " OWNDATA : False\n", + " WRITEABLE : True\n", + " ALIGNED : True\n", + " UPDATEIFCOPY : False\n" + ] + } + ], + "source": [ + "# what about slicing higher-dim arrays:\n", + "a = np.arange(12).reshape(3,4)\n", + "print_info(a,'a')" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "b :\n", + "[1 5 9]\n", + "b.shape: (3,)\n", + "b.dtype: int64\n", + "b.itemsize 8\n", + "b.ndim: 1\n", + "b.strides (32,)\n", + "b.flags:\n", + " C_CONTIGUOUS : False\n", + " F_CONTIGUOUS : False\n", + " OWNDATA : False\n", + " WRITEABLE : True\n", + " ALIGNED : True\n", + " UPDATEIFCOPY : False\n" + ] + } + ], + "source": [ + "# \"column\" slice:\n", + "b = a[:,1]\n", + "print_info(b,'b')" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 4, 5, 6, 7],\n", + " [ 8, 9, 10, 11]])" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a[1:3,:]" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(3, 4)" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a.shape\n" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "b :\n", + "[4 5 6 7]\n", + "b.shape: (4,)\n", + "b.dtype: int64\n", + "b.itemsize 8\n", + "b.ndim: 1\n", + "b.strides (8,)\n", + "b.flags:\n", + " C_CONTIGUOUS : True\n", + " F_CONTIGUOUS : True\n", + " OWNDATA : False\n", + " WRITEABLE : True\n", + " ALIGNED : True\n", + " UPDATEIFCOPY : False\n" + ] + } + ], + "source": [ + "# \"row\" slice:\n", + "b = a[1,:]\n", + "print_info(b,'b')" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a = np.arange(12)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a.shape = (3,4)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 1, 2, 3],\n", + " [ 4, 5, 6, 7],\n", + " [ 8, 9, 10, 11]])" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a\n" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "b = a.reshape((4,3)).copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 1, 2],\n", + " [ 3, 4, 5],\n", + " [ 6, 7, 8],\n", + " [ 9, 10, 11]])" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 1, 2, 3],\n", + " [ 4, 5, 6, 7],\n", + " [ 8, 9, 10, 11]])" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a[2,2] = 0\n" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 1, 2, 3],\n", + " [ 4, 5, 6, 7],\n", + " [ 8, 9, 0, 11]])" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a\n" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 1, 2],\n", + " [ 3, 4, 5],\n", + " [ 6, 7, 8],\n", + " [ 9, 10, 11]])" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.0" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Examples/numpy/start.py b/Examples/numpy/start.py new file mode 100755 index 0000000..6299514 --- /dev/null +++ b/Examples/numpy/start.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python + +""" +script to start up demo for numpy talk + +just the one unility at this point.. +""" + + +def print_info(a, name="arr"): + print(name, ":") + print(a) + print("%s.shape:" % name, a.shape) + print("%s.dtype:" % name, a.dtype) + print("%s.itemsize" % name, a.itemsize) + print("%s.ndim:" % name, a.ndim) + print("%s.strides" % name, a.strides) + print("%s.flags:\n" % name, a.flags) diff --git a/Examples/numpy/stride_tricks.ipynb b/Examples/numpy/stride_tricks.ipynb new file mode 100644 index 0000000..f02e9da --- /dev/null +++ b/Examples/numpy/stride_tricks.ipynb @@ -0,0 +1,458 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Advanced Experiments with striding\n", + "==============================\n", + "\n", + "A few examples of manipulating strides in numpy arrays.\n", + "\n", + "Numpy arrays are wrappers around a single contiguous block of data. The \"strides\" are what describes how the single block of data is interpreted as an n dimensional array.\n", + "\n", + "For the most part, this is all an implimentation detail, happening under the hood at the C level. But numpy lets you manipulate the strides, and this allows some really powerful tricks." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# A basic 2d array:\n", + "a = np.zeros((3,4))\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#flatten it:\n", + "a.flatten()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# a basic 1d array\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# the strides:\n", + "a.strides" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This means that you need to skip 8 bytes to get from one element to the next (a double is 8 bytes per value)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a.itemsize" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# reshape the array\n", + "a.shape = (2,6)\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# now look at the strides\n", + "a.strides" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Same bytes in the data block, but the strides define how it is to be interpreted.\n", + "\n", + "You need to skip 48 bytes to get from the beginning of one row to the beginning of the next row (8 bytes per value, times 6 values per row)\n", + "\n", + "And still 8 bytes from one element to the next in one row." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# now a different data type\n", + "a = np.arange(12, dtype=np.uint8)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a.strides" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "only one byte per element" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# reshape again\n", + "a.shape = (3,4)\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a.strides" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So 4 bytes to get from one row to the next, and one from one element to the next." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# make it 3-d\n", + "a.shape = (2,3,2)\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a.strides" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "so six bytes to get form one \"slab\" to the next, 2 to get from one row to next in that slab, and still 1 to get from item to item." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The fancy stuff\n", + "================\n", + "\n", + "The ``stride_tricks`` module provides utilities to manipulate the strides of numpy arrays to do tricky things." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a = np.arange(10, dtype=np.uint8)\n", + "a.shape = (2,5)\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a2 = np.lib.stride_tricks.as_strided(a, (8, 3), (1,1) )\n", + "a2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "huh?\n", + "\n", + "``as_strided(a, (8, 3), (1,1) )``\n", + "\n", + "means: take the data in array, ``a``, and make a new array of shape (8,3) with strides (1,1).\n", + "\n", + "So the array is 8 x 3 == 24 elements in size, but the underlying data has only 10 elements in it. This works because the strides are set to (1,1), so to find the first element of the nth row, you go n*1 bytes from the beginning:\n", + "\n", + " * the zeroth row starts at byte 0\n", + " * the first row starts ar byte 1\n", + " * etc..\n", + "\n", + "Then to get the elements in each row you go one byte more:\n", + "\n", + " * the zeroth element in the zeroth row is at byte 0.\n", + " * the first element in the zeroth row is at byte 1\n", + " * the second element in the zeroth row is at byte 2\n", + " \n", + " * the zeroth element in the first row is at byte 1\n", + " * the first element in the first row is at byte 2\n", + " * the second element in the first row is at byte 3\n", + "\n", + "So that's how we get a bigger array than the number of elements -- elements are re-used in multiple parts of the array.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a2.strides" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a.shape, a.size" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a2.shape, a2.size" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "a and a2 share the same data, so if we change a, a2 changes also:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a[0,2] = 6\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note how the 6 is reused in the first three rows...\n", + "\n", + "Why do this weird stuff?\n", + "----------------------------\n", + "\n", + "It lets you do tricks where you want to re-use the same values without actually needing to copy them. For instance, a moving average." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a.mean(axis=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "``filter_example.py`` has a couple simple filters, using stride tricks to impliment them." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import filter_example" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# create some data\n", + "a = np.arange(25)\n", + "np.random.shuffle(a)\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "filter_example.moving_average(a, 3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "filter_example.scaled_by_max(a,4)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.0" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Examples/numpy/striding_examples.txt b/Examples/numpy/striding_examples.txt new file mode 100644 index 0000000..36b3d84 --- /dev/null +++ b/Examples/numpy/striding_examples.txt @@ -0,0 +1,134 @@ + +In [3]: a = np.zeros((3,4)) + +In [4]: a +Out[4]: +array([[ 0., 0., 0., 0.], + [ 0., 0., 0., 0.], + [ 0., 0., 0., 0.]]) + +In [5]: a.flatten() +Out[5]: array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) + +In [6]: a = np.arange(10) + +In [7]: a +Out[7]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) + +In [8]: a.strides +Out[8]: (4,) + +In [9]: a.shape((2,5)) +--------------------------------------------------------------------------- +TypeError Traceback (most recent call last) + in () +----> 1 a.shape((2,5)) + +TypeError: 'tuple' object is not callable + +In [10]: a.shape = (2,5) + +In [11]: a +Out[11]: +array([[0, 1, 2, 3, 4], + [5, 6, 7, 8, 9]]) + +In [12]: a.stride +--------------------------------------------------------------------------- +AttributeError Traceback (most recent call last) + in () +----> 1 a.stride + +AttributeError: 'numpy.ndarray' object has no attribute 'stride' + +In [13]: a.strides +Out[13]: (20, 4) + +In [14]: a = np.arange(10, dtype=np.uint8) + +In [15]: a +Out[15]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8) + +In [16]: a.strides +Out[16]: (1,) + +In [17]: a.shape = 2,5 + +In [18]: a +Out[18]: +array([[0, 1, 2, 3, 4], + [5, 6, 7, 8, 9]], dtype=uint8) + +In [19]: a.strides +Out[19]: (5, 1) + +In [20]: a.shape +Out[20]: (2, 5) + +In [21]: np.lib.stride_tricks.as_strided(a, (8, 3), (1,1) ) +Out[21]: +array([[0, 1, 2], + [1, 2, 3], + [2, 3, 4], + [3, 4, 5], + [4, 5, 6], + [5, 6, 7], + [6, 7, 8], + [7, 8, 9]], dtype=uint8) + +In [22]: a.sum(axis=0) +Out[22]: array([ 5, 7, 9, 11, 13], dtype=uint32) + +In [23]: a +Out[23]: +array([[0, 1, 2, 3, 4], + [5, 6, 7, 8, 9]], dtype=uint8) + +In [24]: b = np.lib.stride_tricks.as_strided(a, (8, 3), (1,1) ) + +In [25]: b +Out[25]: +array([[0, 1, 2], + [1, 2, 3], + [2, 3, 4], + [3, 4, 5], + [4, 5, 6], + [5, 6, 7], + [6, 7, 8], + [7, 8, 9]], dtype=uint8) + +In [26]: b.sum(axis=1) +Out[26]: array([ 3, 6, 9, 12, 15, 18, 21, 24], dtype=uint32) + +In [27]: a.shape = (-1) + +In [28]: a +Out[28]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8) + +In [29]: a[3] = 9 + +In [30]: a +Out[30]: array([0, 1, 2, 9, 4, 5, 6, 7, 8, 9], dtype=uint8) + +In [31]: b +Out[31]: +array([[0, 1, 2], + [1, 2, 9], + [2, 9, 4], + [9, 4, 5], + [4, 5, 6], + [5, 6, 7], + [6, 7, 8], + [7, 8, 9]], dtype=uint8) + +In [32]: b.shape +Out[32]: (8, 3) + +In [33]: b.size +Out[33]: 24 + +In [34]: a.size +Out[34]: 10 + +In [35]: b.itemsize +Out[35]: 1 \ No newline at end of file diff --git a/Examples/numpy/sudoku-chb.py b/Examples/numpy/sudoku-chb.py new file mode 100644 index 0000000..66d792f --- /dev/null +++ b/Examples/numpy/sudoku-chb.py @@ -0,0 +1,1033 @@ +#!/usr/bin/env python + +""" +Yet another Sudoku Puzzle program. + +This one does not help you solve puzzles. + +However, it does display them, and will highlight the appropriate row, column, +or box if there is an error in the puzzle at any time, as you add numbers, etc. + +What's unique about this one is the use of numpy arrays. Numpy arrays have two +properties that make them handy for this problem: + +1) n-d arrays (in this case 2-d) +2) slices as views on the data + +The whole puzzle is a 9x9 array + each box is a 3x3 sub-array + each row is a length 9 sub-array + each column is a length 9 sub-array + +These all share the same memory + + -Chris Barker: PythonCHB@gmail.com + +""" + +licence="""This code is released under the creative commons Public Domain dedication: + +I have dedicated this work to the public domain by waiving all of my rights to +the work worldwide under copyright law, including all related and neighboring +rights, to the extent allowed by law. + +You can copy, modify, distribute and perform the work, even for commercial +purposes, all without asking permission + +http://creativecommons.org/publicdomain/zero/1.0/ + +(that being said,it would be nice to give me credit where credit is due...) +""" + +import random +import wx +import numpy as np + +class PuzzleGrid(object): + def __init__(self): + self.Grid = np.zeros((9,9), np.uint8) + Boxes = [] + for i in range(3): + for j in range(3): + Boxes.append(self.Grid[3*i:3*i+3, 3*j:3*j+3]) + + self.Boxes = Boxes + + def SetValue(self, (r,c), v): + self.Grid[r,c] = v + + def GetValue(self, (r, c)): + return self.Grid[r,c] + + def Solved(self): + """ + returns True if the puzzle is solved, False otherwise + """ + raise NotImplementedError + + def CheckRows(self): + """ + returns a values for each row: + 0 -- repeated values + 1 -- valid, but not solved + 2 -- solved + + """ + results = np.zeros((9,), np.uint8 ) + for i in range(9): + results[i] = self.CheckValid(self.Grid[i,:]) + return results + + def CheckColumns(self): + """ + returns a values for each row: + 0 -- repeated values + 1 -- valid, but not solved + 2 -- solved + + """ + results = np.zeros((9,), np.uint8 ) + for i in range(9): + results[i] = self.CheckValid(self.Grid[:,i]) + return results + + def CheckBoxes(self): + """ + returns a values for each row: + 0 -- repeated values + 1 -- valid, but not solved + 2 -- solved + + """ + results = np.zeros((9,), np.uint8 ) + for i in range(9): + results[i] = self.CheckValid(self.Boxes[i]) + return results + + + def CheckValid(self, A): + """ + CheckValid(A) -- checks if A has any digits repeated. + + returns 0 is there are any digits repeated (invalid) + returns 1 if none are repeated, but there are zeros (valid, but not solved) + returns 2 if all digits, 1-9 are there (solved) + + A should be a numpy array that has 9 elements + """ + + there = [] + for i in A.flat: + if i>0 and i in there: + return 0 + else: + there.append(i) + if 0 in there: + return 1 + return 2 + + def LoadFromString(self, str): + """ + loads a puzzle from a single "flat" ascii string of all the entries + """ + self.Grid.flat[:] = np.fromstring(str, dtype=np.uint8)-48 + + def __str__(self): + msg = [] + for i in range(9): + if not i%3: + msg.append("|-----------------------|\n") + msg.append("| %i %i %i | %i %i %i | %i %i %i |\n"%tuple(self.Grid[i])) + msg.append("|-----------------------|\n") + return "".join(msg) + + +class Grid(object): + def __init__(self, w, h): + size = min(w,h) + self.d = d = (size - 20) / 9 + self.x0 = (w - (self.d * 9)) / 2 + self.y0 = (h - (self.d * 9)) / 2 + self.font_size = max( int(11 * d/16.0), 10) + ##figure out the text offset + dc = wx.ScreenDC() + dc.SetFont(wx.FontFromPixelSize((self.font_size, self.font_size), + wx.FONTFAMILY_SWISS, + wx.FONTSTYLE_NORMAL, + wx.FONTWEIGHT_BOLD, + ) + ) + w,h = dc.GetTextExtent("5") + self.text_off_x = ( d - w )/2+2 # I don't know why I need to add the 2! + self.text_off_y = ( d - h )/2+2 + +class GridWindow(wx.Window): + def __init__(self, parent, *args, **kwargs): + wx.Window.__init__(self, parent, *args, **kwargs) + self.SetBackgroundColour("White") + + self.Puzzle = PuzzleGrid() + + self.InvalidRows = [] + self.InvalidColumns = [] + self.InvalidBoxes = [] + + self.Selected = (0,0) + + self.Bind(wx.EVT_PAINT, self.OnPaint) + self.Bind(wx.EVT_SIZE, self.OnSize) + self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) + self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) + + self.OnSize() + def NewPuzzle(self, str): + """ + sets up a new puzzle from the given ascii string + """ + self.Puzzle.LoadFromString(str) + self.DrawNow() + + def InitBuffer(self): + w, h = self.GetClientSize() + self.buffer = wx.EmptyBitmap(w, h) + self.DrawNow() + + def OnSize(self, event=None): + size = self.GetClientSize() + if size[0] > 0 and size[1] > 1: + self.Grid = Grid(*size) + self.InitBuffer() + + def DrawNow(self): + dc = wx.BufferedDC(wx.ClientDC(self), self.buffer) + self.Draw(dc) + + def Draw(self, dc): + # Make grid info local: + d = self.Grid.d + x0 = self.Grid.x0 + y0 = self.Grid.y0 + font_size = self.Grid.font_size + text_off_x = self.Grid.text_off_x + text_off_y = self.Grid.text_off_y + + # draw the background: + dc.SetBackground(wx.Brush(self.GetBackgroundColour())) + dc.Clear() + dc.SetBrush(wx.Brush(wx.Colour(128,128,255))) + dc.SetPen(wx.TRANSPARENT_PEN) + dc.DrawRectangle(x0, y0, d*9, d*9 ) + + #draw The invalid rows + for i in self.InvalidRows: + dc.SetBrush(wx.Brush("Purple", wx.SOLID)) + dc.SetPen(wx.TRANSPARENT_PEN) + dc.DrawRectangle(x0, y0 + i*d, 9*d, d ) + + #draw The invalid columns + for i in self.InvalidColumns: + dc.SetBrush(wx.Brush("Purple", wx.SOLID)) + dc.SetPen(wx.TRANSPARENT_PEN) + dc.DrawRectangle(x0 + i*d, y0, d, 9*d ) + + #draw The invalid boxes + for i in self.InvalidBoxes: + dc.SetBrush(wx.Brush("Purple", wx.SOLID)) + dc.SetPen(wx.TRANSPARENT_PEN) + r = i//3 + c = i%3 + dc.DrawRectangle(x0 + c*3*d, y0 + r*3*d, 3*d, 3*d ) + + # draw the selected cell: + dc.SetBrush(wx.Brush("Red", wx.SOLID)) + dc.DrawRectangle(x0 + d*self.Selected[1], y0 + d*self.Selected[0], d, d) + + # draw the white lines: + dc.SetPen(wx.Pen("White", 2, wx.SOLID) ) + for i in range(10): + dc.DrawLine(x0, y0 + d*i, x0 + d*9, y0 + d*i) + dc.DrawLine(x0 + d*i, y0, x0 + d*i, y0 + d*9) + + # draw the numbers: + dc.SetFont(wx.FontFromPixelSize((font_size,font_size), + wx.FONTFAMILY_SWISS, + wx.FONTSTYLE_NORMAL, + wx.FONTWEIGHT_BOLD)) + for i in range(9): + for j in range(9): + val = self.Puzzle.Grid[i,j] + if val > 0: + dc.DrawText('%i'%val, x0 + d*j + text_off_x, y0 + d*i + text_off_y) + + # Draw the Big Grid + dc.SetPen(wx.Pen("Black", 3, wx.SOLID)) + dc.SetBrush(wx.TRANSPARENT_BRUSH) + + d*=3 + for i in range(4): + dc.DrawLine(x0, y0 + d*i, x0 + d*3, y0 + d*i) + dc.DrawLine(x0 + d*i, y0, x0 + d*i, y0 + d*3) + + + def OnPaint(self, event): + dc = wx.BufferedPaintDC(self, self.buffer) + + def CheckValid(self): + self.InvalidRows = np.nonzero(self.Puzzle.CheckRows() == 0)[0] + self.InvalidColumns = np.nonzero(self.Puzzle.CheckColumns() == 0)[0] + self.InvalidBoxes = np.nonzero(self.Puzzle.CheckBoxes() == 0)[0] + + def OnLeftDown(self, e): + """called when the left mouse button is pressed""" + x, y = e.GetPositionTuple() + i = (y - self.Grid.y0) / self.Grid.d + j = (x - self.Grid.x0) / self.Grid.d + if i >= 0 and i < 9 and j >= 0 and j < 9: + self.Selected = (i,j) + self.DrawNow() + + def OnKeyDown(self, e): + keycode = e.GetKeyCode() + i, j = self.Selected + if (keycode == wx.WXK_TAB or + keycode == wx.WXK_RIGHT or + keycode == wx.WXK_RETURN or + keycode == wx.WXK_SPACE): + j += 1 + elif keycode == wx.WXK_UP: + i -= 1 + elif keycode == wx.WXK_DOWN: + i += 1 + elif keycode == wx.WXK_LEFT: + j -= 1 + elif (keycode == wx.WXK_DELETE or + keycode == wx.WXK_BACK): + self.Puzzle.Grid[self.Selected] = 0 + self.CheckValid() + elif keycode >= ord("0") and keycode <= ord("9"): + self.Puzzle.Grid[self.Selected] = (keycode - ord("0")) + self.CheckValid() + j += 1 + if j > 8: + j = 0 + i += 1 + if j < 0: + j = 8 + i -= 1 + if i > 8: + i = 0 + if i < 0: + i = 8 + + self.Selected = (i,j) + self.DrawNow() + + def SetValue(self, value): + self.Puzzle.Grid[self.Selected] = value + +def test_PuzzleGrid(): + P = PuzzleGrid() + print P + print "These should all be true:" + # all valid, butnot solved + print P.CheckValid(np.array( (1,2,0,4,0,6,0,8,9), dtype=np.uint8 ) ) == 1 + print P.CheckValid(np.array( (0,0,0,0,0,0,0,0,0), dtype=np.uint8 ) ) == 1 + print P.CheckValid(np.array( (1,2,0,4,5,6,7,8,9), dtype=np.uint8) ) == 1 + + # solved + print P.CheckValid(np.array( (1,2,3,4,5,6,7,8,9), dtype=np.uint8) ) == 2 + print P.CheckValid(np.array( (1,2,9,4,5,6,7,8,3), dtype=np.uint8) ) == 2 + print P.CheckValid(np.array( (9,8,7,6,5,4,3,2,1), dtype=np.uint8) ) == 2 + + # all not valid + print P.CheckValid(np.array( (1,1,0,4,0,6,0,8,9), dtype=np.uint8 ) ) == 0 + print P.CheckValid(np.array( (1,0,0,4,0,6,0,9,9), dtype=np.uint8 ) ) == 0 + print P.CheckValid(np.array( (1,1,1,4,4,6,0,1,1), dtype=np.uint8 ) ) == 0 + + +class MainFrame(wx.Frame): + def __init__(self, parent): + wx.Frame.__init__(self, parent, title="Sudoku Machine", size=(500, 500)) + self.grid = GridWindow(self) + wx.CallAfter(self.OnNewGame)# so that the grid is fully initialized + ## Build the menu + MenuBar = wx.MenuBar() + + FileMenu = wx.Menu() + item = FileMenu.Append(wx.ID_ANY, text = "&New Game") + self.Bind(wx.EVT_MENU, self.OnNewGame, item) + item = FileMenu.Append(wx.ID_EXIT, text = "&Exit") + self.Bind(wx.EVT_MENU, self.OnQuit, item) + MenuBar.Append(FileMenu, "&File") + + HelpMenu = wx.Menu() + item = HelpMenu.Append(wx.ID_HELP, "&Help", + "Help for this simple test") + self.Bind(wx.EVT_MENU, self.OnHelp, item) + item = HelpMenu.Append(wx.ID_ABOUT, "&About", + "More information About this program") + self.Bind(wx.EVT_MENU, self.OnAbout, item) + MenuBar.Append(HelpMenu, "&Help") + + self.SetMenuBar(MenuBar) + + def OnNewGame(self,evt=None): + """ + Sets up a new randomly chosen game + """ + i = random.randint(0, len(Puzzles)-1) + self.grid.NewPuzzle(Puzzles[i]) + + def OnQuit(self,evt=None): + self.Destroy() + + def OnHelp(self, event): + dlg = wx.MessageDialog(self, "This would be help\n" + "If there was any\n", + "Test Help", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + + def OnAbout(self, event): + dlg = AboutDialog(None, + #icon1=wx.Bitmap("Images/GNOME64.png"), + #icon2=wx.Bitmap("Images/NOAA.png"), + short_name='Suduko', + long_name='A Sudoko Puzzle demo program', + version = "1.0", + description="This is a simple Sudoku puzzle program, written in Python, designed to demonstrate some features of the wxPython and numpy packages", + urls = ["http://www.seapig.org/SudukoGameBoard", + "mailto:PythonCHB@gmail.com"], + licence=licence, + developers = ["Chris Barker"]) + dlg.ShowModal() + dlg.Destroy() + + +## these are a bunch of puzzles I found here: +## http://mapleta.maths.uwa.edu.au/~gordon/sudokumin.php +## +## there are a LOT there, this is just a few of them +## +## they are licenced under a Creative Commons Attribution 2.5 License. +## http://creativecommons.org/licenses/by/2.5/ + +Puzzles = """000000010400000000020000000000050407008000300001090000300400200050100000000806000 +000000010400000000020000000000050604008000300001090000300400200050100000000807000 +000000012000035000000600070700000300000400800100000000000120000080000040050000600 +000000012003600000000007000410020000000500300700000600280000040000300500000000000 +000000012008030000000000040120500000000004700060000000507000300000620000000100000 +000000012040050000000009000070600400000100000000000050000087500601000300200000000 +000000012050400000000000030700600400001000000000080000920000800000510700000003000 +000000012300000060000040000900000500000001070020000000000350400001400800060000000 +000000012400090000000000050070200000600000400000108000018000000000030700502000000 +000000012500008000000700000600120000700000450000030000030000800000500700020000000 +000000012700060000000000050080200000600000400000109000019000000000030800502000000 +000000012800040000000000060090200000700000400000501000015000000000030900602000000 +000000012980000000000600000100700080402000000000300600070000300050040000000010000 +000000013000030080070000000000206000030000900000010000600500204000400700100000000 +000000013000200000000000080000760200008000400010000000200000750600340000000008000 +000000013000500070000802000000400900107000000000000200890000050040000600000010000 +000000013000700060000508000000400800106000000000000200740000050020000400000010000 +000000013000700060000509000000400900106000000000000200740000050080000400000010000 +000000013000800070000502000000400900107000000000000200890000050040000600000010000 +000000013020500000000000000103000070000802000004000000000340500670000200000010000 +000000013040000080200060000609000400000800000000300000030100500000040706000000000 +000000013040000080200060000906000400000800000000300000030100500000040706000000000 +000000013040000090200070000607000400000300000000900000030100500000060807000000000 +000000013040000090200070000706000400000300000000900000030100500000060807000000000 +000000013200800000300000070000200600001000000040000000000401500680000200000070000 +000000013400200000600000000000460500010000007200500000000031000000000420080000000 +000000013400800000200000070000400900001000000060000000000501600380000200000070000 +000000014000000203800050000000207000031000000000000650600000700000140000000300000 +000000014000020000500000000010804000700000500000100000000050730004200000030000600 +000000014000708000000000000104005000000200830600000000500040000030000700000090001 +000000014008005000020000000000020705100000000000000800070000530600140000000200000 +000000014008005000020000000000020805100000000000000700070000530600140000000200000 +000000014008009000020000000000020805100000000000000700070000930600140000000200000 +000000014700000000000500000090014000050000720000600000000900805600000900100000000 +000000014790000000000200000000003605001000000000000200060000730200140000000800000 +000000014970000000000200000000003605001000000000000200060000730200140000000800000 +000000015000400070300060000800000200000104000400500000000023600010000000070000000 +000000015000400070400000000609000300000100800000700000500030200000060040010000000 +000000015000800070300000000408000300000100400000700000500040200000090060010000000 +000000015000800070400000000609000300000100800000700000500030200000060040010000000 +000000015000830000000000200023000800000001000080000000105040000000600720900000000 +000000015000830000000000200026000800000001000080000000105040000000300720900000000 +000000015000900070400000000608000300000100800000700000500030200000060040010000000 +000000015000900070400000000609000300000100800000700000500030200000060040010000000 +000000015000900080300000000704000300000100400000800000500040200000070060010000000 +000000015000900080400000000704000300000100900000800000500030200000070060010000000 +000000015020060000000000408003000900000100000000008000150400000000070300800000060 +000000015040080000000000300000040260500107000900000000300500000080000400000900000 +000000015300600000000000080600050200000001000000000040010200700000760300008000000 +000000015790000000000200000000008706001000000000000900070000830400150000000300000 +000000016000500040300070000900000200000408000700600000000023700040000000010000000 +000000016000708000000000050501200000300000800600000000040000200000053000080010000 +000000016000900080500000000405000300000100500000800000600040200000030070010000000 +000000016040005000000020000000600430200010000300000500000003700100800000002000000 +000000016070000040050200000400060300000005200000041000000900780100000000000000000 +000000016070000040050200000400060300000008200000041000000500790100000000000000000 +000000016200000000000300000601700002000900500400000000030000800000060040050040000 +000000016200080000009000000000420500010000000000000200000106030500000780000900000 +000000017090600000000000030400500200001000000000080000720000600000410500000003000 +000000017090600000000000050200000803000050400000001000600200300041070000000000000 +000000017090800000000000040007060300050000200000001000600300800401000000000050000 +000000017300080000000000000007100006000040300085000000200000840010700000000500000 +000000017600020000000000000153000000000080200007000000400301500020000600000700000 +000000018020500000000000000040000700600000500000041000000700260108300000400000000 +000000018050600000000000030400500200001000000000090000820000600000410700000003000 +000000018200400000000000070000008003000500200010000000502000600000040300000017000 +000000018320000000400000000008051000040000300000070000706000090000300700000200000 +000000018700040000000000030420000700000001000000300000500070200601800000040000000 +000000019000250000000000000091000030000400700030000000400000208200060500000001000 +000000019030050000000000020109000000000400700000870000000102000060000800500000300 +000000019030050000000000020109000000000400800000870000000102000060000700500000300 +000000019070000030200800000050600200001000000000200000000019500600000400000030000 +000000019300600000000000000600080500040000300000010000480000070000200400010900000 +000000019500600000000000000600080500040000300000010000380000040000200700010900000 +000000019500600000000000000600080500040000300000010000480000070000200400010900000 +000000019500800000000000000300070500040000300000010000470000060000200400010900000 +000000019800500000000000000300070500040000300000010000470000060000200400010900000 +000000021000030070040080000100207000050000400000000003200100000000040500000600000 +000000021000083000000040000500200070080000400030900000000060800100500000200000000 +000000021000083000000040000500200070080000400030900000000060800100700000200000000 +000000021000306000000800000400010600000700300200000000000090040530000000086000000 +000000021000407000000008000031060000000000750020000000500210000400000800000300000 +000000021000500030400600000000021000800000007500000600000400800010070000030000000 +000000021004090000070000030100203000500800000006000000200000600000060400030000000 +000000021005080000600000000000670300120000500400000000000201040003000000080000000 +000000021006800000000000070070021000020000400000005000500430600100000000000600000 +000000021030400000700000000100082000000000540000000000000560300290000000004700000 +000000021030600000000080000201000050500400000000370000700002000080000300000000600 +000000021040500000700000000100082000000000650000000000000610400320000000005700000 +000000021040500000800000000700092000000000650000000000000610400320000000005800000 +000000021040600000000000000201000050500800000000400300700020000060000800000300400 +000000021050030000000800000102000070700300000000540000600002000030000400000000500 +000000021060300000000708000100050040070000300000020000200040000000600800500000000 +000000021060500000000090000400002000070000300000600000102400000000030640800000000 +000000021060700000000000000402000000000600300500000700000340050080000600100002000 +000000021070030000000040000100205040030000800000100000200600000000070300600000000 +000000021070030000000090000100205040030000800000100000200600000000070300600000000 +000000021070300000000000000402000000000700300600000800000540060090000500100002000 +000000021070300000000408000100060050030000400000020000200050000000700800600000000 +000000021080300000000409000100060050030000400000020000200070000000800900500000000 +000000021090300000000000000402000000000700300600000700000540060080000500100002000 +000000021090300000000060000201000050500400000000970000600002000080000300000000900 +000000021090700000000000000000514000630000000000002000000600930001040000200000800 +000000021300050000000000000500630000010000080000000500704000600600200000000108000 +000000021300050000000000000500630000010000080000000900704000600600200000000108000 +000000021300050000000000000500830000010000090000000500704000600600200000000109000 +000000021300090000000000000500630000010000080000000500704000600600200000000108000 +000000021300090000000000000500630000010000080000000900704000600600200000000108000 +000000021300700000000000000060500300020000070000000800100040700500012000000006000 +000000021300800000000000000060500700020000040000000300100040800500012000000006000 +000000021300900000000000070200000400000060300000001000071040000000200508090000000 +000000021400300000000000000000010600080000300020007000600000470500120000000800000 +000000021400600000000000000000012800609000000000030000510000030000709600020000000 +000000021400600000000000000000012900706000000000030000510000030000807600020000000 +000000021430000000600000000201500000000006370000000000068000400000230000000070000 +000000021500040000000000070000300600000020500010000000600000203003107000000008000 +000000021500040000000600000031000080000070000020000000600300400405000700000200000 +000000021500400000000000000300000570600080000000010000010605000082000000000007400 +000000021500400000000800000021500000070000600000000030400000800300070000006020000 +000000021503000000600000000000104060700000500000200000000480300010070000200000000 +000000021600000030070900000000043700100000000000020000000600008002100000040000500 +000000021700060000490000000000070900003800000020000000960000800000302000000100000 +000000021700600000300500000000082000040010000500000000020040000000300700000000650 +000000021750000000000000000070000890000201000000400000030090500100030000400000600 +000000021800040000000000060090200000700000400000501000015000000000030900602000000 +000000021800400000009000000600570040300000800000020000070900400021000000000000000 +000000021800500000000060000030102000500000840000000000000780500620000000004000000 +000000021800600000000050000030102000500000840000000000000780500620000000004000000 +000000021800700000400005000023000060000800500010000000600000700000081000000030000 +000000023000500080000100000020000900000400100580000000600009500000020070001000000 +000000023000800010800400000032500000000000100070000000600070004100000500000003000 +000000023010040000500000000100000400000200080000803000000050160040000700003000000 +000000023010040000500000000100000400000200080000903000000050160040000700003000000 +000000023010040000500000000100000400000600090000203000000050170040000800003000000 +000000023010800000000000060300020000050000700000400000000507100002010000600000400 +000000023080000070400020000030002000000000401000060500100000600000807000000300000 +000000023080000070500090000030002000000000401000060500100000600000807000000300000 +000000023300010000000500060400000700000106000000200000092000100000040800060000000 +000000023400800000100000900050032000000000400000060000000401800030000050000900000 +000000023400800000100000900050032000000000400000070000000401800030000060000900000 +000000023480000000010000000503000060000010800000000000170000400000602000000300005 +000000023600010000000400000000080700502000000000000100080203000010000640000500000 +000000023600700000000000080000038500200000800000010000000200640003400000010000000 +000000023800000050000100000010600400507030000000000000300052000064000100000000000 +000000024000010000000000080107000900300800100000200000020400060500070300000000000 +000000024000010000000000080307000100100800500000200000020400060500070300000000000 +000000024000080010600005000000300700040700000010000000000040501300600000200000000 +000000024007000000006000000500090100000300600020000000940000050000607300000800000 +000000024010008000000070000600201500400000003000000000070000810500430000000000000 +000000024010300000060000000050000300000082000700000000400100500200000063008000000 +000000024010300000070000000060000300000029000800000000400100600200000075009000000 +000000024010300000070000000060000300000082000500000000400100600200000075008000000 +000000024100000000000600000000180700020000009030500000500070600004002000000000030 +000000024100000000000700000000560800020000009030100000600080700004002000000000030 +000000024100800000000000003000400500700000100000030000000510600002000050030007000 +000000024600800000100000000000040010070000300040600000520004000000000806000070000 +000000024700000060000900000004001000020050000000030700000400800300000500600200000 +000000024900700000000000000800000730000041000000000000002500800046000300010020000 +000000025000000070800000000600000103000070400000020000053100000020005000000600300 +000000025000800010400000000050000700000300600010000000600020400800007000000015000 +000000025000800010900000000050000700000300900010000000600020400800007000000015000 +000000025030006000000090000000740000600500000020000700000208300504000000000000100 +000000025050000040000100000207000000300000070000800600089000100000002700000040000 +000000025080000600000001000300400700000050008000000000000280400107000030000500000 +000000025190000000000600000006030700000000100002000000400205000060000340000800000 +000000026000080040000500000100600700300000080000020000000703100042000000000000500 +000000026000080040000500000100600700300000080000020000000903100042000000000000500 +000000026040700000000000001000900800400000500001000000000012050070000300300060000 +000000026080003000000070000100400800605200000007000300030000900000050000000600000 +000000026501000000000000000070206000300000150000800000020700000000000540000010300 +000000026800500000000000704300070100000040000000000030000300810040900000060000000 +000000026800700000000000005700030100000006500000020000026400000000000810030000000 +000000027000051000000000600504000100000200000300000000020740000060000039000000500 +000000027010900000500000060000300400600000050000000008049000100000026000000000300 +000000027010900000500000060000300400600000050000000008094000100000026000000000300 +000000027040800000000000001000400900600000500001000000000012050080000300300070000 +000000027300000040100000000000605100000100500040000000070020030008000600000040000 +000000027300000040100000000000605100000100500040000000070040030008000600000020000 +000000028000050000000040000708200000040000300000600000600801000030000450000000900 +000000028000070040000300000074000050000600300000001000630000100200040000000000600 +000000028000500060010000000506020000400000300000000100000100700000403000680000000 +000000028000800030100000000000070400080600000035000000700060100000000705000300000 +000000028030000050600000000100050604000062000000000700028000000000700300000100000 +000000028070009000000000003000302000040000500000000000800050100000040760300600000 +000000028300000070000100000000080030049000000050000600000604100000500400200000000 +000000029000306000000000008060000500053000000000020000000600150200070400900000000 +000000029000600070010000000507020000400000300000000100000100800000403000790000000 +000000029000730000000050080000600700082000000000000100400100600000002050100000000 +000000029000730000000400060203000400000100300600000000080050100000002000010000000 +000000029000730000000400060208000300000100500600000000070050100000002000010000000 +000000029000830000000400070203000600000100300700000000040050100000002000010000000 +000000029000830000000400070203000600000100300700000000080050100000002000010000000 +000000029300600000000080070800000600000021000000000100029000000000800030000400500 +000000029300700000000800040600000700000042000000000100049000000000010050000300600 +000000031000079000000000000013200000004000700000100000500040670280000000000300000 +000000031000407000000600000600300000407000000500080000030010000020000700000000450 +000000031000602000000700000007000600010080000400030000000500270140000000800000000 +000000031004020000080000000100300000000008200600000000020000740300510000000600000 +000000031004020000080000000600300000000008200100000000020000740300510000000600000 +000000031004020000090000000700300000000008200100000000050000840300610000000700000 +000000031005020000080000000700300000000008400100000000040000250300610000000700000 +000000031007020000080000000100300000000008200600000000020000740300510000000600000 +000000031007020000080000000600300000000008200100000000020000740300510000000600000 +000000031007020000080000000600300000000008200100000000040000720300510000000600000 +000000031008020000070000000600300000000008200100000000020000740300510000000600000 +000000031008020000090000000600300000000009200100000000040000720300510000000600000 +000000031008020000090000000700300000000009400100000000050000240300610000000700000 +000000031020500000000000000301070000000400200700000500070200600800010000000000080 +000000031020700000008500000000016200400030000050000000300000050000200700000040000 +000000031028000000000000000000208400730000060000500000160070000000400200300000000 +000000031040060000000009000060005200000300070500000000308100000000020400000000700 +000000031050060000000007000070004600000300050600000000403100000000020500000000800 +000000031050070000000009000070006400000300050600000000403100000000020500000000800 +000000031050080000000000000600307000040000500000100020100000800000050400003200000 +000000031060040000000000000002801400500300010000007000000050600730000000100000000 +000000031060200000000708000300050040070000200000010000100040000000600800500000000 +000000031060400000000000000500037000090000200000001000700840000000600490100000000 +000000031060500000000020000000460500300007000800000000000700080100003000020000600 +000000031080000070000920000401000000000200800300000000090000250000080600000001000 +000000031080040000070000000106300070300000000000080000540000800000600200000100000 +000000031080400000600000000000200840700600000100000000500073000090000200000010000 +000000031080600000000070000000700290500400000300000000020050800000031000400000000 +000000031200040000000000000031700080000020500400000000000803000500000200000100600 +000000031200070000000009000000301040600400000708000000000060200030500000000000700 +000000031200080000000400000031005060000720800000000000000603000400000200700000000 +000000031200700000400000000038000060000400300010000000000514000700000200000080000 +000000031280000000000000000003610000000004270000000000420000800500070400000300000 +000000031280000000500100000000037800600000200000040000030000040100500000000600000 +000000031400020000000007000000301050700500000206000000000080200030600000000000400 +000000031400020000000009000000301050600500000208000000000070200030600000000000400 +000000031400020000000009000000301050700500000204000000000080200030600000000000400 +000000031400020000000009000000301050700500000206000000000080200030600000000000400 +000000031400020000010500000000300060200006000800000000000700800060000200039000000 +000000031400070000208000000700000200000300000000900000630000090000580400000020000 +000000031500070000000006000700000560001400000020000700600000800030100000000200000 +000000031600008000000050000000370020580000000060000000200000600007100000000400800 +000000031600020000000070000050108000200000600000300070000040200030500000700000000 +000000031600200000000090000000080290310000000400000000049000500000603000000700000 +000000031600800000000000000030000850020010000000400000804000600006030000700005000 +000000031700020000000006000040100050030080000000000200600400900200005000000300000 +000000031700200000000480000000700800030000000060000000000039060520000400800000000 +000000031700200000040000000502700060000800700030000000000093000200000500000010000 +000000031740000000000000009000003460200000500000090000000570800030800000001000000 +000000031800020000200000000037100060010080500000000000500400800060300000000000000 +000000031800060000000000000600000470000100600500200000023500000000070800010000000 +000000031800900000000000040400000800000060200000001000031050000000200407090000000 +000000032000100000050000000040000800000310000000602000300000760000080500802000000 +000000032000100000060000000803000000000600900000007500000580070040000100200030000 +000000032010000000000300000309700000000060100800000400200000080000540000000016000 +000000032010040000000000000000307020084000000600000000000080104700100500300000000 +000000032010040000000000000000703020084000000600000000000080104700100500300000000 +000000032040000000900000000302700050000100800600000000070000100080060000000030006 +000000032480000000010000000503000060000010800000000000170000400000602000000300005 +000000034000100000000000060070000200005003000040050000000740100300000800600200000 +000000034000100007800000090980000200600040000000700000000009800007030000010000000 +000000034060200000000000070000960800301000000700800000070003000900000200000010000 +000000034080100000000000060000039000000040800001000000360200000400000700000700500 +000000034100000000000000050020050700043000000000010000900600800000400100000302000 +000000034500000010000070000405310000000000200100000000000600700087000000020400000 +000000034500900000000000000004700100060000200038000000200000507000036040000000000 +000000034600900000000000000004700100050000200038000000200000607000043050000000000 +000000034700005000000000010000087200000020500010000000200300060001400000000000900 +000000034800600000000100000605000100000040070200090000043000000000000201090000000 +000000035000020070000010000000240000800000600100000000020507000000300800070000100 +000000035040000080100000000007000200000085000600000000000400106030100700008000000 +000000035200100000080000000040000700000200040005003000300070006000040200000000100 +000000035490000000010000000603000070000010900000000000180000400000502000000300006 +000000036000000020800000000700000104000030500000020000064100000030006000000700400 +000000036000500040000700000000200705108000000600000000340060000050000200000010000 +000000036000500040000700000000200705108000000600000000340060000070000200000010000 +000000036007100000000040050405003000000700200000000100010200800300000000090000000 +000000036030000050200000000000060800700000400000053000000700210060900000001000000 +000000036040200000010000000000004019008000200600030000700050000000100800300000000 +000000036200030000500000001400070200010000000000000080308000400000501000000600000 +000000036200030000500000001700080200010000000000000080309000400000501000000600000 +000000036800010000000020000030602000000000190000500800100000900060000070000300000 +000000036800700000000000090090000001060000020000500400000039000004000800700000500 +000000036840000000000000020000203000010000700000600400000410050003000200600000000 +000000036900040000000000010000103000200000400000600050007500200000060800010000000 +000000037002000050010000000000200104000001600300400000700063000000000200000080000 +000000037004600000000000010078000200000007500000010000310000020000800600400000000 +000000037040600000000000010096000200000005800000010000107000050000400600300000000 +000000037060000040500000000100040502000083000000000600037000000000500100000200000 +000000037400200000000000000107000040000800200300500000000031000080000500060000400 +000000037500000040090000000000510200003000900060000000200000160000703000000800000 +000000037900040000000000010000103000200000400000700060006500200000070800010000000 +000000038000000710900400000000017000600000900000003000000650200003000060010000000 +000000038000009001000500020000460500800200000100000000040000600000021000700000000 +000000038000020000000090000800000200000600100007300000000701060290000500040000000 +000000038060020000007000050500400000000060700000000100100508000040000600000300000 +000000038090200000000000510740000600000003070000010000005600200003000000100000000 +000000038200050000000400010800000600000001000000200000041000500000620700030000000 +000000038200400000000070010800000500000001000000200000071000400000520600030000000 +000000038600001000000000050100200700800000004000750000025030000000000100030000000 +000000038700040000000000010000108000200000600000300040006500200000060700010000000 +000000039000070080000140000600000500200600000000003070000200600083000000000000100 +000000039000140000000060080000500200083000000000000100500200700000003060200000000 +000000039000140000000080070000500200037000000000000100500200600000003040200000000 +000000039000140000000080070000600200037000000000000100500200600000003040600000000 +000000039000600040800100000500000600000020070000004000000280700043000000000000100 +000000039000740000000050080000600700083000000000000100100200600000003050200000000 +000000039000740000000050080000600700083000000000000100100200600000003050600000000 +000000039500070000000000010000503000400000200000600000003000860000240700010000000 +000000039700400000003000010480000200000030700000001000040600500000000020000090000 +000000039700400000003000010680000200000030700000001000040600500000000020000090000 +000000039700400000003000010840000200000030700000001000080600500000000020000090000 +000000041000062000000000000000710030602000500500000000310400000000008200040000000 +000000041000700000300000000000045060700000300020010000000800200045000000601000000 +000000041000700000300000000000045060700000800020010000000900200045000000601000000 +000000041005080000600000000000670200410000500300000000000104030002000000080000000 +000000041007300000000000520000800300420000000500000007060004200000010000008000000 +000000041009300000000000520000800300420000000500000007060004200000010000008000000 +000000041020000050800000000000280700060030000001000000300000807000501600000000000 +000000041020060000800070000300400600000002000000100000000030700010500000005000030 +000000041020500000000000000000084060570000000000000200000120300804000000600700000 +000000041020500000000000000000094070580000000000000200000620300904000000700800000 +000000041020700000000000000400013000070000200600000000000270500103000060000800000 +000000041050080000000000000600107000030000500000400020400000800000050300001600000 +000000041050800000090000000000007020000041000000000503700260800100000000000300000 +000000041050900000070000000000008020000041000000000503800760900100000000000300000 +000000041060800000000300000200054070080000000000001000000630800700000200400000000 +000000041060900000070000000000008020000041000000000305800720600100000000000300000 +000000041070060000030000000400201050060000700000800000000050300100400000200000000 +000000041070200000000308000400060050020000300000010000100050000000700800600000000 +000000041080030000200000000500060700002000300400008000000500020010400000000000800 +000000041080070000030000000600201050070000800000900000000050300100400000200000000 +000000041090700000000080000000800290600500000400000000030060900000041000500000000 +000000041200500000000007000500000200000040600000036000034000000010000030000800500 +000000041200600000530000000700080300000041000000000060008300000000500200040000000 +000000041200700000000000006000300800090000500060040000700000230300060000000001000 +000000041300020000000500000015000000000070600080000000600000370200104000000800000 +000000041320000000500000000600300200004000080000500000200000300000081000000740000 +000000041500020000000800000018000000000030600090000000600000350700104000000900000 +000000041500300000200000000000260300010000060700500000080041000000080200000000000 +000000041500900000070600000000350600402000000800000000000040080090000300030000000 +000000041520000000000030000000070530100800000400000000600105000030000200000400000 +000000041600000000000800000500600200040000070000300000000071600002000300070040000 +000000041600300000000020000040100080000506000700000000300000500000070300010004000 +000000041630000000000800000010000070070030000000020500500104000200000600000700000 +000000041700050000200000000000801030650000700000400000081600000000020900000000000 +000000041700090000200000000030104000040200000008000500100050600000000080000000700 +000000041700600000200500000000081000030040000500000000010030000000200700000000650 +000000041800020000000000000040509000007000200000000800600000390200410000000700000 +000000041800050000200000000000701030650000200000400000071600000000080900000000000 +000000041800500000000000000200000860070140000000030000600008200000300500040000000 +000000041900300000000000000300200800000010060200000000067040000010050000000800200 +000000041900300000000000000300200900000010060200000000067040000010050000000800300 +000000041900500000000000000200000960080140000000030000600009700000300500040000000 +000000041900600000000200000000810300540000000002000000031040000700000600000000020 +000000041900700000000000000200000960080140000000030000600009700000300500040000000 +000000042000500080000001000000900300200000100400080000090060050010000700000800000 +000000042100700000000000080600300500040000020000100000000060105090040000000000300 +000000042100800000000000070600300500070000020000100000000060105090040000000000300 +000000042500090000000000000006100700000030800024000000390000000000004006000200050 +000000042600900000000000030500000800007600000020040000000508100034000000000000700 +000000042650000000000800000100000600000045000700002000000100780002030000040000000 +000000043000015000000200000000420000050000600000900000000008170403000000200000800 +000000043000015000000200000000420000090000500000800000000007160403000000200000700 +000000043000080050000001000700500600000304000100000000040200000000070100030000900 +000000043000800070000020000060500800000304000001000000370000200000010900400000000 +000000043010050000000000000000408030095000000700000000000090105800200600400000000 +000000043010050000000000000000804030095000000700000000000090105800200600400000000 +000000043050200000080009000060000800100030000000000000307510000000800200400000000 +000000043100200000000000000000600700030000200005080000270100000000030065900000000 +000000043200700000000000080600200500040000030000100000000060205090040000000000100 +000000043200800000000000070600200500070000030000100000000060205090040000000000100 +000000043500080000000000010000370500010000000000000200000104020005700000800000600 +000000043800050000000000010007600200000080700010000000000104020600000500000300000 +000000045000800020100000000005620000700000004000000700086000100000045000030000000 +000000045700200000000100000106000200000050060300080000054000000000000302080000000 +000000045800200000000100000106000200000050070300090000054000000000000302090000000 +000000046000070010060020000108000000000500300400000500030000200000108000000400000 +000000046000500010500000000709000300000100800000400000600030200000070050010000000 +000000046000500010500000000709000300000100800000400000600030200000090050010000000 +000000046000800010500000000709000300000100800000400000600030200000070050010000000 +000000046000800010500000000709000300000100800000400000600030200000090050010000000 +000000046005800000000000020160000300000300500020000000000267000309000000000040000 +000000046020000300001000000000001730600000008000000000030000210400680000000500000 +000000046020000700001000000000001830600000009000000000080000210400690000000500000 +000000046050010000000000000000408030017000000600000000000070102300200500400000000 +000000046100000000000000080000130200084005000000700000060084000300000100000200000 +000000046700010000000030000040603000000000190000800700100000900020000080000400000 +000000047010050000000000000000408030065000000700000000000060102300200500400000000 +000000047300500000000000010709000600000010000000000200000200705041008000030000000 +000000048600200000000700010000040060500000300002001000000350700010000000000000200 +000000049000050060000030000400900000700800000000000300503000100060000200000702000 +000000049700200000000800010000040070500000300002001000000360800010000000000000200 +000000051000036000000000000040500080200000600000001000000020340010400700600000000 +000000051000083000000040000600500020080000400030900000000070800500600000200000000 +000000051000203000000400000050080060094000000000000300302000600700000200000050000 +000000051000307000000008000021060000000000740050000000400150000300000800000200000 +000000051000307000000800000500010700000600300200000000000090020430000000087000000 +000000051000308000000100000090050040020000100000000000601700800400020000500000000 +000000051000308000000100000090050060020000100000000000601700800400020000500000000 +000000051000309000000100000080050040020000100000000000601700300400020000500000000 +000000051000309000000100000080050060020000100000000000601700300400020000500000000 +000000051000402000800070000200600400700000030000500000000030200016000000050000000 +000000051000402000800070000200600400700000080000500000000030200016000000050000000 +000000051000702000000400000050080030084000000000000700302000600700000200000050000 +000000051020060000700040000640000300000105080200000000001800000300000600000000000 +000000051020070000000000000000145000040000890000300000109500000000060200300000000 +000000051020400000000000000000390200500080000000000400040600700100050080000200000 +000000051020600000000000000000300780400900000100000000070005200600010000000040600 +000000051020600000000000000070000200300050000000040800501000030400008000000200600 +000000051030800000000000000000400830100700000200000000040006300700020000000010900 +000000051040006000000300000105030000000000820700000000620000400000750000000100000 +000000051040700000000000000000013700500020000060000400000600840100800000200000000 +000000051040700000000000000090000700000051000000060030000406200300000800506000000 +000000051040900000000300080107050000030000200000000000000209300605000000800000000 +000000051060007000000030000000006200700000030500100000014000600000850700000000000 +000000051060007000000030000000006200700000030500100000024000600000850700000000000 +000000051060020000000000000000145000040000780000300000108500000000060200300000000 +000000051060020000100700000000500030020030000040000000300000200000800400509000000 +000000051060400000000000000000380600500070000000000400040600300100050070000200000 +000000051060400000000000000000390600500080000000000400040600700100050080000200000 +000000051070030000800000000000501040030000600000800000500420000001000300000000700 +000000051080200000000000000930000800000014000000500000401000070000600200000380000 +000000051080400000000000000000031009507000000040000000000700460100200000300000800 +000000051090030000000000000070400620000501000000800000000070300504000000200000400 +000000051090700000000000000000400930100500000200000000080006300700010000000020700 +000000051200030000000000000000070620050400000000000300004501000600000830000700000 +000000051200060000000000000000080720050400000000000600004501000600000230000800000 +000000051200080000040030000017200000000000630000000400000507000600000300000100000 +000000051200600000000800000071050000040300200000000600000010040600000300800000000 +000000051200600000000800000071050000040300600000000200000010040600000300800000000 +000000051200800000400000000010057000300000200000060400057000060000200300000000000 +000000051260000000008600000000071020040050000000000300000300400500900000700000000 +000000051300020000000800000042000000000090600010000000600000390700501000000400000 +000000051300040000200000000056100000070600000000030800010500060400000300000000000 +000000051400030000000800000250100000300000740000006000000040300060007000010000000 +000000051400070000200000000037006400008000000000500000000020780510300000000000000 +000000051400200000000000000000406200050300000070000000000075030608000400000010000 +000000051400800000200000000010057000300000200000060400057000060000200300000000000 +000000051460000000080000000000050670001020000300000000050000400200300000000109000 +000000051600003000090040000012500000000007900400000000500000780000020000000100000 +000000051600030000000000000000504090802600000000001000000020800700000300050100000 +000000051600200000000000000000406200050300000070000000000075030408000600000010000 +000000051700200000003000000004058000000010600600000200010000080260000000000300000 +000000051700200000800000000054010030010030000000000200200700600030000000000000700 +000000051800020000300000000017600000000030200050000090400700800060500000000000000 +000000051800070000300000000040080700000400000005000000006501000030000870000000200 +000000051800070000300000000040080700000600000005000000006501000030000870000000200 +000000051800200000000000000040070300000051000090000000000309200507000060100000000 +000000051800200000400000000010095000000000840030000000000760300250000000000800000 +000000051800300000000000000520010000300000790000006000067000400000400300010000000 +000000051800700000300600000000012000090050000600000000010040000000300800000000760 +000000051803000000000000000250400000010000700000020300000506040007000200000100000 +000000051900200000000000000451060000000400380000000000240000700000003200000050000 +000000052000700040100000000010600000000030800024000000000200100000405000300000600 +000000052000700040100000000010600000000030800042000000000200100000405000300000600 +000000052003400000070000000030005600000020010000081000200000008000600700100000000 +000000052005400000070000000030005600000020010000081000200000008000600700100000000 +000000052009400000070000000030005600000020010000081000200000008000600700100000000 +000000052400060000000000010070200000600000400000108000018000000000030700502000000 +000000053000008010300400000000015020700000400006000000000720600010000000000000200 +000000053000400006080000000506000700000010400300000020010000200000305000000700000 +000000053160000000000000000400000607000305000000800000000024100003000020070010000 +000000053600700000000000020000039500200000800000010000000200640003400000010000000 +000000053700600000000000040024000000008050000000300000010040200600007000300000600 +000000053800060000000000070000200800000705000100000000072003000000610400050000000 +000000054000803000000000000105040000000200930600000000500007000000010002030000800 +000000054010700000200000000000056000030000700080000000600100300004000072500000000 +000000054010900000200000000000056000030000900070000000600100700004000082500000000 +000000054070300000200000000010000700000045000000208000000670100800000300500000000 +000000054100300000000000000000700300040000200006080000320100000000040076900000000 +000000054200070000000010000060000730005400000000000000710000200800300000000500009 +000000054300020000000000010003700200000080600010000000000105030600000800000400000 +000000054300800000000000010041000060030008000000900700905000800000010000000000200 +000000054700020000000010000060000730005400000000000000170000200200300000000500008 +000000054700030000000000000000400016380070000020000000000500800105000000006000300 +000000054900700000000000060006052000800000300000000700020300100040070000005000000 +000000056003800000400000000000062000000000410000000300000450100060100000720000000 +000000056080010000002000030000203000300600000010000900600700000000080400000000100 +000000057000040000000000003000307060800500400100000000000080100070000200030600000 +000000057000080010070020000301000000000600400500000600040000200000103000000500000 +000000059000130000000000000340000020050009000000800600800000307000054000000000100 +000000059700600000000300000059001000020040000000000130807000300000050000400000000 +000000061000027000000000000704000200000100040300000000510000700000048000090600000""".split('\n') + + + +import wx +from wx.lib.hyperlink import HyperLinkCtrl + +class AboutDialog(wx.Dialog): + """ + Simple about Dialog class -- I like it better than the one that wxPython comes with + + -Chris Barker + + """ + def __init__(self, parent, icon1=None, + icon2=None, + short_name=None, + long_name=None, + version=None, + description=None, + urls=None, + licence=None, + developers = []): + wx.Dialog.__init__(self, parent) + + self.icon1 = icon1 + self.icon2 = icon2 + self.short_name = short_name + self.long_name = long_name + self.version = version + self.version = version + self.description = description + self.urls = urls + self.licence = licence + self.developers = developers + + self.Build() + + def Build(self): + + # Build the header + Header = wx.BoxSizer(wx.HORIZONTAL) + if self.icon1: + Header.Add(wx.StaticBitmap(self, bitmap=self.icon1), 0) + else: + Header.Add((64,64)) + Header.Add((20,1),1) + if self.short_name: + Label = wx.StaticText(self, label=self.short_name) + of = Label.GetFont() + Font = wx.Font(int(of.GetPointSize() * 2), of.GetFamily(), wx.NORMAL, wx.FONTWEIGHT_BOLD) + Label.SetFont(Font) + Header.Add(Label, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5) + else: + Header.Add((1,1), 1) + Header.Add((20,1),1) + if self.icon2: + Header.Add(wx.StaticBitmap(self, bitmap=self.icon2), 0) + else: + Header.Add((64,64)) + width = Header.MinSize[0] + + # Now the rest; + MainSizer = wx.BoxSizer(wx.VERTICAL) + + MainSizer.Add(Header, 0, wx.EXPAND|wx.ALIGN_CENTER|wx.ALL, 5) + + if self.long_name: + Label = wx.StaticText(self, label=self.long_name) + of = Label.GetFont() + Font = wx.Font(int(of.GetPointSize() * 1.5), of.GetFamily(), wx.NORMAL, wx.NORMAL) + Label.SetFont(Font) + MainSizer.Add(Label, 0, wx.TOP|wx.RIGHT|wx.LEFT|wx.ALIGN_CENTER, 5) + width = max(width, Label.Size[0]) + + if self.version: + Label = wx.StaticText(self, label="version: "+self.version) + #of = Label.GetFont() + #Font = wx.Font(int(of.GetPointSize() * 1.5), of.GetFamily(), wx.NORMAL, wx.NORMAL) + #Label.SetFont(Font) + MainSizer.Add(Label, 0, wx.BOTTOM|wx.ALIGN_CENTER, 5) + + if self.description: + Label = wx.StaticText(self, label=self.description) + #of = Label.GetFont() + #Font = wx.Font(int(of.GetPointSize() * 1.5), of.GetFamily(), wx.NORMAL, wx.NORMAL) + #Label.SetFont(Font) + + Label.Wrap(max(250, 0.9*width)) + MainSizer.Add(Label, 0, wx.ALL|wx.ALIGN_CENTER, 5) + + + if self.licence: + Label = wx.StaticText(self, label="License:") + of = Label.GetFont() + Font = wx.Font(of.GetPointSize(), of.GetFamily(), wx.NORMAL, wx.BOLD) + Label.SetFont(Font) + MainSizer.Add(Label, 0, wx.ALL|wx.ALIGN_LEFT, 5) + Label = wx.StaticText(self, label=self.licence) + Label.Wrap(max(250, 0.9*width)) + MainSizer.Add(Label, 0, wx.ALL|wx.ALIGN_CENTER, 2) + + if self.developers: + Label = wx.StaticText(self, label="Developed by:") + of = Label.GetFont() + Font = wx.Font(of.GetPointSize(), of.GetFamily(), wx.NORMAL, wx.BOLD) + Label.SetFont(Font) + MainSizer.Add(Label, 0, wx.ALL|wx.ALIGN_LEFT, 5) + + for developer in self.developers: + Label = wx.StaticText(self, label=" "+developer) + MainSizer.Add(Label, 0, wx.ALL|wx.ALIGN_LEFT, 0) + + if self.urls: + Label = wx.StaticText(self, label="For more information:") + of = Label.GetFont() + Font = wx.Font(of.GetPointSize(), of.GetFamily(), wx.NORMAL, wx.BOLD) + Label.SetFont(Font) + MainSizer.Add(Label, 0, wx.ALL|wx.ALIGN_LEFT, 5) + for url in self.urls: + Link = HyperLinkCtrl(self, + label=url, + URL=url) + MainSizer.Add(Link, 0, wx.ALL|wx.ALIGN_CENTER, 2) + + MainSizer.Add((1,5),1) + MainSizer.Add(wx.Button(self, id=wx.ID_OK, label="Dismiss"), 0, wx.ALL|wx.ALIGN_RIGHT,5) + SpaceSizer = wx.BoxSizer(wx.VERTICAL) + SpaceSizer.Add(MainSizer, 0, wx.ALL, 10) + self.SetSizerAndFit(SpaceSizer) + + +if __name__ == '__main__': + import sys + if len(sys.argv) > 1 and sys.argv[1].lower() == 'test': + test_PuzzleGrid() + else: + app = wx.App(0) + frame = MainFrame(None) + frame.Show(True) + app.MainLoop() + diff --git a/Examples/packaging/Capitalize/bin/cap_script b/Examples/packaging/Capitalize/bin/cap_script index 08f999e..4566590 100755 --- a/Examples/packaging/Capitalize/bin/cap_script +++ b/Examples/packaging/Capitalize/bin/cap_script @@ -4,7 +4,8 @@ A really simple script just to demonstrate disutils """ -import sys, os +import sys +import os from capitalize import capital_mod @@ -12,14 +13,13 @@ if __name__ == "__main__": try: infilename = sys.argv[1] except IndexError: - print "you need to pass in a file to process" + print("you need to pass in a file to process") root, ext = os.path.splitext(infilename) outfilename = root + "_cap" + ext - + # do the real work: - print "Capitalizing: %s and storing it in %s"%(infilename, outfilename) + print("Capitalizing: %s and storing it in %s" % (infilename, outfilename)) capital_mod.capitalize(infilename, outfilename) - - print "I'm done" - \ No newline at end of file + + print("I'm done") diff --git a/Examples/pandas/IntroductionToPandas.html b/Examples/pandas/IntroductionToPandas.html new file mode 100644 index 0000000..3a2d685 --- /dev/null +++ b/Examples/pandas/IntroductionToPandas.html @@ -0,0 +1,3741 @@ + + + + + + An Introduction to Pandas | synesthesiam + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + +
    +
    + + +
    + +
    + +

    An Introduction to Pandas

    + + + + +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +

    When dealing with numeric matrices and vectors in Python, NumPy makes life a lot easier. +For more complex data, however, it leaves a lot to be desired. +If you're used to working with data frames in R, doing data analysis directly with NumPy feels like a step back.

    +

    Fortunately, some nice folks have written the Python Data Analysis Library (a.k.a. pandas). +Pandas provides an R-like DataFrame, produces high quality plots with matplotlib, and integrates nicely with other libraries that expect NumPy arrays.

    +

    In this tutorial, we'll go through the basics of pandas using a year's worth of weather data from Weather Underground. +Pandas has a lot of functionality, so we'll only be able to cover a small fraction of what you can do. +Check out the (very readable) pandas docs if you want to learn more.

    +

    + +
    +
    +
    +
    +
    +
    +
    +
    +

    Getting Started +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Installing pandas should be an easy process if you use pip:

    + +
    sudo pip install pandas
    +
    +
    +

    For more complex scenarios, please see the installation instructions.

    +

    OK, let's get started by importing the pandas library.

    + +
    +
    +
    +
    +
    +
    In [64]:
    +
    +
    +
    import pandas
    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +

    Next, let's read in our data. +Because it's in a CSV file, we can use pandas' read_csv function to pull it directly into a DataFrame.

    + +
    +
    +
    +
    +
    +
    In [65]:
    +
    +
    +
    data = pandas.read_csv("data/weather_year.csv")
    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +

    We can get a summary of the DataFrame by printing the object.

    + +
    +
    +
    +
    +
    +
    In [66]:
    +
    +
    +
    data
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[66]:
    + +
    +
    &ltclass 'pandas.core.frame.DataFrame'&gt
    +Int64Index: 366 entries, 0 to 365
    +Data columns (total 23 columns):
    +EDT                           366  non-null values
    +Max TemperatureF              366  non-null values
    +Mean TemperatureF             366  non-null values
    +Min TemperatureF              366  non-null values
    +Max Dew PointF                366  non-null values
    +MeanDew PointF                366  non-null values
    +Min DewpointF                 366  non-null values
    +Max Humidity                  366  non-null values
    + Mean Humidity                366  non-null values
    + Min Humidity                 366  non-null values
    + Max Sea Level PressureIn     366  non-null values
    + Mean Sea Level PressureIn    366  non-null values
    + Min Sea Level PressureIn     366  non-null values
    + Max VisibilityMiles          366  non-null values
    + Mean VisibilityMiles         366  non-null values
    + Min VisibilityMiles          366  non-null values
    + Max Wind SpeedMPH            366  non-null values
    + Mean Wind SpeedMPH           366  non-null values
    + Max Gust SpeedMPH            365  non-null values
    +PrecipitationIn               366  non-null values
    + CloudCover                   366  non-null values
    + Events                       162  non-null values
    + WindDirDegrees               366  non-null values
    +dtypes: float64(4), int64(16), object(3)
    +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    This gives us a lot of information. First, we can see that there are 366 rows (entries) -- a year and a day's worth of weather. Each column is printed along with however many "non-null" values are present. +We'll talk more about null (or missing) values in pandas later, but for now we can note that only the "Max Gust SpeedMPH" and "Events" columns have fewer than 366 non-null values. +Lastly, the data types (dtypes) of the columns are printed at the very bottom. We can see that there are 4 float64, 16 int64, and 3 object columns.

    + +
    +
    +
    +
    +
    +
    In [67]:
    +
    +
    +
    len(data)
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[67]:
    + + +
    +
    366
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Using len on a DataFrame will give you the number of rows. You can get the column names using the columns property.

    + +
    +
    +
    +
    +
    +
    In [68]:
    +
    +
    +
    data.columns
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[68]:
    + + +
    +
    Index([EDT, Max TemperatureF, Mean TemperatureF, Min TemperatureF, Max Dew PointF, MeanDew PointF, Min DewpointF, Max Humidity,  Mean Humidity,  Min Humidity,  Max Sea Level PressureIn,  Mean Sea Level PressureIn,  Min Sea Level PressureIn,  Max VisibilityMiles,  Mean VisibilityMiles,  Min VisibilityMiles,  Max Wind SpeedMPH,  Mean Wind SpeedMPH,  Max Gust SpeedMPH, PrecipitationIn,  CloudCover,  Events,  WindDirDegrees], dtype=object)
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Columns can be accessed in two ways. The first is using the DataFrame like a dictionary with string keys:

    + +
    +
    +
    +
    +
    +
    In [69]:
    +
    +
    +
    data["EDT"]
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[69]:
    + + +
    +
    0     2012-3-10
    +1     2012-3-11
    +2     2012-3-12
    +3     2012-3-13
    +4     2012-3-14
    +5     2012-3-15
    +6     2012-3-16
    +7     2012-3-17
    +8     2012-3-18
    +9     2012-3-19
    +10    2012-3-20
    +11    2012-3-21
    +12    2012-3-22
    +13    2012-3-23
    +14    2012-3-24
    +...
    +351    2013-2-24
    +352    2013-2-25
    +353    2013-2-26
    +354    2013-2-27
    +355    2013-2-28
    +356     2013-3-1
    +357     2013-3-2
    +358     2013-3-3
    +359     2013-3-4
    +360     2013-3-5
    +361     2013-3-6
    +362     2013-3-7
    +363     2013-3-8
    +364     2013-3-9
    +365    2013-3-10
    +Name: EDT, Length: 366, dtype: object
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    You can get multiple columns out at the same time by passing in a list of strings.

    + +
    +
    +
    +
    +
    +
    In [70]:
    +
    +
    +
    data[["EDT", "Mean TemperatureF"]]
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[70]:
    + +
    +
    &ltclass 'pandas.core.frame.DataFrame'&gt
    +Int64Index: 366 entries, 0 to 365
    +Data columns (total 2 columns):
    +EDT                  366  non-null values
    +Mean TemperatureF    366  non-null values
    +dtypes: int64(1), object(1)
    +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    The second way to access columns is using the dot syntax. This only works if your column name could also be a Python variable name (i.e., no spaces), and if it doesn't collide with another DataFrame property or function name (e.g., count, sum).

    + +
    +
    +
    +
    +
    +
    In [71]:
    +
    +
    +
    data.EDT
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[71]:
    + + +
    +
    0     2012-3-10
    +1     2012-3-11
    +2     2012-3-12
    +3     2012-3-13
    +4     2012-3-14
    +5     2012-3-15
    +6     2012-3-16
    +7     2012-3-17
    +8     2012-3-18
    +9     2012-3-19
    +10    2012-3-20
    +11    2012-3-21
    +12    2012-3-22
    +13    2012-3-23
    +14    2012-3-24
    +...
    +351    2013-2-24
    +352    2013-2-25
    +353    2013-2-26
    +354    2013-2-27
    +355    2013-2-28
    +356     2013-3-1
    +357     2013-3-2
    +358     2013-3-3
    +359     2013-3-4
    +360     2013-3-5
    +361     2013-3-6
    +362     2013-3-7
    +363     2013-3-8
    +364     2013-3-9
    +365    2013-3-10
    +Name: EDT, Length: 366, dtype: object
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    We'll be mostly using the dot syntax here because you can auto-complete the names in IPython. The first pandas function we'll learn about is head(). This gives us the first 5 items in a column (or the first 5 rows in the DataFrame).

    + +
    +
    +
    +
    +
    +
    In [72]:
    +
    +
    +
    data.EDT.head()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[72]:
    + + +
    +
    0    2012-3-10
    +1    2012-3-11
    +2    2012-3-12
    +3    2012-3-13
    +4    2012-3-14
    +Name: EDT, dtype: object
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Passing in a number n gives us the first n items in the column. There is also a corresponding tail() method that gives the last n items or rows.

    + +
    +
    +
    +
    +
    +
    In [73]:
    +
    +
    +
    data.EDT.head(10)
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[73]:
    + + +
    +
    0    2012-3-10
    +1    2012-3-11
    +2    2012-3-12
    +3    2012-3-13
    +4    2012-3-14
    +5    2012-3-15
    +6    2012-3-16
    +7    2012-3-17
    +8    2012-3-18
    +9    2012-3-19
    +Name: EDT, dtype: object
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    This also works with the dictionary syntax.

    + +
    +
    +
    +
    +
    +
    In [74]:
    +
    +
    +
    data["Mean TemperatureF"].head()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[74]:
    + + +
    +
    0    40
    +1    49
    +2    62
    +3    63
    +4    62
    +Name: Mean TemperatureF, dtype: int64
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Fun with Columns +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    The column names in data are a little unweildy, so we're going to rename them. This is as easy as assigning a new list of column names to the columns property of the DataFrame.

    + +
    +
    +
    +
    +
    +
    In [75]:
    +
    +
    +
    data.columns = ["date", "max_temp", "mean_temp", "min_temp", "max_dew",
    +                "mean_dew", "min_dew", "max_humidity", "mean_humidity",
    +                "min_humidity", "max_pressure", "mean_pressure",
    +                "min_pressure", "max_visibilty", "mean_visibility",
    +                "min_visibility", "max_wind", "mean_wind", "min_wind",
    +                "precipitation", "cloud_cover", "events", "wind_dir"]
    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +

    These should be in the same order as the original columns. Let's take another look at our DataFrame summary.

    + +
    +
    +
    +
    +
    +
    In [76]:
    +
    +
    +
    data
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[76]:
    + +
    +
    &ltclass 'pandas.core.frame.DataFrame'&gt
    +Int64Index: 366 entries, 0 to 365
    +Data columns (total 23 columns):
    +date               366  non-null values
    +max_temp           366  non-null values
    +mean_temp          366  non-null values
    +min_temp           366  non-null values
    +max_dew            366  non-null values
    +mean_dew           366  non-null values
    +min_dew            366  non-null values
    +max_humidity       366  non-null values
    +mean_humidity      366  non-null values
    +min_humidity       366  non-null values
    +max_pressure       366  non-null values
    +mean_pressure      366  non-null values
    +min_pressure       366  non-null values
    +max_visibilty      366  non-null values
    +mean_visibility    366  non-null values
    +min_visibility     366  non-null values
    +max_wind           366  non-null values
    +mean_wind          366  non-null values
    +min_wind           365  non-null values
    +precipitation      366  non-null values
    +cloud_cover        366  non-null values
    +events             162  non-null values
    +wind_dir           366  non-null values
    +dtypes: float64(4), int64(16), object(3)
    +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Now our columns can all be accessed using the dot syntax!

    + +
    +
    +
    +
    +
    +
    In [77]:
    +
    +
    +
    data.mean_temp.head()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[77]:
    + + +
    +
    0    40
    +1    49
    +2    62
    +3    63
    +4    62
    +Name: mean_temp, dtype: int64
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    There are lots useful methods on columns, such as std() to get the standard deviation. Most of pandas' methods will happily ignore missing values like NaN.

    + +
    +
    +
    +
    +
    +
    In [78]:
    +
    +
    +
    data.mean_temp.std()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[78]:
    + + +
    +
    18.436505996251075
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Some methods, like plot() and hist() produce plots using matplotlib. We'll go over plotting in more detail later.

    + +
    +
    +
    +
    +
    +
    In [79]:
    +
    +
    +
    data.mean_temp.hist()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[79]:
    + + +
    +
    <matplotlib.axes.AxesSubplot at 0x4e54a50>
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    By the way, many of the column-specific methods also work on the entire DataFrame. Instead of a single number, you'll get a result for each column.

    + +
    +
    +
    +
    +
    +
    In [80]:
    +
    +
    +
    data.std()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[80]:
    + + +
    +
    max_temp           20.361247
    +mean_temp          18.436506
    +min_temp           17.301141
    +max_dew            16.397178
    +mean_dew           16.829996
    +min_dew            17.479449
    +max_humidity        9.108438
    +mean_humidity       9.945591
    +min_humidity       15.360261
    +max_pressure        0.172189
    +mean_pressure       0.174112
    +min_pressure        0.182476
    +max_visibilty       0.073821
    +mean_visibility     1.875406
    +min_visibility      3.792219
    +max_wind            5.564329
    +mean_wind           3.200940
    +min_wind            8.131092
    +cloud_cover         2.707261
    +wind_dir           94.045080
    +dtype: float64
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Bulk Operations with apply() +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Methods like sum() and std() work on entire columns. We can run our own functions across all values in a column (or row) using apply().

    +

    To give you an idea of how this works, let's consider the "date" column in our DataFrame (formally "EDT").

    + +
    +
    +
    +
    +
    +
    In [81]:
    +
    +
    +
    data.date.head()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[81]:
    + + +
    +
    0    2012-3-10
    +1    2012-3-11
    +2    2012-3-12
    +3    2012-3-13
    +4    2012-3-14
    +Name: date, dtype: object
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    We can use the values property of the column to get a list of values for the column. Inspecting the first value reveals that these are strings with a particular format.

    + +
    +
    +
    +
    +
    +
    In [82]:
    +
    +
    +
    first_date = data.date.values[0]
    +first_date
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[82]:
    + + +
    +
    '2012-3-10'
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    The strptime function from the datetime module will make quick work of this date string.

    + +
    +
    +
    +
    +
    +
    In [83]:
    +
    +
    +
    from datetime import datetime
    +datetime.strptime(first_date, "%Y-%m-%d")
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[83]:
    + + +
    +
    datetime.datetime(2012, 3, 10, 0, 0)
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Using the apply() method, which takes an anonymous function, we can apply strptime to each value in the column. We'll overwrite the string date values with their Python datetime equivalents.

    + +
    +
    +
    +
    +
    +
    In [84]:
    +
    +
    +
    data.date = data.date.apply(lambda d: datetime.strptime(d, "%Y-%m-%d"))
    +data.date.head()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[84]:
    + + +
    +
    0   2012-03-10 00:00:00
    +1   2012-03-11 00:00:00
    +2   2012-03-12 00:00:00
    +3   2012-03-13 00:00:00
    +4   2012-03-14 00:00:00
    +Name: date, dtype: datetime64[ns]
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Let's go one step futher. Each row in our DateFrame represents the weather from a single day. Each row in a DataFrame is associated with an index, which is a label that uniquely identifies a row.

    +

    Our row indices up to now have been auto-generated by pandas, and are simply integers from 0 to 365. If we use dates instead of integers for our index, we will get some extra benefits from pandas when plotting later on. Overwriting the index is as easy as assigning to the index property of the DataFrame.

    + +
    +
    +
    +
    +
    +
    In [85]:
    +
    +
    +
    data.index = data.date
    +data
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[85]:
    + +
    +
    &ltclass 'pandas.core.frame.DataFrame'&gt
    +DatetimeIndex: 366 entries, 2012-03-10 00:00:00 to 2013-03-10 00:00:00
    +Data columns (total 23 columns):
    +date               366  non-null values
    +max_temp           366  non-null values
    +mean_temp          366  non-null values
    +min_temp           366  non-null values
    +max_dew            366  non-null values
    +mean_dew           366  non-null values
    +min_dew            366  non-null values
    +max_humidity       366  non-null values
    +mean_humidity      366  non-null values
    +min_humidity       366  non-null values
    +max_pressure       366  non-null values
    +mean_pressure      366  non-null values
    +min_pressure       366  non-null values
    +max_visibilty      366  non-null values
    +mean_visibility    366  non-null values
    +min_visibility     366  non-null values
    +max_wind           366  non-null values
    +mean_wind          366  non-null values
    +min_wind           365  non-null values
    +precipitation      366  non-null values
    +cloud_cover        366  non-null values
    +events             162  non-null values
    +wind_dir           366  non-null values
    +dtypes: datetime64[ns](1), float64(4), int64(16), object(2)
    +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Now we can quickly look up a row by its date with the ix[] property.

    + +
    +
    +
    +
    +
    +
    In [86]:
    +
    +
    +
    data.ix[datetime(2012, 8, 19)]
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[86]:
    + + +
    +
    date               2012-08-19 00:00:00
    +max_temp                            82
    +mean_temp                           67
    +min_temp                            51
    +max_dew                             56
    +mean_dew                            50
    +min_dew                             42
    +max_humidity                        96
    +mean_humidity                       62
    +min_humidity                        28
    +max_pressure                     29.95
    +mean_pressure                    29.92
    +min_pressure                     29.89
    +max_visibilty                       10
    +mean_visibility                     10
    +min_visibility                      10
    +max_wind                            14
    +mean_wind                            3
    +min_wind                            21
    +precipitation                     0.00
    +cloud_cover                          1
    +events                             NaN
    +wind_dir                             1
    +Name: 2012-08-19 00:00:00, dtype: object
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    With all of the dates in the index now, we no longer need the "date" column. Let's drop it.

    + +
    +
    +
    +
    +
    +
    In [87]:
    +
    +
    +
    data = data.drop(["date"], axis=1)
    +data.columns
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[87]:
    + + +
    +
    Index([max_temp, mean_temp, min_temp, max_dew, mean_dew, min_dew, max_humidity, mean_humidity, min_humidity, max_pressure, mean_pressure, min_pressure, max_visibilty, mean_visibility, min_visibility, max_wind, mean_wind, min_wind, precipitation, cloud_cover, events, wind_dir], dtype=object)
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Note that we need to pass in axis=1 in order to drop a column. For more details, check out the documentation for drop.

    + +
    +
    +
    +
    +
    +
    +
    +
    +

    Handing Missing Values +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Pandas considers values like NaN and None to represent missing data. The pandas.isnull function can be used to tell whether or not a value is missing.

    +

    Let's use apply() across all of the columns in our DataFrame to figure out which values are missing.

    + +
    +
    +
    +
    +
    +
    In [88]:
    +
    +
    +
    empty = data.apply(lambda col: pandas.isnull(col))
    +empty
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[88]:
    + +
    +
    &ltclass 'pandas.core.frame.DataFrame'&gt
    +DatetimeIndex: 366 entries, 2012-03-10 00:00:00 to 2013-03-10 00:00:00
    +Freq: D
    +Data columns (total 22 columns):
    +max_temp           366  non-null values
    +mean_temp          366  non-null values
    +min_temp           366  non-null values
    +max_dew            366  non-null values
    +mean_dew           366  non-null values
    +min_dew            366  non-null values
    +max_humidity       366  non-null values
    +mean_humidity      366  non-null values
    +min_humidity       366  non-null values
    +max_pressure       366  non-null values
    +mean_pressure      366  non-null values
    +min_pressure       366  non-null values
    +max_visibilty      366  non-null values
    +mean_visibility    366  non-null values
    +min_visibility     366  non-null values
    +max_wind           366  non-null values
    +mean_wind          366  non-null values
    +min_wind           366  non-null values
    +precipitation      366  non-null values
    +cloud_cover        366  non-null values
    +events             366  non-null values
    +wind_dir           366  non-null values
    +dtypes: bool(22)
    +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    We got back a dataframe (empty) with boolean values for all 22 columns and 366 rows. Inspecting the first 10 values of the "events", column we can see that there are some missing values because a True was returned from pandas.isnull.

    + +
    +
    +
    +
    +
    +
    In [89]:
    +
    +
    +
    empty.events.head(10)
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[89]:
    + + +
    +
    date
    +2012-03-10     True
    +2012-03-11    False
    +2012-03-12    False
    +2012-03-13     True
    +2012-03-14     True
    +2012-03-15    False
    +2012-03-16     True
    +2012-03-17    False
    +2012-03-18    False
    +2012-03-19     True
    +Freq: D, Name: events, dtype: bool
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Looking at the corresponding rows in the original DataFrame reveals that pandas has filled in NaN for empty values in the "events" column.

    + +
    +
    +
    +
    +
    +
    In [90]:
    +
    +
    +
    data.events.head(10)
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[90]:
    + + +
    +
    date
    +2012-03-10                  NaN
    +2012-03-11                 Rain
    +2012-03-12                 Rain
    +2012-03-13                  NaN
    +2012-03-14                  NaN
    +2012-03-15    Rain-Thunderstorm
    +2012-03-16                  NaN
    +2012-03-17     Fog-Thunderstorm
    +2012-03-18                 Rain
    +2012-03-19                  NaN
    +Freq: D, Name: events, dtype: object
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    This isn't exactly what we want. One option is to drop all rows in the DataFrame with missing "events" values.

    + +
    +
    +
    +
    +
    +
    In [91]:
    +
    +
    +
    data.dropna(subset=["events"])
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[91]:
    + +
    +
    &ltclass 'pandas.core.frame.DataFrame'&gt
    +DatetimeIndex: 162 entries, 2012-03-11 00:00:00 to 2013-03-06 00:00:00
    +Data columns (total 22 columns):
    +max_temp           162  non-null values
    +mean_temp          162  non-null values
    +min_temp           162  non-null values
    +max_dew            162  non-null values
    +mean_dew           162  non-null values
    +min_dew            162  non-null values
    +max_humidity       162  non-null values
    +mean_humidity      162  non-null values
    +min_humidity       162  non-null values
    +max_pressure       162  non-null values
    +mean_pressure      162  non-null values
    +min_pressure       162  non-null values
    +max_visibilty      162  non-null values
    +mean_visibility    162  non-null values
    +min_visibility     162  non-null values
    +max_wind           162  non-null values
    +mean_wind          162  non-null values
    +min_wind           162  non-null values
    +precipitation      162  non-null values
    +cloud_cover        162  non-null values
    +events             162  non-null values
    +wind_dir           162  non-null values
    +dtypes: float64(4), int64(16), object(2)
    +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    The DataFrame we get back has only 162 rows, so we can infer that there were 366 - 162 = 204 missing values in the "events" column. Note that this didn't affect data; we're just looking at a copy.

    +

    Instead of dropping the rows with missing values, let's fill them with empty strings (you'll see why in a moment). This is easily done with the fillna() function. We'll go ahead and overwrite the "events" column with empty string missing values instead of NaN.

    + +
    +
    +
    +
    +
    +
    In [92]:
    +
    +
    +
    data.events = data.events.fillna("")
    +data.events.head(10)
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[92]:
    + + +
    +
    date
    +2012-03-10                     
    +2012-03-11                 Rain
    +2012-03-12                 Rain
    +2012-03-13                     
    +2012-03-14                     
    +2012-03-15    Rain-Thunderstorm
    +2012-03-16                     
    +2012-03-17     Fog-Thunderstorm
    +2012-03-18                 Rain
    +2012-03-19                     
    +Freq: D, Name: events, dtype: object
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Accessing Individual Rows +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Sometimes you need to access individual rows in your DataFrame. The irow() function lets you grab the ith row from a DataFrame (starting from 0).

    + +
    +
    +
    +
    +
    +
    In [93]:
    +
    +
    +
    data.irow(0)
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[93]:
    + + +
    +
    max_temp              56
    +mean_temp             40
    +min_temp              24
    +max_dew               24
    +mean_dew              20
    +min_dew               16
    +max_humidity          74
    +mean_humidity         50
    +min_humidity          26
    +max_pressure       30.53
    +mean_pressure      30.45
    +min_pressure       30.34
    +max_visibilty         10
    +mean_visibility       10
    +min_visibility        10
    +max_wind              13
    +mean_wind              6
    +min_wind              17
    +precipitation       0.00
    +cloud_cover            0
    +events                  
    +wind_dir             138
    +Name: 2012-03-10 00:00:00, dtype: object
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Of course, another option is to use the index.

    + +
    +
    +
    +
    +
    +
    In [94]:
    +
    +
    +
    data.ix[datetime(2013, 1, 1)]
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[94]:
    + + +
    +
    max_temp              32
    +mean_temp             26
    +min_temp              20
    +max_dew               31
    +mean_dew              25
    +min_dew               16
    +max_humidity          92
    +mean_humidity         83
    +min_humidity          74
    +max_pressure        30.2
    +mean_pressure      30.11
    +min_pressure       30.04
    +max_visibilty          9
    +mean_visibility        5
    +min_visibility         2
    +max_wind              14
    +mean_wind              5
    +min_wind              15
    +precipitation          T
    +cloud_cover            8
    +events                  
    +wind_dir             353
    +Name: 2013-01-01 00:00:00, dtype: object
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    You can iterate over each row in the DataFrame with iterrows(). Note that this function returns both the index and the row. Also, you must access columns in the row you get back from iterrows() with the dictionary syntax.

    + +
    +
    +
    +
    +
    +
    In [95]:
    +
    +
    +
    num_rain = 0
    +for idx, row in data.iterrows():
    +    if "Rain" in row["events"]:
    +        num_rain += 1
    +
    +"Days with rain: {0}".format(num_rain)
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[95]:
    + + +
    +
    'Days with rain: 121'
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Filtering +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Most of your time using pandas will likely be devoted to selecting rows of interest from a DataFrame. In addition to strings, the dictionary syntax accepts things like this:

    + +
    +
    +
    +
    +
    +
    In [96]:
    +
    +
    +
    freezing_days = data[data.max_temp <= 32]
    +freezing_days
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[96]:
    + +
    +
    &ltclass 'pandas.core.frame.DataFrame'&gt
    +DatetimeIndex: 21 entries, 2012-11-24 00:00:00 to 2013-03-06 00:00:00
    +Data columns (total 22 columns):
    +max_temp           21  non-null values
    +mean_temp          21  non-null values
    +min_temp           21  non-null values
    +max_dew            21  non-null values
    +mean_dew           21  non-null values
    +min_dew            21  non-null values
    +max_humidity       21  non-null values
    +mean_humidity      21  non-null values
    +min_humidity       21  non-null values
    +max_pressure       21  non-null values
    +mean_pressure      21  non-null values
    +min_pressure       21  non-null values
    +max_visibilty      21  non-null values
    +mean_visibility    21  non-null values
    +min_visibility     21  non-null values
    +max_wind           21  non-null values
    +mean_wind          21  non-null values
    +min_wind           21  non-null values
    +precipitation      21  non-null values
    +cloud_cover        21  non-null values
    +events             21  non-null values
    +wind_dir           21  non-null values
    +dtypes: float64(4), int64(16), object(2)
    +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    We get back another DataFrame with fewer rows (21 in this case). This DataFrame can be filtered down even more.

    + +
    +
    +
    +
    +
    +
    In [97]:
    +
    +
    +
    freezing_days[freezing_days.min_temp >= 20]
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[97]:
    + +
    +
    &ltclass 'pandas.core.frame.DataFrame'&gt
    +DatetimeIndex: 7 entries, 2012-11-24 00:00:00 to 2013-03-06 00:00:00
    +Data columns (total 22 columns):
    +max_temp           7  non-null values
    +mean_temp          7  non-null values
    +min_temp           7  non-null values
    +max_dew            7  non-null values
    +mean_dew           7  non-null values
    +min_dew            7  non-null values
    +max_humidity       7  non-null values
    +mean_humidity      7  non-null values
    +min_humidity       7  non-null values
    +max_pressure       7  non-null values
    +mean_pressure      7  non-null values
    +min_pressure       7  non-null values
    +max_visibilty      7  non-null values
    +mean_visibility    7  non-null values
    +min_visibility     7  non-null values
    +max_wind           7  non-null values
    +mean_wind          7  non-null values
    +min_wind           7  non-null values
    +precipitation      7  non-null values
    +cloud_cover        7  non-null values
    +events             7  non-null values
    +wind_dir           7  non-null values
    +dtypes: float64(4), int64(16), object(2)
    +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Or, using boolean operations, we could apply both filters to the original DataFrame at the same time.

    + +
    +
    +
    +
    +
    +
    In [98]:
    +
    +
    +
    data[(data.max_temp <= 32) & (data.min_temp >= 20)]
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[98]:
    + +
    +
    &ltclass 'pandas.core.frame.DataFrame'&gt
    +DatetimeIndex: 7 entries, 2012-11-24 00:00:00 to 2013-03-06 00:00:00
    +Data columns (total 22 columns):
    +max_temp           7  non-null values
    +mean_temp          7  non-null values
    +min_temp           7  non-null values
    +max_dew            7  non-null values
    +mean_dew           7  non-null values
    +min_dew            7  non-null values
    +max_humidity       7  non-null values
    +mean_humidity      7  non-null values
    +min_humidity       7  non-null values
    +max_pressure       7  non-null values
    +mean_pressure      7  non-null values
    +min_pressure       7  non-null values
    +max_visibilty      7  non-null values
    +mean_visibility    7  non-null values
    +min_visibility     7  non-null values
    +max_wind           7  non-null values
    +mean_wind          7  non-null values
    +min_wind           7  non-null values
    +precipitation      7  non-null values
    +cloud_cover        7  non-null values
    +events             7  non-null values
    +wind_dir           7  non-null values
    +dtypes: float64(4), int64(16), object(2)
    +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    It's important to understand what's really going on underneath with filtering. Let's look at what kind of object we actually get back when creating a filter.

    + +
    +
    +
    +
    +
    +
    In [99]:
    +
    +
    +
    temp_max = data.max_temp <= 32
    +type(temp_max)
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[99]:
    + + +
    +
    pandas.core.series.TimeSeries
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    This is a pandas Series object, which is the one-dimensional equivalent of a DataFrame. Because our DataFrame uses datetime objects for the index, we have a specialized TimeSeries object.

    +

    What's inside the filter?

    + +
    +
    +
    +
    +
    +
    In [100]:
    +
    +
    +
    temp_max
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[100]:
    + + +
    +
    date
    +2012-03-10    False
    +2012-03-11    False
    +2012-03-12    False
    +2012-03-13    False
    +2012-03-14    False
    +2012-03-15    False
    +2012-03-16    False
    +2012-03-17    False
    +2012-03-18    False
    +2012-03-19    False
    +2012-03-20    False
    +2012-03-21    False
    +2012-03-22    False
    +2012-03-23    False
    +2012-03-24    False
    +...
    +2013-02-24    False
    +2013-02-25    False
    +2013-02-26    False
    +2013-02-27    False
    +2013-02-28    False
    +2013-03-01    False
    +2013-03-02     True
    +2013-03-03    False
    +2013-03-04    False
    +2013-03-05    False
    +2013-03-06     True
    +2013-03-07    False
    +2013-03-08    False
    +2013-03-09    False
    +2013-03-10    False
    +Freq: D, Name: max_temp, Length: 366, dtype: bool
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Our filter is nothing more than a Series with a boolean value for every item in the index. When we "run the filter" as so:

    + +
    +
    +
    +
    +
    +
    In [101]:
    +
    +
    +
    data[temp_max]
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[101]:
    + +
    +
    &ltclass 'pandas.core.frame.DataFrame'&gt
    +DatetimeIndex: 21 entries, 2012-11-24 00:00:00 to 2013-03-06 00:00:00
    +Data columns (total 22 columns):
    +max_temp           21  non-null values
    +mean_temp          21  non-null values
    +min_temp           21  non-null values
    +max_dew            21  non-null values
    +mean_dew           21  non-null values
    +min_dew            21  non-null values
    +max_humidity       21  non-null values
    +mean_humidity      21  non-null values
    +min_humidity       21  non-null values
    +max_pressure       21  non-null values
    +mean_pressure      21  non-null values
    +min_pressure       21  non-null values
    +max_visibilty      21  non-null values
    +mean_visibility    21  non-null values
    +min_visibility     21  non-null values
    +max_wind           21  non-null values
    +mean_wind          21  non-null values
    +min_wind           21  non-null values
    +precipitation      21  non-null values
    +cloud_cover        21  non-null values
    +events             21  non-null values
    +wind_dir           21  non-null values
    +dtypes: float64(4), int64(16), object(2)
    +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    pandas lines up the rows of the DataFrame and the filter using the index, and then keeps the rows with a True filter value. That's it.

    +

    Let's create another filter.

    + +
    +
    +
    +
    +
    +
    In [102]:
    +
    +
    +
    temp_min = data.min_temp >= 20
    +temp_min
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[102]:
    + + +
    +
    date
    +2012-03-10    True
    +2012-03-11    True
    +2012-03-12    True
    +2012-03-13    True
    +2012-03-14    True
    +2012-03-15    True
    +2012-03-16    True
    +2012-03-17    True
    +2012-03-18    True
    +2012-03-19    True
    +2012-03-20    True
    +2012-03-21    True
    +2012-03-22    True
    +2012-03-23    True
    +2012-03-24    True
    +...
    +2013-02-24     True
    +2013-02-25     True
    +2013-02-26     True
    +2013-02-27     True
    +2013-02-28     True
    +2013-03-01     True
    +2013-03-02     True
    +2013-03-03    False
    +2013-03-04    False
    +2013-03-05     True
    +2013-03-06     True
    +2013-03-07     True
    +2013-03-08     True
    +2013-03-09     True
    +2013-03-10     True
    +Freq: D, Name: min_temp, Length: 366, dtype: bool
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Now we can see what the boolean operations are doing. Something like & (not and)...

    + +
    +
    +
    +
    +
    +
    In [103]:
    +
    +
    +
    temp_min & temp_max
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[103]:
    + + +
    +
    date
    +2012-03-10    False
    +2012-03-11    False
    +2012-03-12    False
    +2012-03-13    False
    +2012-03-14    False
    +2012-03-15    False
    +2012-03-16    False
    +2012-03-17    False
    +2012-03-18    False
    +2012-03-19    False
    +2012-03-20    False
    +2012-03-21    False
    +2012-03-22    False
    +2012-03-23    False
    +2012-03-24    False
    +...
    +2013-02-24    False
    +2013-02-25    False
    +2013-02-26    False
    +2013-02-27    False
    +2013-02-28    False
    +2013-03-01    False
    +2013-03-02     True
    +2013-03-03    False
    +2013-03-04    False
    +2013-03-05    False
    +2013-03-06     True
    +2013-03-07    False
    +2013-03-08    False
    +2013-03-09    False
    +2013-03-10    False
    +Freq: D, Length: 366, dtype: bool
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    ...is just lining up the two filters using the index, performing a boolean AND operation, and returning the result as another Series.

    +

    We can do other boolean operations too, like OR:

    + +
    +
    +
    +
    +
    +
    In [104]:
    +
    +
    +
    temp_min | temp_max
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[104]:
    + + +
    +
    date
    +2012-03-10    True
    +2012-03-11    True
    +2012-03-12    True
    +2012-03-13    True
    +2012-03-14    True
    +2012-03-15    True
    +2012-03-16    True
    +2012-03-17    True
    +2012-03-18    True
    +2012-03-19    True
    +2012-03-20    True
    +2012-03-21    True
    +2012-03-22    True
    +2012-03-23    True
    +2012-03-24    True
    +...
    +2013-02-24     True
    +2013-02-25     True
    +2013-02-26     True
    +2013-02-27     True
    +2013-02-28     True
    +2013-03-01     True
    +2013-03-02     True
    +2013-03-03    False
    +2013-03-04    False
    +2013-03-05     True
    +2013-03-06     True
    +2013-03-07     True
    +2013-03-08     True
    +2013-03-09     True
    +2013-03-10     True
    +Freq: D, Length: 366, dtype: bool
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Because the result is just another Series, we have all of the regular pandas functions at our disposal. The any() function returns True if any value in the Series is True.

    + +
    +
    +
    +
    +
    +
    In [105]:
    +
    +
    +
    temp_both = temp_min & temp_max
    +temp_both.any()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[105]:
    + + +
    +
    True
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Sometimes filters aren't so intuitive. This (sadly) doesn't work:

    + +
    +
    +
    +
    +
    +
    In [106]:
    +
    +
    +
    try:
    +    data["Rain" in data.events]
    +except:
    +    pass # "KeyError: no item named False"
    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +

    We can wrap it up in an apply() call fairly easily, though:

    + +
    +
    +
    +
    +
    +
    In [107]:
    +
    +
    +
    data[data.events.apply(lambda e: "Rain" in e)]
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[107]:
    + +
    +
    &ltclass 'pandas.core.frame.DataFrame'&gt
    +DatetimeIndex: 121 entries, 2012-03-11 00:00:00 to 2013-03-05 00:00:00
    +Data columns (total 22 columns):
    +max_temp           121  non-null values
    +mean_temp          121  non-null values
    +min_temp           121  non-null values
    +max_dew            121  non-null values
    +mean_dew           121  non-null values
    +min_dew            121  non-null values
    +max_humidity       121  non-null values
    +mean_humidity      121  non-null values
    +min_humidity       121  non-null values
    +max_pressure       121  non-null values
    +mean_pressure      121  non-null values
    +min_pressure       121  non-null values
    +max_visibilty      121  non-null values
    +mean_visibility    121  non-null values
    +min_visibility     121  non-null values
    +max_wind           121  non-null values
    +mean_wind          121  non-null values
    +min_wind           121  non-null values
    +precipitation      121  non-null values
    +cloud_cover        121  non-null values
    +events             121  non-null values
    +wind_dir           121  non-null values
    +dtypes: float64(4), int64(16), object(2)
    +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Grouping +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Besides apply(), another great DataFrame function is groupby(). +It will group a DataFrame by one or more columns, and let you iterate through each group.

    +

    As an example, let's group our DataFrame by the "cloud_cover" column (a value ranging from 0 to 8).

    + +
    +
    +
    +
    +
    +
    In [108]:
    +
    +
    +
    cover_temps = {}
    +for cover, cover_data in data.groupby("cloud_cover"):
    +    cover_temps[cover] = cover_data.mean_temp.mean()  # The mean mean temp!
    +cover_temps
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[108]:
    + + +
    +
    {0: 59.730769230769234,
    + 1: 61.415094339622641,
    + 2: 59.727272727272727,
    + 3: 58.0625,
    + 4: 51.5,
    + 5: 50.827586206896555,
    + 6: 57.727272727272727,
    + 7: 46.5,
    + 8: 40.909090909090907}
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    When you iterate through the result of groupby(), you will get a tuple. +The first item is the column value, and the second item is a filtered DataFrame (where the column equals the first tuple value).

    +

    You can group by more than one column as well. +In this case, the first tuple item returned by groupby() will itself be a tuple with the value of each column.

    + +
    +
    +
    +
    +
    +
    In [109]:
    +
    +
    +
    for (cover, events), group_data in data.groupby(["cloud_cover", "events"]):
    +    print "Cover: {0}, Events: {1}, Count: {2}".format(cover, events, len(group_data))
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    Cover: 0, Events: , Count: 99
    +Cover: 0, Events: Fog, Count: 2
    +Cover: 0, Events: Rain, Count: 2
    +Cover: 0, Events: Thunderstorm, Count: 1
    +Cover: 1, Events: , Count: 35
    +Cover: 1, Events: Fog, Count: 5
    +Cover: 1, Events: Fog-Rain, Count: 1
    +Cover: 1, Events: Rain, Count: 4
    +Cover: 1, Events: Rain-Thunderstorm, Count: 2
    +Cover: 1, Events: Thunderstorm, Count: 6
    +Cover: 2, Events: , Count: 20
    +Cover: 2, Events: Fog, Count: 1
    +Cover: 2, Events: Rain, Count: 5
    +Cover: 2, Events: Rain-Thunderstorm, Count: 4
    +Cover: 2, Events: Snow, Count: 1
    +Cover: 2, Events: Thunderstorm, Count: 2
    +Cover: 3, Events: , Count: 12
    +Cover: 3, Events: Fog, Count: 2
    +Cover: 3, Events: Fog-Rain-Thunderstorm, Count: 3
    +Cover: 3, Events: Fog-Thunderstorm, Count: 1
    +Cover: 3, Events: Rain, Count: 9
    +Cover: 3, Events: Rain-Thunderstorm, Count: 4
    +Cover: 3, Events: Snow, Count: 1
    +Cover: 4, Events: , Count: 16
    +Cover: 4, Events: Fog, Count: 3
    +Cover: 4, Events: Fog-Rain, Count: 2
    +Cover: 4, Events: Fog-Rain-Thunderstorm, Count: 2
    +Cover: 4, Events: Rain, Count: 10
    +Cover: 4, Events: Rain-Thunderstorm, Count: 6
    +Cover: 4, Events: Snow, Count: 1
    +Cover: 5, Events: , Count: 9
    +Cover: 5, Events: Fog-Rain, Count: 1
    +Cover: 5, Events: Fog-Rain-Snow, Count: 1
    +Cover: 5, Events: Rain, Count: 13
    +Cover: 5, Events: Rain-Thunderstorm, Count: 3
    +Cover: 5, Events: Snow, Count: 2
    +Cover: 6, Events: , Count: 3
    +Cover: 6, Events: Fog-Rain, Count: 2
    +Cover: 6, Events: Fog-Rain-Snow, Count: 1
    +Cover: 6, Events: Fog-Rain-Thunderstorm, Count: 2
    +Cover: 6, Events: Rain, Count: 9
    +Cover: 6, Events: Rain-Thunderstorm, Count: 4
    +Cover: 6, Events: Snow, Count: 1
    +Cover: 7, Events: , Count: 5
    +Cover: 7, Events: Fog-Rain, Count: 1
    +Cover: 7, Events: Fog-Rain-Thunderstorm, Count: 1
    +Cover: 7, Events: Fog-Snow, Count: 3
    +Cover: 7, Events: Rain, Count: 6
    +Cover: 7, Events: Rain-Thunderstorm, Count: 3
    +Cover: 7, Events: Snow, Count: 1
    +Cover: 8, Events: , Count: 5
    +Cover: 8, Events: Fog-Rain, Count: 4
    +Cover: 8, Events: Fog-Rain-Snow, Count: 1
    +Cover: 8, Events: Fog-Rain-Snow-Thunderstorm, Count: 1
    +Cover: 8, Events: Fog-Snow, Count: 2
    +Cover: 8, Events: Rain, Count: 11
    +Cover: 8, Events: Rain-Snow, Count: 3
    +Cover: 8, Events: Snow, Count: 6
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Creating New Columns +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Weather events in our DataFrame are stored in strings like "Rain-Thunderstorm" to represent that it rained and there was a thunderstorm that day. Let's split them out into boolean "rain", "thunderstorm", etc. columns.

    +

    First, let's discover the different kinds of weather events we have with unique().

    + +
    +
    +
    +
    +
    +
    In [110]:
    +
    +
    +
    data.events.unique()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[110]:
    + + +
    +
    array([, Rain, Rain-Thunderstorm, Fog-Thunderstorm, Fog-Rain, Thunderstorm,
    +       Fog-Rain-Thunderstorm, Fog, Fog-Rain-Snow,
    +       Fog-Rain-Snow-Thunderstorm, Fog-Snow, Snow, Rain-Snow], dtype=object)
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Looks like we have "Rain", "Thunderstorm", "Fog", and "Snow" events. Creating a new column for each of these event kinds is a piece of cake with the dictionary syntax.

    + +
    +
    +
    +
    +
    +
    In [111]:
    +
    +
    +
    for event_kind in ["Rain", "Thunderstorm", "Fog", "Snow"]:
    +    col_name = event_kind.lower()  # Turn "Rain" into "rain", etc.
    +    data[col_name] = data.events.apply(lambda e: event_kind in e)
    +data
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[111]:
    + +
    +
    &ltclass 'pandas.core.frame.DataFrame'&gt
    +DatetimeIndex: 366 entries, 2012-03-10 00:00:00 to 2013-03-10 00:00:00
    +Freq: D
    +Data columns (total 26 columns):
    +max_temp           366  non-null values
    +mean_temp          366  non-null values
    +min_temp           366  non-null values
    +max_dew            366  non-null values
    +mean_dew           366  non-null values
    +min_dew            366  non-null values
    +max_humidity       366  non-null values
    +mean_humidity      366  non-null values
    +min_humidity       366  non-null values
    +max_pressure       366  non-null values
    +mean_pressure      366  non-null values
    +min_pressure       366  non-null values
    +max_visibilty      366  non-null values
    +mean_visibility    366  non-null values
    +min_visibility     366  non-null values
    +max_wind           366  non-null values
    +mean_wind          366  non-null values
    +min_wind           365  non-null values
    +precipitation      366  non-null values
    +cloud_cover        366  non-null values
    +events             366  non-null values
    +wind_dir           366  non-null values
    +rain               366  non-null values
    +thunderstorm       366  non-null values
    +fog                366  non-null values
    +snow               366  non-null values
    +dtypes: bool(4), float64(4), int64(16), object(2)
    +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Our new columns show up at the bottom. We can access them now with the dot syntax.

    + +
    +
    +
    +
    +
    +
    In [112]:
    +
    +
    +
    data.rain
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[112]:
    + + +
    +
    date
    +2012-03-10    False
    +2012-03-11     True
    +2012-03-12     True
    +2012-03-13    False
    +2012-03-14    False
    +2012-03-15     True
    +2012-03-16    False
    +2012-03-17    False
    +2012-03-18     True
    +2012-03-19    False
    +2012-03-20    False
    +2012-03-21    False
    +2012-03-22     True
    +2012-03-23     True
    +2012-03-24     True
    +...
    +2013-02-24    False
    +2013-02-25    False
    +2013-02-26     True
    +2013-02-27    False
    +2013-02-28     True
    +2013-03-01    False
    +2013-03-02    False
    +2013-03-03    False
    +2013-03-04     True
    +2013-03-05     True
    +2013-03-06    False
    +2013-03-07    False
    +2013-03-08    False
    +2013-03-09    False
    +2013-03-10    False
    +Freq: D, Name: rain, Length: 366, dtype: bool
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    We can also do cool things like find out how many True values there are (i.e., how many days had rain)...

    + +
    +
    +
    +
    +
    +
    In [113]:
    +
    +
    +
    data.rain.sum()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[113]:
    + + +
    +
    121
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    ...and get all the days that had both rain and snow!

    + +
    +
    +
    +
    +
    +
    In [114]:
    +
    +
    +
    data[data.rain & data.snow]
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[114]:
    + +
    +
    &ltclass 'pandas.core.frame.DataFrame'&gt
    +DatetimeIndex: 7 entries, 2012-11-12 00:00:00 to 2013-03-05 00:00:00
    +Data columns (total 26 columns):
    +max_temp           7  non-null values
    +mean_temp          7  non-null values
    +min_temp           7  non-null values
    +max_dew            7  non-null values
    +mean_dew           7  non-null values
    +min_dew            7  non-null values
    +max_humidity       7  non-null values
    +mean_humidity      7  non-null values
    +min_humidity       7  non-null values
    +max_pressure       7  non-null values
    +mean_pressure      7  non-null values
    +min_pressure       7  non-null values
    +max_visibilty      7  non-null values
    +mean_visibility    7  non-null values
    +min_visibility     7  non-null values
    +max_wind           7  non-null values
    +mean_wind          7  non-null values
    +min_wind           7  non-null values
    +precipitation      7  non-null values
    +cloud_cover        7  non-null values
    +events             7  non-null values
    +wind_dir           7  non-null values
    +rain               7  non-null values
    +thunderstorm       7  non-null values
    +fog                7  non-null values
    +snow               7  non-null values
    +dtypes: bool(4), float64(4), int64(16), object(2)
    +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Plotting +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    We've already seen how the hist() function makes generating histograms a snap. Let's look at the plot() function now.

    + +
    +
    +
    +
    +
    +
    In [115]:
    +
    +
    +
    data.max_temp.plot()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[115]:
    + + +
    +
    <matplotlib.axes.AxesSubplot at 0x4bb1b10>
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    That one line of code did a lot for us. First, it created a nice looking line plot using the maximum temperature column from our DataFrame. Second, because we used datetime objects in our index, pandas labeled the x-axis appropriately.

    +

    Pandas is smart too. If we're only looking at a couple of days, the x-axis looks different:

    + +
    +
    +
    +
    +
    +
    In [116]:
    +
    +
    +
    data.max_temp.tail().plot()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[116]:
    + + +
    +
    <matplotlib.axes.AxesSubplot at 0x5563bd0>
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Prefer a bar plot? Pandas has got your covered.

    + +
    +
    +
    +
    +
    +
    In [117]:
    +
    +
    +
    data.max_temp.tail().plot(kind="bar", rot=10)
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[117]:
    + + +
    +
    <matplotlib.axes.AxesSubplot at 0x5305e10>
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    The plot() function returns a matplotlib AxesSubPlot object. You can pass this object into subsequent calls to plot() in order to compose plots.

    +

    Although plot() takes a variety of parameters to customize your plot, users familiar with matplotlib will feel right at home with the AxesSubPlot object.

    + +
    +
    +
    +
    +
    +
    In [118]:
    +
    +
    +
    ax = data.max_temp.plot(title="Min and Max Temperatures")
    +data.min_temp.plot(style="red", ax=ax)
    +ax.set_ylabel("Temperature (F)")
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[118]:
    + + +
    +
    <matplotlib.text.Text at 0x5a6f8d0>
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Getting Data Out +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Writing data out in pandas is as easy as getting data in. To save our DataFrame out to a new csv file, we can just do this:

    + +
    +
    +
    +
    +
    +
    In [119]:
    +
    +
    +
    data.to_csv("data/weather-mod.csv")
    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +

    Want to make that tab separated instead? No problem.

    + +
    +
    +
    +
    +
    +
    In [120]:
    +
    +
    +
    data.to_csv("data/weather-mod.tsv", sep="\t")
    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +

    There's also support for reading and writing Excel files, if you need it.

    + +
    +
    +
    +
    +
    +
    +
    +
    +

    Miscellanea +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    We've only covered a small fraction of the pandas library here. +Before I wrap up, however, there are a few miscellaneous tips I'd like to go over.

    +

    First, it can be confusing to know when an operation will modify a DataFrame and when it will return a copy to you. +Pandas behavior here is entirely dictated by NumPy, and some situations are unintuitive.

    +

    For example, what do you think will happen here?

    + +
    +
    +
    +
    +
    +
    In [121]:
    +
    +
    +
    for idx, row in data.iterrows():
    +    row["max_temp"] = 0
    +data.max_temp.head()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[121]:
    + + +
    +
    date
    +2012-03-10    56
    +2012-03-11    67
    +2012-03-12    71
    +2012-03-13    76
    +2012-03-14    80
    +Freq: D, Name: max_temp, dtype: int64
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Contrary to what you might expect, modifying row did not modify data! +This is because row is a copy, and does not point back to the original DataFrame.

    +

    Here's the right way to do it:

    + +
    +
    +
    +
    +
    +
    In [122]:
    +
    +
    +
    for idx, row in data.iterrows():
    +    data.ix[idx, "max_temp"] = 0
    +any(data.max_temp != 0)  # Any rows with max_temp not equal to zero?
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[122]:
    + + +
    +
    False
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    Just to make you even more confused, this also doesn't work:

    + +
    +
    +
    +
    +
    +
    In [123]:
    +
    +
    +
    for idx, row in data.iterrows():
    +    data.ix[idx]["max_temp"] = 100
    +data.max_temp.head()
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[123]:
    + + +
    +
    date
    +2012-03-10    0
    +2012-03-11    0
    +2012-03-12    0
    +2012-03-13    0
    +2012-03-14    0
    +Freq: D, Name: max_temp, dtype: int64
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    When using apply(), the default behavior is to go over columns.

    + +
    +
    +
    +
    +
    +
    In [124]:
    +
    +
    +
    data.apply(lambda c: c.name)
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[124]:
    + + +
    +
    max_temp                  max_temp
    +mean_temp                mean_temp
    +min_temp                  min_temp
    +max_dew                    max_dew
    +mean_dew                  mean_dew
    +min_dew                    min_dew
    +max_humidity          max_humidity
    +mean_humidity        mean_humidity
    +min_humidity          min_humidity
    +max_pressure          max_pressure
    +mean_pressure        mean_pressure
    +min_pressure          min_pressure
    +max_visibilty        max_visibilty
    +mean_visibility    mean_visibility
    +min_visibility      min_visibility
    +max_wind                  max_wind
    +mean_wind                mean_wind
    +min_wind                  min_wind
    +precipitation        precipitation
    +cloud_cover            cloud_cover
    +events                      events
    +wind_dir                  wind_dir
    +rain                          rain
    +thunderstorm          thunderstorm
    +fog                            fog
    +snow                          snow
    +dtype: object
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    You can make apply() go over rows by passing axis=1

    + +
    +
    +
    +
    +
    +
    In [125]:
    +
    +
    +
    data.apply(lambda r: r["max_pressure"] - r["min_pressure"], axis=1)
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[125]:
    + + +
    +
    date
    +2012-03-10    0.19
    +2012-03-11    0.24
    +2012-03-12    0.25
    +2012-03-13    0.15
    +2012-03-14    0.11
    +2012-03-15    0.11
    +2012-03-16    0.07
    +2012-03-17    0.11
    +2012-03-18    0.12
    +2012-03-19    0.11
    +2012-03-20    0.10
    +2012-03-21    0.12
    +2012-03-22    0.10
    +2012-03-23    0.27
    +2012-03-24    0.09
    +...
    +2013-02-24    0.15
    +2013-02-25    0.33
    +2013-02-26    0.40
    +2013-02-27    0.23
    +2013-02-28    0.28
    +2013-03-01    0.11
    +2013-03-02    0.11
    +2013-03-03    0.08
    +2013-03-04    0.20
    +2013-03-05    0.26
    +2013-03-06    0.53
    +2013-03-07    0.13
    +2013-03-08    0.13
    +2013-03-09    0.36
    +2013-03-10    0.05
    +Freq: D, Length: 366, dtype: float64
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +

    When you call drop(), though, it's flipped. To drop a column, you need to pass axis=1

    + +
    +
    +
    +
    +
    +
    In [126]:
    +
    +
    +
    data.drop(["events"], axis=1).columns
    +
    + +
    +
    +
    + +
    +
    + + +
    +
    Out[126]:
    + + +
    +
    Index([max_temp, mean_temp, min_temp, max_dew, mean_dew, min_dew, max_humidity, mean_humidity, min_humidity, max_pressure, mean_pressure, min_pressure, max_visibilty, mean_visibility, min_visibility, max_wind, mean_wind, min_wind, precipitation, cloud_cover, wind_dir, rain, thunderstorm, fog, snow], dtype=object)
    +
    + +
    + +
    +
    + +
    +
    +
    + +
    + +
    +

    Comments

    + + +
    + + + + + +
    + + +
    + + + + + + + +
    +
    + Contents © 2015 Michael Hansen - Powered by Nikola + +
    +
    + +
    +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/Examples/pandas/IntroductionToPandas_files/88x31.png b/Examples/pandas/IntroductionToPandas_files/88x31.png new file mode 100644 index 0000000..4de2222 Binary files /dev/null and b/Examples/pandas/IntroductionToPandas_files/88x31.png differ diff --git a/Examples/pandas/IntroductionToPandas_files/alfie.f51946af45e0b561c60f768335c9eb79.js b/Examples/pandas/IntroductionToPandas_files/alfie.f51946af45e0b561c60f768335c9eb79.js new file mode 100644 index 0000000..e23cb5f --- /dev/null +++ b/Examples/pandas/IntroductionToPandas_files/alfie.f51946af45e0b561c60f768335c9eb79.js @@ -0,0 +1 @@ +!function(self_name){var viglink,$;$={each:function(a,b){var c,d;for(c=0,d=a.length;d>c;c++)b(a[c],c)},extend:function(a){var b,c,d,e,f=arguments.length;for(a=a||{},c=1;f>c;c++)if(e=arguments[c],void 0!==e&&null!==e)for(d in e)b=e[d],a!==b&&void 0!==b&&(a[d]=b);return a}},$.extend($,{addClass:function(a,b){$.hasClass(a,b)||(a.className=(a.className?a.className+" ":"")+b)},attrValues:function(a,b,c){return c=c||" ",b=a[b],b?b.split(c):[]},bind:function(a,b){return function(){return a.apply(b,arguments)}},browser:function(){var a,b={},c=navigator.userAgent.toLowerCase().replace(/\s*[()]\s*/g,"; ").replace(/(\/[\w.]+)\s+/g,"$1; ").replace(/\;\s*$/,"").split(/;\s*/);return $.each(c,function(c){a=(/[\/ :]([^\/ :]+)$/.exec(c)||[])[1],b[a?c.substr(0,c.length-a.length-1).replace(/\d*$/,""):c]=a||!0}),{aol:b.aol,blackberry:b.blackberry,ie:b.msie,ios:b.mobile&&b.safari,opera:b.opera,playstation:b.playstation,version:parseFloat(b.version)||!1}}(),cache:function(){var a={},b="vglnk_"+(new Date).getTime(),c=0;return function(d,e,f){if(d){var g=d[b];if(g||void 0!==f)return g||(g=++c),a[g]||(d[b]=g,a[g]={}),void 0!==f&&(a[g][e]=f),"string"==typeof e?a[g][e]:a[g]}}}(),canonicalizeHostname:function(a){return"string"==typeof a&&(a=$.createA(a)),a.hostname?a.hostname.toString().toLowerCase().replace(/^www\./,"").replace(/:.*$/,""):""},clone:function(a){return $.extend({},a)},contains:function(a,b){return-1!==$.indexOf(a,b)},contextIsAncestor:function(a){for(var b=window.self;b.parent&&b.parent!==b;)if(b=b.parent,b===a)return!0;return!1},cors:function(url){var request,onSuccess=function(){eval(request.responseText)};request=new window.XMLHttpRequest,request.onreadystatechange=function(){4===request.readyState&&200===request.status&&onSuccess()},request.open("GET",url),request.withCredentials=!0,request.send()},createA:function(a,b){return $.createEl("a",{href:a,target:b})},createEl:function(a,b,c,d){var e,f=(d||document).createElement(a);b=b||{},c=c||{};for(e in b)void 0!==b[e]&&(f[e]=b[e]);return $.css(f,c),f},css:function(a,b){var c;for(c in b)try{a.style[c]=b[c]}catch(d){}return a},destructing:function(a){return function(a){var b,c=!1;return function(){return c||(b=a.apply(null,arguments),c=!0),b}}(a)},escapeRegExp:function(){var a;return function(b){return a=a||new RegExp("([.*+?^${}()|[\\]\\\\])","g"),b.replace(a,"\\$1")}}(),eventLink:function(a){var b,c,d=a.target||a.srcElement;do{try{b=d.nodeType}catch(e){return}if(1===b&&(c=d.tagName.toUpperCase(),"A"===c||"AREA"===c))return d;d=d.parentNode}while(d)},exceptionLogger:function(){var a=!1,b=function(){};return function(c,d){return void 0===d?function(){if(!a)return c.apply(this,arguments);try{return c.apply(this,arguments)}catch(d){b(d)}}:(a=d,void(b=c))}}(),fromQuery:function(a){"?"===a.substr(0,1)&&(a=a.substr(1));var b=a.split("&"),c={};return $.each(b,function(a){var b=a.split("=");c[decodeURIComponent(b[0])]=decodeURIComponent(b[1])}),c},hasAttrValue:function(a,b,c,d){return b?$.contains($.attrValues(a,b,d),c):!1},hasClass:function(a,b){return $.hasAttrValue(a,"className",b)},hasRel:function(a,b){return $.hasAttrValue(a,"rel",b)},indexOf:function(){return Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b)}:function(a,b){var c,d;for(c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1}}(),isArray:function(a){return"array"===$.type(a)},isDefaultPrevented:function(a){return a.isDefaultPrevented&&a.isDefaultPrevented()||a.returnValue===!1||a.defaultPrevented===!0},jsonp:function(a){var b=document.getElementsByTagName("script")[0],c=$.createEl("script",{type:"text/javascript",src:a});b.parentNode.insertBefore(c,b)},map:function(a,b){var c=[];return $.each(a,function(a,d){void 0!==a&&(c[d]=b(a))}),c},on:function(){var a;return function(b,c,d){var e,f;if(1===arguments.length)return void(a=b);if(2===arguments.length){if(!a)return;d=c,c=b,b=a}try{e=b["on"+c]}catch(g){}"function"==typeof e&&(b["on"+c]=$.bind(function(a){a=a||window.event;var c=e.apply(b,arguments);this.exceptionLogger(function(){return a?(void 0!==c&&a.returnValue!==!1&&(a.returnValue=c),$.isDefaultPrevented(a)&&"function"===$.type(a.preventDefault)&&a.preventDefault(),a.returnValue):c})()},this)),f=$.exceptionLogger(function(){return a.enabled()?d.apply(null,arguments):void 0}),b.addEventListener?b.addEventListener(c,f,!1):b.attachEvent&&b.attachEvent("on"+c,f)}}(),position:function(a){var b,c=0,d=0,e=0,f=0;if(!a.offsetParent)return!1;b=a;do c+=b.offsetLeft,d+=b.offsetTop,b=b.offsetParent;while(b);b=a;do e+=b.scrollLeft,f+=b.scrollTop,b=b.parentNode;while(b&&b!==document.body);return{x:c-e,y:d-f}},preventDefault:function(a){return a.preventDefault&&a.preventDefault(),a.returnValue=!1,!1},ready:function(){var a,b,c,d,e,f=!1,g=[],h=!1;return document.addEventListener?c=function(){document.removeEventListener("DOMContentLoaded",c,!1),e()}:document.attachEvent&&(d=function(){"complete"===document.readyState&&(document.detachEvent("onreadystatechange",d),e())}),a=function(){if(!f){if(f=!0,"complete"===document.readyState)return e();if(document.addEventListener)document.addEventListener("DOMContentLoaded",c,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",d);var a=!1;try{a=null===window.frameElement}catch(g){}document.documentElement.doScroll&&a&&b()}$.on(window,"load",e)}},b=function(){if(!h){try{document.documentElement.doScroll("left")}catch(a){return void setTimeout($.exceptionLogger(b),1)}e()}},e=function(){if(!h){if(!document.body)return setTimeout($.exceptionLogger(e),13);h=!0,g&&($.each(g,function(a){a()}),g=null)}},function(b){a(),h?b():g.push(b)}}(),reformatKeys:function(a){var b,c,d=function(a){return"_"+a.toLowerCase()};for(b in a)c=b.replace(/([A-Z])/g,d),"object"===$.type(a[b])&&(a[b]=$.reformatKeys(a[b])),c!==b&&(a[c]=a[b],delete a[b]);return a},removeClass:function(a,b){if($.hasClass(a,b)){var c,d,e=$.attrValues(a,"className");for(c=0,d=e.length;d>c;c++)e[c]===b&&delete e[c];a.className=e.join(" ")}},request:function(a,b,c){var d,e;return c=$.extend({fn:function(){},"return":!1,timeout:null},c),"string"==typeof c.fn?b=$.extend(b,{jsonp:c.fn}):"function"==typeof c.fn&&(d=$.destructing(c.fn),e=$.uniqid("vglnk_jsonp_"),b=$.extend(b,{jsonp:e}),window[e]=$.exceptionLogger(function(){d.apply(this,arguments),window[e]=void 0}),null!==c.timeout&&setTimeout($.exceptionLogger(d),c.timeout)),b=$.extend({format:"jsonp"},b),b=$.toQuery(b),a=a+(b.length?"?":"")+b,c["return"]?a:$.traits.cors?$.cors(a):$.jsonp(a)},toQuery:function(a){var b,c="";for(b in a)null!==a[b]&&void 0!==a[b]&&(c+="&"+encodeURIComponent(b)+"="+encodeURIComponent(a[b]));return c.substr(1)},type:function(a){return null===a?"null":void 0===a?"undefined":Object.prototype.toString.call(a).slice(8,-1).toLowerCase()},updateUrl:function(a,b){return $.extend($.createA(a),b).href},uniqid:function(){var a=0;return function(b){return(b||"")+(new Date).getTime()+a++}}()}),$.traits={basicCompatibility:!($.browser.blackberry||$.browser.playstation),cors:window.XMLHttpRequest&&void 0!==(new window.XMLHttpRequest).withCredentials,crossWindowCommunication:!($.browser.ios&&$.browser.version&&($.browser.version<5||$.browser.version>5)),jsRedirectSetsReferrer:$.browser.aol||!($.browser.ie||$.browser.opera),quirksMode:!Boolean(window.addEventListener),windowLevelHandlers:Boolean(window.addEventListener)};var opts,scope,self,viglink;viglink={api:function(a,b,c){var d=opts.api_url+"/"+a;return b=$.extend({cuid:opts.cuid,key:opts.key,drKey:opts.key?null:opts.dr_key,loc:location.href,subId:opts.sub_id,v:1},b),b.subId&&b.key!==opts.key&&(b.subId=null),$.request(d,b,c)},addEventListener:function(a,b){this.fire(a,b)},click:function(){var a=function(a,b){if(!("_self"===b||$.traits.crossWindowCommunication&&$.traits.jsRedirectSetsReferrer))return"go";try{if(void 0===a.document)throw!0;return"jsonp"}catch(c){return"go"}},b=function(a){if("_self"===a)return window.self;if($.traits.crossWindowCommunication&&$.traits.jsRedirectSetsReferrer){var b=window.open("",a);return b.focus(),b}},c=function(a){var b,c=a.previousSibling,d=a.nextSibling,e=["",a.textContent,""],f=10,g=function(a,b,c){var d=function(a){return a.replace(/\s+/g," ")};return a=d(a),b=d(b),c=d(c),a=a.replace(/^\s+/,"")," "===b.substr(0,1)&&(b=b.substr(1),a+=" "!==a.substr(a.length-1,1)?" ":"")," "===b.substr(b.length-1,1)&&(b=b.substr(0,b.length-1),c=(" "!==c.substr(0,1)?" ":"")+c),c=c.replace(/\s+$/,""),[a,b,c]};void 0!==e[1]&&(e[0]=c&&3===c.nodeType?c.data:"",e[2]=d&&3===d.nodeType?d.data:"",e=g.apply(this,e),""!==e[0]&&""!==e[2]&&(e[0]=e[0].split(" ").reverse().slice(0,f+(" "===e[0].substr(e[0].length-1,1)?1:0)).reverse().join(" "),e[2]=e[2].split(" ").slice(0,f).join(" "),b={type:"context",itype:($.cache(a,"params")||{}).type,before:e[0],after:e[2],txt:e[1],loc:location.href,out:a.href,v:2},viglink.log("info",$.toQuery(b))))};return function(d,e){e=d.target||e,e=!e||e===window.name||"_top"===e&&window.top===window.self||"_parent"===e&&window.parent===window.self?"_self":e;var f,g,h=b(e),i=a(h,e);if(f=$.destructing($.bind(function(){opts.time_click&&arguments.length&&this.logTime("clk");var a=Array.prototype.slice.call(arguments);a.unshift(d,h,e),this.onApiClick.apply(this,a)},this)),$.cache(this,"link","string"==typeof d?d:d.href),"string"==typeof d&&(d=$.createA(d,e),!this.preprocessLink(d)))return f();if(!opts.enabled)return f();if(g=this.clickParams(d,i),this.logTime(),opts.log_context&&c(d),"go"===i)this.redirect(this.api("click",g,{"return":!0}),h,e);else if(h===window.self)this.api("click",g,{fn:f,timeout:opts.click_timeout});else{if($.contextIsAncestor(h))return this.redirect(d.href,h,e);f=$.exceptionLogger(f),setTimeout(function(){f()},opts.click_timeout),h.document.open(),h.callback=f,h.document.write(""+d.href+''),h.document.close()}}}(),clickParams:function(a,b){var c=$.extend($.cache(a,"params"),{format:b,libid:opts.library_id,out:a.href,ref:document.referrer||null,reaf:opts.reaffiliate||null,title:document.title,txt:a.innerHTML});return c.txt.length>128&&(c.txt=c.txt.replace(/<[^>]+>/g,""),c.txt=c.txt.length>128?c.txt.substr(0,125)+"...":c.txt),c},enabled:function(){return opts.enabled&&scope!==window&&window.vglnk&&(window.vglnk.key||"function"==typeof window.vglnk)&&(opts.enabled=!1),opts.enabled},expose:function(a,b){b=b||this[a],b&&("function"==typeof b?b=$.exceptionLogger($.bind(b,this)):"object"==typeof b&&(b=$.clone(b)),self[a]||(self[a]=b))},fire:function(){var a={};return function(b,c){b=b.toLowerCase();var d=a[b]||{fired:!1,listeners:[]},e=function(a){a({type:b})};"function"==typeof c?d.fired?e(c):d.listeners.push(c):(d.fired=!0,$.each(d.listeners,function(a){"function"==typeof a&&e(a)}),d.listeners=[]),a[b]=d}}(),handleRightClick:function(a,b){if(opts.rewrite_modified&&a&&b)switch(b){case"setup":$.cache(a,"href")||$.cache(a,"href",a.href),a.href=this.api("click",this.clickParams(a,"go"),{"return":!0}),setTimeout($.exceptionLogger($.bind(function(){this.handleRightClick(a,"teardown")},this)),0);break;case"teardown":a.href=$.cache(a,"href"),$.cache(a,"href",null)}},harmony:function(){return $.harmony={UNSAFE_QUIRKSMODE_HANDLERS:1},function(a){return opts.harmony_level0;)a=c.shift(),b[a]=b[a]||{},b=b[a];scope=b,self=scope[self_name]=scope[self_name]||{}},initOptions:function(){var a;this.initLegacyOptions(),opts=$.extend(this.publicOptions({api_url:"//api.viglink.com/api",cuid:null,dev:!1,dr_key:null,enabled:$.traits.basicCompatibility,key:null,partner:null,sub_id:null,reaffiliate:!1,harmony_level:0,rewrite_original:!0,rewrite_modified:!1}),opts,self,{click_timeout:1e3,hop_timeout:2e3,debug:!1,library_id:null,log_context:!0,nofollow:{},norewrite:{},plugins:{link_affiliation:{},modified_clicks:{}},swap:{},time_click:!1,time_ping:!1});for(a in opts)"_plugin"===a.substr(-7)&&delete opts[a]},initLegacyOptions:function(){var a,b={DR_id:"dr_key",vglnk_api_key:"key",vglnk_cuid:"cuid",vglnk_domain:"api_url",vglnk_reaf:"reaffiliate",vglnk_subid:"sub_id"};for(a in b)void 0!==window[a]&&(self[b[a]]=window[a],"vglnk_domain"===a&&(self[b[a]]+="/api"))},initLegacyCallbacks:function(){var a,b={vl_cB:$.bind(this.onApiClick,this),vl_disable:function(){opts.enabled=!1}};for(a in b)window[a]=b[a]},initLinks:function(){$.each(document.links,$.bind(this.preprocessLink,this))},initPlugins:function(){var a,b=100,c=5e3,d=1,e=[],f=function(){var g=[],h=function(a){return function(){if(a){var b=Array.prototype.slice.call(arguments);b.unshift("custom",a),viglink.log.apply(this,b)}}};a=null,$.each(e,function(a){var b,c,d=a[0],e=a[1],f=a[2],i=window.vglnk&&window.vglnk[d+"_plugin"];i?(b="function"===$.type(i.run)?i.run:i,c="function"===$.type(i.setup)?i.setup:null,e&&1===e.mode?(c&&c(e,$.clone($),self,h(e.key)),delete e.mode):b&&(c&&!f&&c(e,$.clone($),self,h(e.key)),b(e,$.clone($),self,h(e.key)))):g.push(a)}),e=g,e.length>0&&(a=setTimeout($.exceptionLogger(f),Math.min(Math.max(Math.pow(2,++d),b),c)))},g=function(b,c){return function(b,c){return function(){e.push([b,c,!0]),d=1,clearTimeout(a),f()}}(b,c)};return function(a){var b;for(b in a)"object"==typeof a[b]&&a[b].enabled!==!1&&(e.push([b,a[b]]),1===a[b].mode&&this.expose("init_"+b,g(b,a[b])));f()}}(),isRewritable:function(){var a=$.canonicalizeHostname(document.location);return function(b){var c,d="";try{c=b.hostname,d=b.protocol,c.charAt(0)}catch(e){return!1}return""!==c&&(c=$.canonicalizeHostname(b)),!(""===c||a===c||!d.match(/^https?:$/i)||opts.norewrite[c]||!opts.rewrite_original&&!$.cache(b,"type")||$.hasRel(b,"norewrite")||$.hasRel(b,"noskim"))}}(),initEvents:$.destructing(function(){var a=$.traits.windowLevelHandlers?window:document;$.on(a,"mousedown",function(a){a=a||window.event;var b=$.eventLink(a);b&&!$.cache(b,"evented")&&($.on(b,"click",function(){}),$.cache(b,"evented",!0))}),(!$.traits.quirksMode||viglink.harmony($.harmony.UNSAFE_QUIRKSMODE_HANDLERS))&&($.on(a,"click",$.bind(viglink.onClick,viglink)),$.on(a,"contextmenu",$.bind(viglink.onContextmenu,viglink)))}),log:function(a,b,c,d){var e,f,g=$.toQuery({nocache:$.uniqid()}),h="pixel.gif";if("custom"===a)f=b,a=c,g+="&"+$.toQuery({key:f,type:a}),$.each("array"===$.type(d)?d:[d],function(a){$.each(["e","i","o"],function(b){delete a[b]}),g+="&"+$.toQuery(a)});else{if(g+="&"+$.toQuery({key:opts.key,drKey:opts.key?null:opts.dr_key}),"time"===a)h="time.gif",e={libId:opts.library_id,time:c,type:b};else if("exception"===a)e={e:b,o:c};else{if("info"!==a)return;e={i:b}}g+="&"+$.toQuery(e)}$.createEl("img").src=opts.api_url+"/"+h+"?"+g},logException:function(a){if(opts.debug){var b={link:$.cache(this,"link"),loc:document.location.href,UA:navigator.userAgent};"string"==typeof a?b.message=a:b=$.extend(b,a),this.log("exception",a,$.toQuery(b))}},logTime:function(){var a;return function(b){0===arguments.length?a=(new Date).getTime():this.log("time",b,(new Date).getTime()-a)}}(),onApiClick:function(a,b,c,d,e){var f,g=d||a.href,h=$.bind(function(){this.redirect(g,b,c)},this);"object"==typeof e&&(e.tracking||e.image)?(f=$.createEl(e.tracking?"iframe":"img",{src:e.tracking||e.image},{height:0,width:0,visibility:"hidden"}),document.body.appendChild(f),setTimeout($.exceptionLogger(h),e.timeout||opts.hop_timeout)):h()},onApiPing:function(a,b,c,d,e,f){opts.rewrite_original=!1,e=$.reformatKeys(e||{});var g,h,i;h=function(a){var b={},c=function(a){$.isArray(a)?b[a[0]]=a[1]:b[a]=1};return $.isArray(a)&&$.each(a,c),b},i=$.extend(opts.plugins,e.plugins),opts=$.extend(opts,e),delete opts.plugins,opts.library_id=a,opts.click_timeout=b,opts.time_ping&&this.logTime("png"),$.extend(opts.norewrite,h(c)),$.extend(opts.swap,h(d)),$.extend(opts.nofollow,h(f));for(g in opts)"on"===g.toLowerCase().substr(0,2)&&g.length>2&&"function"===$.type(opts[g])&&($.on(viglink,g.toLowerCase().substr(2),$.bind(opts[g],window)),delete opts[g]);this.initPlugins(i),this.initLinks(),this.initEvents(),this.fire("libready")},onClick:function(a){a=a||window.event;var b=a.ctrlKey||a.metaKey||a.altKey||a.shiftKey,c=a.which&&1===a.which||0===a.button,d=$.eventLink(a);if(d&&this.isRewritable(d)&&!b&&c&&!$.isDefaultPrevented(a))return this.click(d),$.preventDefault(a)},onContextmenu:function(a){var b=$.eventLink(a||window.event);b&&this.isRewritable(b)&&this.handleRightClick(b,"setup")},opt:function(a,b){return void 0!==b&&void 0!==this.publicOptions()[a]&&(opts[a]=b),opts[a]},ping:function(){var a=!1;return function(){a||!opts.key&&!opts.dr_key||(a=!0,this.logTime(),this.api("ping",null,{fn:$.bind(this.onApiPing,this)}))}}(),preprocessLink:function(a){if(this.isRewritable(a)){var b,c=$.createA(opts.api_url);return"/api/click"!=a.pathname||a.hostname!=c.hostname&&!a.hostname.match(/(^|\.)(api|cdn|apicdn)\.viglink\.com$/)||(b=$.fromQuery(a.search),void 0!==b.out&&(a.href=b.out,delete b.out,$.cache(a,"params",b))),opts.swap[a.href]&&(a.href=opts.swap[a.href]),opts.nofollow[a.href]&&!$.hasRel(a,"nofollow")&&(a.rel=(a.rel?a.rel+" ":"")+"nofollow"),window.IPBoard&&window.IPBoard.prototype&&window.IPBoard.prototype.delegate&&$.hasRel(a,"external")&&(a.rel=a.rel.replace(/(^| )external( |$)/,""),a.target="_blank"),a}},publicOptions:function(){var a={};return function(b){return"object"===$.type(b)&&(a=b),$.extend({},a)}}(),redirect:function(a,b,c){var d,e;$.traits.crossWindowCommunication||b?$.traits.jsRedirectSetsReferrer?setTimeout($.exceptionLogger(function(){b&&b!==window.self?$.contextIsAncestor(b)?b.location=a:b.location.replace(a):window.location=a}),0):("_blank"===c&&(c=$.uniqid("win_")),d=$.createA(a,c),d.rel="norewrite",document.body.appendChild(d),d.click(),d.parentNode.removeChild(d)):(e=window.open(a,c),e.focus())}},viglink.init()}("undefined"==typeof vglnk_self?"vglnk":vglnk_self),window.vglnk=window.vglnk||{},window.vglnk.link_affiliation_plugin={run:function(a,b,c){c.opt("rewrite_original",!0)}},window.vglnk=window.vglnk||{},window.vglnk.modified_clicks_plugin={run:function(a,b,c){c.opt("rewrite_modified",!0)}}; \ No newline at end of file diff --git a/Examples/pandas/IntroductionToPandas_files/all-nocdn.css b/Examples/pandas/IntroductionToPandas_files/all-nocdn.css new file mode 100644 index 0000000..03aaa20 --- /dev/null +++ b/Examples/pandas/IntroductionToPandas_files/all-nocdn.css @@ -0,0 +1,8008 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} + +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +audio:not([controls]) { + display: none; +} + +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +a:hover, +a:active { + outline: 0; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + width: auto\9; + height: auto; + max-width: 100%; + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; +} + +#map_canvas img, +.google-maps img { + max-width: none; +} + +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} + +button, +input { + *overflow: visible; + line-height: normal; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +label, +select, +button, +input[type="button"], +input[type="reset"], +input[type="submit"], +input[type="radio"], +input[type="checkbox"] { + cursor: pointer; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + @page { + margin: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } +} + +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 20px; + color: #333333; + background-color: #ffffff; +} + +a { + color: #0088cc; + text-decoration: none; +} + +a:hover, +a:focus { + color: #005580; + text-decoration: underline; +} + +.img-rounded { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.img-polaroid { + padding: 4px; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +.img-circle { + -webkit-border-radius: 500px; + -moz-border-radius: 500px; + border-radius: 500px; +} + +.row { + margin-left: -20px; + *zoom: 1; +} + +.row:before, +.row:after { + display: table; + line-height: 0; + content: ""; +} + +.row:after { + clear: both; +} + +[class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; +} + +.container, +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.span12 { + width: 940px; +} + +.span11 { + width: 860px; +} + +.span10 { + width: 780px; +} + +.span9 { + width: 700px; +} + +.span8 { + width: 620px; +} + +.span7 { + width: 540px; +} + +.span6 { + width: 460px; +} + +.span5 { + width: 380px; +} + +.span4 { + width: 300px; +} + +.span3 { + width: 220px; +} + +.span2 { + width: 140px; +} + +.span1 { + width: 60px; +} + +.offset12 { + margin-left: 980px; +} + +.offset11 { + margin-left: 900px; +} + +.offset10 { + margin-left: 820px; +} + +.offset9 { + margin-left: 740px; +} + +.offset8 { + margin-left: 660px; +} + +.offset7 { + margin-left: 580px; +} + +.offset6 { + margin-left: 500px; +} + +.offset5 { + margin-left: 420px; +} + +.offset4 { + margin-left: 340px; +} + +.offset3 { + margin-left: 260px; +} + +.offset2 { + margin-left: 180px; +} + +.offset1 { + margin-left: 100px; +} + +.row-fluid { + width: 100%; + *zoom: 1; +} + +.row-fluid:before, +.row-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.row-fluid:after { + clear: both; +} + +.row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.127659574468085%; + *margin-left: 2.074468085106383%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.row-fluid [class*="span"]:first-child { + margin-left: 0; +} + +.row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.127659574468085%; +} + +.row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; +} + +.row-fluid .span11 { + width: 91.48936170212765%; + *width: 91.43617021276594%; +} + +.row-fluid .span10 { + width: 82.97872340425532%; + *width: 82.92553191489361%; +} + +.row-fluid .span9 { + width: 74.46808510638297%; + *width: 74.41489361702126%; +} + +.row-fluid .span8 { + width: 65.95744680851064%; + *width: 65.90425531914893%; +} + +.row-fluid .span7 { + width: 57.44680851063829%; + *width: 57.39361702127659%; +} + +.row-fluid .span6 { + width: 48.93617021276595%; + *width: 48.88297872340425%; +} + +.row-fluid .span5 { + width: 40.42553191489362%; + *width: 40.37234042553192%; +} + +.row-fluid .span4 { + width: 31.914893617021278%; + *width: 31.861702127659576%; +} + +.row-fluid .span3 { + width: 23.404255319148934%; + *width: 23.351063829787233%; +} + +.row-fluid .span2 { + width: 14.893617021276595%; + *width: 14.840425531914894%; +} + +.row-fluid .span1 { + width: 6.382978723404255%; + *width: 6.329787234042553%; +} + +.row-fluid .offset12 { + margin-left: 104.25531914893617%; + *margin-left: 104.14893617021275%; +} + +.row-fluid .offset12:first-child { + margin-left: 102.12765957446808%; + *margin-left: 102.02127659574467%; +} + +.row-fluid .offset11 { + margin-left: 95.74468085106382%; + *margin-left: 95.6382978723404%; +} + +.row-fluid .offset11:first-child { + margin-left: 93.61702127659574%; + *margin-left: 93.51063829787232%; +} + +.row-fluid .offset10 { + margin-left: 87.23404255319149%; + *margin-left: 87.12765957446807%; +} + +.row-fluid .offset10:first-child { + margin-left: 85.1063829787234%; + *margin-left: 84.99999999999999%; +} + +.row-fluid .offset9 { + margin-left: 78.72340425531914%; + *margin-left: 78.61702127659572%; +} + +.row-fluid .offset9:first-child { + margin-left: 76.59574468085106%; + *margin-left: 76.48936170212764%; +} + +.row-fluid .offset8 { + margin-left: 70.2127659574468%; + *margin-left: 70.10638297872339%; +} + +.row-fluid .offset8:first-child { + margin-left: 68.08510638297872%; + *margin-left: 67.9787234042553%; +} + +.row-fluid .offset7 { + margin-left: 61.70212765957446%; + *margin-left: 61.59574468085106%; +} + +.row-fluid .offset7:first-child { + margin-left: 59.574468085106375%; + *margin-left: 59.46808510638297%; +} + +.row-fluid .offset6 { + margin-left: 53.191489361702125%; + *margin-left: 53.085106382978715%; +} + +.row-fluid .offset6:first-child { + margin-left: 51.063829787234035%; + *margin-left: 50.95744680851063%; +} + +.row-fluid .offset5 { + margin-left: 44.68085106382979%; + *margin-left: 44.57446808510638%; +} + +.row-fluid .offset5:first-child { + margin-left: 42.5531914893617%; + *margin-left: 42.4468085106383%; +} + +.row-fluid .offset4 { + margin-left: 36.170212765957444%; + *margin-left: 36.06382978723405%; +} + +.row-fluid .offset4:first-child { + margin-left: 34.04255319148936%; + *margin-left: 33.93617021276596%; +} + +.row-fluid .offset3 { + margin-left: 27.659574468085104%; + *margin-left: 27.5531914893617%; +} + +.row-fluid .offset3:first-child { + margin-left: 25.53191489361702%; + *margin-left: 25.425531914893618%; +} + +.row-fluid .offset2 { + margin-left: 19.148936170212764%; + *margin-left: 19.04255319148936%; +} + +.row-fluid .offset2:first-child { + margin-left: 17.02127659574468%; + *margin-left: 16.914893617021278%; +} + +.row-fluid .offset1 { + margin-left: 10.638297872340425%; + *margin-left: 10.53191489361702%; +} + +.row-fluid .offset1:first-child { + margin-left: 8.51063829787234%; + *margin-left: 8.404255319148938%; +} + +[class*="span"].hide, +.row-fluid [class*="span"].hide { + display: none; +} + +[class*="span"].pull-right, +.row-fluid [class*="span"].pull-right { + float: right; +} + +.container { + margin-right: auto; + margin-left: auto; + *zoom: 1; +} + +.container:before, +.container:after { + display: table; + line-height: 0; + content: ""; +} + +.container:after { + clear: both; +} + +.container-fluid { + padding-right: 20px; + padding-left: 20px; + *zoom: 1; +} + +.container-fluid:before, +.container-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.container-fluid:after { + clear: both; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 21px; + font-weight: 200; + line-height: 30px; +} + +small { + font-size: 85%; +} + +strong { + font-weight: bold; +} + +em { + font-style: italic; +} + +cite { + font-style: normal; +} + +.muted { + color: #999999; +} + +a.muted:hover, +a.muted:focus { + color: #808080; +} + +.text-warning { + color: #c09853; +} + +a.text-warning:hover, +a.text-warning:focus { + color: #a47e3c; +} + +.text-error { + color: #b94a48; +} + +a.text-error:hover, +a.text-error:focus { + color: #953b39; +} + +.text-info { + color: #3a87ad; +} + +a.text-info:hover, +a.text-info:focus { + color: #2d6987; +} + +.text-success { + color: #468847; +} + +a.text-success:hover, +a.text-success:focus { + color: #356635; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 10px 0; + font-family: inherit; + font-weight: bold; + line-height: 20px; + color: inherit; + text-rendering: optimizelegibility; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + line-height: 40px; +} + +h1 { + font-size: 38.5px; +} + +h2 { + font-size: 31.5px; +} + +h3 { + font-size: 24.5px; +} + +h4 { + font-size: 17.5px; +} + +h5 { + font-size: 14px; +} + +h6 { + font-size: 11.9px; +} + +h1 small { + font-size: 24.5px; +} + +h2 small { + font-size: 17.5px; +} + +h3 small { + font-size: 14px; +} + +h4 small { + font-size: 14px; +} + +.page-header { + padding-bottom: 9px; + margin: 20px 0 30px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + padding: 0; + margin: 0 0 10px 25px; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} + +li { + line-height: 20px; +} + +ul.unstyled, +ol.unstyled { + margin-left: 0; + list-style: none; +} + +ul.inline, +ol.inline { + margin-left: 0; + list-style: none; +} + +ul.inline > li, +ol.inline > li { + display: inline-block; + *display: inline; + padding-right: 5px; + padding-left: 5px; + *zoom: 1; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 20px; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 10px; +} + +.dl-horizontal { + *zoom: 1; +} + +.dl-horizontal:before, +.dl-horizontal:after { + display: table; + line-height: 0; + content: ""; +} + +.dl-horizontal:after { + clear: both; +} + +.dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; +} + +.dl-horizontal dd { + margin-left: 180px; +} + +hr { + margin: 20px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 0 0 0 15px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + margin-bottom: 0; + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote small { + display: block; + line-height: 20px; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + float: right; + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 20px; +} + +code, +pre { + padding: 0 3px 2px; + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + font-size: 12px; + color: #333333; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +code { + padding: 2px 4px; + color: #d14; + white-space: nowrap; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 20px; + word-break: break-all; + word-wrap: break-word; + white-space: pre; + white-space: pre-wrap; + background-color: #f5f5f5; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + color: inherit; + white-space: pre; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +form { + margin: 0 0 20px; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: 40px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +legend small { + font-size: 15px; + color: #999999; +} + +label, +input, +button, +select, +textarea { + font-size: 14px; + font-weight: normal; + line-height: 20px; +} + +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +label { + display: block; + margin-bottom: 5px; +} + +select, +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + display: inline-block; + height: 20px; + padding: 4px 6px; + margin-bottom: 10px; + font-size: 14px; + line-height: 20px; + color: #555555; + vertical-align: middle; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +input, +textarea, +.uneditable-input { + width: 206px; +} + +textarea { + height: auto; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + background-color: #ffffff; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus, +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + *margin-top: 0; + line-height: normal; +} + +input[type="file"], +input[type="image"], +input[type="submit"], +input[type="reset"], +input[type="button"], +input[type="radio"], +input[type="checkbox"] { + width: auto; +} + +select, +input[type="file"] { + height: 30px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 30px; +} + +select { + width: 220px; + background-color: #ffffff; + border: 1px solid #cccccc; +} + +select[multiple], +select[size] { + height: auto; +} + +select:focus, +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.uneditable-input, +.uneditable-textarea { + color: #999999; + cursor: not-allowed; + background-color: #fcfcfc; + border-color: #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); +} + +.uneditable-input { + overflow: hidden; + white-space: nowrap; +} + +.uneditable-textarea { + width: auto; + height: auto; +} + +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; +} + +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #999999; +} + +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #999999; +} + +.radio, +.checkbox { + min-height: 20px; + padding-left: 20px; +} + +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; +} + +.radio.inline, +.checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} + +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { + margin-left: 10px; +} + +.input-mini { + width: 60px; +} + +.input-small { + width: 90px; +} + +.input-medium { + width: 150px; +} + +.input-large { + width: 210px; +} + +.input-xlarge { + width: 270px; +} + +.input-xxlarge { + width: 530px; +} + +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"] { + float: none; + margin-left: 0; +} + +.input-append input[class*="span"], +.input-append .uneditable-input[class*="span"], +.input-prepend input[class*="span"], +.input-prepend .uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"], +.row-fluid .input-prepend [class*="span"], +.row-fluid .input-append [class*="span"] { + display: inline-block; +} + +input, +textarea, +.uneditable-input { + margin-left: 0; +} + +.controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; +} + +input.span12, +textarea.span12, +.uneditable-input.span12 { + width: 926px; +} + +input.span11, +textarea.span11, +.uneditable-input.span11 { + width: 846px; +} + +input.span10, +textarea.span10, +.uneditable-input.span10 { + width: 766px; +} + +input.span9, +textarea.span9, +.uneditable-input.span9 { + width: 686px; +} + +input.span8, +textarea.span8, +.uneditable-input.span8 { + width: 606px; +} + +input.span7, +textarea.span7, +.uneditable-input.span7 { + width: 526px; +} + +input.span6, +textarea.span6, +.uneditable-input.span6 { + width: 446px; +} + +input.span5, +textarea.span5, +.uneditable-input.span5 { + width: 366px; +} + +input.span4, +textarea.span4, +.uneditable-input.span4 { + width: 286px; +} + +input.span3, +textarea.span3, +.uneditable-input.span3 { + width: 206px; +} + +input.span2, +textarea.span2, +.uneditable-input.span2 { + width: 126px; +} + +input.span1, +textarea.span1, +.uneditable-input.span1 { + width: 46px; +} + +.controls-row { + *zoom: 1; +} + +.controls-row:before, +.controls-row:after { + display: table; + line-height: 0; + content: ""; +} + +.controls-row:after { + clear: both; +} + +.controls-row [class*="span"], +.row-fluid .controls-row [class*="span"] { + float: left; +} + +.controls-row .checkbox[class*="span"], +.controls-row .radio[class*="span"] { + padding-top: 5px; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + cursor: not-allowed; + background-color: #eeeeee; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly] { + background-color: transparent; +} + +.control-group.warning .control-label, +.control-group.warning .help-block, +.control-group.warning .help-inline { + color: #c09853; +} + +.control-group.warning .checkbox, +.control-group.warning .radio, +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + color: #c09853; +} + +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.control-group.error .control-label, +.control-group.error .help-block, +.control-group.error .help-inline { + color: #b94a48; +} + +.control-group.error .checkbox, +.control-group.error .radio, +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + color: #b94a48; +} + +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.control-group.success .control-label, +.control-group.success .help-block, +.control-group.success .help-inline { + color: #468847; +} + +.control-group.success .checkbox, +.control-group.success .radio, +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + color: #468847; +} + +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.control-group.info .control-label, +.control-group.info .help-block, +.control-group.info .help-inline { + color: #3a87ad; +} + +.control-group.info .checkbox, +.control-group.info .radio, +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + color: #3a87ad; +} + +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + border-color: #3a87ad; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.info input:focus, +.control-group.info select:focus, +.control-group.info textarea:focus { + border-color: #2d6987; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; +} + +.control-group.info .input-prepend .add-on, +.control-group.info .input-append .add-on { + color: #3a87ad; + background-color: #d9edf7; + border-color: #3a87ad; +} + +input:focus:invalid, +textarea:focus:invalid, +select:focus:invalid { + color: #b94a48; + border-color: #ee5f5b; +} + +input:focus:invalid:focus, +textarea:focus:invalid:focus, +select:focus:invalid:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} + +.form-actions { + padding: 19px 20px 20px; + margin-top: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-top: 1px solid #e5e5e5; + *zoom: 1; +} + +.form-actions:before, +.form-actions:after { + display: table; + line-height: 0; + content: ""; +} + +.form-actions:after { + clear: both; +} + +.help-block, +.help-inline { + color: #595959; +} + +.help-block { + display: block; + margin-bottom: 10px; +} + +.help-inline { + display: inline-block; + *display: inline; + padding-left: 5px; + vertical-align: middle; + *zoom: 1; +} + +.input-append, +.input-prepend { + display: inline-block; + margin-bottom: 10px; + font-size: 0; + white-space: nowrap; + vertical-align: middle; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input, +.input-append .dropdown-menu, +.input-prepend .dropdown-menu, +.input-append .popover, +.input-prepend .popover { + font-size: 14px; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input { + position: relative; + margin-bottom: 0; + *margin-left: 0; + vertical-align: top; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append input:focus, +.input-prepend input:focus, +.input-append select:focus, +.input-prepend select:focus, +.input-append .uneditable-input:focus, +.input-prepend .uneditable-input:focus { + z-index: 2; +} + +.input-append .add-on, +.input-prepend .add-on { + display: inline-block; + width: auto; + height: 20px; + min-width: 16px; + padding: 4px 5px; + font-size: 14px; + font-weight: normal; + line-height: 20px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + background-color: #eeeeee; + border: 1px solid #ccc; +} + +.input-append .add-on, +.input-prepend .add-on, +.input-append .btn, +.input-prepend .btn, +.input-append .btn-group > .dropdown-toggle, +.input-prepend .btn-group > .dropdown-toggle { + vertical-align: top; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-append .active, +.input-prepend .active { + background-color: #a9dba9; + border-color: #46a546; +} + +.input-prepend .add-on, +.input-prepend .btn { + margin-right: -1px; +} + +.input-prepend .add-on:first-child, +.input-prepend .btn:first-child { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input, +.input-append select, +.input-append .uneditable-input { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input + .btn-group .btn:last-child, +.input-append select + .btn-group .btn:last-child, +.input-append .uneditable-input + .btn-group .btn:last-child { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append .add-on, +.input-append .btn, +.input-append .btn-group { + margin-left: -1px; +} + +.input-append .add-on:last-child, +.input-append .btn:last-child, +.input-append .btn-group:last-child > .dropdown-toggle { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-prepend.input-append input + .btn-group .btn, +.input-prepend.input-append select + .btn-group .btn, +.input-prepend.input-append .uneditable-input + .btn-group .btn { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .btn-group:first-child { + margin-left: 0; +} + +input.search-query { + padding-right: 14px; + padding-right: 4px \9; + padding-left: 14px; + padding-left: 4px \9; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ + + margin-bottom: 0; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +/* Allow for input prepend/append in search forms */ + +.form-search .input-append .search-query, +.form-search .input-prepend .search-query { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.form-search .input-append .search-query { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search .input-append .btn { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .search-query { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .btn { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { + display: inline-block; + *display: inline; + margin-bottom: 0; + vertical-align: middle; + *zoom: 1; +} + +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} + +.form-search label, +.form-inline label, +.form-search .btn-group, +.form-inline .btn-group { + display: inline-block; +} + +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + margin-bottom: 0; +} + +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { + padding-left: 0; + margin-bottom: 0; + vertical-align: middle; +} + +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { + float: left; + margin-right: 3px; + margin-left: 0; +} + +.control-group { + margin-bottom: 10px; +} + +legend + .control-group { + margin-top: 20px; + -webkit-margin-top-collapse: separate; +} + +.form-horizontal .control-group { + margin-bottom: 20px; + *zoom: 1; +} + +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + line-height: 0; + content: ""; +} + +.form-horizontal .control-group:after { + clear: both; +} + +.form-horizontal .control-label { + float: left; + width: 160px; + padding-top: 5px; + text-align: right; +} + +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 180px; + *margin-left: 0; +} + +.form-horizontal .controls:first-child { + *padding-left: 180px; +} + +.form-horizontal .help-block { + margin-bottom: 0; +} + +.form-horizontal input + .help-block, +.form-horizontal select + .help-block, +.form-horizontal textarea + .help-block, +.form-horizontal .uneditable-input + .help-block, +.form-horizontal .input-prepend + .help-block, +.form-horizontal .input-append + .help-block { + margin-top: 10px; +} + +.form-horizontal .form-actions { + padding-left: 180px; +} + +table { + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table th, +.table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table th { + font-weight: bold; +} + +.table thead th { + vertical-align: bottom; +} + +.table caption + thead tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child th, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child th, +.table thead:first-child tr:first-child td { + border-top: 0; +} + +.table tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table .table { + background-color: #ffffff; +} + +.table-condensed th, +.table-condensed td { + padding: 4px 5px; +} + +.table-bordered { + border: 1px solid #dddddd; + border-collapse: separate; + *border-collapse: collapse; + border-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.table-bordered th, +.table-bordered td { + border-left: 1px solid #dddddd; +} + +.table-bordered caption + thead tr:first-child th, +.table-bordered caption + tbody tr:first-child th, +.table-bordered caption + tbody tr:first-child td, +.table-bordered colgroup + thead tr:first-child th, +.table-bordered colgroup + tbody tr:first-child th, +.table-bordered colgroup + tbody tr:first-child td, +.table-bordered thead:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child td { + border-top: 0; +} + +.table-bordered thead:first-child tr:first-child > th:first-child, +.table-bordered tbody:first-child tr:first-child > td:first-child, +.table-bordered tbody:first-child tr:first-child > th:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered thead:first-child tr:first-child > th:last-child, +.table-bordered tbody:first-child tr:first-child > td:last-child, +.table-bordered tbody:first-child tr:first-child > th:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:first-child, +.table-bordered tbody:last-child tr:last-child > td:first-child, +.table-bordered tbody:last-child tr:last-child > th:first-child, +.table-bordered tfoot:last-child tr:last-child > td:first-child, +.table-bordered tfoot:last-child tr:last-child > th:first-child { + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:last-child, +.table-bordered tbody:last-child tr:last-child > td:last-child, +.table-bordered tbody:last-child tr:last-child > th:last-child, +.table-bordered tfoot:last-child tr:last-child > td:last-child, +.table-bordered tfoot:last-child tr:last-child > th:last-child { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + -moz-border-radius-bottomleft: 0; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomright: 0; +} + +.table-bordered caption + thead tr:first-child th:first-child, +.table-bordered caption + tbody tr:first-child td:first-child, +.table-bordered colgroup + thead tr:first-child th:first-child, +.table-bordered colgroup + tbody tr:first-child td:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered caption + thead tr:first-child th:last-child, +.table-bordered caption + tbody tr:first-child td:last-child, +.table-bordered colgroup + thead tr:first-child th:last-child, +.table-bordered colgroup + tbody tr:first-child td:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-striped tbody > tr:nth-child(odd) > td, +.table-striped tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover tbody tr:hover > td, +.table-hover tbody tr:hover > th { + background-color: #f5f5f5; +} + +table td[class*="span"], +table th[class*="span"], +.row-fluid table td[class*="span"], +.row-fluid table th[class*="span"] { + display: table-cell; + float: none; + margin-left: 0; +} + +.table td.span1, +.table th.span1 { + float: none; + width: 44px; + margin-left: 0; +} + +.table td.span2, +.table th.span2 { + float: none; + width: 124px; + margin-left: 0; +} + +.table td.span3, +.table th.span3 { + float: none; + width: 204px; + margin-left: 0; +} + +.table td.span4, +.table th.span4 { + float: none; + width: 284px; + margin-left: 0; +} + +.table td.span5, +.table th.span5 { + float: none; + width: 364px; + margin-left: 0; +} + +.table td.span6, +.table th.span6 { + float: none; + width: 444px; + margin-left: 0; +} + +.table td.span7, +.table th.span7 { + float: none; + width: 524px; + margin-left: 0; +} + +.table td.span8, +.table th.span8 { + float: none; + width: 604px; + margin-left: 0; +} + +.table td.span9, +.table th.span9 { + float: none; + width: 684px; + margin-left: 0; +} + +.table td.span10, +.table th.span10 { + float: none; + width: 764px; + margin-left: 0; +} + +.table td.span11, +.table th.span11 { + float: none; + width: 844px; + margin-left: 0; +} + +.table td.span12, +.table th.span12 { + float: none; + width: 924px; + margin-left: 0; +} + +.table tbody tr.success > td { + background-color: #dff0d8; +} + +.table tbody tr.error > td { + background-color: #f2dede; +} + +.table tbody tr.warning > td { + background-color: #fcf8e3; +} + +.table tbody tr.info > td { + background-color: #d9edf7; +} + +.table-hover tbody tr.success:hover > td { + background-color: #d0e9c6; +} + +.table-hover tbody tr.error:hover > td { + background-color: #ebcccc; +} + +.table-hover tbody tr.warning:hover > td { + background-color: #faf2cc; +} + +.table-hover tbody tr.info:hover > td { + background-color: #c4e3f3; +} + +[class^="icon-"], +[class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + margin-top: 1px; + *margin-right: .3em; + line-height: 14px; + vertical-align: text-top; + background-image: url("../img/glyphicons-halflings.png"); + background-position: 14px 14px; + background-repeat: no-repeat; +} + +/* White icons with optional class, or on hover/focus/active states of certain elements */ + +.icon-white, +.nav-pills > .active > a > [class^="icon-"], +.nav-pills > .active > a > [class*=" icon-"], +.nav-list > .active > a > [class^="icon-"], +.nav-list > .active > a > [class*=" icon-"], +.navbar-inverse .nav > .active > a > [class^="icon-"], +.navbar-inverse .nav > .active > a > [class*=" icon-"], +.dropdown-menu > li > a:hover > [class^="icon-"], +.dropdown-menu > li > a:focus > [class^="icon-"], +.dropdown-menu > li > a:hover > [class*=" icon-"], +.dropdown-menu > li > a:focus > [class*=" icon-"], +.dropdown-menu > .active > a > [class^="icon-"], +.dropdown-menu > .active > a > [class*=" icon-"], +.dropdown-submenu:hover > a > [class^="icon-"], +.dropdown-submenu:focus > a > [class^="icon-"], +.dropdown-submenu:hover > a > [class*=" icon-"], +.dropdown-submenu:focus > a > [class*=" icon-"] { + background-image: url("../img/glyphicons-halflings-white.png"); +} + +.icon-glass { + background-position: 0 0; +} + +.icon-music { + background-position: -24px 0; +} + +.icon-search { + background-position: -48px 0; +} + +.icon-envelope { + background-position: -72px 0; +} + +.icon-heart { + background-position: -96px 0; +} + +.icon-star { + background-position: -120px 0; +} + +.icon-star-empty { + background-position: -144px 0; +} + +.icon-user { + background-position: -168px 0; +} + +.icon-film { + background-position: -192px 0; +} + +.icon-th-large { + background-position: -216px 0; +} + +.icon-th { + background-position: -240px 0; +} + +.icon-th-list { + background-position: -264px 0; +} + +.icon-ok { + background-position: -288px 0; +} + +.icon-remove { + background-position: -312px 0; +} + +.icon-zoom-in { + background-position: -336px 0; +} + +.icon-zoom-out { + background-position: -360px 0; +} + +.icon-off { + background-position: -384px 0; +} + +.icon-signal { + background-position: -408px 0; +} + +.icon-cog { + background-position: -432px 0; +} + +.icon-trash { + background-position: -456px 0; +} + +.icon-home { + background-position: 0 -24px; +} + +.icon-file { + background-position: -24px -24px; +} + +.icon-time { + background-position: -48px -24px; +} + +.icon-road { + background-position: -72px -24px; +} + +.icon-download-alt { + background-position: -96px -24px; +} + +.icon-download { + background-position: -120px -24px; +} + +.icon-upload { + background-position: -144px -24px; +} + +.icon-inbox { + background-position: -168px -24px; +} + +.icon-play-circle { + background-position: -192px -24px; +} + +.icon-repeat { + background-position: -216px -24px; +} + +.icon-refresh { + background-position: -240px -24px; +} + +.icon-list-alt { + background-position: -264px -24px; +} + +.icon-lock { + background-position: -287px -24px; +} + +.icon-flag { + background-position: -312px -24px; +} + +.icon-headphones { + background-position: -336px -24px; +} + +.icon-volume-off { + background-position: -360px -24px; +} + +.icon-volume-down { + background-position: -384px -24px; +} + +.icon-volume-up { + background-position: -408px -24px; +} + +.icon-qrcode { + background-position: -432px -24px; +} + +.icon-barcode { + background-position: -456px -24px; +} + +.icon-tag { + background-position: 0 -48px; +} + +.icon-tags { + background-position: -25px -48px; +} + +.icon-book { + background-position: -48px -48px; +} + +.icon-bookmark { + background-position: -72px -48px; +} + +.icon-print { + background-position: -96px -48px; +} + +.icon-camera { + background-position: -120px -48px; +} + +.icon-font { + background-position: -144px -48px; +} + +.icon-bold { + background-position: -167px -48px; +} + +.icon-italic { + background-position: -192px -48px; +} + +.icon-text-height { + background-position: -216px -48px; +} + +.icon-text-width { + background-position: -240px -48px; +} + +.icon-align-left { + background-position: -264px -48px; +} + +.icon-align-center { + background-position: -288px -48px; +} + +.icon-align-right { + background-position: -312px -48px; +} + +.icon-align-justify { + background-position: -336px -48px; +} + +.icon-list { + background-position: -360px -48px; +} + +.icon-indent-left { + background-position: -384px -48px; +} + +.icon-indent-right { + background-position: -408px -48px; +} + +.icon-facetime-video { + background-position: -432px -48px; +} + +.icon-picture { + background-position: -456px -48px; +} + +.icon-pencil { + background-position: 0 -72px; +} + +.icon-map-marker { + background-position: -24px -72px; +} + +.icon-adjust { + background-position: -48px -72px; +} + +.icon-tint { + background-position: -72px -72px; +} + +.icon-edit { + background-position: -96px -72px; +} + +.icon-share { + background-position: -120px -72px; +} + +.icon-check { + background-position: -144px -72px; +} + +.icon-move { + background-position: -168px -72px; +} + +.icon-step-backward { + background-position: -192px -72px; +} + +.icon-fast-backward { + background-position: -216px -72px; +} + +.icon-backward { + background-position: -240px -72px; +} + +.icon-play { + background-position: -264px -72px; +} + +.icon-pause { + background-position: -288px -72px; +} + +.icon-stop { + background-position: -312px -72px; +} + +.icon-forward { + background-position: -336px -72px; +} + +.icon-fast-forward { + background-position: -360px -72px; +} + +.icon-step-forward { + background-position: -384px -72px; +} + +.icon-eject { + background-position: -408px -72px; +} + +.icon-chevron-left { + background-position: -432px -72px; +} + +.icon-chevron-right { + background-position: -456px -72px; +} + +.icon-plus-sign { + background-position: 0 -96px; +} + +.icon-minus-sign { + background-position: -24px -96px; +} + +.icon-remove-sign { + background-position: -48px -96px; +} + +.icon-ok-sign { + background-position: -72px -96px; +} + +.icon-question-sign { + background-position: -96px -96px; +} + +.icon-info-sign { + background-position: -120px -96px; +} + +.icon-screenshot { + background-position: -144px -96px; +} + +.icon-remove-circle { + background-position: -168px -96px; +} + +.icon-ok-circle { + background-position: -192px -96px; +} + +.icon-ban-circle { + background-position: -216px -96px; +} + +.icon-arrow-left { + background-position: -240px -96px; +} + +.icon-arrow-right { + background-position: -264px -96px; +} + +.icon-arrow-up { + background-position: -289px -96px; +} + +.icon-arrow-down { + background-position: -312px -96px; +} + +.icon-share-alt { + background-position: -336px -96px; +} + +.icon-resize-full { + background-position: -360px -96px; +} + +.icon-resize-small { + background-position: -384px -96px; +} + +.icon-plus { + background-position: -408px -96px; +} + +.icon-minus { + background-position: -433px -96px; +} + +.icon-asterisk { + background-position: -456px -96px; +} + +.icon-exclamation-sign { + background-position: 0 -120px; +} + +.icon-gift { + background-position: -24px -120px; +} + +.icon-leaf { + background-position: -48px -120px; +} + +.icon-fire { + background-position: -72px -120px; +} + +.icon-eye-open { + background-position: -96px -120px; +} + +.icon-eye-close { + background-position: -120px -120px; +} + +.icon-warning-sign { + background-position: -144px -120px; +} + +.icon-plane { + background-position: -168px -120px; +} + +.icon-calendar { + background-position: -192px -120px; +} + +.icon-random { + width: 16px; + background-position: -216px -120px; +} + +.icon-comment { + background-position: -240px -120px; +} + +.icon-magnet { + background-position: -264px -120px; +} + +.icon-chevron-up { + background-position: -288px -120px; +} + +.icon-chevron-down { + background-position: -313px -119px; +} + +.icon-retweet { + background-position: -336px -120px; +} + +.icon-shopping-cart { + background-position: -360px -120px; +} + +.icon-folder-close { + width: 16px; + background-position: -384px -120px; +} + +.icon-folder-open { + width: 16px; + background-position: -408px -120px; +} + +.icon-resize-vertical { + background-position: -432px -119px; +} + +.icon-resize-horizontal { + background-position: -456px -118px; +} + +.icon-hdd { + background-position: 0 -144px; +} + +.icon-bullhorn { + background-position: -24px -144px; +} + +.icon-bell { + background-position: -48px -144px; +} + +.icon-certificate { + background-position: -72px -144px; +} + +.icon-thumbs-up { + background-position: -96px -144px; +} + +.icon-thumbs-down { + background-position: -120px -144px; +} + +.icon-hand-right { + background-position: -144px -144px; +} + +.icon-hand-left { + background-position: -168px -144px; +} + +.icon-hand-up { + background-position: -192px -144px; +} + +.icon-hand-down { + background-position: -216px -144px; +} + +.icon-circle-arrow-right { + background-position: -240px -144px; +} + +.icon-circle-arrow-left { + background-position: -264px -144px; +} + +.icon-circle-arrow-up { + background-position: -288px -144px; +} + +.icon-circle-arrow-down { + background-position: -312px -144px; +} + +.icon-globe { + background-position: -336px -144px; +} + +.icon-wrench { + background-position: -360px -144px; +} + +.icon-tasks { + background-position: -384px -144px; +} + +.icon-filter { + background-position: -408px -144px; +} + +.icon-briefcase { + background-position: -432px -144px; +} + +.icon-fullscreen { + background-position: -456px -144px; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle { + *margin-bottom: -3px; +} + +.dropdown-toggle:active, +.open .dropdown-toggle { + outline: 0; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + vertical-align: top; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus, +.dropdown-submenu:hover > a, +.dropdown-submenu:focus > a { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + outline: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open { + *z-index: 1000; +} + +.open > .dropdown-menu { + display: block; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} + +.dropdown-submenu:hover > .dropdown-menu { + display: block; +} + +.dropup .dropdown-submenu > .dropdown-menu { + top: auto; + bottom: 0; + margin-top: 0; + margin-bottom: -2px; + -webkit-border-radius: 5px 5px 5px 0; + -moz-border-radius: 5px 5px 5px 0; + border-radius: 5px 5px 5px 0; +} + +.dropdown-submenu > a:after { + display: block; + float: right; + width: 0; + height: 0; + margin-top: 5px; + margin-right: -10px; + border-color: transparent; + border-left-color: #cccccc; + border-style: solid; + border-width: 5px 0 5px 5px; + content: " "; +} + +.dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} + +.dropdown-submenu.pull-left { + float: none; +} + +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.dropdown .dropdown-menu .nav-header { + padding-right: 20px; + padding-left: 20px; +} + +.typeahead { + z-index: 1051; + margin-top: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-large { + padding: 24px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.well-small { + padding: 9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +.collapse.in { + height: auto; +} + +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.btn { + display: inline-block; + *display: inline; + padding: 4px 12px; + margin-bottom: 0; + *margin-left: .3em; + font-size: 14px; + line-height: 20px; + color: #333333; + text-align: center; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + vertical-align: middle; + cursor: pointer; + background-color: #f5f5f5; + *background-color: #e6e6e6; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + border: 1px solid #cccccc; + *border: 0; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-bottom-color: #b3b3b3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn:hover, +.btn:focus, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + color: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; +} + +.btn:active, +.btn.active { + background-color: #cccccc \9; +} + +.btn:first-child { + *margin-left: 0; +} + +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn.active, +.btn:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn.disabled, +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-large { + padding: 11px 19px; + font-size: 17.5px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.btn-large [class^="icon-"], +.btn-large [class*=" icon-"] { + margin-top: 4px; +} + +.btn-small { + padding: 2px 10px; + font-size: 11.9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-small [class^="icon-"], +.btn-small [class*=" icon-"] { + margin-top: 0; +} + +.btn-mini [class^="icon-"], +.btn-mini [class*=" icon-"] { + margin-top: -1px; +} + +.btn-mini { + padding: 0 6px; + font-size: 10.5px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-inverse.active { + color: rgba(255, 255, 255, 0.75); +} + +.btn-primary { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #006dcc; + *background-color: #0044cc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} + +.btn-primary:active, +.btn-primary.active { + background-color: #003399 \9; +} + +.btn-warning { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #faa732; + *background-color: #f89406; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + border-color: #f89406 #f89406 #ad6704; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + color: #ffffff; + background-color: #f89406; + *background-color: #df8505; +} + +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} + +.btn-danger { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #da4f49; + *background-color: #bd362f; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); + background-repeat: repeat-x; + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + color: #ffffff; + background-color: #bd362f; + *background-color: #a9302a; +} + +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} + +.btn-success { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #5bb75b; + *background-color: #51a351; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(to bottom, #62c462, #51a351); + background-repeat: repeat-x; + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + color: #ffffff; + background-color: #51a351; + *background-color: #499249; +} + +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} + +.btn-info { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + *background-color: #2f96b4; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + color: #ffffff; + background-color: #2f96b4; + *background-color: #2a85a0; +} + +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} + +.btn-inverse { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #363636; + *background-color: #222222; + background-image: -moz-linear-gradient(top, #444444, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); + background-image: -webkit-linear-gradient(top, #444444, #222222); + background-image: -o-linear-gradient(top, #444444, #222222); + background-image: linear-gradient(to bottom, #444444, #222222); + background-repeat: repeat-x; + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-inverse:hover, +.btn-inverse:focus, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + color: #ffffff; + background-color: #222222; + *background-color: #151515; +} + +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} + +button.btn, +input[type="submit"].btn { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +button.btn.btn-large, +input[type="submit"].btn.btn-large { + *padding-top: 7px; + *padding-bottom: 7px; +} + +button.btn.btn-small, +input[type="submit"].btn.btn-small { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { + *padding-top: 1px; + *padding-bottom: 1px; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled] { + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-link { + color: #0088cc; + cursor: pointer; + border-color: transparent; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-link:hover, +.btn-link:focus { + color: #005580; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +.btn-link[disabled]:focus { + color: #333333; + text-decoration: none; +} + +.btn-group { + position: relative; + display: inline-block; + *display: inline; + *margin-left: .3em; + font-size: 0; + white-space: nowrap; + vertical-align: middle; + *zoom: 1; +} + +.btn-group:first-child { + *margin-left: 0; +} + +.btn-group + .btn-group { + margin-left: 5px; +} + +.btn-toolbar { + margin-top: 10px; + margin-bottom: 10px; + font-size: 0; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn { + position: relative; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group > .btn + .btn { + margin-left: -1px; +} + +.btn-group > .btn, +.btn-group > .dropdown-menu, +.btn-group > .popover { + font-size: 14px; +} + +.btn-group > .btn-mini { + font-size: 10.5px; +} + +.btn-group > .btn-small { + font-size: 11.9px; +} + +.btn-group > .btn-large { + font-size: 17.5px; +} + +.btn-group > .btn:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.btn-group > .btn.large:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active { + z-index: 2; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + *padding-top: 5px; + padding-right: 8px; + *padding-bottom: 5px; + padding-left: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group > .btn-mini + .dropdown-toggle { + *padding-top: 2px; + padding-right: 5px; + *padding-bottom: 2px; + padding-left: 5px; +} + +.btn-group > .btn-small + .dropdown-toggle { + *padding-top: 5px; + *padding-bottom: 4px; +} + +.btn-group > .btn-large + .dropdown-toggle { + *padding-top: 7px; + padding-right: 12px; + *padding-bottom: 7px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + background-image: none; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group.open .btn.dropdown-toggle { + background-color: #e6e6e6; +} + +.btn-group.open .btn-primary.dropdown-toggle { + background-color: #0044cc; +} + +.btn-group.open .btn-warning.dropdown-toggle { + background-color: #f89406; +} + +.btn-group.open .btn-danger.dropdown-toggle { + background-color: #bd362f; +} + +.btn-group.open .btn-success.dropdown-toggle { + background-color: #51a351; +} + +.btn-group.open .btn-info.dropdown-toggle { + background-color: #2f96b4; +} + +.btn-group.open .btn-inverse.dropdown-toggle { + background-color: #222222; +} + +.btn .caret { + margin-top: 8px; + margin-left: 0; +} + +.btn-large .caret { + margin-top: 6px; +} + +.btn-large .caret { + border-top-width: 5px; + border-right-width: 5px; + border-left-width: 5px; +} + +.btn-mini .caret, +.btn-small .caret { + margin-top: 8px; +} + +.dropup .btn-large .caret { + border-bottom-width: 5px; +} + +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.btn-group-vertical { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} + +.btn-group-vertical > .btn { + display: block; + float: none; + max-width: 100%; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group-vertical > .btn + .btn { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:first-child { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.btn-group-vertical > .btn:last-child { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.btn-group-vertical > .btn-large:first-child { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} + +.btn-group-vertical > .btn-large:last-child { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 20px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.alert, +.alert h4 { + color: #c09853; +} + +.alert h4 { + margin: 0; +} + +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 20px; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success h4 { + color: #468847; +} + +.alert-danger, +.alert-error { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger h4, +.alert-error h4 { + color: #b94a48; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info h4 { + color: #3a87ad; +} + +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} + +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} + +.alert-block p + p { + margin-top: 5px; +} + +.nav { + margin-bottom: 20px; + margin-left: 0; + list-style: none; +} + +.nav > li > a { + display: block; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li > a > img { + max-width: none; +} + +.nav > .pull-right { + float: right; +} + +.nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 20px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} + +.nav li + .nav-header { + margin-top: 9px; +} + +.nav-list { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 0; +} + +.nav-list > li > a, +.nav-list .nav-header { + margin-right: -15px; + margin-left: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} + +.nav-list > li > a { + padding: 3px 15px; +} + +.nav-list > .active > a, +.nav-list > .active > a:hover, +.nav-list > .active > a:focus { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; +} + +.nav-list [class^="icon-"], +.nav-list [class*=" icon-"] { + margin-right: 2px; +} + +.nav-list .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.nav-tabs, +.nav-pills { + *zoom: 1; +} + +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { + display: table; + line-height: 0; + content: ""; +} + +.nav-tabs:after, +.nav-pills:after { + clear: both; +} + +.nav-tabs > li, +.nav-pills > li { + float: left; +} + +.nav-tabs > li > a, +.nav-pills > li > a { + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs > li { + margin-bottom: -1px; +} + +.nav-tabs > li > a { + padding-top: 8px; + padding-bottom: 8px; + line-height: 20px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover, +.nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover, +.nav-tabs > .active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} + +.nav-pills > li > a { + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +.nav-pills > .active > a, +.nav-pills > .active > a:hover, +.nav-pills > .active > a:focus { + color: #ffffff; + background-color: #0088cc; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li > a { + margin-right: 0; +} + +.nav-tabs.nav-stacked { + border-bottom: 0; +} + +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.nav-tabs.nav-stacked > li:first-child > a { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; +} + +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.nav-tabs.nav-stacked > li > a:hover, +.nav-tabs.nav-stacked > li > a:focus { + z-index: 2; + border-color: #ddd; +} + +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} + +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; +} + +.nav-tabs .dropdown-menu { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.nav-pills .dropdown-menu { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.nav .dropdown-toggle .caret { + margin-top: 6px; + border-top-color: #0088cc; + border-bottom-color: #0088cc; +} + +.nav .dropdown-toggle:hover .caret, +.nav .dropdown-toggle:focus .caret { + border-top-color: #005580; + border-bottom-color: #005580; +} + +/* move down carets for tabs */ + +.nav-tabs .dropdown-toggle .caret { + margin-top: 8px; +} + +.nav .active .dropdown-toggle .caret { + border-top-color: #fff; + border-bottom-color: #fff; +} + +.nav-tabs .active .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.nav > .dropdown.active > a:hover, +.nav > .dropdown.active > a:focus { + cursor: pointer; +} + +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > li.dropdown.open.active > a:hover, +.nav > li.dropdown.open.active > a:focus { + color: #ffffff; + background-color: #999999; + border-color: #999999; +} + +.nav li.dropdown.open .caret, +.nav li.dropdown.open.active .caret, +.nav li.dropdown.open a:hover .caret, +.nav li.dropdown.open a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); +} + +.tabs-stacked .open > a:hover, +.tabs-stacked .open > a:focus { + border-color: #999999; +} + +.tabbable { + *zoom: 1; +} + +.tabbable:before, +.tabbable:after { + display: table; + line-height: 0; + content: ""; +} + +.tabbable:after { + clear: both; +} + +.tab-content { + overflow: auto; +} + +.tabs-below > .nav-tabs, +.tabs-right > .nav-tabs, +.tabs-left > .nav-tabs { + border-bottom: 0; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.tabs-below > .nav-tabs { + border-top: 1px solid #ddd; +} + +.tabs-below > .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} + +.tabs-below > .nav-tabs > li > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.tabs-below > .nav-tabs > li > a:hover, +.tabs-below > .nav-tabs > li > a:focus { + border-top-color: #ddd; + border-bottom-color: transparent; +} + +.tabs-below > .nav-tabs > .active > a, +.tabs-below > .nav-tabs > .active > a:hover, +.tabs-below > .nav-tabs > .active > a:focus { + border-color: transparent #ddd #ddd #ddd; +} + +.tabs-left > .nav-tabs > li, +.tabs-right > .nav-tabs > li { + float: none; +} + +.tabs-left > .nav-tabs > li > a, +.tabs-right > .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} + +.tabs-left > .nav-tabs { + float: left; + margin-right: 19px; + border-right: 1px solid #ddd; +} + +.tabs-left > .nav-tabs > li > a { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.tabs-left > .nav-tabs > li > a:hover, +.tabs-left > .nav-tabs > li > a:focus { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} + +.tabs-left > .nav-tabs .active > a, +.tabs-left > .nav-tabs .active > a:hover, +.tabs-left > .nav-tabs .active > a:focus { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; +} + +.tabs-right > .nav-tabs { + float: right; + margin-left: 19px; + border-left: 1px solid #ddd; +} + +.tabs-right > .nav-tabs > li > a { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.tabs-right > .nav-tabs > li > a:hover, +.tabs-right > .nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} + +.tabs-right > .nav-tabs .active > a, +.tabs-right > .nav-tabs .active > a:hover, +.tabs-right > .nav-tabs .active > a:focus { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; +} + +.nav > .disabled > a { + color: #999999; +} + +.nav > .disabled > a:hover, +.nav > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; +} + +.navbar { + *position: relative; + *z-index: 2; + margin-bottom: 20px; + overflow: visible; +} + +.navbar-inner { + min-height: 40px; + padding-right: 20px; + padding-left: 20px; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + border: 1px solid #d4d4d4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + *zoom: 1; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); +} + +.navbar-inner:before, +.navbar-inner:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-inner:after { + clear: both; +} + +.navbar .container { + width: auto; +} + +.nav-collapse.collapse { + height: auto; + overflow: visible; +} + +.navbar .brand { + display: block; + float: left; + padding: 10px 20px 10px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + color: #777777; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .brand:hover, +.navbar .brand:focus { + text-decoration: none; +} + +.navbar-text { + margin-bottom: 0; + line-height: 40px; + color: #777777; +} + +.navbar-link { + color: #777777; +} + +.navbar-link:hover, +.navbar-link:focus { + color: #333333; +} + +.navbar .divider-vertical { + height: 40px; + margin: 0 9px; + border-right: 1px solid #ffffff; + border-left: 1px solid #f2f2f2; +} + +.navbar .btn, +.navbar .btn-group { + margin-top: 5px; +} + +.navbar .btn-group .btn, +.navbar .input-prepend .btn, +.navbar .input-append .btn, +.navbar .input-prepend .btn-group, +.navbar .input-append .btn-group { + margin-top: 0; +} + +.navbar-form { + margin-bottom: 0; + *zoom: 1; +} + +.navbar-form:before, +.navbar-form:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-form:after { + clear: both; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .radio, +.navbar-form .checkbox { + margin-top: 5px; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .btn { + display: inline-block; + margin-bottom: 0; +} + +.navbar-form input[type="image"], +.navbar-form input[type="checkbox"], +.navbar-form input[type="radio"] { + margin-top: 3px; +} + +.navbar-form .input-append, +.navbar-form .input-prepend { + margin-top: 5px; + white-space: nowrap; +} + +.navbar-form .input-append input, +.navbar-form .input-prepend input { + margin-top: 0; +} + +.navbar-search { + position: relative; + float: left; + margin-top: 5px; + margin-bottom: 0; +} + +.navbar-search .search-query { + padding: 4px 14px; + margin-bottom: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.navbar-static-top { + position: static; + margin-bottom: 0; +} + +.navbar-static-top .navbar-inner { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + margin-bottom: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + border-width: 0 0 1px; +} + +.navbar-fixed-bottom .navbar-inner { + border-width: 1px 0 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-fixed-bottom .navbar-inner { + padding-right: 0; + padding-left: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar-fixed-bottom .navbar-inner { + -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} + +.navbar .nav.pull-right { + float: right; + margin-right: 0; +} + +.navbar .nav > li { + float: left; +} + +.navbar .nav > li > a { + float: none; + padding: 10px 15px 10px; + color: #777777; + text-decoration: none; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .nav .dropdown-toggle .caret { + margin-top: 8px; +} + +.navbar .nav > li > a:focus, +.navbar .nav > li > a:hover { + color: #333333; + text-decoration: none; + background-color: transparent; +} + +.navbar .nav > .active > a, +.navbar .nav > .active > a:hover, +.navbar .nav > .active > a:focus { + color: #555555; + text-decoration: none; + background-color: #e5e5e5; + -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); +} + +.navbar .btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-right: 5px; + margin-left: 5px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #ededed; + *background-color: #e5e5e5; + background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); + background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); + background-repeat: repeat-x; + border-color: #e5e5e5 #e5e5e5 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); +} + +.navbar .btn-navbar:hover, +.navbar .btn-navbar:focus, +.navbar .btn-navbar:active, +.navbar .btn-navbar.active, +.navbar .btn-navbar.disabled, +.navbar .btn-navbar[disabled] { + color: #ffffff; + background-color: #e5e5e5; + *background-color: #d9d9d9; +} + +.navbar .btn-navbar:active, +.navbar .btn-navbar.active { + background-color: #cccccc \9; +} + +.navbar .btn-navbar .icon-bar { + display: block; + width: 18px; + height: 2px; + background-color: #f5f5f5; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} + +.btn-navbar .icon-bar + .icon-bar { + margin-top: 3px; +} + +.navbar .nav > li > .dropdown-menu:before { + position: absolute; + top: -7px; + left: 9px; + display: inline-block; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-left: 7px solid transparent; + border-bottom-color: rgba(0, 0, 0, 0.2); + content: ''; +} + +.navbar .nav > li > .dropdown-menu:after { + position: absolute; + top: -6px; + left: 10px; + display: inline-block; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + border-left: 6px solid transparent; + content: ''; +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:before { + top: auto; + bottom: -7px; + border-top: 7px solid #ccc; + border-bottom: 0; + border-top-color: rgba(0, 0, 0, 0.2); +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:after { + top: auto; + bottom: -6px; + border-top: 6px solid #ffffff; + border-bottom: 0; +} + +.navbar .nav li.dropdown > a:hover .caret, +.navbar .nav li.dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle, +.navbar .nav li.dropdown.active > .dropdown-toggle, +.navbar .nav li.dropdown.open.active > .dropdown-toggle { + color: #555555; + background-color: #e5e5e5; +} + +.navbar .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar .pull-right > li > .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:before, +.navbar .nav > li > .dropdown-menu.pull-right:before { + right: 12px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:after, +.navbar .nav > li > .dropdown-menu.pull-right:after { + right: 13px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { + right: 100%; + left: auto; + margin-right: -1px; + margin-left: 0; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.navbar-inverse .navbar-inner { + background-color: #1b1b1b; + background-image: -moz-linear-gradient(top, #222222, #111111); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); + background-image: -webkit-linear-gradient(top, #222222, #111111); + background-image: -o-linear-gradient(top, #222222, #111111); + background-image: linear-gradient(to bottom, #222222, #111111); + background-repeat: repeat-x; + border-color: #252525; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); +} + +.navbar-inverse .brand, +.navbar-inverse .nav > li > a { + color: #999999; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.navbar-inverse .brand:hover, +.navbar-inverse .nav > li > a:hover, +.navbar-inverse .brand:focus, +.navbar-inverse .nav > li > a:focus { + color: #ffffff; +} + +.navbar-inverse .brand { + color: #999999; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .nav > li > a:focus, +.navbar-inverse .nav > li > a:hover { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .nav .active > a, +.navbar-inverse .nav .active > a:hover, +.navbar-inverse .nav .active > a:focus { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover, +.navbar-inverse .navbar-link:focus { + color: #ffffff; +} + +.navbar-inverse .divider-vertical { + border-right-color: #222222; + border-left-color: #111111; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .nav li.dropdown > a:hover .caret, +.navbar-inverse .nav li.dropdown > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-search .search-query { + color: #ffffff; + background-color: #515151; + border-color: #111111; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; +} + +.navbar-inverse .navbar-search .search-query:-moz-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:focus, +.navbar-inverse .navbar-search .search-query.focused { + padding: 5px 15px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + outline: 0; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +} + +.navbar-inverse .btn-navbar { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e0e0e; + *background-color: #040404; + background-image: -moz-linear-gradient(top, #151515, #040404); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); + background-image: -webkit-linear-gradient(top, #151515, #040404); + background-image: -o-linear-gradient(top, #151515, #040404); + background-image: linear-gradient(to bottom, #151515, #040404); + background-repeat: repeat-x; + border-color: #040404 #040404 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.navbar-inverse .btn-navbar:hover, +.navbar-inverse .btn-navbar:focus, +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active, +.navbar-inverse .btn-navbar.disabled, +.navbar-inverse .btn-navbar[disabled] { + color: #ffffff; + background-color: #040404; + *background-color: #000000; +} + +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active { + background-color: #000000 \9; +} + +.breadcrumb { + padding: 8px 15px; + margin: 0 0 20px; + list-style: none; + background-color: #f5f5f5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; + *display: inline; + text-shadow: 0 1px 0 #ffffff; + *zoom: 1; +} + +.breadcrumb > li > .divider { + padding: 0 5px; + color: #ccc; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + margin: 20px 0; +} + +.pagination ul { + display: inline-block; + *display: inline; + margin-bottom: 0; + margin-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *zoom: 1; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.pagination ul > li { + display: inline; +} + +.pagination ul > li > a, +.pagination ul > li > span { + float: left; + padding: 4px 12px; + line-height: 20px; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + border-left-width: 0; +} + +.pagination ul > li > a:hover, +.pagination ul > li > a:focus, +.pagination ul > .active > a, +.pagination ul > .active > span { + background-color: #f5f5f5; +} + +.pagination ul > .active > a, +.pagination ul > .active > span { + color: #999999; + cursor: default; +} + +.pagination ul > .disabled > span, +.pagination ul > .disabled > a, +.pagination ul > .disabled > a:hover, +.pagination ul > .disabled > a:focus { + color: #999999; + cursor: default; + background-color: transparent; +} + +.pagination ul > li:first-child > a, +.pagination ul > li:first-child > span { + border-left-width: 1px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.pagination ul > li:last-child > a, +.pagination ul > li:last-child > span { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.pagination-centered { + text-align: center; +} + +.pagination-right { + text-align: right; +} + +.pagination-large ul > li > a, +.pagination-large ul > li > span { + padding: 11px 19px; + font-size: 17.5px; +} + +.pagination-large ul > li:first-child > a, +.pagination-large ul > li:first-child > span { + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.pagination-large ul > li:last-child > a, +.pagination-large ul > li:last-child > span { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.pagination-mini ul > li:first-child > a, +.pagination-small ul > li:first-child > a, +.pagination-mini ul > li:first-child > span, +.pagination-small ul > li:first-child > span { + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; +} + +.pagination-mini ul > li:last-child > a, +.pagination-small ul > li:last-child > a, +.pagination-mini ul > li:last-child > span, +.pagination-small ul > li:last-child > span { + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; +} + +.pagination-small ul > li > a, +.pagination-small ul > li > span { + padding: 2px 10px; + font-size: 11.9px; +} + +.pagination-mini ul > li > a, +.pagination-mini ul > li > span { + padding: 0 6px; + font-size: 10.5px; +} + +.pager { + margin: 20px 0; + text-align: center; + list-style: none; + *zoom: 1; +} + +.pager:before, +.pager:after { + display: table; + line-height: 0; + content: ""; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +.pager .next > a, +.pager .next > span { + float: right; +} + +.pager .previous > a, +.pager .previous > span { + float: left; +} + +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #999999; + cursor: default; + background-color: #fff; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop, +.modal-backdrop.fade.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.modal { + position: fixed; + top: 10%; + left: 50%; + z-index: 1050; + width: 560px; + margin-left: -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.modal.fade { + top: -25%; + -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; + -moz-transition: opacity 0.3s linear, top 0.3s ease-out; + -o-transition: opacity 0.3s linear, top 0.3s ease-out; + transition: opacity 0.3s linear, top 0.3s ease-out; +} + +.modal.fade.in { + top: 10%; +} + +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} + +.modal-header .close { + margin-top: 2px; +} + +.modal-header h3 { + margin: 0; + line-height: 30px; +} + +.modal-body { + position: relative; + max-height: 400px; + padding: 15px; + overflow-y: auto; +} + +.modal-form { + margin-bottom: 0; +} + +.modal-footer { + padding: 14px 15px 15px; + margin-bottom: 0; + text-align: right; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + line-height: 0; + content: ""; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 11px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip-inner { + max-width: 200px; + padding: 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000000; + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000000; + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.popover.top { + margin-top: -10px; +} + +.popover.right { + margin-left: 10px; +} + +.popover.bottom { + margin-top: 10px; +} + +.popover.left { + margin-left: -10px; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} + +.popover-title:empty { + display: none; +} + +.popover-content { + padding: 9px 14px; +} + +.popover .arrow, +.popover .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover .arrow { + border-width: 11px; +} + +.popover .arrow:after { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + border-bottom-width: 0; +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; +} + +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} + +.thumbnails:before, +.thumbnails:after { + display: table; + line-height: 0; + content: ""; +} + +.thumbnails:after { + clear: both; +} + +.row-fluid .thumbnails { + margin-left: 0; +} + +.thumbnails > li { + float: left; + margin-bottom: 20px; + margin-left: 20px; +} + +.thumbnail { + display: block; + padding: 4px; + line-height: 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +a.thumbnail:hover, +a.thumbnail:focus { + border-color: #0088cc; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} + +.thumbnail > img { + display: block; + max-width: 100%; + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #555555; +} + +.media, +.media-body { + overflow: hidden; + *overflow: visible; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + margin-left: 0; + list-style: none; +} + +.label, +.badge { + display: inline-block; + padding: 2px 4px; + font-size: 11.844px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; +} + +.label { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.badge { + padding-right: 9px; + padding-left: 9px; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} + +.label:empty, +.badge:empty { + display: none; +} + +a.label:hover, +a.label:focus, +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label-important, +.badge-important { + background-color: #b94a48; +} + +.label-important[href], +.badge-important[href] { + background-color: #953b39; +} + +.label-warning, +.badge-warning { + background-color: #f89406; +} + +.label-warning[href], +.badge-warning[href] { + background-color: #c67605; +} + +.label-success, +.badge-success { + background-color: #468847; +} + +.label-success[href], +.badge-success[href] { + background-color: #356635; +} + +.label-info, +.badge-info { + background-color: #3a87ad; +} + +.label-info[href], +.badge-info[href] { + background-color: #2d6987; +} + +.label-inverse, +.badge-inverse { + background-color: #333333; +} + +.label-inverse[href], +.badge-inverse[href] { + background-color: #1a1a1a; +} + +.btn .label, +.btn .badge { + position: relative; + top: -1px; +} + +.btn-mini .label, +.btn-mini .badge { + top: 0; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-ms-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); + background-repeat: repeat-x; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress .bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + color: #ffffff; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); + background-image: -webkit-linear-gradient(top, #149bdf, #0480be); + background-image: -o-linear-gradient(top, #149bdf, #0480be); + background-image: linear-gradient(to bottom, #149bdf, #0480be); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress .bar + .bar { + -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); +} + +.progress-striped .bar { + background-color: #149bdf; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + -moz-background-size: 40px 40px; + -o-background-size: 40px 40px; + background-size: 40px 40px; +} + +.progress.active .bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-danger .bar, +.progress .bar-danger { + background-color: #dd514c; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); +} + +.progress-danger.progress-striped .bar, +.progress-striped .bar-danger { + background-color: #ee5f5b; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-success .bar, +.progress .bar-success { + background-color: #5eb95e; + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(to bottom, #62c462, #57a957); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); +} + +.progress-success.progress-striped .bar, +.progress-striped .bar-success { + background-color: #62c462; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-info .bar, +.progress .bar-info { + background-color: #4bb1cf; + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); +} + +.progress-info.progress-striped .bar, +.progress-striped .bar-info { + background-color: #5bc0de; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-warning .bar, +.progress .bar-warning { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); +} + +.progress-warning.progress-striped .bar, +.progress-striped .bar-warning { + background-color: #fbb450; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.accordion { + margin-bottom: 20px; +} + +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.accordion-heading { + border-bottom: 0; +} + +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} + +.accordion-toggle { + cursor: pointer; +} + +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} + +.carousel { + position: relative; + margin-bottom: 20px; + line-height: 1; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + line-height: 1; +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.right { + right: 15px; + left: auto; +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-indicators { + position: absolute; + top: 15px; + right: 15px; + z-index: 5; + margin: 0; + list-style: none; +} + +.carousel-indicators li { + display: block; + float: left; + width: 10px; + height: 10px; + margin-left: 5px; + text-indent: -999px; + background-color: #ccc; + background-color: rgba(255, 255, 255, 0.25); + border-radius: 5px; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 15px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} + +.carousel-caption h4, +.carousel-caption p { + line-height: 20px; + color: #ffffff; +} + +.carousel-caption h4 { + margin: 0 0 5px; +} + +.carousel-caption p { + margin-bottom: 0; +} + +.hero-unit { + padding: 60px; + margin-bottom: 30px; + font-size: 18px; + font-weight: 200; + line-height: 30px; + color: inherit; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; + color: inherit; +} + +.hero-unit li { + line-height: 30px; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.hide { + display: none; +} + +.show { + display: block; +} + +.invisible { + visibility: hidden; +} + +.affix { + position: fixed; +} + +/*! + * Bootstrap Responsive v2.3.2 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +@-ms-viewport { + width: device-width; +} + +.hidden { + display: none; + visibility: hidden; +} + +.visible-phone { + display: none !important; +} + +.visible-tablet { + display: none !important; +} + +.hidden-desktop { + display: none !important; +} + +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important ; + } + .visible-tablet { + display: inherit !important; + } + .hidden-tablet { + display: none !important; + } +} + +@media (max-width: 767px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important; + } + .visible-phone { + display: inherit !important; + } + .hidden-phone { + display: none !important; + } +} + +.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: inherit !important; + } + .hidden-print { + display: none !important; + } +} + +@media (min-width: 1200px) { + .row { + margin-left: -30px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 30px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 1170px; + } + .span12 { + width: 1170px; + } + .span11 { + width: 1070px; + } + .span10 { + width: 970px; + } + .span9 { + width: 870px; + } + .span8 { + width: 770px; + } + .span7 { + width: 670px; + } + .span6 { + width: 570px; + } + .span5 { + width: 470px; + } + .span4 { + width: 370px; + } + .span3 { + width: 270px; + } + .span2 { + width: 170px; + } + .span1 { + width: 70px; + } + .offset12 { + margin-left: 1230px; + } + .offset11 { + margin-left: 1130px; + } + .offset10 { + margin-left: 1030px; + } + .offset9 { + margin-left: 930px; + } + .offset8 { + margin-left: 830px; + } + .offset7 { + margin-left: 730px; + } + .offset6 { + margin-left: 630px; + } + .offset5 { + margin-left: 530px; + } + .offset4 { + margin-left: 430px; + } + .offset3 { + margin-left: 330px; + } + .offset2 { + margin-left: 230px; + } + .offset1 { + margin-left: 130px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.564102564102564%; + *margin-left: 2.5109110747408616%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.564102564102564%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.45299145299145%; + *width: 91.39979996362975%; + } + .row-fluid .span10 { + width: 82.90598290598291%; + *width: 82.8527914166212%; + } + .row-fluid .span9 { + width: 74.35897435897436%; + *width: 74.30578286961266%; + } + .row-fluid .span8 { + width: 65.81196581196582%; + *width: 65.75877432260411%; + } + .row-fluid .span7 { + width: 57.26495726495726%; + *width: 57.21176577559556%; + } + .row-fluid .span6 { + width: 48.717948717948715%; + *width: 48.664757228587014%; + } + .row-fluid .span5 { + width: 40.17094017094017%; + *width: 40.11774868157847%; + } + .row-fluid .span4 { + width: 31.623931623931625%; + *width: 31.570740134569924%; + } + .row-fluid .span3 { + width: 23.076923076923077%; + *width: 23.023731587561375%; + } + .row-fluid .span2 { + width: 14.52991452991453%; + *width: 14.476723040552828%; + } + .row-fluid .span1 { + width: 5.982905982905983%; + *width: 5.929714493544281%; + } + .row-fluid .offset12 { + margin-left: 105.12820512820512%; + *margin-left: 105.02182214948171%; + } + .row-fluid .offset12:first-child { + margin-left: 102.56410256410257%; + *margin-left: 102.45771958537915%; + } + .row-fluid .offset11 { + margin-left: 96.58119658119658%; + *margin-left: 96.47481360247316%; + } + .row-fluid .offset11:first-child { + margin-left: 94.01709401709402%; + *margin-left: 93.91071103837061%; + } + .row-fluid .offset10 { + margin-left: 88.03418803418803%; + *margin-left: 87.92780505546462%; + } + .row-fluid .offset10:first-child { + margin-left: 85.47008547008548%; + *margin-left: 85.36370249136206%; + } + .row-fluid .offset9 { + margin-left: 79.48717948717949%; + *margin-left: 79.38079650845607%; + } + .row-fluid .offset9:first-child { + margin-left: 76.92307692307693%; + *margin-left: 76.81669394435352%; + } + .row-fluid .offset8 { + margin-left: 70.94017094017094%; + *margin-left: 70.83378796144753%; + } + .row-fluid .offset8:first-child { + margin-left: 68.37606837606839%; + *margin-left: 68.26968539734497%; + } + .row-fluid .offset7 { + margin-left: 62.393162393162385%; + *margin-left: 62.28677941443899%; + } + .row-fluid .offset7:first-child { + margin-left: 59.82905982905982%; + *margin-left: 59.72267685033642%; + } + .row-fluid .offset6 { + margin-left: 53.84615384615384%; + *margin-left: 53.739770867430444%; + } + .row-fluid .offset6:first-child { + margin-left: 51.28205128205128%; + *margin-left: 51.175668303327875%; + } + .row-fluid .offset5 { + margin-left: 45.299145299145295%; + *margin-left: 45.1927623204219%; + } + .row-fluid .offset5:first-child { + margin-left: 42.73504273504273%; + *margin-left: 42.62865975631933%; + } + .row-fluid .offset4 { + margin-left: 36.75213675213675%; + *margin-left: 36.645753773413354%; + } + .row-fluid .offset4:first-child { + margin-left: 34.18803418803419%; + *margin-left: 34.081651209310785%; + } + .row-fluid .offset3 { + margin-left: 28.205128205128204%; + *margin-left: 28.0987452264048%; + } + .row-fluid .offset3:first-child { + margin-left: 25.641025641025642%; + *margin-left: 25.53464266230224%; + } + .row-fluid .offset2 { + margin-left: 19.65811965811966%; + *margin-left: 19.551736679396257%; + } + .row-fluid .offset2:first-child { + margin-left: 17.094017094017094%; + *margin-left: 16.98763411529369%; + } + .row-fluid .offset1 { + margin-left: 11.11111111111111%; + *margin-left: 11.004728132387708%; + } + .row-fluid .offset1:first-child { + margin-left: 8.547008547008547%; + *margin-left: 8.440625568285142%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 30px; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 1156px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 1056px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 956px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 856px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 756px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 656px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 556px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 456px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 356px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 256px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 156px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 56px; + } + .thumbnails { + margin-left: -30px; + } + .thumbnails > li { + margin-left: 30px; + } + .row-fluid .thumbnails { + margin-left: 0; + } +} + +@media (min-width: 768px) and (max-width: 979px) { + .row { + margin-left: -20px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + .span12 { + width: 724px; + } + .span11 { + width: 662px; + } + .span10 { + width: 600px; + } + .span9 { + width: 538px; + } + .span8 { + width: 476px; + } + .span7 { + width: 414px; + } + .span6 { + width: 352px; + } + .span5 { + width: 290px; + } + .span4 { + width: 228px; + } + .span3 { + width: 166px; + } + .span2 { + width: 104px; + } + .span1 { + width: 42px; + } + .offset12 { + margin-left: 764px; + } + .offset11 { + margin-left: 702px; + } + .offset10 { + margin-left: 640px; + } + .offset9 { + margin-left: 578px; + } + .offset8 { + margin-left: 516px; + } + .offset7 { + margin-left: 454px; + } + .offset6 { + margin-left: 392px; + } + .offset5 { + margin-left: 330px; + } + .offset4 { + margin-left: 268px; + } + .offset3 { + margin-left: 206px; + } + .offset2 { + margin-left: 144px; + } + .offset1 { + margin-left: 82px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.7624309392265194%; + *margin-left: 2.709239449864817%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} + +@media (max-width: 767px) { + body { + padding-right: 20px; + padding-left: 20px; + } + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + .container-fluid { + padding: 0; + } + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + .dl-horizontal dd { + margin-left: 0; + } + .container { + width: auto; + } + .row-fluid { + width: 100%; + } + .row, + .thumbnails { + margin-left: 0; + } + .thumbnails > li { + float: none; + margin-left: 0; + } + [class*="span"], + .uneditable-input[class*="span"], + .row-fluid [class*="span"] { + display: block; + float: none; + width: 100%; + margin-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + .input-large, + .input-xlarge, + .input-xxlarge, + input[class*="span"], + select[class*="span"], + textarea[class*="span"], + .uneditable-input { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + .modal.fade { + top: -100px; + } + .modal.fade.in { + top: 20px; + } +} + +@media (max-width: 480px) { + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + .page-header h1 small { + display: block; + line-height: 20px; + } + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + .form-horizontal .controls { + margin-left: 0; + } + .form-horizontal .control-list { + padding-top: 0; + } + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + .media-object { + margin-right: 0; + margin-left: 0; + } + .modal { + top: 10px; + right: 10px; + left: 10px; + } + .modal-header .close { + padding: 10px; + margin: -10px; + } + .carousel-caption { + position: static; + } +} + +@media (max-width: 979px) { + body { + padding-top: 0; + } + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + .navbar-fixed-top { + margin-bottom: 20px; + } + .navbar-fixed-bottom { + margin-top: 20px; + } + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + .navbar .container { + width: auto; + padding: 0; + } + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + .nav-collapse { + clear: both; + } + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + .nav-collapse .nav > li { + float: none; + } + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + .nav-collapse .nav > .divider-vertical { + display: none; + } + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + .nav-collapse .nav > li > a, + .nav-collapse .dropdown-menu a { + padding: 9px 15px; + font-weight: bold; + color: #777777; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + .nav-collapse .nav > li > a:hover, + .nav-collapse .nav > li > a:focus, + .nav-collapse .dropdown-menu a:hover, + .nav-collapse .dropdown-menu a:focus { + background-color: #f2f2f2; + } + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + .navbar-inverse .nav-collapse .nav > li > a:hover, + .navbar-inverse .nav-collapse .nav > li > a:focus, + .navbar-inverse .nav-collapse .dropdown-menu a:hover, + .navbar-inverse .nav-collapse .dropdown-menu a:focus { + background-color: #111111; + } + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + .nav-collapse .dropdown-menu { + position: static; + top: auto; + left: auto; + display: none; + float: none; + max-width: none; + padding: 0; + margin: 0 15px; + background-color: transparent; + border: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + } + .nav-collapse .open > .dropdown-menu { + display: block; + } + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + .nav-collapse .dropdown-menu .divider { + display: none; + } + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + .nav-collapse .navbar-form, + .nav-collapse .navbar-search { + float: none; + padding: 10px 15px; + margin: 10px 0; + border-top: 1px solid #f2f2f2; + border-bottom: 1px solid #f2f2f2; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + } + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + .navbar .btn-navbar { + display: block; + } + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} + +@media (min-width: 980px) { + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} + +/* +:Author: David Goodger (goodger@python.org) +:Id: $Id: html4css1.css 7514 2012-09-14 14:27:12Z milde $ +:Copyright: This stylesheet has been placed in the public domain. + +Default cascading style sheet for the HTML output of Docutils. + +See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to +customize this style sheet. +*/ + +/* used to remove borders from tables and images */ +.borderless, table.borderless td, table.borderless th { + border: 0 } + +table.borderless td, table.borderless th { + /* Override padding for "table.docutils td" with "! important". + The right padding separates the table cells. */ + padding: 0 0.5em 0 0 ! important } + +.first { + /* Override more specific margin styles with "! important". */ + margin-top: 0 ! important } + +.last, .with-subtitle { + margin-bottom: 0 ! important } + +.hidden { + display: none } + +a.toc-backref { + text-decoration: none ; + color: black } + +blockquote.epigraph { + margin: 2em 5em ; } + +dl.docutils dd { + margin-bottom: 0.5em } + +object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] { + overflow: hidden; +} + +/* Uncomment (and remove this text!) to get bold-faced definition list terms +dl.docutils dt { + font-weight: bold } +*/ + +div.abstract { + margin: 2em 5em } + +div.abstract p.topic-title { + font-weight: bold ; + text-align: center } + +div.admonition, div.attention, div.caution, div.danger, div.error, +div.hint, div.important, div.note, div.tip, div.warning { + margin: 2em ; + border: medium outset ; + padding: 1em } + +div.admonition p.admonition-title, div.hint p.admonition-title, +div.important p.admonition-title, div.note p.admonition-title, +div.tip p.admonition-title { + font-weight: bold ; + font-family: sans-serif } + +div.attention p.admonition-title, div.caution p.admonition-title, +div.danger p.admonition-title, div.error p.admonition-title, +div.warning p.admonition-title, .code .error { + color: red ; + font-weight: bold ; + font-family: sans-serif } + +/* Uncomment (and remove this text!) to get reduced vertical space in + compound paragraphs. +div.compound .compound-first, div.compound .compound-middle { + margin-bottom: 0.5em } + +div.compound .compound-last, div.compound .compound-middle { + margin-top: 0.5em } +*/ + +div.dedication { + margin: 2em 5em ; + text-align: center ; + font-style: italic } + +div.dedication p.topic-title { + font-weight: bold ; + font-style: normal } + +div.figure { + margin-left: 2em ; + margin-right: 2em } + +div.footer, div.header { + clear: both; + font-size: smaller } + +div.line-block { + display: block ; + margin-top: 1em ; + margin-bottom: 1em } + +div.line-block div.line-block { + margin-top: 0 ; + margin-bottom: 0 ; + margin-left: 1.5em } + +div.sidebar { + margin: 0 0 0.5em 1em ; + border: medium outset ; + padding: 1em ; + background-color: #ffffee ; + width: 40% ; + float: right ; + clear: right } + +div.sidebar p.rubric { + font-family: sans-serif ; + font-size: medium } + +div.system-messages { + margin: 5em } + +div.system-messages h1 { + color: red } + +div.system-message { + border: medium outset ; + padding: 1em } + +div.system-message p.system-message-title { + color: red ; + font-weight: bold } + +div.topic { + margin: 2em } + +h1.section-subtitle, h2.section-subtitle, h3.section-subtitle, +h4.section-subtitle, h5.section-subtitle, h6.section-subtitle { + margin-top: 0.4em } + +h1.title { + text-align: center } + +h2.subtitle { + text-align: center } + +hr.docutils { + width: 75% } + +img.align-left, .figure.align-left, object.align-left { + clear: left ; + float: left ; + margin-right: 1em } + +img.align-right, .figure.align-right, object.align-right { + clear: right ; + float: right ; + margin-left: 1em } + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left } + +.align-center { + clear: both ; + text-align: center } + +.align-right { + text-align: right } + +/* reset inner alignment in figures */ +div.align-right { + text-align: inherit } + +/* div.align-center * { */ +/* text-align: left } */ + +ol.simple, ul.simple { + margin-bottom: 1em } + +ol.arabic { + list-style: decimal } + +ol.loweralpha { + list-style: lower-alpha } + +ol.upperalpha { + list-style: upper-alpha } + +ol.lowerroman { + list-style: lower-roman } + +ol.upperroman { + list-style: upper-roman } + +p.attribution { + text-align: right ; + margin-left: 50% } + +p.caption { + font-style: italic } + +p.credits { + font-style: italic ; + font-size: smaller } + +p.label { + white-space: nowrap } + +p.rubric { + font-weight: bold ; + font-size: larger ; + color: maroon ; + text-align: center } + +p.sidebar-title { + font-family: sans-serif ; + font-weight: bold ; + font-size: larger } + +p.sidebar-subtitle { + font-family: sans-serif ; + font-weight: bold } + +p.topic-title { + font-weight: bold } + +pre.address { + margin-bottom: 0 ; + margin-top: 0 ; + font: inherit } + +pre.literal-block, pre.doctest-block, pre.math, pre.code { + margin-left: 2em ; + margin-right: 2em } + +pre.code .ln { color: grey; } /* line numbers */ +pre.code, code { background-color: #eeeeee } +pre.code .comment, code .comment { color: #5C6576 } +pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } +pre.code .literal.string, code .literal.string { color: #0C5404 } +pre.code .name.builtin, code .name.builtin { color: #352B84 } +pre.code .deleted, code .deleted { background-color: #DEB0A1} +pre.code .inserted, code .inserted { background-color: #A3D289} + +span.classifier { + font-family: sans-serif ; + font-style: oblique } + +span.classifier-delimiter { + font-family: sans-serif ; + font-weight: bold } + +span.interpreted { + font-family: sans-serif } + +span.option { + white-space: nowrap } + +span.pre { + white-space: pre } + +span.problematic { + color: red } + +span.section-subtitle { + /* font-size relative to parent (h1..h6 element) */ + font-size: 80% } + +table.citation { + border-left: solid 1px gray; + margin-left: 1px } + +table.docinfo { + margin: 2em 4em } + +table.docutils { + margin-top: 0.5em ; + margin-bottom: 0.5em } + +table.footnote { + border-left: solid 1px black; + margin-left: 1px } + +table.docutils td, table.docutils th, +table.docinfo td, table.docinfo th { + padding-left: 0.5em ; + padding-right: 0.5em ; + vertical-align: top } + +table.docutils th.field-name, table.docinfo th.docinfo-name { + font-weight: bold ; + text-align: left ; + white-space: nowrap ; + padding-left: 0 } + +h1 tt.docutils, h2 tt.docutils, h3 tt.docutils, +h4 tt.docutils, h5 tt.docutils, h6 tt.docutils { + font-size: 100% } + +ul.auto-toc { + list-style-type: none } + +a.footnote-reference { + line-height: 0px; +} + +/* code.css file generated by Nikola */ +pre.code .hll { background-color: #ffffcc } +pre.code { background: #f8f8f8; } +pre.code .c { color: #408080; font-style: italic } /* Comment */ +pre.code .err { border: 1px solid #FF0000 } /* Error */ +pre.code .k { color: #008000; font-weight: bold } /* Keyword */ +pre.code .o { color: #666666 } /* Operator */ +pre.code .cm { color: #408080; font-style: italic } /* Comment.Multiline */ +pre.code .cp { color: #BC7A00 } /* Comment.Preproc */ +pre.code .c1 { color: #408080; font-style: italic } /* Comment.Single */ +pre.code .cs { color: #408080; font-style: italic } /* Comment.Special */ +pre.code .gd { color: #A00000 } /* Generic.Deleted */ +pre.code .ge { font-style: italic } /* Generic.Emph */ +pre.code .gr { color: #FF0000 } /* Generic.Error */ +pre.code .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +pre.code .gi { color: #00A000 } /* Generic.Inserted */ +pre.code .go { color: #888888 } /* Generic.Output */ +pre.code .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +pre.code .gs { font-weight: bold } /* Generic.Strong */ +pre.code .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +pre.code .gt { color: #0044DD } /* Generic.Traceback */ +pre.code .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +pre.code .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +pre.code .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +pre.code .kp { color: #008000 } /* Keyword.Pseudo */ +pre.code .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +pre.code .kt { color: #B00040 } /* Keyword.Type */ +pre.code .m { color: #666666 } /* Literal.Number */ +pre.code .s { color: #BA2121 } /* Literal.String */ +pre.code .na { color: #7D9029 } /* Name.Attribute */ +pre.code .nb { color: #008000 } /* Name.Builtin */ +pre.code .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +pre.code .no { color: #880000 } /* Name.Constant */ +pre.code .nd { color: #AA22FF } /* Name.Decorator */ +pre.code .ni { color: #999999; font-weight: bold } /* Name.Entity */ +pre.code .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ +pre.code .nf { color: #0000FF } /* Name.Function */ +pre.code .nl { color: #A0A000 } /* Name.Label */ +pre.code .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +pre.code .nt { color: #008000; font-weight: bold } /* Name.Tag */ +pre.code .nv { color: #19177C } /* Name.Variable */ +pre.code .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +pre.code .w { color: #bbbbbb } /* Text.Whitespace */ +pre.code .mb { color: #666666 } /* Literal.Number.Bin */ +pre.code .mf { color: #666666 } /* Literal.Number.Float */ +pre.code .mh { color: #666666 } /* Literal.Number.Hex */ +pre.code .mi { color: #666666 } /* Literal.Number.Integer */ +pre.code .mo { color: #666666 } /* Literal.Number.Oct */ +pre.code .sb { color: #BA2121 } /* Literal.String.Backtick */ +pre.code .sc { color: #BA2121 } /* Literal.String.Char */ +pre.code .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +pre.code .s2 { color: #BA2121 } /* Literal.String.Double */ +pre.code .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ +pre.code .sh { color: #BA2121 } /* Literal.String.Heredoc */ +pre.code .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ +pre.code .sx { color: #008000 } /* Literal.String.Other */ +pre.code .sr { color: #BB6688 } /* Literal.String.Regex */ +pre.code .s1 { color: #BA2121 } /* Literal.String.Single */ +pre.code .ss { color: #19177C } /* Literal.String.Symbol */ +pre.code .bp { color: #008000 } /* Name.Builtin.Pseudo */ +pre.code .vc { color: #19177C } /* Name.Variable.Class */ +pre.code .vg { color: #19177C } /* Name.Variable.Global */ +pre.code .vi { color: #19177C } /* Name.Variable.Instance */ +pre.code .il { color: #666666 } /* Literal.Number.Integer.Long */ +table.codetable { width: 100%;} td.linenos {text-align: right; width: 4em;} + +/* + Colorbox Core Style: + The following CSS is consistent between example themes and should not be altered. +*/ +#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;} +#cboxWrapper {max-width:none;} +#cboxOverlay{position:fixed; width:100%; height:100%;} +#cboxMiddleLeft, #cboxBottomLeft{clear:left;} +#cboxContent{position:relative;} +#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} +#cboxTitle{margin:0;} +#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} +#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} +.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} +.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;} +#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;} + +/* + User Style: + Change the following styles to modify the appearance of Colorbox. They are + ordered & tabbed in a way that represents the nesting of the generated HTML. +*/ +#cboxOverlay{background:#000;} +#colorbox{outline:0;} + #cboxContent{margin-top:20px;background:#000;} + .cboxIframe{background:#fff;} + #cboxError{padding:50px; border:1px solid #ccc;} + #cboxLoadedContent{border:5px solid #000; background:#fff;} + #cboxTitle{position:absolute; top:-20px; left:0; color:#ccc;} + #cboxCurrent{position:absolute; top:-20px; right:0px; color:#ccc;} + #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;} + + /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ + #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; } + + /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ + #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;} + + #cboxSlideshow{position:absolute; top:-20px; right:90px; color:#fff;} + #cboxPrevious{position:absolute; top:50%; left:5px; margin-top:-32px; background:url(images/controls.png) no-repeat top left; width:28px; height:65px; text-indent:-9999px;} + #cboxPrevious:hover{background-position:bottom left;} + #cboxNext{position:absolute; top:50%; right:5px; margin-top:-32px; background:url(images/controls.png) no-repeat top right; width:28px; height:65px; text-indent:-9999px;} + #cboxNext:hover{background-position:bottom right;} + #cboxClose{position:absolute; top:5px; right:5px; display:block; background:url(images/controls.png) no-repeat top center; width:38px; height:19px; text-indent:-9999px;} + #cboxClose:hover{background-position:bottom center;} + +body { + padding-top: 60px; +} +@media (max-width: 979px) { + body { + padding-top: 0px; + } +} +#container { + width: 960px; + margin: 50 auto; +} + +#contentcolumn { + max-width: 760px; +} +#q { + width: 150px; +} + +img { + max-width: 90%; +} + +.postbox { + border-bottom: 2px solid darkgrey; + margin-bottom: 12px; +} + +.footerbox {padding: 15px; text-align: center; margin-bottom: 15px;} + +td.label { + /* Issue #290 */ + background-color: inherit; +} + +.footnote-reference { + /* Issue 290 */ + vertical-align: super; + font-size: xx-small; +} + +.caption { + /* Issue 292 */ + text-align: center; + padding-top: 1em; +} + +div.figure > img, +div.figure > a > img { + /* Issue 292 */ + display: block; + margin-left: auto; + margin-right: auto; +} + +div.sidebar, div.admonition, div.attention, div.caution, div.danger, div.error, div.hint, div.important, div.note, div.tip, div.warning { + /* Issue 277 */ + border: 1px solid #aaa; + border-radius: 5px; +} + +blockquote p, blockquote { + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +ul.bricks > li { + display: inline; + background-color: lightblue; + padding: 8px; + border-radius: 5px; + line-height: 3; + white-space:nowrap; + margin: 3px; +} + +ul.breadcrumb > li:before { + content: " / "; +} + +pre, pre code { + white-space: pre; + word-wrap: normal; + overflow: auto; +} + +article.post-micro { + font-family: Georgia, 'Times New Roman', Times, serif; + font-size: 1.5em; +} + +/* fix anchors for headers */ +h1, h2, h3 { + margin-top: -40px; + padding-top: 60px; +} + +h4, h5, h6 { + margin-top: -50px; + padding-top: 60px; +} + +.image-block { + display: inline-block; +} + +.flowr_row { + width: 100%; +} + +.tags { + padding-left: 0; + margin-left: -5px; + list-style: none; + text-align: center; + +} + +.tags > li { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + background-color: #999; + border-radius: 10px; +} + +.tags > li a { + color: #fff; +} + +.metadata p:before, +.postlist .listdate:before { + content: " — "; +} + +.metadata p:first-of-type:before { + content: ""; +} + +.metadata p { + display: inline; +} + +.posttranslations h3 { + display: inline; + font-size: 1em; + font-weight: bold; +} + +.posttranslations h3:last-child { + display: none; +} + +.entry-content { + margin-top: 1em; +} + +.navbar .brand { + padding: 0 20px; +} + +.navbar .brand #blog-title { + padding: 10px 0; + display: inline-block; +} + +#notebook-container { + padding-left: 0; +} + +ul.nav-list { + list-style-type: none; + padding-left: 0; +} + +.nav-list li a { + padding-left: 5px; +} + +#titlebox { + float: right; +} + +#titlelogo { + float: right; + margin-left: 15px; +} + +#blog-title a { + font-family: monospace; + color: #333; +} + +#blog-title a:hover { + text-decoration: none; + color: #005580; +} + +.table-list td { + padding-bottom: 20px; +} + +hr.light { + border-top: 1px solid #EEEEEE; +} + +.half-spacer { + margin-top: 15px; +} + +.spacer { + margin-top: 30px; +} + +.postbox { + border: none; +} + +.prompt { + display: none; +} + +.cell .output img { margin-bottom: 1em; } + +.nav li.separator { + background-color: #888888; + width: 2px; +} + +pre span.hll { background-color: #ffffcc } +pre span { background: #f8f8f8; } +pre span.c { color: #408080; font-style: italic } /* Comment */ +pre span.err { border: 1px solid #FF0000 } /* Error */ +pre span.k { color: #008000; font-weight: bold } /* Keyword */ +pre span.o { color: #666666 } /* Operator */ +pre span.cm { color: #408080; font-style: italic } /* Comment.Multiline */ +pre span.cp { color: #BC7A00 } /* Comment.Preproc */ +pre span.c1 { color: #408080; font-style: italic } /* Comment.Single */ +pre span.cs { color: #408080; font-style: italic } /* Comment.Special */ +pre span.gd { color: #A00000 } /* Generic.Deleted */ +pre span.ge { font-style: italic } /* Generic.Emph */ +pre span.gr { color: #FF0000 } /* Generic.Error */ +pre span.gh { color: #000080; font-weight: bold } /* Generic.Heading */ +pre span.gi { color: #00A000 } /* Generic.Inserted */ +pre span.go { color: #888888 } /* Generic.Output */ +pre span.gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +pre span.gs { font-weight: bold } /* Generic.Strong */ +pre span.gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +pre span.gt { color: #0044DD } /* Generic.Traceback */ +pre span.kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +pre span.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +pre span.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +pre span.kp { color: #008000 } /* Keyword.Pseudo */ +pre span.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +pre span.kt { color: #B00040 } /* Keyword.Type */ +pre span.m { color: #BA2121 } /* Literal.Number */ +pre span.s { color: #BA2121 } /* Literal.String */ +pre span.na { color: #7D9029 } /* Name.Attribute */ +pre span.nb { color: #008000 } /* Name.Builtin */ +pre span.nc { color: #0000FF; font-weight: bold } /* Name.Class */ +pre span.no { color: #880000 } /* Name.Constant */ +pre span.nd { color: #AA22FF } /* Name.Decorator */ +pre span.ni { color: #999999; font-weight: bold } /* Name.Entity */ +pre span.ne { color: #D2413A; font-weight: bold } /* Name.Exception */ +pre span.nf { color: #0000FF } /* Name.Function */ +pre span.nl { color: #A0A000 } /* Name.Label */ +pre span.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +pre span.nt { color: #008000; font-weight: bold } /* Name.Tag */ +pre span.nv { color: #19177C } /* Name.Variable */ +pre span.n { color: #000000 } /* Name */ +pre span.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +pre span.w { color: #bbbbbb } /* Text.Whitespace */ +pre span.mf { color: #BA2121 } /* Literal.Number.Float */ +pre span.mh { color: #BA2121 } /* Literal.Number.Hex */ +pre span.mi { color: #BA2121 } /* Literal.Number.Integer */ +pre span.mo { color: #BA2121 } /* Literal.Number.Oct */ +pre span.sb { color: #BA2121 } /* Literal.String.Backtick */ +pre span.sc { color: #BA2121 } /* Literal.String.Char */ +pre span.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +pre span.s2 { color: #BA2121 } /* Literal.String.Double */ +pre span.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ +pre span.sh { color: #BA2121 } /* Literal.String.Heredoc */ +pre span.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ +pre span.sx { color: #008000 } /* Literal.String.Other */ +pre span.sr { color: #BB6688 } /* Literal.String.Regex */ +pre span.s1 { color: #BA2121 } /* Literal.String.Single */ +pre span.ss { color: #19177C } /* Literal.String.Symbol */ +pre span.bp { color: #008000 } /* Name.Builtin.Pseudo */ +pre span.vc { color: #19177C } /* Name.Variable.Class */ +pre span.vg { color: #19177C } /* Name.Variable.Global */ +pre span.vi { color: #19177C } /* Name.Variable.Instance */ +pre span.il { color: #BA2121 } /* Literal.Number.Integer.Long */ diff --git a/Examples/pandas/IntroductionToPandas_files/all-nocdn.js b/Examples/pandas/IntroductionToPandas_files/all-nocdn.js new file mode 100644 index 0000000..5c96cad --- /dev/null +++ b/Examples/pandas/IntroductionToPandas_files/all-nocdn.js @@ -0,0 +1,18 @@ +/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
    ",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; +if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
    a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:k.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("'}function i(c){function e(b){var h=b.originalEvent.origin;if(d.urls.apiSecure.slice(0,h.length)===h){var j=JSON.parse(b.originalEvent.data);if(j.requestId===g){var k;0===j.code?(l.resolve(j),k=c.success):(l.reject(j),k=c.error),k=k||function(){},delete j.requestId,k(j),document.body.removeChild(f),document.body.removeChild(i),a(window).off("message",e)}}}c=b.defaults(c,o),c.secure&&(c.url=j(c.url));var f,g=b.uniqueId("ft_"),h=document.createElement("div"),i=document.createElement("form"),k="frame_"+g,l=new a.Deferred;return h.innerHTML=q.getIframe(k),f=h.childNodes[0],i.target=k,i.action=c.url.replace(".json",".pm"),i.method=c.method||"GET",c.data=b.extend(c.data,{callback:g,referrer:document.referrer}),b.each(c.data,function(a,c){a===!0?a=[1]:a===!1?a=[0]:null===a?a=[""]:b.isArray(a)||(a=[a]),b.each(a,function(a){var b=document.createElement("input");b.type="hidden",b.name=c,b.value=a,i.appendChild(b)})}),a(window).on("message",e),document.body.appendChild(f),document.body.appendChild(i),i.submit(),l.promise()}function j(a){return a.replace(/^(http\:)?\/\//,"https://")}function k(c){c=b.defaults(c,o),c.secure&&(c.url=j(c.url)),c.traditional=!0;var e=window.location;n.href=c.url,(e.host!==n.host||e.protocol!==n.protocol)&&(c.xhrFields={withCredentials:!0}),c.omitDisqusApiKey||(c.data=c.data||{},c.data.api_key=d.keys.api);var f=c.error;return c.error=function(a){q.trigger("error",a),b.isFunction(f)&&f(a)},a.ajax(c)}function l(a,c){c=c||{},c.url=m(a,{secure:c.secure}),c.data=b.extend(c.data||{},{api_key:d.keys.api}),q.trigger("call",c);var e=(f(c)?i:k)(c);return e&&e.always(b.bind(this.trigger,this,"complete")),e}function m(a,b){return b=b||{},/(https?\:)?\/\//.test(a)?a:(void 0!==b.secure?b.secure:o.secure)||"https:"===window.location.protocol?d.urls.apiSecure+a:d.urls.api+a}var n=document.createElement("a"),o={},p="withCredentials"in new XMLHttpRequest,q={ajax:k,call:l,getURL:m,defaults:function(a){var c,d,e;for(c in a)d=a[c],e=o[c],b.isObject(d)&&b.isObject(e)?b.extend(e,d):o[c]=d},headers:function(a){var c=b.extend({},o.headers,a);return o.headers=b.pick(c,b.map(c,function(a,b){return a?b:void 0})),o.headers},useFormTransport:f,xhrSupportsCredentialedRequests:p,makeHttps:j,formTransport:i,getIframe:h};return b.extend(q,c.Events),q}),define("core/utils/urls",[],function(){"use strict";var a={};return a.getOrigin=function(a){var b=a.split("/");return b[0]+"//"+b[2]},a}),define("core/frameBus",["jquery","underscore","backbone","core/utils/urls"],function(a,b,c,d){"use strict";function e(a){return a.hash.slice(1).replace(/(^\d+).*/,"$1")}var f=e(window.location),g=window.opener||window.parent,h=document.referrer,i={};i.client=d.getOrigin(document.location.href),i.host=h?d.getOrigin(h):i.client;var j={getUID:e,origins:i,messageHandler:function(a){a=a.originalEvent;var b;try{b=JSON.parse(a.data)}catch(c){return}if(!b.name||"!"!==b.name[0]||a.origin===i.client)switch(b.scope){case"host":break;case"client":j.trigger(b.name,b.data)}},postMessage:function(a){a.sender=f,a=JSON.stringify(a),g.postMessage(a,"*")},sendHostMessage:function(a,b){b=b||[],j.postMessage({scope:"host",name:a,data:b})}};return b.extend(j,c.Events),a(window).on("message",j.messageHandler),a(window).on("unload",function(){j.sendHostMessage("die")}),window.DISQUS=window.DISQUS||{},window.DISQUS.Bus=j,j}),define("core/bus",["backbone","underscore","core/frameBus"],function(a,b,c){"use strict";var d=b.extend({},a.Events);return d.frame=c,d}),function(a){function b(a,b,c){switch(arguments.length){case 2:return null!=a?a:b;case 3:return null!=a?a:null!=b?b:c;default:throw new Error("Implement me")}}function c(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function d(a){rb.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+a)}function e(a,b){var c=!0;return l(function(){return c&&(d(a),c=!1),b.apply(this,arguments)},b)}function f(a,b){nc[a]||(d(b),nc[a]=!0)}function g(a,b){return function(c){return o(a.call(this,c),b)}}function h(a,b){return function(c){return this.localeData().ordinal(a.call(this,c),b)}}function i(){}function j(a,b){b!==!1&&E(a),m(this,a),this._d=new Date(+a._d)}function k(a){var b=x(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;this._milliseconds=+k+1e3*j+6e4*i+36e5*h,this._days=+g+7*f,this._months=+e+3*d+12*c,this._data={},this._locale=rb.localeData(),this._bubble()}function l(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return b.hasOwnProperty("toString")&&(a.toString=b.toString),b.hasOwnProperty("valueOf")&&(a.valueOf=b.valueOf),a}function m(a,b){var c,d,e;if("undefined"!=typeof b._isAMomentObject&&(a._isAMomentObject=b._isAMomentObject),"undefined"!=typeof b._i&&(a._i=b._i),"undefined"!=typeof b._f&&(a._f=b._f),"undefined"!=typeof b._l&&(a._l=b._l),"undefined"!=typeof b._strict&&(a._strict=b._strict),"undefined"!=typeof b._tzm&&(a._tzm=b._tzm),"undefined"!=typeof b._isUTC&&(a._isUTC=b._isUTC),"undefined"!=typeof b._offset&&(a._offset=b._offset),"undefined"!=typeof b._pf&&(a._pf=b._pf),"undefined"!=typeof b._locale&&(a._locale=b._locale),Fb.length>0)for(c in Fb)d=Fb[c],e=b[d],"undefined"!=typeof e&&(a[d]=e);return a}function n(a){return 0>a?Math.ceil(a):Math.floor(a)}function o(a,b,c){for(var d=""+Math.abs(a),e=a>=0;d.lengthd;d++)(c&&a[d]!==b[d]||!c&&z(a[d])!==z(b[d]))&&g++;return g+f}function w(a){if(a){var b=a.toLowerCase().replace(/(.)s$/,"$1");a=gc[a]||hc[b]||b}return a}function x(a){var b,c,d={};for(c in a)a.hasOwnProperty(c)&&(b=w(c),b&&(d[b]=a[c]));return d}function y(b){var c,d;if(0===b.indexOf("week"))c=7,d="day";else{if(0!==b.indexOf("month"))return;c=12,d="month"}rb[b]=function(e,f){var g,h,i=rb._locale[b],j=[];if("number"==typeof e&&(f=e,e=a),h=function(a){var b=rb().utc().set(d,a);return i.call(rb._locale,b,e||"")},null!=f)return h(f);for(g=0;c>g;g++)j.push(h(g));return j}}function z(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=b>=0?Math.floor(b):Math.ceil(b)),c}function A(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function B(a,b,c){return fb(rb([a,11,31+b-c]),b,c).week}function C(a){return D(a)?366:365}function D(a){return a%4===0&&a%100!==0||a%400===0}function E(a){var b;a._a&&-2===a._pf.overflow&&(b=a._a[yb]<0||a._a[yb]>11?yb:a._a[zb]<1||a._a[zb]>A(a._a[xb],a._a[yb])?zb:a._a[Ab]<0||a._a[Ab]>23?Ab:a._a[Bb]<0||a._a[Bb]>59?Bb:a._a[Cb]<0||a._a[Cb]>59?Cb:a._a[Db]<0||a._a[Db]>999?Db:-1,a._pf._overflowDayOfYear&&(xb>b||b>zb)&&(b=zb),a._pf.overflow=b)}function F(a){return null==a._isValid&&(a._isValid=!isNaN(a._d.getTime())&&a._pf.overflow<0&&!a._pf.empty&&!a._pf.invalidMonth&&!a._pf.nullInput&&!a._pf.invalidFormat&&!a._pf.userInvalidated,a._strict&&(a._isValid=a._isValid&&0===a._pf.charsLeftOver&&0===a._pf.unusedTokens.length)),a._isValid}function G(a){return a?a.toLowerCase().replace("_","-"):a}function H(a){for(var b,c,d,e,f=0;f0;){if(d=I(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&v(e,c,!0)>=b-1)break;b--}f++}return null}function I(a){var b=null;if(!Eb[a]&&Gb)try{b=rb.locale(),require("./locale/"+a),rb.locale(b)}catch(c){}return Eb[a]}function J(a,b){return b._isUTC?rb(a).zone(b._offset||0):rb(a).local()}function K(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function L(a){var b,c,d=a.match(Kb);for(b=0,c=d.length;c>b;b++)d[b]=mc[d[b]]?mc[d[b]]:K(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function M(a,b){return a.isValid()?(b=N(b,a.localeData()),ic[b]||(ic[b]=L(b)),ic[b](a)):a.localeData().invalidDate()}function N(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Lb.lastIndex=0;d>=0&&Lb.test(a);)a=a.replace(Lb,c),Lb.lastIndex=0,d-=1;return a}function O(a,b){var c,d=b._strict;switch(a){case"Q":return Wb;case"DDDD":return Yb;case"YYYY":case"GGGG":case"gggg":return d?Zb:Ob;case"Y":case"G":case"g":return _b;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return d?$b:Pb;case"S":if(d)return Wb;case"SS":if(d)return Xb;case"SSS":if(d)return Yb;case"DDD":return Nb;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Rb;case"a":case"A":return b._locale._meridiemParse;case"X":return Ub;case"Z":case"ZZ":return Sb;case"T":return Tb;case"SSSS":return Qb;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return d?Xb:Mb;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Mb;case"Do":return Vb;default:return c=new RegExp(X(W(a.replace("\\","")),"i"))}}function P(a){a=a||"";var b=a.match(Sb)||[],c=b[b.length-1]||[],d=(c+"").match(ec)||["-",0,0],e=+(60*d[1])+z(d[2]);return"+"===d[0]?-e:e}function Q(a,b,c){var d,e=c._a;switch(a){case"Q":null!=b&&(e[yb]=3*(z(b)-1));break;case"M":case"MM":null!=b&&(e[yb]=z(b)-1);break;case"MMM":case"MMMM":d=c._locale.monthsParse(b),null!=d?e[yb]=d:c._pf.invalidMonth=b;break;case"D":case"DD":null!=b&&(e[zb]=z(b));break;case"Do":null!=b&&(e[zb]=z(parseInt(b,10)));break;case"DDD":case"DDDD":null!=b&&(c._dayOfYear=z(b));break;case"YY":e[xb]=rb.parseTwoDigitYear(b);break;case"YYYY":case"YYYYY":case"YYYYYY":e[xb]=z(b);break;case"a":case"A":c._isPm=c._locale.isPM(b);break;case"H":case"HH":case"h":case"hh":e[Ab]=z(b);break;case"m":case"mm":e[Bb]=z(b);break;case"s":case"ss":e[Cb]=z(b);break;case"S":case"SS":case"SSS":case"SSSS":e[Db]=z(1e3*("0."+b));break;case"X":c._d=new Date(1e3*parseFloat(b));break;case"Z":case"ZZ":c._useUTC=!0,c._tzm=P(b);break;case"dd":case"ddd":case"dddd":d=c._locale.weekdaysParse(b),null!=d?(c._w=c._w||{},c._w.d=d):c._pf.invalidWeekday=b;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":a=a.substr(0,1);case"gggg":case"GGGG":case"GGGGG":a=a.substr(0,2),b&&(c._w=c._w||{},c._w[a]=z(b));break;case"gg":case"GG":c._w=c._w||{},c._w[a]=rb.parseTwoDigitYear(b)}}function R(a){var c,d,e,f,g,h,i;c=a._w,null!=c.GG||null!=c.W||null!=c.E?(g=1,h=4,d=b(c.GG,a._a[xb],fb(rb(),1,4).year),e=b(c.W,1),f=b(c.E,1)):(g=a._locale._week.dow,h=a._locale._week.doy,d=b(c.gg,a._a[xb],fb(rb(),g,h).year),e=b(c.w,1),null!=c.d?(f=c.d,g>f&&++e):f=null!=c.e?c.e+g:g),i=gb(d,e,f,h,g),a._a[xb]=i.year,a._dayOfYear=i.dayOfYear}function S(a){var c,d,e,f,g=[];if(!a._d){for(e=U(a),a._w&&null==a._a[zb]&&null==a._a[yb]&&R(a),a._dayOfYear&&(f=b(a._a[xb],e[xb]),a._dayOfYear>C(f)&&(a._pf._overflowDayOfYear=!0),d=bb(f,0,a._dayOfYear),a._a[yb]=d.getUTCMonth(),a._a[zb]=d.getUTCDate()),c=0;3>c&&null==a._a[c];++c)a._a[c]=g[c]=e[c];for(;7>c;c++)a._a[c]=g[c]=null==a._a[c]?2===c?1:0:a._a[c];a._d=(a._useUTC?bb:ab).apply(null,g),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()+a._tzm)}}function T(a){var b;a._d||(b=x(a._i),a._a=[b.year,b.month,b.day,b.hour,b.minute,b.second,b.millisecond],S(a))}function U(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function V(a){if(a._f===rb.ISO_8601)return void Z(a);a._a=[],a._pf.empty=!0;var b,c,d,e,f,g=""+a._i,h=g.length,i=0;for(d=N(a._f,a._locale).match(Kb)||[],b=0;b0&&a._pf.unusedInput.push(f),g=g.slice(g.indexOf(c)+c.length),i+=c.length),mc[e]?(c?a._pf.empty=!1:a._pf.unusedTokens.push(e),Q(e,c,a)):a._strict&&!c&&a._pf.unusedTokens.push(e);a._pf.charsLeftOver=h-i,g.length>0&&a._pf.unusedInput.push(g),a._isPm&&a._a[Ab]<12&&(a._a[Ab]+=12),a._isPm===!1&&12===a._a[Ab]&&(a._a[Ab]=0),S(a),E(a)}function W(a){return a.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e})}function X(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Y(a){var b,d,e,f,g;if(0===a._f.length)return a._pf.invalidFormat=!0,void(a._d=new Date(0/0));for(f=0;fg)&&(e=g,d=b));l(a,d||b)}function Z(a){var b,c,d=a._i,e=ac.exec(d);if(e){for(a._pf.iso=!0,b=0,c=cc.length;c>b;b++)if(cc[b][1].exec(d)){a._f=cc[b][0]+(e[6]||" ");break}for(b=0,c=dc.length;c>b;b++)if(dc[b][1].exec(d)){a._f+=dc[b][0];break}d.match(Sb)&&(a._f+="Z"),V(a)}else a._isValid=!1}function $(a){Z(a),a._isValid===!1&&(delete a._isValid,rb.createFromInputFallback(a))}function _(b){var c,d=b._i;d===a?b._d=new Date:u(d)?b._d=new Date(+d):null!==(c=Hb.exec(d))?b._d=new Date(+c[1]):"string"==typeof d?$(b):t(d)?(b._a=d.slice(0),S(b)):"object"==typeof d?T(b):"number"==typeof d?b._d=new Date(d):rb.createFromInputFallback(b)}function ab(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 1970>a&&h.setFullYear(a),h}function bb(a){var b=new Date(Date.UTC.apply(null,arguments));return 1970>a&&b.setUTCFullYear(a),b}function cb(a,b){if("string"==typeof a)if(isNaN(a)){if(a=b.weekdaysParse(a),"number"!=typeof a)return null}else a=parseInt(a,10);return a}function db(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function eb(a,b,c){var d=rb.duration(a).abs(),e=wb(d.as("s")),f=wb(d.as("m")),g=wb(d.as("h")),h=wb(d.as("d")),i=wb(d.as("M")),j=wb(d.as("y")),k=e0,k[4]=c,db.apply({},k)}function fb(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=rb(a).add(f,"d"),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function gb(a,b,c,d,e){var f,g,h=bb(a,0,1).getUTCDay();return h=0===h?7:h,c=null!=c?c:e,f=e-h+(h>d?7:0)-(e>h?7:0),g=7*(b-1)+(c-e)+f+1,{year:g>0?a:a-1,dayOfYear:g>0?g:C(a-1)+g}}function hb(b){var c=b._i,d=b._f;return b._locale=b._locale||rb.localeData(b._l),null===c||d===a&&""===c?rb.invalid({nullInput:!0}):("string"==typeof c&&(b._i=c=b._locale.preparse(c)),rb.isMoment(c)?new j(c,!0):(d?t(d)?Y(b):V(b):_(b),new j(b)))}function ib(a,b){var c,d;if(1===b.length&&t(b[0])&&(b=b[0]),!b.length)return rb();for(c=b[0],d=1;d=0?"+":"-";return b+o(Math.abs(a),6)},gg:function(){return o(this.weekYear()%100,2)},gggg:function(){return o(this.weekYear(),4)},ggggg:function(){return o(this.weekYear(),5)},GG:function(){return o(this.isoWeekYear()%100,2)},GGGG:function(){return o(this.isoWeekYear(),4)},GGGGG:function(){return o(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!0) +},A:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return z(this.milliseconds()/100)},SS:function(){return o(z(this.milliseconds()/10),2)},SSS:function(){return o(this.milliseconds(),3)},SSSS:function(){return o(this.milliseconds(),3)},Z:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+o(z(a/60),2)+":"+o(z(a)%60,2)},ZZ:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+o(z(a/60),2)+o(z(a)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()},Q:function(){return this.quarter()}},nc={},oc=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];kc.length;)tb=kc.pop(),mc[tb+"o"]=h(mc[tb],tb);for(;lc.length;)tb=lc.pop(),mc[tb+tb]=g(mc[tb],2);mc.DDDD=g(mc.DDD,3),l(i.prototype,{set:function(a){var b,c;for(c in a)b=a[c],"function"==typeof b?this[c]=b:this["_"+c]=b},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(a){return this._months[a.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(a){return this._monthsShort[a.month()]},monthsParse:function(a){var b,c,d;for(this._monthsParse||(this._monthsParse=[]),b=0;12>b;b++)if(this._monthsParse[b]||(c=rb.utc([2e3,b]),d="^"+this.months(c,"")+"|^"+this.monthsShort(c,""),this._monthsParse[b]=new RegExp(d.replace(".",""),"i")),this._monthsParse[b].test(a))return b},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(a){return this._weekdays[a.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(a){return this._weekdaysShort[a.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(a){return this._weekdaysMin[a.day()]},weekdaysParse:function(a){var b,c,d;for(this._weekdaysParse||(this._weekdaysParse=[]),b=0;7>b;b++)if(this._weekdaysParse[b]||(c=rb([2e3,1]).day(b),d="^"+this.weekdays(c,"")+"|^"+this.weekdaysShort(c,"")+"|^"+this.weekdaysMin(c,""),this._weekdaysParse[b]=new RegExp(d.replace(".",""),"i")),this._weekdaysParse[b].test(a))return b},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},longDateFormat:function(a){var b=this._longDateFormat[a];return!b&&this._longDateFormat[a.toUpperCase()]&&(b=this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a]=b),b},isPM:function(a){return"p"===(a+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(a,b){var c=this._calendar[a];return"function"==typeof c?c.apply(b):c},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(a,b,c,d){var e=this._relativeTime[c];return"function"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)},pastFuture:function(a,b){var c=this._relativeTime[a>0?"future":"past"];return"function"==typeof c?c(b):c.replace(/%s/i,b)},ordinal:function(a){return this._ordinal.replace("%d",a)},_ordinal:"%d",preparse:function(a){return a},postformat:function(a){return a},week:function(a){return fb(a,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),rb=function(b,d,e,f){var g;return"boolean"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._i=b,g._f=d,g._l=e,g._strict=f,g._isUTC=!1,g._pf=c(),hb(g)},rb.suppressDeprecationWarnings=!1,rb.createFromInputFallback=e("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(a){a._d=new Date(a._i)}),rb.min=function(){var a=[].slice.call(arguments,0);return ib("isBefore",a)},rb.max=function(){var a=[].slice.call(arguments,0);return ib("isAfter",a)},rb.utc=function(b,d,e,f){var g;return"boolean"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._useUTC=!0,g._isUTC=!0,g._l=e,g._i=b,g._f=d,g._strict=f,g._pf=c(),hb(g).utc()},rb.unix=function(a){return rb(1e3*a)},rb.duration=function(a,b){var c,d,e,f,g=a,h=null;return rb.isDuration(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:"number"==typeof a?(g={},b?g[b]=a:g.milliseconds=a):(h=Ib.exec(a))?(c="-"===h[1]?-1:1,g={y:0,d:z(h[zb])*c,h:z(h[Ab])*c,m:z(h[Bb])*c,s:z(h[Cb])*c,ms:z(h[Db])*c}):(h=Jb.exec(a))?(c="-"===h[1]?-1:1,e=function(a){var b=a&&parseFloat(a.replace(",","."));return(isNaN(b)?0:b)*c},g={y:e(h[2]),M:e(h[3]),d:e(h[4]),h:e(h[5]),m:e(h[6]),s:e(h[7]),w:e(h[8])}):"object"==typeof g&&("from"in g||"to"in g)&&(f=q(rb(g.from),rb(g.to)),g={},g.ms=f.milliseconds,g.M=f.months),d=new k(g),rb.isDuration(a)&&a.hasOwnProperty("_locale")&&(d._locale=a._locale),d},rb.version=ub,rb.defaultFormat=bc,rb.ISO_8601=function(){},rb.momentProperties=Fb,rb.updateOffset=function(){},rb.relativeTimeThreshold=function(b,c){return jc[b]===a?!1:c===a?jc[b]:(jc[b]=c,!0)},rb.lang=e("moment.lang is deprecated. Use moment.locale instead.",function(a,b){return rb.locale(a,b)}),rb.locale=function(a,b){var c;return a&&(c="undefined"!=typeof b?rb.defineLocale(a,b):rb.localeData(a),c&&(rb.duration._locale=rb._locale=c)),rb._locale._abbr},rb.defineLocale=function(a,b){return null!==b?(b.abbr=a,Eb[a]||(Eb[a]=new i),Eb[a].set(b),rb.locale(a),Eb[a]):(delete Eb[a],null)},rb.langData=e("moment.langData is deprecated. Use moment.localeData instead.",function(a){return rb.localeData(a)}),rb.localeData=function(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return rb._locale;if(!t(a)){if(b=I(a))return b;a=[a]}return H(a)},rb.isMoment=function(a){return a instanceof j||null!=a&&a.hasOwnProperty("_isAMomentObject")},rb.isDuration=function(a){return a instanceof k};for(tb=oc.length-1;tb>=0;--tb)y(oc[tb]);rb.normalizeUnits=function(a){return w(a)},rb.invalid=function(a){var b=rb.utc(0/0);return null!=a?l(b._pf,a):b._pf.userInvalidated=!0,b},rb.parseZone=function(){return rb.apply(null,arguments).parseZone()},rb.parseTwoDigitYear=function(a){return z(a)+(z(a)>68?1900:2e3)},l(rb.fn=j.prototype,{clone:function(){return rb(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var a=rb(this).utc();return 00:!1},parsingFlags:function(){return l({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(a){return this.zone(0,a)},local:function(a){return this._isUTC&&(this.zone(0,a),this._isUTC=!1,a&&this.add(this._d.getTimezoneOffset(),"m")),this},format:function(a){var b=M(this,a||rb.defaultFormat);return this.localeData().postformat(b)},add:r(1,"add"),subtract:r(-1,"subtract"),diff:function(a,b,c){var d,e,f=J(a,this),g=6e4*(this.zone()-f.zone());return b=w(b),"year"===b||"month"===b?(d=432e5*(this.daysInMonth()+f.daysInMonth()),e=12*(this.year()-f.year())+(this.month()-f.month()),e+=(this-rb(this).startOf("month")-(f-rb(f).startOf("month")))/d,e-=6e4*(this.zone()-rb(this).startOf("month").zone()-(f.zone()-rb(f).startOf("month").zone()))/d,"year"===b&&(e/=12)):(d=this-f,e="second"===b?d/1e3:"minute"===b?d/6e4:"hour"===b?d/36e5:"day"===b?(d-g)/864e5:"week"===b?(d-g)/6048e5:d),c?e:n(e)},from:function(a,b){return rb.duration({to:this,from:a}).locale(this.locale()).humanize(!b)},fromNow:function(a){return this.from(rb(),a)},calendar:function(a){var b=a||rb(),c=J(b,this).startOf("day"),d=this.diff(c,"days",!0),e=-6>d?"sameElse":-1>d?"lastWeek":0>d?"lastDay":1>d?"sameDay":2>d?"nextDay":7>d?"nextWeek":"sameElse";return this.format(this.localeData().calendar(e,this))},isLeapYear:function(){return D(this.year())},isDST:function(){return this.zone()+rb(a).startOf(b)},isBefore:function(a,b){return b="undefined"!=typeof b?b:"millisecond",+this.clone().startOf(b)<+rb(a).startOf(b)},isSame:function(a,b){return b=b||"ms",+this.clone().startOf(b)===+J(a,this).startOf(b)},min:e("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(a){return a=rb.apply(null,arguments),this>a?this:a}),max:e("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(a){return a=rb.apply(null,arguments),a>this?this:a}),zone:function(a,b){var c,d=this._offset||0;return null==a?this._isUTC?d:this._d.getTimezoneOffset():("string"==typeof a&&(a=P(a)),Math.abs(a)<16&&(a=60*a),!this._isUTC&&b&&(c=this._d.getTimezoneOffset()),this._offset=a,this._isUTC=!0,null!=c&&this.subtract(c,"m"),d!==a&&(!b||this._changeInProgress?s(this,rb.duration(d-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,rb.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(a){return a=a?rb(a).zone():0,(this.zone()-a)%60===0},daysInMonth:function(){return A(this.year(),this.month())},dayOfYear:function(a){var b=wb((rb(this).startOf("day")-rb(this).startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")},quarter:function(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)},weekYear:function(a){var b=fb(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==a?b:this.add(a-b,"y")},isoWeekYear:function(a){var b=fb(this,1,4).year;return null==a?b:this.add(a-b,"y")},week:function(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")},isoWeek:function(a){var b=fb(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")},weekday:function(a){var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")},isoWeekday:function(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)},isoWeeksInYear:function(){return B(this.year(),1,4)},weeksInYear:function(){var a=this.localeData()._week;return B(this.year(),a.dow,a.doy)},get:function(a){return a=w(a),this[a]()},set:function(a,b){return a=w(a),"function"==typeof this[a]&&this[a](b),this},locale:function(b){return b===a?this._locale._abbr:(this._locale=rb.localeData(b),this)},lang:e("moment().lang() is deprecated. Use moment().localeData() instead.",function(b){return b===a?this.localeData():(this._locale=rb.localeData(b),this)}),localeData:function(){return this._locale}}),rb.fn.millisecond=rb.fn.milliseconds=mb("Milliseconds",!1),rb.fn.second=rb.fn.seconds=mb("Seconds",!1),rb.fn.minute=rb.fn.minutes=mb("Minutes",!1),rb.fn.hour=rb.fn.hours=mb("Hours",!0),rb.fn.date=mb("Date",!0),rb.fn.dates=e("dates accessor is deprecated. Use date instead.",mb("Date",!0)),rb.fn.year=mb("FullYear",!0),rb.fn.years=e("years accessor is deprecated. Use year instead.",mb("FullYear",!0)),rb.fn.days=rb.fn.day,rb.fn.months=rb.fn.month,rb.fn.weeks=rb.fn.week,rb.fn.isoWeeks=rb.fn.isoWeek,rb.fn.quarters=rb.fn.quarter,rb.fn.toJSON=rb.fn.toISOString,l(rb.duration.fn=k.prototype,{_bubble:function(){var a,b,c,d=this._milliseconds,e=this._days,f=this._months,g=this._data,h=0;g.milliseconds=d%1e3,a=n(d/1e3),g.seconds=a%60,b=n(a/60),g.minutes=b%60,c=n(b/60),g.hours=c%24,e+=n(c/24),h=n(nb(e)),e-=n(ob(h)),f+=n(e/30),e%=30,h+=n(f/12),f%=12,g.days=e,g.months=f,g.years=h},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return n(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*z(this._months/12)},humanize:function(a){var b=eb(this,!a,this.localeData());return a&&(b=this.localeData().pastFuture(+this,b)),this.localeData().postformat(b)},add:function(a,b){var c=rb.duration(a,b);return this._milliseconds+=c._milliseconds,this._days+=c._days,this._months+=c._months,this._bubble(),this},subtract:function(a,b){var c=rb.duration(a,b);return this._milliseconds-=c._milliseconds,this._days-=c._days,this._months-=c._months,this._bubble(),this},get:function(a){return a=w(a),this[a.toLowerCase()+"s"]()},as:function(a){var b,c;if(a=w(a),b=this._days+this._milliseconds/864e5,"month"===a||"year"===a)return c=this._months+12*nb(b),"month"===a?c:c/12;switch(b+=ob(this._months/12),a){case"week":return b/7;case"day":return b;case"hour":return 24*b;case"minute":return 24*b*60;case"second":return 24*b*60*60;case"millisecond":return 24*b*60*60*1e3;default:throw new Error("Unknown unit "+a)}},lang:rb.fn.lang,locale:rb.fn.locale,toIsoString:e("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",function(){return this.toISOString()}),toISOString:function(){var a=Math.abs(this.years()),b=Math.abs(this.months()),c=Math.abs(this.days()),d=Math.abs(this.hours()),e=Math.abs(this.minutes()),f=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(a?a+"Y":"")+(b?b+"M":"")+(c?c+"D":"")+(d||e||f?"T":"")+(d?d+"H":"")+(e?e+"M":"")+(f?f+"S":""):"P0D"},localeData:function(){return this._locale}});for(tb in fc)fc.hasOwnProperty(tb)&&pb(tb.toLowerCase());rb.duration.fn.asMilliseconds=function(){return this.as("ms")},rb.duration.fn.asSeconds=function(){return this.as("s")},rb.duration.fn.asMinutes=function(){return this.as("m")},rb.duration.fn.asHours=function(){return this.as("h")},rb.duration.fn.asDays=function(){return this.as("d")},rb.duration.fn.asWeeks=function(){return this.as("weeks")},rb.duration.fn.asMonths=function(){return this.as("M")},rb.duration.fn.asYears=function(){return this.as("y")},rb.locale("en",{ordinal:function(a){var b=a%10,c=1===z(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),Gb?module.exports=rb:"function"==typeof define&&define.amd?(define("moment",["require","exports","module"],function(a,b,c){return c.config&&c.config()&&c.config().noGlobal===!0&&(vb.moment=sb),rb}),qb(!0)):qb()}.call(this),define("core/time",[],function(){"use strict";function a(a){return a.indexOf("+")>=0?a:a+"+00:00"}var b="YYYY-MM-DDTHH:mm:ssZ";return{ISO_8601:b,assureTzOffset:a}}),define("core/utils/cookies",[],function(){"use strict";var a={getCookieDomain:function(a){return a.split("/")[2].replace(/\:[0-9]+/,"")},deprecated:{create:function(b,c){var d=31536e6;a.create(b,c,{domain:a.getCookieDomain(window.location+""),expiresIn:d})},erase:function(b){a.erase(b,{domain:a.getCookieDomain(window.location+"")})}},create:function(a,b,c){var d,e=a+"="+b+"; path="+(c.path||"/");c.domain&&(e+="; domain=."+c.domain),c.expiresIn&&(d=new Date,d.setTime(d.getTime()+c.expiresIn),e+="; expires="+d.toGMTString()),document.cookie=e},read:function(a){for(var b,c=a+"=",d=document.cookie.split(";"),e=0;e-1?"&"===a.charAt(a.length-1)?"":"&":"?",a+=this.serializeArgs(b)),c){var d={};return d[(new Date).getTime()]=null,this.serialize(a,d)}var e=a.length;return"&"===a.charAt(e-1)?a.slice(0,e-1):a}var h=/^[a-zA-Z0-9.!#$%&'*+-\/=?\^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/,i=function(a){return h.test(a)},j=function(a){var b=document.createElement("div");return b.innerHTML=a,0===b.childNodes.length?"":b.childNodes[0].nodeValue},k="zw|zm|za|yu|yt|ye|xn|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|uk|ug|ua|tz|tw|tv|tt|travel|tr|tp|to|tn|tm|tl|tk|tj|th|tg|tf|tel|td|tc|sz|sy|sv|su|st|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|re|qa|py|pw|pt|ps|pro|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|org|om|nz|nu|nr|np|no|nl|ni|ng|nf|net|ne|nc|name|na|mz|my|mx|mw|mv|museum|mu|mt|ms|mr|mq|mp|mobi|mo|mn|mm|ml|mk|mil|mh|mg|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jobs|jo|jm|je|it|is|ir|iq|io|int|info|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|gu|gt|gs|gr|gq|gp|gov|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eg|ee|edu|ec|dz|do|dm|dk|dj|de|cz|cy|cx|cv|cu|cr|coop|com|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|cat|ca|bz|by|bw|bv|bt|bs|br|bo|bn|bm|bj|biz|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|asia|as|arpa|ar|aq|ao|an|am|al|ai|ag|af|aero|ae|ad|ac|",l=new RegExp("([^@.]|^)\\b(?:\\w[\\w-]*:/{0,3}(?:(?:\\w+:)?\\w+@)?)?([\\w-]+\\.)+(?:"+k+')(?!\\.\\w)\\b(?:[/?][^\\s\\{\\}\\|\\\\\\^\\[\\]`<>"\\x80-\\xFF\\x00-\\x1F\\x7F]*)?',"g"),m=function(a){return!!a.match(l)},n=new RegExp("[\\u0021-\\u002F\\u003A-\\u0040\\u005B-\\u0060\\u007B-\\u007E\\u00A1-\\u00BF\\u2010-\\u2027\\u2030-\\u205E\\u2300-\\u23FF\\u2E00-\\u2E7F\\u3001-\\u303F\\uFE10-\\uFE19\\uFE30-\\uFE4F\\uFE50-\\uFE6B\\uFF01-\\uFF0F\\uFF1A-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF60\\uFF5F-\\uFF64]+$"),o=function(a,b){if(a.length<=b)return a;a=a.slice(0,b-1);var c=a,d=/(^.*\S)\s/.exec(a);d&&(a=d[1]);var e=n.exec(a);return e&&(a=a.slice(0,a.length-e[0].length)),a.length<.5*c.length&&(a=c),a+"…"},p=function(){var a=document.createElement("fakeelement"),b={transition:"transitionend",OTransition:"otransitionend",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(var c in b)if(void 0!==a.style[c])return b[c];return null}(),q=function(a){return a=a||window,/Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/i.test(a.navigator.userAgent||a.navigator.vendor||a.opera)};return{validateEmail:i,isUrl:m,htmlDecode:j,niceTruncate:o,transitionEndEvent:p,isMobileUserAgent:q,escapeColor:c,preventDefaultHandler:d,getDomain:e,serializeArgs:f,serialize:g}}),define("core/utils/hash",[],function(){"use strict";var a=function(a){var b,c,d,e=0;if(0===a.length)return e;for(b=0,c=a.length;c>b;b++)d=a.charCodeAt(b),e=(e<<5)-e+d,e|=0;return e};return{calculate:a}}),define("core/analytics/identity",["backbone","core/utils/cookies","core/utils/guid","core/utils/hash","core/utils/fingerprint"],function(a,b,c,d,e){"use strict";var f=function(){var d=a.Model.extend({COOKIE_NAME:"__jid",TTL:18e5,initialize:function(){this.prevImp=b.read(this.COOKIE_NAME),this.impId=c.generate(),this.persist()},persist:function(){b.create(this.COOKIE_NAME,this.impId,{expiresIn:this.TTL})}});return new d}(),g=function(){var d=a.Model.extend({COOKIE_NAME:"disqus_unique",isPersistent:function(){return b.read(this.COOKIE_NAME)===this.get("value")},initialize:function(){var a=b.read(this.COOKIE_NAME);a||(a=c.generate()),b.deprecated.create(this.COOKIE_NAME,a),this.set("value",a)}});return new d}(),h=function(){var a,b=g;return b.isPersistent()&&(a=b.get("value")),a||e.get().toString()},i=function(){return Math.abs(d.calculate(this.clientId())%100)};return{unique:g,impression:f,clientId:h,clientPercent:i}}),define("core/utils/storage",[],function(){"use strict";var a=function(a){var b="_dsqstorage_";try{return a.localStorage.setItem(b,b),a.localStorage.removeItem(b),!0}catch(c){return!1}}(window),b=function(){var a={};return{getItem:function(b){return a.hasOwnProperty(b)?a[b]:null},setItem:function(b,c){a[b]=""+c},removeItem:function(b){delete a[b]}}}();return{get:function(a){var b=this.store.get().getItem(a);try{return JSON.parse(b)}catch(c){return b}},set:function(a,b){try{this.store.get().setItem(a,JSON.stringify(b))}catch(c){}},remove:function(a){this.store.get().removeItem(a)},store:{get:function(){return a?window.localStorage:b},isPersistent:function(){return a}}}}),define("core/switches",["underscore","remote/config","core/analytics/identity","core/utils/cookies","core/utils/storage"],function(a,b,c,d,e){"use strict";var f="switch:",g="disqusauth",h={};return h._getKey=function(a){return f+a},h.getDisqusAuth=function(){var a=(d.read(g)||"").replace(/\"/g,"").split("|");return a[1]&&a[6]?{username:a[1],id:parseInt(a[6],10),staff:!!parseInt(a[2],10)}:{}},h.disableFeature=function(a){e.set(this._getKey(a),!1)},h.unsetFeature=function(a){e.remove(this._getKey(a),!0)},h.forceFeature=function(a){e.set(this._getKey(a),!0)},h.isFeatureActive=function(f,g){var i=this._getKey(f),j=e.get(i);if(a.isBoolean(j))return j;if("1"===d.read(i))return this.forceFeature(f),d.erase(i,{domain:document.domain.split(".").slice(-2).join(".")}),!0;var k=(b.lounge&&b.lounge.switches||{})[f];if(!k)return!1;var l=h.getDisqusAuth();return g=a.defaults(g||{},{percent:c.clientPercent(),user_id:l.id,username:l.username,is_staff:l.staff}),a.any(k,function(b,c){return/percent$/.test(c)&&a.isNumber(b)?b>=g[c]:a.isArray(b)?a.contains(b,g[c]):b===g[c]})},h}),define("core/logger",["underscore","core/switches"],function(a,b){"use strict";var c,d,e=window.console;return b.isFeatureActive("logging")&&e&&e.log?(e.log&&(c=d=a.bind(e.log,e)),e.error&&(d=a.bind(e.error,e))):c=d=a.noop,{debug:c,error:d}}),define("core/strings",["core/logger"],function(a){"use strict";function b(a){var b=d.translations[a];return void 0!==b?b:a}function c(b,c){function d(d){var e="";return d in c?e=void 0!==c[d]&&null!==c[d]?c[d].toString():"":a.error("Key `"+d+"` not found in context for: ",b),e}return b.replace(/%\(\w+\)s/g,function(a){return d(a.slice(2,-2))})}var d={get:b,interpolate:c,translations:{}};return d}),define("core/models/User",["jquery","underscore","backbone","core/config","core/utils","core/strings","core/api","core/models/BaseUser"],function(a,b,c,d,e,f,g,h){"use strict";function i(a,b,c){a[b]=a[b]||[],a[b].push(c)}var j=f.get,k=h.extend({url:g.getURL("users/details"),validate:function(c){var d={};return c.display_name&&(c.display_name=a.trim(c.display_name)),c.display_name||i(d,"display_name",j("Please enter your name.")),c.email||i(d,"email",j("Please enter your email address.")),e.validateEmail(c.email)||i(d,"email",j("Invalid email address.")),this.isNew()&&(c.password?c.password.lengthk.MAX_NAME_LEN&&i(d,"name",f.interpolate(j("Name must have less than %(maxLength)s characters."),{maxLength:k.MAX_NAME_LEN}))),c.location&&c.location.length>k.MAX_LOCATION_LEN&&i(d,"location",f.interpolate(j("Location must have less than %(maxLength)s characters."),{maxLength:k.MAX_LOCATION_LEN})),c.url&&(c.url.length>k.MAX_URL_LEN&&i(d,"url",f.interpolate(j("Site must have less than %(maxLength)s characters."),{maxLength:k.MAX_URL_LEN})),e.isUrl(c.url)||i(d,"url",j("Please enter a valid site."))),b.isEmpty(d)?void 0:d},prepareFetchOptions:function(a){a=a?b.clone(a):{};var c={};return this.get("id")?c.user=this.get("id"):this.get("username")&&(c.user="username:"+this.get("username")),a.data=b.extend(c,a.data),a},fetch:function(a){return a=this.prepareFetchOptions(a),h.prototype.fetch.call(this,a)},parse:function(a){return a.response||a},register:function(a){var b=this;return a=a||{},g.call("internal/users/register.json",{secure:!0,data:this.toRegisterJSON(),method:"POST",success:function(c){b.set(c.response),a.success&&a.success(c)},error:a.error})},saveAvatar:function(a){var b=new FormData;return b.append("avatar_file",a),b.append("api_key",d.keys.api),g.call("internal/users/updateAvatar.json",{method:"post",data:b,cache:!1,contentType:!1,processData:!1})},saveProfile:function(){return g.call("users/updateProfile.json",{method:"POST",data:{name:this.get("name"),about:this.get("about"),location:this.get("location"),url:this.get("url")}})},toRegisterJSON:function(){return b.pick(this.toJSON(),"display_name","email","password")},isSession:function(a){return a.user.id&&a.user.id===this.id},isEditable:function(a){return this.isSession(a)&&!this.get("remote")},toJSON:function(a){a=a||{};var b=h.prototype.toJSON.call(this),c=this.collection&&this.collection.thread;return b.thread.canModerate=!!c&&c.isModerator(this),a.session&&(b.isSession=this.isSession(a.session),b.isEditable=this.isEditable(a.session)),b},_changeFollowState:function(a){this.set({isFollowing:a,numFollowers:Math.max(0,this.get("numFollowers")+(a?1:-1))});var b="users/"+(a?"follow":"unfollow"),c=this;return g.call(b+".json",{data:{target:this.get("id")},method:"POST",success:function(a){c.trigger("sync",c,a,{})}})},follow:function(){return this._changeFollowState(!0)},unfollow:function(){return this._changeFollowState(!1)},toggleFollowState:function(){return this._changeFollowState(!this.get("isFollowing"))}},{MIN_PASSWORD_LEN:6,MIN_NAME_LEN:2,MAX_NAME_LEN:30,MAX_LOCATION_LEN:255,MAX_URL_LEN:200});return k}),define("core/models/Session",["underscore","backbone","moment","core/api","core/time","core/utils/cookies","core/utils/guid","core/models/BaseUser","core/models/User"],function(a,b,c,d,e,f,g,h,i){"use strict";var j="disqusauth",k=b.Model.extend({initialize:function(){this._fromCookie=a.once(this._fromCookie,this),this.user=new this.getAnonUserInstance},setUser:function(a){this.user&&this.stopListening(this.user),this.user=a,this.setIfNewUser(),this.listenTo(a,"all",this.trigger),this.trigger("change:id",a)},isLoggedOut:function(){return!this.isLoggedIn()},isKnownToBeLoggedOut:function(){return!this._fromCookie().id},_fromCookie:function(){var a=(f.read(j)||"").replace(/$\"|\"$/g,"").split("|");return a[1]&&a[6]&&a[8]?{username:a[1],id:parseInt(a[6],10),isModerator:parseInt(a[8],10)>0}:(a&&f.erase(j,{}),{username:void 0,id:0,isModerator:!1})},isLoggedIn:function(){return!!this.user.get("id")},fetch:function(b){b=b||{};var c={};return c["_"+(new Date).getTime()]=1,d.call("users/details.json",{data:c,success:a.bind(function(a){a=a.response,a.id&&this.setUser(this.getUserInstance(a)),b.success&&b.success(a),b.complete&&b.complete(a)},this),error:a.bind(function(a){b.error&&b.error(a),b.complete&&b.complete(a)},this)})},getAnonUserInstance:function(a){return new h(a)},getUserInstance:function(a){return new i(a)},getCsrfToken:function(){var a=f.read("csrftoken");return a||(a=g.generate().replace(/\W/g,""),f.create("csrftoken",a,{expiresIn:31536e6})),a},setIfNewUser:function(){var a=this.user.get("joinedAt");if(this.user.get("isAnonymous")||!a)return void this.user.set("joinedRecently",!1);var b=e.assureTzOffset(a);this.user.set("joinedRecently",c().subtract(10,"seconds").isBefore(b))}});return k}),define("common/utils",["jquery","underscore","modernizr","core/utils","common/urls","core/utils/cookies","shared/corefuncs","core/logger"],function(a,b,c,d,e,f,g,h){"use strict";var i=document,j={escapeColor:d.escapeColor,preventDefaultHandler:d.preventDefaultHandler};j.globalUniqueId=function(a){return b.uniqueId(a)+"_"+ +new Date},j.addStylesheetRules=function(a){function c(){var e=b.find(i.styleSheets,function(a){var b=a.ownerNode||a.owningElement;return b.id===d});if(!e)return void setTimeout(c,50);for(var f=0,g=a.length;g>f;f++){var h=1,j=a[f],k=j[0],l="";"[object Array]"===Object.prototype.toString.call(j[1][0])&&(j=j[1],h=0);for(var m=j.length;m>h;h++){var n=j[h];l+=n[0]+":"+n[1]+(n[2]?" !important":"")+";\n"}e.insertRule?e.insertRule(k+"{"+l+"}",e.cssRules.length):e.addRule(k,l,-1)}}var d="css_"+(new Date).getTime(),e=i.createElement("style"); +e.id=d,i.getElementsByTagName("head")[0].appendChild(e),window.createPopup||e.appendChild(i.createTextNode("")),c()};var k=j.CORS={handler:function(a,b,c){a&&c>=200&&300>c?a():b&&(200>c||c>=300)&&b()},XHR2:function(a,b,c,d){var e=k.handler,f=new XMLHttpRequest;return f.open(a,b,!0),f.onreadystatechange=function(){f.readyState===XMLHttpRequest.DONE&&e(c,d,f.status)},f},XDR:function(a,c,d,e){if("GET"!==a&&"POST"!==a)return null;var f=k.handler,g=new XDomainRequest;return g.open(a,c),g.onload=b.bind(f,window,d,e,200),g.ontimeout=g.onerror=b.bind(f,window,d,e,500),g}};k.request=function(){return"withCredentials"in new XMLHttpRequest?k.XHR2:window.XDomainRequest?k.XDR:function(){return null}}(),j.isWindowClosed=function(a){if(!a)return!0;try{return a.closed||void 0===a.closed}catch(b){return!0}return!1},j.truncate=function(a,b,c){return c=c||"...",a.length>b?a.slice(0,b)+c:a},j.extractDomainForCookies=function(a){return a.split("/")[2].replace(/\:[0-9]+/,"")},j.cookies={domain:j.extractDomainForCookies(e.root),create:function(a,b){var c=31536e6;f.create(a,b,{domain:j.cookies.domain,expiresIn:c})},read:f.read,erase:function(a){f.erase(a,{domain:j.cookies.domain})}},j.hashStorage=function(){var a={};return{getItem:function(b){return a.hasOwnProperty(b)?a[b]:null},setItem:function(b,c){a[b]=String(c)},removeItem:function(b){delete a[b]}}}(),j.updateURL=function(a,c){var d,e=i.createElement("a");return c=c||{},e.href=a,c.hostname&&c.hostname.match(/\.$/)&&(c.hostname=c.hostname+e.hostname),d=b.extend({protocol:e.protocol,hostname:e.hostname,pathname:e.pathname,search:e.search},c),d.pathname.match(/^\//)||(d.pathname="/"+d.pathname),d.protocol+"//"+d.hostname+d.pathname+d.search},j.injectBaseElement=function(a,b){b=b||i;var c=b.getElementsByTagName("base")[0]||b.createElement("base");c.target="_parent",a?c.href=a:c.removeAttribute("href"),c.parentNode||(b.head||b.getElementsByTagName("head")[0]).appendChild(c)},j.syntaxHighlighter=function(){function c(){this.state=null,this.queue=[]}var d=1,e=2;return b.extend(c.prototype,{highlight:function(a){null===this.state&&this._load(),this.queue.push(a),this.state===e&&this.scheduleHighlight()},_highlight:function(b){var c=a(b).html();a(b).html(c.replace(/^
    /,"")),this._hljs.highlightBlock(b),this.scheduleHighlight()},scheduleHighlight:function(){var a=this.queue.shift();a&&window.requestAnimationFrame(b.bind(this._highlight,this,a))},_load:function(){var a=this;a.state=d,require(["highlight"],function(b){a.state=e,a._hljs=b,a.scheduleHighlight()})}}),new c}(),j.transitionEndEvent=function(){var a=i.createElement("fakeelement"),b={transition:"transitionend",OTransition:"otransitionend",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(var c in b)if(void 0!==a.style[c])return b[c];return null}();var l=a("body");j.getPageHeight=function(){return l.height()},j.calculatePositionFullscreen=function(){return{pageOffset:a(window).scrollTop(),height:i.documentElement.clientHeight,frameOffset:{left:0,top:0}}},j.clickShouldBeLogged=function(){var a={},c=/\#.*/,d=function(a){var c=a.attr("data-tid");return c||(c=b.uniqueId(),a.attr("data-tid",c)),c};return function(b,e){if(b.isDefaultPrevented())return!1;if(!e.is("a"))return!1;var f=(e.attr("href")||"").replace(c,"");if(!f)return!1;var g=d(e),h=(new Date).getTime();return a[g]&&h-a[g]<500?void 0:(a[g]=h,!0)}}(),j.willOpenNewWindow=function(b,c){return c||(c=a(b.currentTarget)),"_blank"===c.attr("target")||b.ctrlKey||b.metaKey||b.shiftKey||b.altKey},j.triggerClick=function(a,b){var c,d,e=a[0],f={altKey:!1,button:0,ctrlKey:!1,metaKey:!1,shiftKey:!1};if(i.createEvent){if(c=i.createEvent("MouseEvents"),b)for(d in f)f.hasOwnProperty(d)&&b.hasOwnProperty(d)&&(f[d]=b[d]);c.initMouseEvent("click",!0,!0,window,0,0,0,0,0,f.ctrlKey,f.altKey,f.shiftKey,f.metaKey,0,null),e.dispatchEvent&&e.dispatchEvent(c)}else if(i.createEventObject){if(c=i.createEventObject(),c.eventType="click",b)for(d in f)f.hasOwnProperty(d)&&b.hasOwnProperty(d)&&(c[d]=b[d]);e.fireEvent("onclick",c)}},j.delayLinkClick=function(a,c){a.preventDefault(),b.delay(b.bind(j.triggerClick,this,c,a.originalEvent),100)},j.mixin=function(a,c,d){var e=a.prototype,f=b.extend({},c,d);if(b.defaults(e,f),b.defaults(e.events,f.events),void 0!==e.initialize&&void 0!==f.initialize){var g=e.initialize;e.initialize=function(){var a=g.apply(this,arguments);return f.initialize.apply(this,arguments),a}}};var m="abb|abbott|abogado|ac|academy|accountant|accountants|active|actor|ad|ads|adult|ae|aero|af|afl|ag|agency|ai|aig|airforce|al|allfinanz|alsace|am|amsterdam|an|android|ao|apartments|aq|aquarelle|ar|archi|army|arpa|as|asia|associates|at|attorney|au|auction|audio|auto|autos|aw|ax|axa|az|ba|band|bank|bar|barclaycard|barclays|bargains|bauhaus|bayern|bb|bbc|bd|be|beer|berlin|best|bf|bg|bh|bi|bid|bike|bingo|bio|biz|bj|black|blackfriday|bloomberg|blue|bm|bmw|bn|bnpparibas|bo|boats|bond|boo|boutique|br|bridgestone|broker|brussels|bs|bt|budapest|build|builders|business|buzz|bv|bw|by|bz|bzh|ca|cab|cafe|cal|camera|camp|cancerresearch|canon|capetown|capital|caravan|cards|care|career|careers|cars|cartier|casa|cash|casino|cat|catering|cbn|cc|cd|center|ceo|cern|cf|cfa|cfd|cg|ch|channel|chat|cheap|chloe|christmas|chrome|church|ci|citic|city|ck|cl|claims|cleaning|click|clinic|clothing|club|cm|cn|co|coach|codes|coffee|college|cologne|com|community|company|computer|condos|construction|consulting|contractors|cooking|cool|coop|country|courses|cr|credit|creditcard|cricket|crs|cruises|cu|cuisinella|cv|cw|cx|cy|cymru|cyou|cz|dabur|dad|dance|date|dating|datsun|day|dclk|de|deals|degree|delivery|democrat|dental|dentist|desi|design|dev|diamonds|diet|digital|direct|directory|discount|dj|dk|dm|dnp|do|docs|dog|doha|domains|doosan|download|durban|dvag|dz|eat|ec|edu|education|ee|eg|email|emerck|energy|engineer|engineering|enterprises|epson|equipment|er|erni|es|esq|estate|et|eu|eurovision|eus|events|everbank|exchange|expert|exposed|express|fail|faith|fan|fans|farm|fashion|feedback|fi|film|finance|financial|firmdale|fish|fishing|fit|fitness|fj|fk|flights|florist|flowers|flsmidth|fly|fm|fo|foo|football|forex|forsale|foundation|fr|frl|frogans|fund|furniture|futbol|ga|gal|gallery|garden|gb|gbiz|gd|gdn|ge|gent|gf|gg|ggee|gh|gi|gift|gifts|gives|gl|glass|gle|global|globo|gm|gmail|gmo|gmx|gn|gold|goldpoint|golf|goo|goog|google|gop|gov|gp|gq|gr|graphics|gratis|green|gripe|gs|gt|gu|guge|guide|guitars|guru|gw|gy|hamburg|hangout|haus|healthcare|help|here|hermes|hiphop|hitachi|hiv|hk|hm|hn|holdings|holiday|homes|honda|horse|host|hosting|house|how|hr|ht|hu|ibm|icu|id|ie|ifm|il|im|immo|immobilien|in|industries|infiniti|info|ing|ink|institute|insure|int|international|investments|io|iq|ir|irish|is|it|iwc|java|jcb|je|jetzt|jewelry|jm|jo|jobs|joburg|jp|juegos|kaufen|kddi|ke|kg|kh|ki|kim|kitchen|kiwi|km|kn|koeln|komatsu|kp|kr|krd|kred|kw|ky|kyoto|kz|la|lacaixa|land|lat|latrobe|lawyer|lb|lc|lds|lease|leclerc|legal|lgbt|li|liaison|lidl|life|lighting|limited|limo|link|lk|loan|loans|lol|london|lotte|lotto|love|lr|ls|lt|ltda|lu|luxe|luxury|lv|ly|ma|madrid|maif|maison|management|mango|market|marketing|markets|marriott|mc|md|me|media|meet|melbourne|meme|memorial|menu|mg|mh|miami|mil|mini|mk|ml|mm|mma|mn|mo|mobi|moda|moe|monash|money|mormon|mortgage|moscow|motorcycles|mov|movie|mp|mq|mr|ms|mt|mtn|mtpc|mu|museum|mv|mw|mx|my|mz|na|nadex|nagoya|name|navy|nc|ne|net|network|neustar|new|news|nexus|nf|ng|ngo|nhk|ni|nico|ninja|nissan|nl|no|np|nr|nra|nrw|ntt|nu|nyc|nz|okinawa|om|one|ong|onl|online|ooo|oracle|org|organic|osaka|otsuka|ovh|pa|page|panerai|paris|partners|parts|party|pe|pf|pg|ph|pharmacy|photo|photography|photos|physio|piaget|pics|pictet|pictures|pink|pizza|pk|pl|place|plumbing|plus|pm|pn|pohl|poker|porn|post|pr|praxi|press|pro|prod|productions|prof|properties|property|ps|pt|pub|pw|py|qa|qpon|quebec|racing|re|realtor|recipes|red|redstone|rehab|reise|reisen|reit|ren|rent|rentals|repair|report|republican|rest|restaurant|review|reviews|rich|rio|rip|ro|rocks|rodeo|rs|rsvp|ru|ruhr|rw|ryukyu|sa|saarland|sale|samsung|sap|sarl|saxo|sb|sc|sca|scb|schmidt|scholarships|school|schule|schwarz|science|scot|sd|se|seat|sener|services|sew|sex|sexy|sg|sh|shiksha|shoes|show|shriram|si|singles|site|sj|sk|sky|sl|sm|sn|so|social|software|sohu|solar|solutions|sony|soy|space|spiegel|spreadbetting|sr|st|study|style|su|sucks|supplies|supply|support|surf|surgery|suzuki|sv|swiss|sx|sy|sydney|systems|sz|taipei|tatar|tattoo|tax|tc|td|team|tech|technology|tel|temasek|tennis|tf|tg|th|tickets|tienda|tips|tires|tirol|tj|tk|tl|tm|tn|to|today|tokyo|tools|top|toray|toshiba|tours|town|toys|tr|trade|trading|training|travel|trust|tt|tui|tv|tw|tz|ua|ug|uk|university|uno|uol|us|uy|uz|va|vacations|vc|ve|vegas|ventures|versicherung|vet|vg|vi|viajes|video|villas|vision|vlaanderen|vn|vodka|vote|voting|voto|voyage|vu|wales|wang|watch|webcam|website|wed|wedding|weir|wf|whoswho|wien|wiki|williamhill|win|wme|work|works|world|ws|wtc|wtf|xerox|xin|xn--1qqw23a|xn--30rr7y|xn--3bst00m|xn--3ds443g|xn--3e0b707e|xn--45brj9c|xn--45q11c|xn--4gbrim|xn--55qw42g|xn--55qx5d|xn--6frz82g|xn--6qq986b3xl|xn--80adxhks|xn--80ao21a|xn--80asehdb|xn--80aswg|xn--90a3ac|xn--90ais|xn--9et52u|xn--b4w605ferd|xn--c1avg|xn--cg4bki|xn--clchc0ea0b2g2a9gcd|xn--czr694b|xn--czrs0t|xn--czru2d|xn--d1acj3b|xn--d1alf|xn--fiq228c5hs|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--flw351e|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--gecrj9c|xn--h2brj9c|xn--hxt814e|xn--i1b6b1a6a2e|xn--io0a7i|xn--j1amh|xn--j6w193g|xn--kcrx77d1x4a|xn--kprw13d|xn--kpry57d|xn--kput3i|xn--l1acc|xn--lgbbat1ad8j|xn--mgb9awbf|xn--mgba3a4f16a|xn--mgbaam7a8h|xn--mgbab2bd|xn--mgbayh7gpa|xn--mgbbh1a71e|xn--mgbc0a9azcg|xn--mgberp4a5d4ar|xn--mgbx4cd0ab|xn--mxtq1m|xn--ngbc5azd|xn--node|xn--nqv7f|xn--nqv7fs00ema|xn--nyqy26a|xn--o3cw4h|xn--ogbpf8fl|xn--p1acf|xn--p1ai|xn--pgbs0dh|xn--q9jyb4c|xn--qcka1pmc|xn--rhqv96g|xn--s9brj9c|xn--ses554g|xn--unup4y|xn--vermgensberater-ctb|xn--vermgensberatung-pwb|xn--vhquv|xn--vuq861b|xn--wgbh1c|xn--wgbl6a|xn--xhq521b|xn--xkc2al3hye2a|xn--xkc2dl3a5ee0h|xn--yfro4i67o|xn--ygbi2ammx|xn--zfr164b|xxx|xyz|yachts|yandex|ye|yodobashi|yoga|yokohama|youtube|yt|za|zip|zm|zone|zuerich|zw",n=new RegExp("([^@.]|^)\\b(?:\\w[\\w-]*:/{0,3}(?:(?:\\w+:)?\\w+@)?)?([\\w-]+\\.)+(?:"+m+')(?!\\.\\w)\\b(?::\\d+)?(?:[/?][^\\s\\{\\}\\|\\\\\\^\\[\\]`<>"\\x80-\\xFF\\x00-\\x1F\\x7F]*)?',"g"),o=/^[\w-]+:\/{0,3}/,p=/([\.,]+)$/g;j.bleachFindUrls=function(a){var b,c,d,e,f,g=[];if(!a)return g;for(;b=n.exec(a);){c=b[0],f=b[1],c=c.slice(f.length),p.lastIndex=0,d=p.exec(c),d&&(c=c.slice(0,c.length-d[0].length)),e=o.test(c)?c:"http://"+c;var h=b.index+f.length;g.push({text:c,url:e,index:h,endIndex:h+c.length})}return g},j.extractService=function(b,c){var d="[data-action^="+c+"]",e=a(b);e=e.is(d)&&e||e.closest(d);var f=e.attr("data-action")||":",g=f.split(":")[1];return g},j.getFingerprint=function(){try{var a=(new Date).getTimezoneOffset(),b=1,c=window.screen;c&&c.availWidth?b=c.availWidth*c.availHeight+c.colorDepth:c&&c.width&&(b=c.width*c.height);var d=d.documentElement,e=d.clientWidth*d.clientHeight;return Math.abs(17*a+25*b-e)}catch(f){return 1}},j.random=function(){try{var a=new Uint32Array(1);return window.crypto.getRandomValues(a)[0]}catch(b){return Math.floor(1e9*Math.random())}},j.getNavigationTime=function(){if(window.performance&&window.performance.timing){var a=window.performance.timing,b=a.domainLookupEnd-a.domainLookupStart,c=a.connectEnd-a.connectStart,d=a.responseStart-a.navigationStart;return 11*b+13*c+17*d}return 1e5},j.isIframed=function(a){try{return a.self!==a.top}catch(b){return!0}},j.getConfigFromHash=function(a){var c,d=a.location.hash;try{c=JSON.parse(decodeURIComponent((d+"").substr(1)))}catch(e){h.debug("Failed to parse config from URL hash",e)}return b.isObject(c)?c:{}},j.windowOpen=function(a,c,d){d=b.extend(d||{},{location:1,status:1,resizable:1,scrollbars:1}),d.width&&d.height&&b.defaults(d,{left:window.screen.width/2-d.width/2,top:window.screen.height/2-d.height/2});var e=b.map(d,function(a,b){return b+"="+a}).join(",");return window.open(a,c,e)};var q=/[<>]|\:\/\//;return j.isPlainText=function(a){return!a.match(q)},j.isDNTEnabled=function(a){return a||(a=window),"1"===a.navigator.doNotTrack||"yes"===a.navigator.doNotTrack||"1"===a.navigator.msDoNotTrack},j.shouldSample=function(a){var b=parseInt(a,10);return b?b>100?!1:Math.random()").hide().attr("src",f).error(function(){d(f)}).appendTo(e)})},j}),define("common/cached-storage",["underscore","common/utils","modernizr"],function(a,b,c){"use strict";var d=function(a,d){this.namespace=a,this.ttl=d||300,this.store=c.localstorage?window.localStorage:b.hashStorage,this.cache=this.getFromStorage()};return a.extend(d.prototype,{getItem:function(a){var b=this.cache[a];if(b){if(!this.isExpired(b))return b.value;delete this.cache[a]}},getCurrentTime:function(){return Math.floor((new Date).getTime()/1e3)},persist:function(){try{this.store.setItem(this.namespace,JSON.stringify(this.cache))}catch(a){}},getFromStorage:function(){try{return JSON.parse(this.store.getItem(this.namespace))||{}}catch(a){return{}}},isExpired:function(a){return this.getCurrentTime()>a.expiry},setItem:function(a,b){this.cache[a]={value:b,expiry:this.getCurrentTime()+this.ttl},this.persist()},removeItem:function(a){delete this.cache[a],this.persist()},getAll:function(){var b=a.compact(a.map(this.cache,function(a,b){return this.getItem(b)},this));return this.persist(),b}}),d}),function(a,b){"function"==typeof define&&define.amd?define("handlebars",[],b):"object"==typeof exports?module.exports=b():a.Handlebars=a.Handlebars||b()}(this,function(){var a=function(){"use strict";function a(a){this.string=a}var b;return a.prototype.toString=function(){return""+this.string},b=a}(),b=function(a){"use strict";function b(a){return i[a]}function c(a){for(var b=1;b":">",'"':""","'":"'","`":"`"},j=/[&<>"'`]/g,k=/[&<>"'`]/;g.extend=c;var l=Object.prototype.toString;g.toString=l;var m=function(a){return"function"==typeof a};m(/x/)&&(m=function(a){return"function"==typeof a&&"[object Function]"===l.call(a)});var m;g.isFunction=m;var n=Array.isArray||function(a){return a&&"object"==typeof a?"[object Array]"===l.call(a):!1};return g.isArray=n,g.escapeExpression=d,g.isEmpty=e,g.appendContextPath=f,g}(a),c=function(){"use strict";function a(a,b){var d;b&&b.firstLine&&(d=b.firstLine,a+=" - "+d+":"+b.firstColumn);for(var e=Error.prototype.constructor.call(this,a),f=0;f0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):d(this);if(c.data&&c.ids){var g=q(c.data);g.contextPath=f.appendContextPath(c.data.contextPath,c.name),c={data:g}}return e(b,c)}),a.registerHelper("each",function(a,b){if(!b)throw new g("Must pass iterator to #each");var c,d,e=b.fn,h=b.inverse,i=0,j="";if(b.data&&b.ids&&(d=f.appendContextPath(b.data.contextPath,b.ids[0])+"."),l(a)&&(a=a.call(this)),b.data&&(c=q(b.data)),a&&"object"==typeof a)if(k(a))for(var m=a.length;m>i;i++)c&&(c.index=i,c.first=0===i,c.last=i===a.length-1,d&&(c.contextPath=d+i)),j+=e(a[i],{data:c});else for(var n in a)a.hasOwnProperty(n)&&(c&&(c.key=n,c.index=i,c.first=0===i,d&&(c.contextPath=d+n)),j+=e(a[n],{data:c}),i++);return 0===i&&(j=h(this)),j}),a.registerHelper("if",function(a,b){return l(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||f.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})}),a.registerHelper("with",function(a,b){l(a)&&(a=a.call(this));var c=b.fn;if(f.isEmpty(a))return b.inverse(this);if(b.data&&b.ids){var d=q(b.data);d.contextPath=f.appendContextPath(b.data.contextPath,b.ids[0]),b={data:d}}return c(a,b)}),a.registerHelper("log",function(b,c){var d=c.data&&null!=c.data.level?parseInt(c.data.level,10):1;a.log(d,b)}),a.registerHelper("lookup",function(a,b){return a&&a[b]})}var e={},f=a,g=b,h="2.0.0";e.VERSION=h;var i=6;e.COMPILER_REVISION=i;var j={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1"};e.REVISION_CHANGES=j;var k=f.isArray,l=f.isFunction,m=f.toString,n="[object Object]";e.HandlebarsEnvironment=c,c.prototype={constructor:c,logger:o,log:p,registerHelper:function(a,b){if(m.call(a)===n){if(b)throw new g("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){m.call(a)===n?f.extend(this.partials,a):this.partials[a]=b},unregisterPartial:function(a){delete this.partials[a]}};var o={methodMap:{0:"debug",1:"info",2:"warn",3:"error"},DEBUG:0,INFO:1,WARN:2,ERROR:3,level:3,log:function(a,b){if(o.level<=a){var c=o.methodMap[a];"undefined"!=typeof console&&console[c]&&console[c].call(console,b)}}};e.logger=o;var p=o.log;e.log=p;var q=function(a){var b=f.extend({},a);return b._parent=a,b};return e.createFrame=q,e}(b,c),e=function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=m;if(b!==c){if(c>b){var d=n[c],e=n[b];throw new l("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new l("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){if(!b)throw new l("No environment passed to template");if(!a||!a.main)throw new l("Unknown template object: "+typeof a);b.VM.checkRevision(a.compiler);var c=function(c,d,e,f,g,h,i,j,m){g&&(f=k.extend({},f,g));var n=b.VM.invokePartial.call(this,c,e,f,h,i,j,m);if(null==n&&b.compile){var o={helpers:h,partials:i,data:j,depths:m};i[e]=b.compile(c,{data:void 0!==j,compat:a.compat},b),n=i[e](f,o)}if(null!=n){if(d){for(var p=n.split("\n"),q=0,r=p.length;r>q&&(p[q]||q+1!==r);q++)p[q]=d+p[q];n=p.join("\n")}return n}throw new l("The partial "+e+" could not be compiled when running in runtime-only mode")},d={lookup:function(a,b){for(var c=a.length,d=0;c>d;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:k.escapeExpression,invokePartial:c,fn:function(b){return a[b]},programs:[],program:function(a,b,c){var d=this.programs[a],e=this.fn(a);return b||c?d=f(this,a,e,b,c):d||(d=this.programs[a]=f(this,a,e)),d},data:function(a,b){for(;a&&b--;)a=a._parent;return a},merge:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=k.extend({},b,a)),c},noop:b.VM.noop,compilerInfo:a.compiler},e=function(b,c){c=c||{};var f=c.data;e._setup(c),!c.partial&&a.useData&&(f=i(b,f));var g;return a.useDepths&&(g=c.depths?[b].concat(c.depths):[b]),a.main.call(d,b,d.helpers,d.partials,f,g)};return e.isTop=!0,e._setup=function(c){c.partial?(d.helpers=c.helpers,d.partials=c.partials):(d.helpers=d.merge(c.helpers,b.helpers),a.usePartial&&(d.partials=d.merge(c.partials,b.partials)))},e._child=function(b,c,e){if(a.useDepths&&!e)throw new l("must pass parent depths");return f(d,b,a[b],c,e)},e}function f(a,b,c,d,e){var f=function(b,f){return f=f||{},c.call(a,b,a.helpers,a.partials,f.data||d,e&&[b].concat(e))};return f.program=b,f.depth=e?e.length:0,f}function g(a,b,c,d,e,f,g){var h={partial:!0,helpers:d,partials:e,data:f,depths:g};if(void 0===a)throw new l("The partial "+b+" could not be found");return a instanceof Function?a(c,h):void 0}function h(){return""}function i(a,b){return b&&"root"in b||(b=b?o(b):{},b.root=a),b}var j={},k=a,l=b,m=c.COMPILER_REVISION,n=c.REVISION_CHANGES,o=c.createFrame;return j.checkRevision=d,j.template=e,j.program=f,j.invokePartial=g,j.noop=h,j}(b,c,d),f=function(a,b,c,d,e){"use strict";var f,g=a,h=b,i=c,j=d,k=e,l=function(){var a=new g.HandlebarsEnvironment;return j.extend(a,g),a.SafeString=h,a.Exception=i,a.Utils=j,a.escapeExpression=j.escapeExpression,a.VM=k,a.template=function(b){return k.template(b,a)},a},m=l();return m.create=l,m["default"]=m,f=m}(d,a,c,b,e);return f}),define("core/config/urls",["common/urls"],function(a){"use strict";return a}),define("core/extensions/handlebars.helpers",["handlebars","moment","core/strings","core/config/urls"],function(a,b,c,d){"use strict";var e=a.Utils;return a.registerHelper("any",function(){for(var a=arguments.length,b=0;a-1>b;b++)if(arguments[b])return arguments[b]}),a.registerHelper("eq",function(a,b){return a===b}),a.registerHelper("ne",function(a,b){return a!==b}),a.registerHelper("gt",function(a,b){return a>b}),a.registerHelper("lt",function(a,b){return b>a}),a.registerHelper("ge",function(a,b){return a>=b}),a.registerHelper("le",function(a,b){return b>=a}),a.registerHelper("typeof",function(a,b){return typeof a===b}),a.registerHelper("notNull",function(a){return null!==a}),a.registerHelper("if_any",function(){for(var a=arguments.length,b=arguments[a-1],c=0;a-1>c;c++)if(arguments[c])return b.fn(this);return b.inverse(this)}),a.registerHelper("if_all",function(){for(var a=arguments.length,b=arguments[a-1],c=0;a-1>c;c++)if(!arguments[c])return b.inverse(this);return b.fn(this)}),a.registerHelper("getPartial",function(b,c,d){return"undefined"==typeof d&&(d=c,c=this,a.Utils.extend(c,d.hash)),new a.SafeString(a.partials[b](c,d))}),a.registerHelper("gettext",function(){var b,d,f,g,h=arguments.length,i=arguments[h-1],j=i.hash,k=arguments[0],l=a.partials;k=c.get(k);for(f in j)j.hasOwnProperty(f)&&(d=new RegExp("%\\(("+f+")\\)s","gm"),b=j[f],g=b&&b.executePartial,g&&(b=l[b.partial].call(this,b.context,i)),void 0===b||null===b||"number"==typeof b&&isNaN(b)?b="":g||(b=e.escapeExpression(b)),k=k.replace(d,b.toString()));return new a.SafeString(k)}),a.registerHelper("urlfor",function(a){for(var b=a.split("."),c=b.length,e=d,f=0;e.hasOwnProperty(b[f])&&c>f;)e=e[b[f]],f++;return e}),a.registerHelper("html",function(b){return new a.SafeString(b||"")}),a.registerHelper("partial",function(b,c){a.registerPartial(b,c.fn)}),a.registerHelper("with",function(){var a=arguments.length,b=arguments[a-1],c=arguments[0];return 3===a?(c={},c[arguments[0]]=arguments[1]):"_window_"===c&&(c=window),b.fn(c)}),a.registerHelper("each",function(b,c){var d,e=c.fn,f=c.inverse,g=0,h="";if(c.data&&(d=a.createFrame(c.data)),b&&"object"==typeof b)if("[object Array]"===Object.prototype.toString.call(b))for(var i=b.length;i>g;g++)d&&(d.index=g,d.length=b.length),h+=e(b[g],{data:d});else for(var j in b)b.hasOwnProperty(j)&&(d&&(d.key=j),h+=e(b[j],{data:d}),g++);return 0===g&&(h=f(this)),h}),a.registerHelper("log",function(a){window.console.log(a,this)}),a.registerHelper("debug",function(){}),a.registerHelper("geturl",function(a){return a}),a.registerHelper("truncate",function(b,c){return b.length<=c?b:new a.SafeString(e.escapeExpression(b.slice(0,c))+"…")}),a.registerHelper("tag",function(b,c){var d=["<"+b],e=c.hash.text;delete c.hash.text;for(var f in c.hash)c.hash.hasOwnProperty(f)&&d.push(" "+f+'="'+c.hash[f]+'"');return d.push(">"+e+""),new a.SafeString(d.join(""))}),a.registerHelper("now",function(a){return b().format(a)}),a}),define("common/templates",["handlebars","core/extensions/handlebars.helpers"],function(a){"use strict";function b(b,c){return a.partials[b](c||{})}function c(b){return a.partials[b]}return{render:b,getTemplate:c}}),define("lounge/views/recommend-button",["jquery","underscore","backbone","core/utils/storage","common/templates"],function(a,b,c,d,e){"use strict";var f=c.View.extend({className:"thread-likes",events:{"click [data-action=recommend]":"recommendHandler"},initialize:function(a){this.session=a.session,this.thread=a.thread,this.loggedOutRecommendFlag=this.session.getLoggedOutUserFlags().get(f.ONBOARDING_KEY),this.listenTo(this.thread,"change:userScore",this.render),this.listenTo(this.thread,"change:likes",this.render),this.listenTo(this.session,"change:id",this.startRecommendOnboarding),this.setTooltipEnabled()},setTooltipEnabled:function(){this.tooltipEnabled=this.session.isLoggedIn()?d.get(f.ONBOARDING_KEY):!this.loggedOutRecommendFlag.isRead()},render:function(){return this.$el.html(e.render("threadVotes",{thread:this.thread.toJSON(),user:this.session.toJSON(),loggedIn:this.session.isLoggedIn()})),this},startRecommendOnboarding:function(){this.session.user.get("joinedRecently")&&d.set(f.ONBOARDING_KEY,"true"),this.setTooltipEnabled()},recommendHandler:function(a){a.stopPropagation(),a.preventDefault();var b=0===this.thread.get("userScore");this.trigger(b?"vote:like":"vote:unlike"),this.thread.vote(b?1:0),this.toggleTooltip(b),this.tooltipEnabled&&b&&this.markAsSeen()},markAsSeen:function(){this.session.isLoggedIn()?d.remove(f.ONBOARDING_KEY):this.loggedOutRecommendFlag.markRead()},toggleTooltip:function(a){this.tooltipEnabled&&(a?this.$el.parent().addClass("open"):this.$el.parent().removeClass("open"))}},{ONBOARDING_KEY:"showRecommendOnboarding"});return f}),define("common/collections/LoggedOutCache",["underscore","backbone","common/cached-storage","lounge/views/recommend-button"],function(a,b,c,d){"use strict";var e=[{id:"welcome",title:"",body:""}],f=[{id:d.ONBOARDING_KEY}],g=new c("notes",7776e3),h=b.Model.extend({markRead:function(){g.setItem(this.id,!0)},isRead:function(){return!!g.getItem(this.id)}}),i=b.Collection.extend({initialize:function(a,b){this.session=b.session},model:h,markAllRead:function(){return this.each(function(a){a.markRead()}),this.session.set("notificationCount",0),this},getUnread:function(){return this.filter(function(a){return!a.isRead()})}});return{storage:g,Collection:i,Model:h,LOGGED_OUT_NOTES:e,LOGGED_OUT_FLAGS:f}}),define("core/UniqueModel",["underscore"],function(a){"use strict";function b(a,c,d){var e=b.pool(a),f=c&&c[a.prototype.idAttribute];if(!f)return new a(c,d);var g=b.get(a,f);return g?e[f].set(c):e[f]=new a(c,d),e[f]}return b.pool={},b.pool=function(a){var c=b.pool[a.__type__];if(!c)throw new Error("Model not registered. Use UniqueModel.addType");return c},b.get=function(a,c){return b.pool(a)[c]},b.set=function(a,c){var d=b.pool(a),e=c&&c.get(a.prototype.idAttribute);if(!e)return c;var f=b.get(a,e);return f?f.set(c.attributes):f=d[e]=c,f},b.addType=function(a,c){c.__type__&&b.pool[a]||(c.__type__=a,b.pool[a]={})},b.boundModel=function(c){var d=a.bind(b,b,c);return d.prototype=c.prototype,d},b.wrap=b.boundModel,b}),define("core/utils/html",["jquery","underscore"],function(a,b){"use strict";var c=function(){var c=a("
    ");return b.bind(c.html,c)}(),d=/<\/?p>|/gi;return{stripTags:function(b){return b=b.replace(d," ").replace(/<[\/\w!\[][^>]*>/g,"​"),a.trim(c(b).text().replace(/\u200b/g,""))},replaceAnchors:function(a,c){var d;try{d=(new DOMParser).parseFromString(a,"text/html")}catch(e){}return d||(d=document.implementation.createHTMLDocument(""),d.body.innerHTML=a),b.each(d.querySelectorAll("a"),function(a){var b=a.getAttribute("href")||"",d=a.innerHTML,e=c(a);0===b.indexOf(d.slice(0,-3))?d=e:b.length&&-1!==d.indexOf(b)?d=d.replace(b,e):d+=" "+e,a.insertAdjacentHTML("afterend",d),a.parentNode.removeChild(a)}),d.body.innerHTML.trim()}}}),define("core/advice",["underscore"],function(a){"use strict";function b(){a.each(["before","after","around"],function(a){this[a]=function(b,d){return this[b]="function"==typeof this[b]?c[a](this[b],d):d}},this)}var c={around:function(b,c){return function(){var d=a.toArray(arguments);return c.apply(this,[a.bind(b,this)].concat(d))}},before:function(b,d){return c.around(b,function(){var b=a.toArray(arguments),c=b.shift();return d.apply(this,b),c.apply(this,b)})},after:function(b,d){return c.around(b,function(){var b=a.toArray(arguments),c=b.shift(),e=c.apply(this,b);return d.apply(this,b),e})}};return{withAdvice:b}}),define("core/models/mixins",["underscore","moment","core/time"],function(a,b,c){"use strict";function d(){this._getCreatedMoment=a.memoize(function(){var a=this.get("createdAt");if(a)return b(c.assureTzOffset(a),c.ISO_8601)},function(){return this.get("createdAt")}),this.getRelativeCreatedAt=function(){var a=this._getCreatedMoment();return a&&a.from(+new Date)},this.getFormattedCreatedAt=a.memoize(function(){var a=this._getCreatedMoment();return a&&a.format("LLLL")},function(){return this.get("createdAt")})}return{withCreatedAt:d}}),define("core/collections/UserCollection",["underscore","backbone","core/api","core/models/User"],function(a,b,c,d){"use strict";var e=b.Collection.extend({model:d,initialize:function(a,c){b.Collection.prototype.initialize.apply(this,arguments),this.thread=c&&c.thread}});return e}),define("core/collections/UpvotersUserCollection",["underscore","backbone","core/api","core/collections/UserCollection"],function(a,b,c,d){"use strict";var e=d.extend({LIMIT:50,url:function(){return c.getURL("posts/listUsersVotedPost")},initialize:function(a,b){this.postId=b.postId,this.threadId=b.threadId},fetch:function(c){return b.Collection.prototype.fetch.call(this,a.extend({data:{post:this.postId,thread:this.threadId,vote:1,limit:this.LIMIT}},c))}});return e}),define("core/models/Vote",["backbone"],function(a){"use strict";var b=a.Model.extend({defaults:{score:0}});return b}),define("core/collections/VoteCollection",["backbone","core/models/Vote"],function(a,b){"use strict";var c=a.Collection.extend({model:b});return c}),define("core/models/Post",["jquery","underscore","backbone","moment","core/api","core/strings","core/time","core/utils","core/utils/html","core/advice","core/models/mixins","core/models/User","core/collections/UserCollection","core/collections/UpvotersUserCollection","core/collections/VoteCollection"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){"use strict";var p=1e3,q=0,r=function(){var b=a.now();return p>b-q?!1:(q=b,!0)},s=f.get,t=c.Model.extend({upvotersCollectionClass:n,defaults:function(){return{createdAt:d().format(g.ISO_8601),dislikes:0,isApproved:!0,isDeleted:!1,isEdited:!1,isFlagged:!1,isFlaggedByUser:!1,isHighlighted:!1,isRealtime:!1,isImmediateReply:!1,isMinimized:null,hasMedia:!1,message:null,raw_message:null,likes:0,media:[],parent:null,points:0,depth:0,userScore:0}},initialize:function(){this.votes=new o},messageText:function(){var a=this.get("message");return a&&i.stripTags(a)},relatedIds:function(){var a=this.get("forum");b.isObject(a)&&(a=a.id);var c=this.get("thread");return b.isObject(c)&&(c=c.id),{forum:a,thread:c,post:this.id}},permalink:function(a,b){var c=this.id;if(!c||!a)return"";var d=b!==!1&&a.currentUrl||a.permalink(),e=document.createElement("a");return e.href=d,e.hash="#comment-"+c,e.href},twitterText:function(a){var b=140,c=this.author.get("name")||this.author.get("username");b-=c.length+3,b-=a.length+1,b-=2;var d=h.niceTruncate(this.messageText(),b);return'"'+d+'" — '+c},toJSON:function(a){var b=c.Model.prototype.toJSON.call(this);if(a){var d=a.session,e=a.thread;b.canBeEdited=this.canBeEdited(d,e),b.canBeRepliedTo=this.canBeRepliedTo(d,e),b.canBeShared=this.canBeShared(),b.permalink=this.permalink(e) +}return b.isMinimized=this.isMinimized(),b.plaintext=this.messageText(),b.relativeCreatedAt=this.getRelativeCreatedAt(),b.formattedCreatedAt=this.getFormattedCreatedAt(),b.cid=this.cid,b},isPublic:function(){return this.get("isHighlighted")||this.get("isSponsored")?!0:this.get("isDeleted")?!1:this.get("isApproved")},isMinimized:function(){return this.get("isHighlighted")?!1:this.get("isMinimized")===!1?!1:!this.get("isApproved")},isAuthorSessionUser:function(){return!1},canBeEdited:function(){return!1},canBeRepliedTo:function(){return!1},canBeShared:function(){return!1},validate:function(c){if(!this.id&&!c.id){if(b.isString(c.raw_message)){if(""===c.raw_message)return s("Comments can't be blank.");if(c.raw_message.length<2)return s("Comments must have at least 2 characters.")}return c.author_email&&(c.author_email=a.trim(c.author_email)),c.author_name&&(c.author_name=a.trim(c.author_name)),""===c.author_email&&""===c.author_name?s("Please sign in or enter a name and email address."):""===c.author_email||""===c.author_name?s("Please enter both a name and email address."):b.isString(c.author_email)&&!this.validateEmail(c.author_email)?s("Invalid email address format."):void 0}},validateEmail:function(a){return h.validateEmail(a)},report:function(){this.set("isFlagged",!0),e.call("posts/report.json",{data:{post:this.id},method:"POST"})},_highlight:function(a){this.set("isHighlighted",a),e.call("posts/"+(a?"highlight":"unhighlight")+".json",{data:{post:this.id},method:"POST"})},highlight:function(){this._highlight(!0)},unhighlight:function(){this._highlight(!1)},getThreadId:function(){return this.get("thread")},getUpvotersUserCollection:b.memoize(function(){var a=this.upvotersCollectionClass;return new a(void 0,{postId:this.id,threadId:this.getThreadId()})},function(){return this.id}),_vote:function(a,b,c){var d=a-b,e={likes:this.get("likes"),dislikes:this.get("dislikes"),points:this.get("points")};return 0===d?d:(a>0?(e.likes+=a,e.dislikes+=b):0>a?(e.dislikes-=a,e.likes-=b):b>0?e.likes-=b:e.dislikes+=b,e.points+=d,c&&this.getUpvotersUserCollection()[a>0?"add":"remove"](c),this.set(e),d)},vote:function(a){if(!r())return 0;var b=this,c=b._vote(a,b.get("userScore"));0!==c&&(b.set("userScore",a),e.call("posts/vote.json",{data:{post:b.id,vote:a},method:"POST",success:function(c){b.votes.add({id:c.response.id,score:a},{merge:!0})}}))},_delete:function(){return this.set({isApproved:!1,isDeleted:!0}),e.call("posts/remove.json",{data:{post:this.id},method:"POST"})},spam:function(){this.set({isApproved:!1,isDeleted:!0,isSpam:!0}),this.trigger("spam"),e.call("posts/spam.json",{data:{post:this.id},method:"POST"})},_create:function(a,b){var c=this,d=a.attributes,f={thread:d.thread,message:d.raw_message};return d.parent&&(f.parent=d.parent),d.author_name&&(f.author_name=d.author_name,f.author_email=d.author_email),e.call("posts/create.json",{data:f,method:"POST",success:function(a){c.set(a.response),b.success&&b.success()},error:b.error})},_update:function(a,b){var c=this,d=a.attributes,f={post:d.id,message:d.raw_message};return e.call("posts/update.json",{data:f,method:"POST",success:function(a){c.set(a.response),b.success&&b.success()},error:b.error})},_read:function(a,b){var c=this;return b=b||{},e.call("posts/details.json",{data:{post:c.id},method:"GET",success:function(a){c.set(a.response),b.success&&b.success()},error:b.error})},sync:function(a,b,c){c=c||{};var d=c.error;switch(d&&(c.error=function(a){d(JSON.parse(a.responseText||"{}"))}),a){case"create":return this._create(b,c);case"update":return this._update(b,c);case"delete":return this._delete();case"read":return this._read(b,c)}},storageKey:function(a){return this.isNew()&&this.getThreadId()?[a||"drafts","thread",this.getThreadId(),"parent",this.get("parent")||0].join(":"):void 0}},{formatMessage:function(){var a=/(?:\r\n|\r|\n){2,}/,c=/\r\n|\r|\n/;return function(d){var e=b.chain(d.split(a)).compact().value(),f=b.map(e,function(a){return b.chain(a.split(c)).compact().map(b.escape).join("
    ").value()}).join("

    ");return"

    "+f+"

    "}}()});return k.withCreatedAt.call(t.prototype),j.withAdvice.call(t.prototype),t.withAuthor=function(a){this.around("set",function(c,d,e,f){var g;if(null==d)return this;"object"==typeof d?(g=d,f=e):(g={},g[d]=e);var h=g.author;if(h){if(b.isString(h)||b.isNumber(h)){var i=h;h={},h[a.prototype.idAttribute||"id"]=i}this.author=new a(h),delete g.author}return c.call(this,g,f)}),this.around("toJSON",function(a){var c=a.apply(this,b.rest(arguments));return this.author&&(c.author=this.author.toJSON()),c})},t.withMediaCollection=function(a){this.after("set",function(c){c&&"string"!=typeof c&&(b.isUndefined(c.media)||(this.media?this.media.reset(c.media):this.media=new a(c.media),delete c.media))}),this.around("toJSON",function(a){var c=a.apply(this,b.rest(arguments));return this.media&&(c.media=this.media.toJSON()),c})},t}),define("core/models/LegacyMedia",["backbone"],function(a){"use strict";var b=a.Model.extend({defaults:{type:null,location:"",metadata:{}}});return b}),define("core/models/RichMedia",["backbone"],function(a){"use strict";var b=a.Model.extend({idAttribute:"url",defaults:{mediaType:null,html:"",htmlWidth:null,htmlHeight:null,thumbnailUrl:"",thumbnailWidth:null,thumbnailHeight:null,url:"",resolvedUrl:"",title:"",description:"",providerName:""}});return b}),define("core/models/Media",["underscore","backbone","core/models/LegacyMedia","core/models/RichMedia"],function(a,b,c,d){"use strict";var e=b.Model.extend(a.extend({},d.prototype,c.prototype,{idAttribute:"id"}),{MEDIA_TYPES:{IMAGE:"1",IMAGE_UPLOAD:"2",YOUTUBE_VIDEO:"3",WEBPAGE:"4",TWITTER_STATUS:"5",FACEBOOK_PAGE:"6",FACEBOOK_POST:"7",FACEBOOK_PHOTO:"8",FACEBOOK_VIDEO:"9",SOUNDCLOUD_SOUND:"10",GOOGLE_MAP:"11",VIMEO_VIDEO:"12",VINE_VIDEO:"14"},WEBPAGE_TYPES:["4","6","7"]});return e}),define("core/models/Thread",["underscore","backbone","core/utils","core/api","core/config","core/advice","core/models/User"],function(a,b,c,d,e,f,g){"use strict";var h=b.Model.extend({defaults:{author:null,category:null,createdAt:null,forum:null,identifiers:[],ipAddress:null,isClosed:!1,isDeleted:!1,hasStreaming:!1,link:null,message:null,slug:null,title:null,userSubscription:!1,posts:0,likes:0,dislikes:0,userScore:0},initialize:function(a,b){var c=this;b=b||{},c.moderators=b.moderators,c.forum=b.forum,c.on("change:userScore",function(){var a=c.get("userScore");a>0&&0===c.get("likes")&&c.set("likes",a)})},_vote:function(a,b){var c=a-b;return 0===c?c:(this.set("likes",this.get("likes")+c),c)},vote:function(a){var b=this,c=b._vote(a,b.get("userScore"));0!==c&&(this.set("userScore",a),d.call("threads/vote.json",{data:{thread:this.id,vote:a},method:"POST",success:function(a){a.response.id&&b.trigger("vote:success",a)}}))},fetch:function(a){var b,c=this,f=c.attributes;a=a||{},b=f.identifier?"ident:"+f.identifier:"link:"+f.url,d.call("threads/details.json",{data:{thread:b,forum:f.forum},success:function(b){c.set(b.response),a.success&&a.success()},error:function(){return e.debug?void c.save({},{success:a.success}):void console.log("Couldn't find thread; not creating in production.")}})},_toggleState:function(a,b){b||(b={});var c=a?"open.json":"close.json";this.set("isClosed",!a),d.call("threads/"+c,{method:"POST",data:{thread:this.id},success:b.success,error:b.error})},open:function(a){this._toggleState(!0,a)},close:function(a){this._toggleState(!1,a)},sync:function(){var a=this,b=a.attributes;d.call("threads/create.json",{data:{title:b.title,forum:b.forum,identifier:b.identifier,url:b.url},method:"POST",success:function(b){a.set(b.response)}})},incrementPostCount:function(a){var b=this.get("posts")+a;this.set("posts",b>0?b:0)},isModerator:function(b){var c;if(this.moderators)return c=b instanceof g||a.isObject(b)?b.id:b,c=parseInt(c,10),a(this.moderators).contains(c)},subscribe:function(a,b){a=a!==!1;var c=this.get("userSubscription");if(c!==a){a?this.set("userSubscription",b||!0):this.set("userSubscription",!1);var e=a?"subscribe.json":"unsubscribe.json",f={thread:this.id};b?f.email=b:a||"string"!=typeof c||(f.email=c),d.call("threads/"+e,{data:f,method:"POST"})}},relatedIds:function(){var b=this.get("forum");return a.isObject(b)&&(b=b.id),{forum:this.get("forum"),thread:this.id}},twitterText:function(a){var b=140-(a.length+1),d=c.htmlDecode(this.get("clean_title"));return d=c.niceTruncate(d,b)},permalink:function(){return this.get("url")||this.get("link")||this.currentUrl},toJSON:function(){var a=b.Model.prototype.toJSON.call(this);return a.permalink=this.permalink(),a}});return f.withAdvice.call(h.prototype),h.withThreadVoteCollection=function(a){this.after("initialize",function(){this.votes=new a,this.on("vote:success",function(a){this.votes.get(a.response.id)||this.votes.add({id:a.response.id,score:a.response.vote,currentUser:!0})},this)})},h.withPostCollection=function(b){this.after("initialize",function(c){c=c||{},this.posts=new b(c.posts,{thread:this,cursor:c.postCursor,order:c.order,perPage:this.postsPerPage}),this.listenTo(this.posts,"add reset",function(b){b=b.models?b.models:[b],this.users&&a.each(b,function(a){this.users.get(a.author.id)||this.users.add(a.author)}),this.recalculatePostCount()}),this.listenTo(this.posts,"change:isDeleted change:isFlagged",function(a,b){b&&this.incrementPostCount(-1)})}),this.recalculatePostCount=function(){var a=this.get("posts");a>50||(a=this.posts.reduce(function(a,b){return b.isPublic()?a+1:a},0),this.set("posts",a))}},h}),define("core/models/ThreadVote",["backbone"],function(a){"use strict";var b=a.Model.extend({defaults:{score:0}});return b}),define("core/models/Notification",["underscore","backbone","moment","core/models/mixins","core/models/Post"],function(a,b,c,d,e){"use strict";var f=b.Model.extend({defaults:function(){return{sender:"",timestamp:c().valueOf(),type:0,formatted:"",theme:"",createdAt:null,post:null}},set:function(a,c){return a&&"string"!=typeof a&&a.post&&(this.post=new e(a.post),delete a.post),b.Model.prototype.set.call(this,a,c)},toJSON:function(){var a=b.Model.prototype.toJSON.call(this);return this.post&&(a.post=this.post.toJSON()),a.relativeCreatedAt=this.getRelativeCreatedAt(),a}});return d.withCreatedAt.call(f.prototype),f}),define("core/collections/MediaCollection",["backbone","core/models/Media"],function(a,b){"use strict";var c=a.Collection.extend({model:b});return c}),function(a,b){if("function"==typeof define&&define.amd)define("backbone.uniquemodel",["backbone"],function(a){a.UniqueModel=b(a)});else if("undefined"!=typeof exports){var c=require("backbone");c.UniqueModel=b(c)}else a.Backbone.UniqueModel=b(a.Backbone)}(this,function(a){"use strict";function b(a,c,d){c=c||_.uniqueId("UniqueModel_"),d=d||b.STORAGE_DEFAULT_ADAPTER;var e=b.addModel(a,c,d);return e.modelConstructor}function c(b,c,e){var f=this;this.instances={},this.Model=b,this.modelName=c,this.storage=null,"localStorage"===e?this.storage=new d(this.modelName,localStorage):"sessionStorage"===e&&(this.storage=new d(this.modelName,sessionStorage)),this.storage&&(this.storage.on("sync",this.storageSync,this),this.storage.on("destroy",this.storageDestroy,this));var g=function(a,b){return f.get(a,b)};_.extend(g,a.Events),g.prototype=this.Model.prototype,this.modelConstructor=g}function d(a,b){this.modelName=a,this.store=b,d.instances[a]=this,d.listener||(d.listener=window.addEventListener?window.addEventListener("storage",d.onStorage,!1):window.attachEvent("onstorage",d.onStorage))}var e={};return b.STORAGE_DEFAULT_ADAPTER="memory",b.STORAGE_KEY_DELIMETER=".",b.STORAGE_NAMESPACE="UniqueModel",b.getModelCache=function(a){var b=e[a];if(!b)throw"Unrecognized model: "+a;return b},b.addModel=function(a,b,d){if(e[b])return e[b];var f=new c(a,b,d);return e[b]=f,f},b.clear=function(){for(var a in e)e.hasOwnProperty(a)&&delete e[a]},_.extend(c.prototype,{newModel:function(a,b){var c=new this.Model(a,b);return this.storage&&(c.id&&this.storage.save(c.id,c.attributes),c.on("sync",this.instanceSync,this),c.on("destroy",this.instanceDestroy,this)),c},instanceSync:function(a){this.storage&&this.storage.save(a.id,a.attributes)},instanceDestroy:function(a){this.storage&&this.storage.remove(a.id)},storageSync:function(a,b){this.get(b,{fromStorage:!0})},storageDestroy:function(a){var b=this.instances[a];b&&(b.trigger("destroy",b),delete this.instances[a])},add:function(a,b,c){var d=this.newModel(b,c);return this.instances[a]=d,d},get:function(a,b){b=b||{};var c=this.Model,d=a&&a[c.prototype.idAttribute];if(!d)return this.newModel(a,b);var e=this.instances[d];if(this.storage&&!b.fromStorage&&!e){var f=this.storage.getFromStorage(this.storage.getStorageKey(d));f&&(e=this.add(d,f,b))}return e?(e.set(a),b.fromStorage||this.instanceSync(e)):(e=this.add(d,a,b),b.fromStorage&&this.modelConstructor.trigger("uniquemodel.add",e)),e}}),d.instances={},d.listener=null,d.onStorage=function(a){var c=a.key,e=new RegExp([b.STORAGE_NAMESPACE,"(\\w+)","(.+)"].join("\\"+b.STORAGE_KEY_DELIMETER)),f=c.match(e);if(f){var g=f[1],h=f[2],i=d.instances[g];i&&i.handleStorageEvent(c,h)}},_.extend(d.prototype,{handleStorageEvent:function(a,b){var c=this.getFromStorage(a);c?this.trigger("sync",b,c):this.trigger("destroy",b)},getFromStorage:function(a){try{return JSON.parse(this.store.getItem(a))}catch(b){return}},getStorageKey:function(a){var c=[b.STORAGE_NAMESPACE,this.modelName,a].join(b.STORAGE_KEY_DELIMETER);return c},save:function(a,b){if(!a)throw"Cannot save without id";var c=JSON.stringify(b);this.store.setItem(this.getStorageKey(a),c)},remove:function(a){if(!a)throw"Cannot remove without id";this.store.removeItem(this.getStorageKey(a))}},a.Events),_.extend(b,{ModelCache:c,StorageAdapter:d}),b}),define("common/models",["require","jquery","underscore","backbone","moment","modernizr","core/api","core/UniqueModel","core/models/User","core/models/Post","core/models/Media","core/models/LegacyMedia","core/models/RichMedia","core/models/Thread","core/models/Vote","core/models/ThreadVote","core/models/Notification","core/collections/MediaCollection","core/utils/guid","common/utils","core/utils","common/urls","shared/corefuncs","shared/urls","backbone.uniquemodel"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x){"use strict";var y=d.Model.extend({defaults:{settings:{}},toJSON:function(){return c.extend(d.Model.prototype.toJSON.apply(this,arguments),{homeUrl:x.apps.home+"home/forums/"+this.id+"/"})}}),z=n.extend({initialize:function(b,d){n.prototype.initialize.apply(this,arguments),d=d||{};var e=this,f=a("common/collections");e.users=new f.UserCollection(d.users,{thread:e}),e.forum&&(e.moderatorList=new f.ModeratorCollection(null,{forum:e.forum.get("id")})),e.posts=new f.SubpaginatedPostCollection(d.posts,{thread:e,cursor:d.postCursor,order:d.order,perPage:u.isMobileUserAgent()?20:50}),e.votes=new f.ThreadVoteCollection,e.posts.on("add reset",function(a){a=a.models?a.models:[a],c.each(a,function(a){e.users.get(a.author.id)||e.users.add(a.author)}),e.recalculatePostCount()}),e.listenTo(e.posts,"change:isDeleted change:isFlagged",function(a,b){b&&e.incrementPostCount(-1)}),e.queue=new f.QueuedPostCollection(null,{thread:e})},recalculatePostCount:function(){var a=this.get("posts");a>50||(a=this.posts.buffer.reduce(function(a,b){return b.isPublic()?a+1:a},0),this.set("posts",a))},toJSON:function(){return c.extend(n.prototype.toJSON.apply(this,arguments),{homeUrl:x.apps.home+"home/discussions/"+this.relatedIds().forum+"/"+this.get("slug")+"/"})}});n.withThreadVoteCollection.call(z.prototype,d.Collection);var A=z.extend({defaults:c.extend({postsInInterval:0,posts:0,topPost:null},z.prototype.defaults)}),B=j.extend({initialize:function(){j.prototype.initialize.apply(this,arguments);var b=a("common/collections");this.usersTyping=new b.TypingUserCollection},isAuthorSessionUser:function(a){return a.user.id&&this.author&&this.author.id?this.author.id===a.user.id:!1},canBeEdited:function(a,b){return!b.get("isClosed")&&!this.get("isDeleted")&&a.isLoggedIn()&&this.isAuthorSessionUser(a)&&this.get("raw_message")&&!this.get("isHighlighted")&&!this.get("isSponsored")},canBeRepliedTo:function(a,b){return!b.get("isClosed")&&a.get("canReply")&&!this.get("isDeleted")&&(this.get("isApproved")||b.isModerator(a.user))},canBeShared:function(){return!this.get("isDeleted")&&!this.get("isSponsored")},getParent:function(){var a=this.get("parent");if(a)return new h(B,{id:a+""})}},{fetchContext:function(a,d,e){e=e||{};var f=b.Deferred();return g.call("posts/getContext.json",{method:"GET",data:{post:a},success:function(a){var b=c.filter(a.response,function(a){return a.thread===d.get("id")});return b?(c.each(b,function(a){a=new h(B,a),e.requestedByPermalink&&(a.requestedByPermalink=!0),d.posts.add(a)}),void f.resolve(b)):void f.reject()}}),f.promise()}});j.withAuthor.call(B.prototype,h.wrap(i)),j.withMediaCollection.call(B.prototype,r),h.addType("Post",B);var C=d.Model.extend({defaults:{user:null,message:null,parentId:null,immedReply:!1,createdAt:void 0},getVisibleParent:function(a){for(var b,c=this;c.get("parentId");){if(b=a.posts.get(c.get("parentId")))return b;if(c=a.queue.get(c.get("parentId")),!c)return null}return null},toPost:function(a){var b=this,c=a.posts.get(b.get("parentId")),d=c?c.get("depth")+1:0,e=new h(B,{id:b.id,thread:a.id,message:b.get("message"),parent:b.get("parentId"),depth:d,createdAt:b.get("createdAt"),isRealtime:!0,media:b.get("media"),isImmediateReply:b.get("immedReply")});return e.author=b.get("user"),e}}),D=d.Model.extend({defaults:{user:null,post:null,thread:null,client_context:null,typing:!0},idAttribute:"client_context",set:function(){return this.lastModified=new Date,d.Model.prototype.set.apply(this,arguments)},sync:function(){var a=this.toJSON(),b=w.serialize(v.realertime+"/api/typing",a);try{t.CORS.request("GET",b).send()}catch(c){}}},{make:function(a){return a.client_context||(a.client_context=s.generate()),new h(D,a)}});h.addType("TypingUser",D),c.extend(i.prototype,{getFollowing:function(){var b=a("common/collections/profile");return this.following||(this.following=new b.FollowingCollection(null,{user:this}))}}),h.addType("User",i);var E=i.extend({defaults:c.extend({numPosts:0},i.prototype.defaults)}),F=f.sessionstorage?"sessionStorage":null,G=d.UniqueModel(i,"User",F),H=d.UniqueModel(E,"User",F),I=d.Model.extend({});return{UniqueModel:h,Forum:y,Thread:z,TopThread:A,Post:B,QueuedPost:C,TypingUser:D,User:i,TopUser:E,Vote:o,ThreadVote:p,Notification:q,Switch:I,LegacyMedia:l,RichMedia:m,Media:k,SyncedUser:G,SyncedTopUser:H}}),define("common/Session",["jquery","underscore","backbone","modernizr","core/api","core/bus","core/models/Session","core/strings","core/utils/cookies","common/collections/LoggedOutCache","common/models","common/urls","common/utils","shared/corefuncs"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){"use strict";var o,p=c.Model.extend({storageKey:"disqus.bus",initialize:function(){d.localstorage&&a(window).on("storage",b.bind(this.onStorageEvent,this))},broadcast:function(a,b){if(d.localstorage){var c=JSON.stringify({name:a,data:b,time:(new Date).getTime()});try{window.localStorage.setItem(this.storageKey,c)}catch(e){return}}},onStorageEvent:function(a){var b=a.originalEvent.key,c=a.originalEvent.newValue;if(c&&b===this.storageKey)try{c=JSON.parse(c),this.trigger(c.name,c.data)}catch(d){return}}}),q=new p,r=g.extend({_defaults:{canReply:!0,canModerate:!1,mustVerifyEmail:!1,audienceSyncVerified:!1,sso:null},defaults:function(){var a=new j.Collection(j.LOGGED_OUT_NOTES,{session:this});return b.extend(this._defaults,{notificationCount:a.getUnread().length})},openAuthWindow:function(a,b,c){return m.windowOpen(a,"_blank",{width:b,height:c})},start:function(a){this.set(a),this.listenTo(q,"auth:success",this.fetch),this.listenTo(f.frame,{"!auth:success":function(a){a&&(a.sessionId&&e.headers({"X-Sessionid":a.sessionId}),a.message&&this.trigger("alert",a.message,{type:"info"}),a.logEvent&&f.trigger("uiAction:"+a.logEvent)),q.broadcast("auth:success"),this.fetch()}}),this.bindAudienceSyncHandlers()},stop:function(){this.stopListening(),this.off()},shouldFetchSession:function(){return this.get("remoteAuthS3")||i.read("disqusauth")},getUserInstance:function(a){return new k.UniqueModel(k.User,a)},toJSON:function(){var a=this.user.toJSON.apply(this.user,arguments);return a.thread.canReply=this.get("canReply"),a.thread.canModerate||(a.thread.canModerate=this.get("canModerate")),a},fetch:function(){var a=this.has("thread")?this.fetchThreadDetails(this.get("thread")):g.prototype.fetch.apply(this,arguments),b=this;return a.done(function(){b.set("notificationCount",0)}),a},fetchNotificationCount:function(){var b=this;return b.isLoggedIn()?e.call("timelines/getUnreadCount.json",{data:{type:"notifications"}}).done(function(a){b.set("notificationCount",a.response)}):a.Deferred().resolve()},fetchThreadDetails:function(a){var c=this;c._request&&(c._request.abort(),c._request=null);var d={thread:a.id,post:a.posts.pluck("id")};return d["_"+(new Date).getTime()]=1,c._request=e.call("embed/threadDetails.json",{data:d,success:function(d){var e=d.response,f={};e.user&&b.extend(f,e.user,{votes:e.votes}),c.set(e.session),f.id?(c.setUser(new k.UniqueModel(k.User,f)),a.users.add(c.user),e.thread&&(a.set("userScore",e.thread.userScore),a.set("userSubscription",e.thread.userSubscription))):c.setUser(c.getAnonUserInstance())},complete:function(){c._request=null}}),c._request},logout:function(){var a=this.get("sso");this.isSSO()&&a&&a.logout?f.frame.sendHostMessage("navigate",a.logout):window.location.replace(n.serialize(l.logout,{redirect:window.location.href}))},isSSO:function(){return this.user&&"sso"===this.user.get("user_type")},authenticate:function(a){var c=this.authServices[a];if(c){if(b.isFunction(c))return c.call(this);f.trigger("uiAction:openLogin",a);var d={forum:this.get("thread")&&this.get("thread").forum.id};"https:"===window.location.protocol&&(d.redirect_secure=1),c.csrf&&(d.ctkn=this.getCsrfToken()),b.extend(d,c.params),this.openAuthWindow(n.serialize(c.url,d),c.width,c.height)}},authServices:{disqus:{url:l.login,width:460,height:355},disqusDotcom:{url:l.dotcomLogin,width:478,height:590,params:{next:l.login}},twitter:{url:l.oauth.twitter,width:650,height:680,csrf:!0},facebook:{url:l.oauth.facebook,width:550,height:300,csrf:!0},google:{url:l.oauth.google,width:445,height:635,csrf:!0},sso:function(){var a=this.get("sso"),c=parseInt(a.width||"800",10),d=parseInt(a.height||"500",10),e=this.openAuthWindow(a.url,c,d);!function g(){m.isWindowClosed(e)?f.frame.sendHostMessage("reload"):b.delay(g,500)}()}},verifyEmail:function(){var a=n.serialize(l.verifyEmail,{f:this.get("thread").forum.id});this.openAuthWindow(a,460,355)},bindAudienceSyncHandlers:function(){this.listenTo(this,"change:id change:audienceSyncVerified",function(){this.get("audienceSyncVerified")&&f.frame.sendHostMessage("session.identify",this.user.id)}),this.listenTo(f.frame,{"!audiencesync:grant":function(){this.set("audienceSyncVerified",!0)}})},getAudienceSyncUrl:function(){var a={client_id:this.get("apiKey"),response_type:"audiencesync",forum_id:this.get("thread").forum.id};return"https:"===window.location.protocol&&(a.ssl=1),n.serialize(l.authorize,a)},audienceSync:function(){this.openAuthWindow(this.getAudienceSyncUrl(),460,355)},needsAudienceSyncAuth:function(a){return a.get("settings").audienceSyncEnabled&&this.isLoggedIn()&&!this.get("audienceSyncVerified")},getLoggedOutUserFlags:function(){return this._loggedOutUserFlags?this._loggedOutUserFlags:(this._loggedOutUserFlags=new j.Collection(j.LOGGED_OUT_FLAGS,{session:this}),this._loggedOutUserFlags)}});return{get:function(){return o=o||new r},setDefaults:function(a){if(o)throw new Error("Session defaults cannot be changed after a session instance is created!");return r._defaults=b.extend(r.prototype._defaults,a),r._defaults},forget:function(){o&&(o.stop(),o=null)}}}),define("common/analytics/google",["require","common/keys","common/defines"],function(a,b,c){"use strict";var d,e=function(a){d=a},f=function(a){d?d(a):window._gaq.push(a)},g=function(){var d="";if(!c.debug||d){l(b.googleAnalytics),m(".disqus.com");var e=function(){};a([d?"ga-debug":"ga"],e,e)}},h={component:1,"package":2,forum:3,version:4,userType:5},i=function(a,b){f(["_setCustomVar",h[a],a,b])},j=function(){f(["_trackPageview"])},k=function(a,b,c){f(["_trackEvent",b,a,c,1])},l=function(a){f(["_setAccount",a])},m=function(a){f(["_setDomainName",a])};return window._gaq||(window._gaq=[]),g(),{setCaller:e,setAccount:l,setCustomVar:i,trackPageview:j,trackEvent:k,setDomainName:m}}),define("core/collections/PaginatedCollection",["underscore","backbone"],function(a,b){"use strict";var c=b.Collection.extend({PER_PAGE:30,initialize:function(a,b){b=b||{},this.cursor=b.cursor||{}},fetch:function(c){return c=c||{},c.data=a.defaults(c.data||{},{cursor:c.cursor||"",limit:c.PER_PAGE||this.PER_PAGE}),b.Collection.prototype.fetch.call(this,c)},hasNext:function(){return this.cursor.hasNext},more:function(b){function c(a){e.push(a)}var d=this;if(b=b||{},!this.cursor.hasNext)return void d.trigger("nodata");var e=[];this.on("add",c),this.fetch(a.extend({},b,{add:!0,remove:!1,cursor:this.cursor.next,limit:this.PER_PAGE,success:function(){d.trigger("add:many",e,d,b),d.off("add",c),b.success&&b.success.apply(this,arguments)}}))},parse:function(a){return this.cursor=a.cursor||{hasNext:!1},a.response},getLength:function(){return this.length}});return c}),define("common/collections",["underscore","backbone","moment","core/api","core/collections/UserCollection","core/collections/MediaCollection","core/collections/VoteCollection","core/collections/UpvotersUserCollection","core/collections/PaginatedCollection","common/models","common/cached-storage"],function(a,b,c,d,e,f,g,h,i,j,k){"use strict";var l=b.Collection.extend({model:j.ThreadVote}),m=i.extend({PER_PAGE:50,model:j.UniqueModel.wrap(j.Post),url:d.getURL("threads/listPostsThreaded"),initialize:function(a,b){i.prototype.initialize.apply(this,arguments),b=b||{},this.thread=b.thread,this.setOrder(b.order)},fetch:function(b){return b=b||{},b=a.extend(b,{data:{limit:this.PER_PAGE,thread:this.thread.id,forum:this.thread.get("forum"),order:this.getOrder()}}),i.prototype.fetch.call(this,b)},getOrder:function(){return this.order},setOrder:function(a){this.order=a}}),n=b.Collection.extend({collection:b.Collection,initialize:function(a,b){this.thread=b.thread,this.perPage=b.perPage||20,this.buffer=new this.collection(a,b),this.resetPage(),this.listenTo(this.buffer,"reset",this.resetPage)},resetPage:function(a,c,d){return c=this.buffer.slice(0,this.perPage),b.Collection.prototype.reset.call(this,c,d)},currentPage:function(){var a=Math.floor(this.length/this.perPage);return this.length%this.perPage&&a++,a},setPageFor:function(a,b){var c=this.buffer.get(a),d=this.perPage;c&&(d=Math.floor(this.buffer.indexOf(c)/this.perPage+1)*this.perPage),this.add(this.buffer.slice(0,d),b)},hasNext:function(){return this.buffer.length>this.length||this.buffer.hasNext()},more:function(a){a=a||{};var b=this,c=b.length+this.perPage,d=a.success;a.success=function(){b.add(b.buffer.slice(0,c)),d&&d()},b.buffer.length0&&null===b.gc?void(b.gc=setInterval(a.bind(b.cleanup,b),6e4)):void(0>=c&&null!==b.gc&&(clearInterval(b.gc),b.gc=null))},b)},count:function(a){var b=this.filter(function(b){return!(a&&b.id===a)&&b.get("typing")});return b.length},cleanup:function(){var a=c();this.reset(this.filter(function(b){return a.diff(b.lastModified,"minutes")<5}))}}),r=i.extend({model:j.UniqueModel.wrap(j.Post),url:d.getURL("users/listPostActivity")}),s=b.Collection.extend({model:j.TopThread,url:d.getURL("threads/listPopular"),initialize:function(a,b){this.forum=b.forum,this.limit=b.limit},set:function(c,d){d.parse&&(c=this.parse(c,d),delete d.parse),a.isArray(c)||(c=c?[c]:[]),c=a.reject(c,function(a){return a.title.match(/^http/i)}),b.Collection.prototype.set.call(this,c,d)},fetch:function(c){return b.Collection.prototype.fetch.call(this,a.extend({data:{forum:this.forum,limit:this.limit,interval:"7d",with_top_post:!0}},c))}}),t=b.Collection.extend({model:j.SyncedTopUser,url:d.getURL("forums/listMostActiveUsers"),initialize:function(a,b){this.forum=b.forum,this.limit=b.limit},fetch:function(c){return b.Collection.prototype.fetch.call(this,a.extend({data:{forum:this.forum,limit:this.limit}},c))},parse:function(b){return a.filter(b.response,function(a){return parseFloat(a.rep)>.7?a:void 0})}});e.prototype.model=j.UniqueModel.wrap(j.User);var u=b.Collection.extend({model:j.SyncedUser,url:d.getURL("forums/listModerators"),initialize:function(a,b){this.forum=b.forum},fetch:function(c){return b.Collection.prototype.fetch.call(this,a.extend({data:{forum:this.forum}},c))},parse:function(b){return a.map(b.response,function(a){return a.user})}});return{PaginatedCollection:i,UserCollection:e,PostCollection:m,SubpaginatedPostCollection:o,TypingUserCollection:q,TopUserCollection:t,TopThreadCollection:s,VoteCollection:g,ThreadVoteCollection:l,PostActivityCollection:r,PostMediaCollection:f,QueuedPostCollection:p,UpvotersUserCollection:h,ModeratorCollection:u}}),define("common/collections/profile",["underscore","backbone","core/api","common/models","common/collections"],function(a,b,c,d,e){"use strict";var f=e.PaginatedCollection.extend({initialize:function(a,b){this.user=b.user,e.PaginatedCollection.prototype.initialize.apply(this,arguments)},fetch:function(a){return a=a||{},a.data=a.data||{},a.data.user=this.user.id,e.PaginatedCollection.prototype.fetch.call(this,a)}}),g=f.extend({model:d.SyncedUser,url:c.getURL("users/listFollowing"),PER_PAGE:20});return{SessionPaginatedCollection:f,FollowingCollection:g}}),define("common/intelligence",["underscore","common/analytics/google"],function(a,b){"use strict";function c(a){return a.has("remote")?a.get("remote").domain:a.id?"disqus":"not_logged_in" +}function d(a){return a.support_preferred?"plus":a.support_priority?"pro":a.support_vip?"vip":"free"}function e(){b.trackPageview()}function f(a,c){b.setCustomVar(a,c)}function g(){this.version="next",this.forum=null,this.userType=null}return g.prototype.init=function(a){a=a||{},f("component","embed"),a.version&&(this.version=a.version),f("version",this.version),a.forum&&(this.forum=a.forum,f("forum",a.forum)),a.features&&f("package",d(a.features)),this.setSession(a.session||"not_logged_in"),e()},g.prototype.setSession=function(b){var d=a.isString(b)?b:c(b);d!==this.userType&&(this.userType=d,f("userType",d))},g.prototype.trackEvent=function(a){b.trackEvent(a,this.version,this.forum)},{Intelligence:g,setCustomVar:f,trackPageview:e,getUserType:c,getPackageType:d}}),define("common/juggler",["core/analytics/identity","shared/corefuncs"],function(a,b){"use strict";var c={},d=function(a){c[a]=this,this._emit=null,this.meta={},this.allowedOverwrites=["thread","forum","forum_id","user_id"],this.reservedKeys=this.allowedOverwrites.slice().concat(["imp","event","prev_imp"]),this.preloadBuffer=[]};return b.extend(d.prototype,{copySettings:function(){return b.extend({},this.settings,this.meta)},overwrite:function(a){for(var b=0,c=this.allowedOverwrites.length;c>b;b++){var d=this.allowedOverwrites[b];a.hasOwnProperty(d)&&(this.meta[d]=a[d])}},load:function(c){var d=this;d.settings=c,d.url=c.url,"https:"===window.location.protocol&&(d.url=d.url.replace("http:","https:")),b.each(d.allowedOverwrites,function(a){d.meta[a]=c[a]}),d.meta.imp=a.impression.impId,d.meta.prev_imp=a.impression.prevImp,d._emit=function(a){b.each(d.meta,function(b,c){a[c]=d.meta[c]}),b.require(d.url,a,!1)},b.each(d.preloadBuffer,function(a){d._emit(a)})},emit:function(a,c){var d=this;c=b.extend({},c),b.each(d.reservedKeys,function(a){if(null!=c[a])throw'Error: cannot overwrite event context "'+a+'"'}),c.event=a,null==d._emit?d.preloadBuffer.push(c):d._emit(c)}}),{client:function(a,b){return c[a]||b&&new d(a)}}}),define("common/outboundlinkhandler",["jquery","underscore","common/utils"],function(a,b,c){"use strict";function d(){this.handlers=[],this.locked={},this.timeout=1e3}return b.extend(d.prototype,{handleClick:function(d){var e=a(d.currentTarget),f=this.getLinkTrackingId(e);if(this.shouldHandleClick(d,e,f)){var g=b.chain(this.handlers).map(function(a){return a[0].call(a[1],d,e)}).compact().value();c.willOpenNewWindow(d,e)||(d.preventDefault(),this.setLatestClick(f),this.delayNavigation(d,e,g))}},delayNavigation:function(d,e,f){this.lockLink(this.getLinkTrackingId(e));var g=b.bind(function(){this.isLatestClick(this.getLinkTrackingId(e))&&c.triggerClick(e,d.originalEvent)},this);b.delay(g,this.timeout),a.when.apply(a,f).always(g)},registerBeforeNavigationHandler:function(a,b){this.handlers.push([a,b])},getLinkTrackingId:function(a){var c=a.attr("data-tid");return c||(c=b.uniqueId(),a.attr("data-tid",c)),c},shouldHandleClick:function(a,b){if(!this.isLinkLocked(this.getLinkTrackingId(b))){if(a.isDefaultPrevented())return!1;if(!b.is("a"))return!1;var c=/\#.*/,d=(b.attr("href")||"").replace(c,"");return d?!0:!1}},setLatestClick:function(a){this.latestLinkId=a},isLatestClick:function(a){return this.latestLinkId===a},lockLink:function(a){this.locked[a]=!0},isLinkLocked:function(a){return this.locked[a]}}),d}),define("common/views/mixins",["jquery","modernizr","underscore","core/bus","core/utils","common/Session"],function(a,b,c,d,e,f){"use strict";function g(){this._getStyleProperty=function(a){var b=this.forum.get("settings");return this.config.forceAutoStyles||"auto"===b[a]?this.config[a]:b[a]},this.getTypeface=function(){return this._getStyleProperty("typeface")},this.getColorScheme=function(){return this._getStyleProperty("colorScheme")},this.applyPublisherClasses=function(){var b=a("body");"serif"===this.getTypeface()&&b.addClass("serif"),"dark"===this.getColorScheme()&&b.addClass("dark")}}var h={proxyViewEvents:function(a){this.listenTo(a,"all",function(a){0===a.indexOf("uiAction:")&&this.trigger.apply(this,arguments)},this)}},i={showOnboardApp:function(a){b.sessionstorage&&sessionStorage.setItem("onboard.session",JSON.stringify(a.session.user.toJSON()));var f=c.pick(a,"threadId","forumId","forumPk","activeSection");e.isMobileUserAgent()&&(window.open("",a.windowName),f.windowName=a.windowName),d.frame.sendHostMessage("onboard.show",f),this.trigger("uiAction:onboardOpen")}},j={updateUserAvatarHelper:function(b,c){a("img[data-user="+b+'][data-role="user-avatar"]').attr("src",c)},updateUserNameHelper:function(b,d){var e='[data-username="'+b+'"][data-role=username]';a("a"+e+", span"+e).html(c.escape(d))},bindProfileUIListeners:function(a){this.listenTo(a,{"change:avatar":function(){this.updateUserAvatarHelper(a.user.id,a.user.get("avatar").cache)},"change:name":function(){this.updateUserNameHelper(a.user.get("username"),a.user.get("name"))}})}},k={toggleFollow:function(b){b.preventDefault(),b.stopPropagation();var c=b&&a(b.target).closest("a[data-user]").attr("data-user"),d=this.collection&&c?this.collection.get(c):this.user,e=f.get();return e.isLoggedOut()?(this.trigger("authenticating"),this.listenToOnce(e,"change:id",function(){e.isLoggedIn()&&this.follow(d)}),void e.authenticate("disqusDotcom")):void(d.get("isFollowing")?this.unfollow(d):this.follow(d))},unfollow:function(a){a.unfollow(),d.trigger("uiAction:unfollowUser",a)},follow:function(a){a.follow(),d.trigger("uiAction:followUser",a)}};return{FollowButtonMixin:k,UiActionEventProxy:h,appliesPublisherClasses:g,ProfileHtmlHelpers:j,OnboardHelper:i}}),define("common/views/popup",["jquery","underscore","backbone","core/bus","common/models","common/utils","common/Session"],function(a,b,c,d,e,f,g){"use strict";var h=c.View.extend({el:document.body,events:{"click .overlay":"handleClick",keydown:"handleKeyPress","click [data-action=close]":"close"},initialize:function(){this.user=null,this.session=g.get(),this.fullscreen=!0,this.$overlay=this.$el.find(".overlay");var a=this;if(f.isIframed(window))this.listenTo(d.frame,"init",this.bootstrap),this.listenTo(d.frame,"open",this._open);else{var b=f.getConfigFromHash(window);a.bootstrap(b),a.load(b)}},handleClick:function(b){a(b.target).closest(this.containerId).length||this.close()},handleKeyPress:function(a){return 27===a.which?(a.preventDefault(),a.stopPropagation(),void this.close()):void 0},open:function(){f.isIframed(window)?d.frame.sendHostMessage("openReady"):this._open()},_open:function(){this.trigger("open"),this.$overlay.addClass("active"),window.focus()},close:function(){var a=this;if(a.fullscreen){a.$overlay.removeClass("active");var c=f.transitionEndEvent;c?a.$overlay.one(c,function(){a._closeWindow()}):b.defer(b.bind(a._closeWindow,a))}},_closeWindow:function(){f.isIframed(window)?d.frame.sendHostMessage("close"):window.close()},bootstrap:a.noop,load:a.noop});return{PopupManager:h}}),function(a){"use strict";a("when",[],function(){function a(a,c,d,e){return b(a).then(c,d,e)}function b(a){var b,c;return a instanceof d?b=a:h(a)?(c=g(),a.then(function(a){c.resolve(a)},function(a){c.reject(a)},function(a){c.progress(a)}),b=c.promise):b=e(a),b}function c(b){return a(b,f)}function d(a){this.then=a}function e(a){var c=new d(function(c){try{return b(c?c(a):a)}catch(d){return f(d)}});return c}function f(a){var c=new d(function(c,d){try{return d?b(d(a)):f(a)}catch(e){return f(e)}});return c}function g(){function a(a,b,c){return m(a,b,c)}function c(a){return o(a)}function e(a){return o(f(a))}function h(a){return n(a)}var i,j,k,l,m,n,o;return j=new d(a),i={then:a,resolve:c,reject:e,progress:h,promise:j,resolver:{resolve:c,reject:e,progress:h}},k=[],l=[],m=function(a,b,c){var d,e;return d=g(),e="function"==typeof c?function(a){try{d.progress(c(a))}catch(b){d.progress(b)}}:function(a){d.progress(a)},k.push(function(c){c.then(a,b).then(d.resolve,d.reject,e)}),l.push(e),d.promise},n=function(a){return p(l,a),a},o=function(a){return a=b(a),m=a.then,o=b,n=r,p(k,a),l=k=v,a},i}function h(a){return a&&"function"==typeof a.then}function i(b,c,d,e,f){return q(2,arguments),a(b,function(b){function h(a){p(a)}function i(a){o(a)}var j,k,l,m,n,o,p,q,s,t;if(s=b.length>>>0,j=Math.max(0,Math.min(c,s)),l=[],k=s-j+1,m=[],n=g(),j)for(q=n.progress,p=function(a){m.push(a),--k||(o=p=r,n.reject(m))},o=function(a){l.push(a),--j||(o=p=r,n.resolve(l))},t=0;s>t;++t)t in b&&a(b[t],i,h,q);else n.resolve(l);return n.then(d,e,f)})}function j(a,b,c,d){function e(a){return b?b(a[0]):a[0]}return i(a,1,e,c,d)}function k(a,b,c,d){return q(1,arguments),m(a,s).then(b,c,d)}function l(){return m(arguments,s)}function m(b,c){return a(b,function(b){var d,e,f,h,i,j;if(f=e=b.length>>>0,d=[],j=g(),f)for(h=function(b,e){a(b,c).then(function(a){d[e]=a,--f||j.resolve(d)},j.reject)},i=0;e>i;i++)i in b?h(b[i],i):--f;else j.resolve(d);return j.promise})}function n(b,c){var d=u.call(arguments,1);return a(b,function(b){var e;return e=b.length,d[0]=function(b,d,f){return a(b,function(b){return a(d,function(a){return c(b,a,f,e)})})},t.apply(b,d)})}function o(b,c,d){var e=arguments.length>2;return a(b,function(a){return a=e?d:a,c.resolve(a),a},function(a){return c.reject(a),f(a)},c.progress)}function p(a,b){for(var c,d=0;c=a[d++];)c(b)}function q(a,b){for(var c,d=b.length;d>a;)if(c=b[--d],null!=c&&"function"!=typeof c)throw new Error("arg "+d+" must be a function")}function r(){}function s(a){return a}var t,u,v;return a.defer=g,a.resolve=b,a.reject=c,a.join=l,a.all=k,a.map=m,a.reduce=n,a.any=j,a.some=i,a.chain=o,a.isPromise=h,d.prototype={always:function(a,b){return this.then(a,a,b)},otherwise:function(a){return this.then(v,a)},spread:function(a){return this.then(function(b){return k(b,function(b){return a.apply(v,b)})})}},u=[].slice,t=[].reduce||function(a){var b,c,d,e,f;if(f=0,b=Object(this),e=b.length>>>0,c=arguments,c.length<=1)for(;;){if(f in b){d=b[f++];break}if(++f>=e)throw new TypeError}else d=c[1];for(;e>f;++f)f in b&&(d=a(d,b[f],f,b));return d},a})}("function"==typeof define&&define.amd?define:function(a){"object"==typeof exports?module.exports=a():this.when=a()}),function(a,b){"use strict";function c(a,b){var c,d;b=b||{},a="raven"+a.substr(0,1).toUpperCase()+a.substr(1),document.createEvent?(c=document.createEvent("HTMLEvents"),c.initEvent(a,!0,!0)):(c=document.createEventObject(),c.eventType=a);for(d in b)l(b,d)&&(c[d]=b[d]);if(document.createEvent)document.dispatchEvent(c);else try{document.fireEvent("on"+c.eventType.toLowerCase(),c)}catch(e){}}function d(a){this.name="RavenConfigError",this.message=a}function e(a){var b=V.exec(a),c={},e=7;try{for(;e--;)c[U[e]]=b[e]||""}catch(f){throw new d("Invalid DSN: "+a)}if(c.pass)throw new d("Do not specify your private key in the DSN!");return c}function f(a){return"undefined"==typeof a}function g(a){return"function"==typeof a}function h(a){return"string"==typeof a}function i(a){return"object"==typeof a&&null!==a}function j(a){for(var b in a)return!1;return!0}function k(a){return i(a)&&"[object Error]"===R.toString.call(a)||a instanceof Error}function l(a,b){return R.hasOwnProperty.call(a,b)}function m(a,b){var c,d;if(f(a.length))for(c in a)l(a,c)&&b.call(null,c,a[c]);else if(d=a.length)for(c=0;d>c;c++)b.call(null,c,a[c])}function n(){M="?sentry_version=4&sentry_client=raven-js/"+T.VERSION+"&sentry_key="+K}function o(a,b){var d=[];a.stack&&a.stack.length&&m(a.stack,function(a,b){var c=p(b);c&&d.push(c)}),c("handle",{stackInfo:a,options:b}),r(a.name,a.message,a.url,a.lineno,d,b)}function p(a){if(a.url){var b,c={filename:a.url,lineno:a.line,colno:a.column,"function":a.func||"?"},d=q(a);if(d){var e=["pre_context","context_line","post_context"];for(b=3;b--;)c[e[b]]=d[b]}return c.in_app=!(!P.includePaths.test(c.filename)||/(Raven|TraceKit)\./.test(c["function"])||/raven\.(min\.)?js$/.test(c.filename)),c}}function q(a){if(a.context&&P.fetchContext){for(var b=a.context,c=~~(b.length/2),d=b.length,e=!1;d--;)if(b[d].length>300){e=!0;break}if(e){if(f(a.column))return;return[[],b[c].substr(a.column,50),[]]}return[b.slice(0,c),b[c],b.slice(c+1)]}}function r(a,b,c,d,e,f){var g,h;b+="",("Error"!==a||b)&&(P.ignoreErrors.test(b)||(e&&e.length?(c=e[0].filename||c,e.reverse(),g={frames:e}):c&&(g={frames:[{filename:c,lineno:d,in_app:!0}]}),b=t(b,P.maxMessageLength),P.ignoreUrls&&P.ignoreUrls.test(c)||(!P.whitelistUrls||P.whitelistUrls.test(c))&&(h=d?b+" at "+d:b,w(s({exception:{type:a,value:b},stacktrace:g,culprit:c,message:h},f)))))}function s(a,b){return b?(m(b,function(b,c){a[b]=c}),a):a}function t(a,b){return a.length<=b?a:a.substr(0,b)+"…"}function u(){return+new Date}function v(){var a={url:document.location.href,headers:{"User-Agent":navigator.userAgent}};return document.referrer&&(a.headers.Referer=document.referrer),a}function w(a){y()&&(a=s({project:L,logger:P.logger,platform:"javascript",request:v()},a),a.tags=s(s({},P.tags),a.tags),a.extra=s(s({},P.extra),a.extra),a.extra=s({"session:duration":u()-S},a.extra),j(a.tags)&&delete a.tags,J&&(a.user=J),P.release&&(a.release=P.release),g(P.dataCallback)&&(a=P.dataCallback(a)),(!g(P.shouldSendCallback)||P.shouldSendCallback(a))&&(H=a.event_id||(a.event_id=A()),x(a)))}function x(a){var b=new Image,d=I+M+"&sentry_data="+encodeURIComponent(JSON.stringify(a));b.crossOrigin="anonymous",b.onload=function(){c("success",{data:a,src:d})},b.onerror=b.onabort=function(){c("failure",{data:a,src:d})},b.src=d}function y(){return O?I?!0:(B("error","Error: Raven has not been configured."),!1):!1}function z(a){for(var b,c=[],d=0,e=a.length;e>d;d++)b=a[d],h(b)?c.push(b.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")):b&&b.source&&c.push(b.source);return new RegExp(c.join("|"),"i")}function A(){return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0,c="x"==a?b:3&b|8;return c.toString(16)})}function B(b,c){a.console&&console[b]&&T.debug&&console[b](c)}function C(){var b=a.RavenConfig;b&&T.config(b.dsn,b.config).install()}var D={remoteFetching:!1,collectWindowErrors:!0,linesOfContext:7},E=[].slice,F="?";D.wrap=function(a){function b(){try{return a.apply(this,arguments)}catch(b){throw D.report(b),b}}return b},D.report=function(){function c(a){h(),o.push(a)}function d(a){for(var b=o.length-1;b>=0;--b)o[b]===a&&o.splice(b,1)}function e(){i(),o=[]}function f(a,b){var c=null;if(!b||D.collectWindowErrors){for(var d in o)if(l(o,d))try{o[d].apply(null,[a].concat(E.call(arguments,2)))}catch(e){c=e}if(c)throw c}}function g(a,b,c,d,e){var g=null;if(r)D.computeStackTrace.augmentStackTraceWithInitialElement(r,b,c,a),j();else if(e)g=D.computeStackTrace(e),f(g,!0);else{var h={url:b,line:c,column:d};h.func=D.computeStackTrace.guessFunctionName(h.url,h.line),h.context=D.computeStackTrace.gatherContext(h.url,h.line),g={message:a,url:document.location.href,stack:[h]},f(g,!0)}return m?m.apply(this,arguments):!1}function h(){n||(m=a.onerror,a.onerror=g,n=!0)}function i(){n&&(a.onerror=m,n=!1,m=b)}function j(){var a=r,b=p;p=null,r=null,q=null,f.apply(null,[a,!1].concat(b))}function k(b,c){var d=E.call(arguments,1);if(r){if(q===b)return;j()}var e=D.computeStackTrace(b);if(r=e,q=b,p=d,a.setTimeout(function(){q===b&&j()},e.incomplete?2e3:0),c!==!1)throw b}var m,n,o=[],p=null,q=null,r=null;return k.subscribe=c,k.unsubscribe=d,k.uninstall=e,k}(),D.computeStackTrace=function(){function b(b){if(!D.remoteFetching)return"";try{var c=function(){try{return new a.XMLHttpRequest}catch(b){return new a.ActiveXObject("Microsoft.XMLHTTP")}},d=c();return d.open("GET",b,!1),d.send(""),d.responseText}catch(e){return""}}function c(a){if(!h(a))return[];if(!l(u,a)){var c="";-1!==a.indexOf(document.domain)&&(c=b(a)),u[a]=c?c.split("\n"):[]}return u[a]}function d(a,b){var d,e=/function ([^(]*)\(([^)]*)\)/,g=/['"]?([0-9A-Za-z$_]+)['"]?\s*[:=]\s*(function|eval|new Function)/,h="",i=10,j=c(a);if(!j.length)return F;for(var k=0;i>k;++k)if(h=j[b-k]+h,!f(h)){if(d=g.exec(h))return d[1];if(d=e.exec(h))return d[1]}return F}function e(a,b){var d=c(a);if(!d.length)return null;var e=[],g=Math.floor(D.linesOfContext/2),h=g+D.linesOfContext%2,i=Math.max(0,b-g-1),j=Math.min(d.length,b+h-1);b-=1;for(var k=i;j>k;++k)f(d[k])||e.push(d[k]);return e.length>0?e:null}function g(a){return a.replace(/[\-\[\]{}()*+?.,\\\^$|#]/g,"\\$&")}function i(a){return g(a).replace("<","(?:<|<)").replace(">","(?:>|>)").replace("&","(?:&|&)").replace('"','(?:"|")').replace(/\s+/g,"\\s+")}function j(a,b){for(var d,e,f=0,g=b.length;g>f;++f)if((d=c(b[f])).length&&(d=d.join("\n"),e=a.exec(d)))return{url:b[f],line:d.substring(0,e.index).split("\n").length,column:e.index-d.lastIndexOf("\n",e.index)-1};return null}function k(a,b,d){var e,f=c(b),h=new RegExp("\\b"+g(a)+"\\b");return d-=1,f&&f.length>d&&(e=h.exec(f[d]))?e.index:null}function m(b){for(var c,d,e,f,h=[a.location.href],k=document.getElementsByTagName("script"),l=""+b,m=/^function(?:\s+([\w$]+))?\s*\(([\w\s,]*)\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,n=/^function on([\w$]+)\s*\(event\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,o=0;om;++m){if(b=h.exec(i[m]))c={url:b[3],func:b[1]||F,args:b[2]?b[2].split(","):"",line:+b[4],column:b[5]?+b[5]:null};else{if(!(b=g.exec(i[m])))continue;c={url:b[2],func:b[1]||F,line:+b[3],column:b[4]?+b[4]:null}}!c.func&&c.line&&(c.func=d(c.url,c.line)),c.line&&(c.context=e(c.url,c.line)),j.push(c)}return j.length?(j[0].line&&!j[0].column&&l?j[0].column=k(l[1],j[0].url,j[0].line):j[0].column||f(a.columnNumber)||(j[0].column=a.columnNumber+1),{name:a.name,message:a.message,url:document.location.href,stack:j}):null}function o(a){for(var b,c=a.stacktrace,f=/ line (\d+), column (\d+) in (?:]+)>|([^\)]+))\((.*)\) in (.*):\s*$/i,g=c.split("\n"),h=[],i=0,j=g.length;j>i;i+=2)if(b=f.exec(g[i])){var k={line:+b[1],column:+b[2],func:b[3]||b[4],args:b[5]?b[5].split(","):[],url:b[6]};if(!k.func&&k.line&&(k.func=d(k.url,k.line)),k.line)try{k.context=e(k.url,k.line)}catch(l){}k.context||(k.context=[g[i+1]]),h.push(k)}return h.length?{name:a.name,message:a.message,url:document.location.href,stack:h}:null}function p(b){var f=b.message.split("\n");if(f.length<4)return null;var g,h,k,m,n=/^\s*Line (\d+) of linked script ((?:file|https?)\S+)(?:: in function (\S+))?\s*$/i,o=/^\s*Line (\d+) of inline#(\d+) script in ((?:file|https?)\S+)(?:: in function (\S+))?\s*$/i,p=/^\s*Line (\d+) of function script\s*$/i,q=[],r=document.getElementsByTagName("script"),s=[];for(h in r)l(r,h)&&!r[h].src&&s.push(r[h]);for(h=2,k=f.length;k>h;h+=2){var t=null;if(g=n.exec(f[h]))t={url:g[2],func:g[3],line:+g[1]};else if(g=o.exec(f[h])){t={url:g[3],func:g[4]};var u=+g[1],v=s[g[2]-1];if(v&&(m=c(t.url))){m=m.join("\n");var w=m.indexOf(v.innerText);w>=0&&(t.line=u+m.substring(0,w).split("\n").length)}}else if(g=p.exec(f[h])){var x=a.location.href.replace(/#.*$/,""),y=g[1],z=new RegExp(i(f[h+1]));m=j(z,[x]),t={url:x,line:m?m.line:y,func:""}}if(t){t.func||(t.func=d(t.url,t.line));var A=e(t.url,t.line),B=A?A[Math.floor(A.length/2)]:null;t.context=A&&B.replace(/^\s*/,"")===f[h+1].replace(/^\s*/,"")?A:[f[h+1]],q.push(t)}}return q.length?{name:b.name,message:f[0],url:document.location.href,stack:q}:null}function q(a,b,c,f){var g={url:b,line:c};if(g.url&&g.line){a.incomplete=!1,g.func||(g.func=d(g.url,g.line)),g.context||(g.context=e(g.url,g.line));var h=/ '([^']+)' /.exec(f);if(h&&(g.column=k(h[1],g.url,g.line)),a.stack.length>0&&a.stack[0].url===g.url){if(a.stack[0].line===g.line)return!1;if(!a.stack[0].line&&a.stack[0].func===g.func)return a.stack[0].line=g.line,a.stack[0].context=g.context,!1}return a.stack.unshift(g),a.partial=!0,!0}return a.incomplete=!0,!1}function r(a,b){for(var c,e,f,g=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,h=[],i={},j=!1,l=r.caller;l&&!j;l=l.caller)if(l!==s&&l!==D.report){if(e={url:null,func:F,line:null,column:null},l.name?e.func=l.name:(c=g.exec(l.toString()))&&(e.func=c[1]),f=m(l)){e.url=f.url,e.line=f.line,e.func===F&&(e.func=d(e.url,e.line));var n=/ '([^']+)' /.exec(a.message||a.description);n&&(e.column=k(n[1],f.url,f.line))}i[""+l]?j=!0:i[""+l]=!0,h.push(e)}b&&h.splice(0,b);var o={name:a.name,message:a.message,url:document.location.href,stack:h};return q(o,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),o}function s(a,b){var c=null;b=null==b?0:+b;try{if(c=o(a))return c}catch(d){if(t)throw d}try{if(c=n(a))return c}catch(d){if(t)throw d}try{if(c=p(a))return c}catch(d){if(t)throw d}try{if(c=r(a,b+1))return c}catch(d){if(t)throw d}return{}}var t=!1,u={};return s.augmentStackTraceWithInitialElement=q,s.computeStackTraceFromStackProp=n,s.guessFunctionName=d,s.gatherContext=e,s}();var G,H,I,J,K,L,M,N=a.Raven,O=!("object"!=typeof JSON||!JSON.stringify),P={logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],collectWindowErrors:!0,tags:{},maxMessageLength:100,extra:{}},Q=!1,R=Object.prototype,S=u(),T={VERSION:"1.1.18",debug:!0,noConflict:function(){return a.Raven=N,T},config:function(a,b){if(I)return B("error","Error: Raven has already been configured"),T;if(!a)return T;var c=e(a),d=c.path.lastIndexOf("/"),f=c.path.substr(1,d);return b&&m(b,function(a,b){P[a]=b}),P.ignoreErrors.push(/^Script error\.?$/),P.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),P.ignoreErrors=z(P.ignoreErrors),P.ignoreUrls=P.ignoreUrls.length?z(P.ignoreUrls):!1,P.whitelistUrls=P.whitelistUrls.length?z(P.whitelistUrls):!1,P.includePaths=z(P.includePaths),K=c.user,L=c.path.substr(d+1),I="//"+c.host+(c.port?":"+c.port:"")+"/"+f+"api/"+L+"/store/",c.protocol&&(I=c.protocol+":"+I),P.fetchContext&&(D.remoteFetching=!0),P.linesOfContext&&(D.linesOfContext=P.linesOfContext),D.collectWindowErrors=!!P.collectWindowErrors,n(),T},install:function(){return y()&&!Q&&(D.report.subscribe(o),Q=!0),T},context:function(a,c,d){return g(a)&&(d=c||[],c=a,a=b),T.wrap(a,c).apply(this,d)},wrap:function(a,c){function d(){for(var b=[],d=arguments.length,e=!a||a&&a.deep!==!1;d--;)b[d]=e?T.wrap(a,arguments[d]):arguments[d];try{return c.apply(this,b)}catch(f){throw T.captureException(f,a),f}}if(f(c)&&!g(a))return a;if(g(a)&&(c=a,a=b),!g(c))return c;if(c.__raven__)return c;for(var e in c)l(c,e)&&(d[e]=c[e]);return d.__raven__=!0,d.__inner__=c,d},uninstall:function(){return D.report.uninstall(),Q=!1,T},captureException:function(a,b){if(!k(a))return T.captureMessage(a,b);G=a;try{D.report(a,b)}catch(c){if(a!==c)throw c}return T},captureMessage:function(a,b){return P.ignoreErrors.test&&P.ignoreErrors.test(a)?void 0:(w(s({message:a+""},b)),T)},setUserContext:function(a){return J=a,T},setExtraContext:function(a){return P.extra=a||{},T},setTagsContext:function(a){return P.tags=a||{},T},setReleaseContext:function(a){return P.release=a,T},lastException:function(){return G},lastEventId:function(){return H},isSetup:function(){return y()}};T.setUser=T.setUserContext;var U="source protocol user pass host port path".split(" "),V=/^(?:(\w+):)?\/\/(\w+)(:\w+)?@([\w\.-]+)(?::(\d+))?(\/.*)/;d.prototype=new Error,d.prototype.constructor=d,C(),"function"==typeof define&&define.amd?(a.Raven=T,define("raven",[],function(){return T})):"object"==typeof module?module.exports=T:"object"==typeof exports?exports=T:a.Raven=T}(window),function(){for(var a=0,b=["webkit","moz"],c=0;c","forced_forums":[],"rate":0.07,"type":"img"}]},"home_inspectlet_usernames":["zaizhuang","Kandric","GaryRumain","Dionysius1100","darkufo","mea_mark","disqus_1Av01jdMSI","iBorrowAndAlterComments","Duck_Season","randomousity","TheScienceEnthusiast1130","ezraaa","xSteven77x","obipunkenobi","slatlantican","maurizioemul","finnam","jeffinj","Potato_Disqus"],"sponsored_comment_survey_url":"https://www.surveymonkey.com/s.aspx?sm=DHyIFE9hA0f5zO1oaqxFFQ%3d%3d","telemetry_sample_percent":1,"home_telemetry_sampling_percent":100,"NET_MOD_LIST":["anna_vu","SamParker","ryanvalentin","iamfrancisyo","qarly","wedamija","nicoleallard","ryan04","benjaminkowalski"],"vertical_forums":["disqus-disqusfun","channel-discussdisqus","channel-talkshop","channel-plotthreads","channel-bestofdisqus","channel-disquspicks","channel-squid"],"sc_analytics_sample_percent":10,"sentry_rate_limit":1000},"timelines":{"BLACKLISTED_FORUMS":["cnn","squiddev-justforfun","squiddev-todayilearned","squiddev-ama","squid","squiddev","squid-changemyview","squiddev-changemyview","squid-justforfun","squid-todayilearned","squid-ama"],"CHANNEL_PRIMARY_FORUMS":{"channel-talkshop":1,"channel-discussdisqus":1,"channel-ignition2014":"value","channel-fairfieldmarriott":1,"channel-squid":1,"disqus-disqusfun":1,"gabalafou-test":1,"channel-bvc":1,"disqusadops":1,"channel-samsung":1,"channel-plotthreads":1,"hpsc1":1,"airnewzealandsc":1,"lyftsc":1,"channel-dyson":1,"caesarspalacesc":1,"channel-toyotabelgium":1,"wsopsc":1,"channel-disquspicks":1,"sealysc":1}},"readonly":false,"experiments":{},"discovery":{"consoleLoggingEnabled":true,"NEW_REDIRECT_PERCENTAGE":50,"iabDisplayUrl":"https://disqus-tempest.s3.amazonaws.com/video-player/build/assets/html/iabDisplay.html","trackAdVisibility":true,"switches":{"discovery_next:logging":"consoleLoggingEnabled"},"variantSpecific":{"promoted":{"maxPerColumn":4},"max":{"promotedSide":"left"}},"videoPlayerUrl":"https://disqus-tempest.s3.amazonaws.com/video-player/build/assets/html/videoPlayer.html","script_injection":{"moat_script":"http://pixel.adsafeprotected.com/jload?anId=7253&advId=[InsertMacro]&campId=[InsertMacro]&pubId=Disqus&chanId=[InsertMacro]&placementId=[InsertMacro]"},"product_ads":{"1565569537":{"customerReviews":1548,"stars":4,"title":"Rapidlash Eyelash and Eyebrow Enhancing Serum"},"1571117721":{"customerReviews":489,"stars":5,"title":"Maybelline New York Eye Studio - Gel Eyeliner"},"1571048737":{"customerReviews":398,"stars":4,"title":"Blinc Mascara"},"1571123531":{"customerReviews":163,"stars":5,"title":"Moroccanoil Orginal Treatment"},"1571223918":{"customerReviews":771,"stars":5,"title":"stila Liquid Eye Liner"},"1571094772":{"customerReviews":628,"stars":5,"title":"It's So BIG Volumizing Mascara"},"1571112320":{"customerReviews":232,"stars":5,"title":"VINYLUX Nail Top Coat"}}}}) \ No newline at end of file diff --git a/Examples/pandas/IntroductionToPandas_files/count-data.js b/Examples/pandas/IntroductionToPandas_files/count-data.js new file mode 100644 index 0000000..d443f82 --- /dev/null +++ b/Examples/pandas/IntroductionToPandas_files/count-data.js @@ -0,0 +1,5 @@ +var DISQUSWIDGETS; + +if (typeof DISQUSWIDGETS != 'undefined') { + DISQUSWIDGETS.displayCount({"text":{"and":"and","comments":{"zero":"0 Comments","multiple":"{num} Comments","one":"1 Comment"}},"counts":[{"id":"cache\/posts\/an-introduction-to-pandas.html","comments":4}]}); +} \ No newline at end of file diff --git a/Examples/pandas/IntroductionToPandas_files/count.js b/Examples/pandas/IntroductionToPandas_files/count.js new file mode 100644 index 0000000..d9d55fb --- /dev/null +++ b/Examples/pandas/IntroductionToPandas_files/count.js @@ -0,0 +1,4 @@ +var DISQUSWIDGETS,disqus_domain,disqus_shortname; +typeof DISQUSWIDGETS=="undefined"&&(DISQUSWIDGETS=function(){var c={},q=document.getElementsByTagName("HEAD")[0]||document.body,h={},o={identifier:1,url:2};c.domain="disqus.com";c.forum="";c.getCount=function(a){var b;b=encodeURIComponent;var r=document.location.protocol+"//"+c.forum+"."+c.domain+"/count-data.js?",d=[],i=0,j=10,p="",a=a||{};a.reset&&(h={},p="&_="+ +new Date);for(var a=[document.getElementsByTagName("A"),document.getElementsByClassName&&document.getElementsByClassName("disqus-comment-count")|| +[]],k,g,e,f,l=0;l=0;d--)c[d].innerHTML=b}};return c}());(function(){if(typeof disqus_domain!="undefined")DISQUSWIDGETS.domain=disqus_domain;DISQUSWIDGETS.forum=disqus_shortname;DISQUSWIDGETS.getCount()})(); \ No newline at end of file diff --git a/Examples/pandas/IntroductionToPandas_files/discovery.bundle.0b2b44b6bfbbdf79338f10a546d5b492.js b/Examples/pandas/IntroductionToPandas_files/discovery.bundle.0b2b44b6bfbbdf79338f10a546d5b492.js new file mode 100644 index 0000000..60c43ec --- /dev/null +++ b/Examples/pandas/IntroductionToPandas_files/discovery.bundle.0b2b44b6bfbbdf79338f10a546d5b492.js @@ -0,0 +1,3 @@ +define("discovery/models",["underscore","backbone","moment","core/analytics/identity","core/time","shared/corefuncs"],function(a,b,c,d,e,f){"use strict";var g=function(b){var c=b.prototype;return b.extend({defaults:{redirectUrl:null,signedUrl:null,userId:null,sourceThreadId:null,forumId:null,forum:null,majorVersion:null,requestBin:null},redirectPayload:function(){var b={url:this.get("signedUrl"),imp:d.impression.impId,prev_imp:d.impression.prevImp,forum_id:this.get("forumId"),forum:this.get("forum"),thread_id:this.get("sourceThreadId"),major_version:this.get("majorVersion")};return a.extend(b,this.get("service")),this.has("requestBin")&&(b.bin=this.get("requestBin")),this.has("userId")&&(b.user_id=this.get("userId")),b},redirectUrl:function(){var a=this.get("redirectUrl"),b=this.redirectPayload();return f.serialize(a,b)},toJSON:function(){var a=c.toJSON.call(this);return a.redirectUrl=this.redirectUrl(),a},toString:function(){return this.get("title")+" "+this.get("link")+" (id = "+this.id+")"}})}(b.Model),h=function(b){var d=b.prototype;return b.extend({defaults:a.defaults({createdAgo:!1},d.defaults),initialize:function(a,b){if(b&&b.humanFriendlyTimestamp){var d=e.assureTzOffset(this.get("createdAt"));d=c(d,e.ISO_8601),this.set("createdAgo",d.fromNow())}},redirectPayload:function(){var b=d.redirectPayload.call(this);return a.extend(b,{thread:this.id,zone:"thread",area:"discovery"}),b},toJSON:function(){var a=d.toJSON.call(this);return a.thumbnailUrl=a.thumbnail,a.preview&&(a.preview=a.preview.toJSON()),a},toString:function(){return"organic link: "+d.toString.call(this)}})}(g),i=function(b){var c=b.prototype;return b.extend({idAttribute:"advertisement_id",defaults:a.defaults({brand:null,headline:null,text:null,url:null,signedUrl:null,advertisement_id:null,tracking_pixels_onview:null},c.defaults),parse:function(a){return a.signedUrl=a.signed_url,a.thumbnailUrl=a.thumbnail_url,delete a.signed_url,a},get:function(a){return{title:this.attributes.headline,link:this.attributes.url}[a]||c.get.call(this,a)},redirectPayload:function(){var b=c.redirectPayload.call(this);return a.extend(b,{zone:"thread",area:"discovery",advertisement_id:this.get("advertisement_id"),brand:this.get("brand"),headline:this.get("headline")}),b},toJSON:function(){var a=c.toJSON.call(this);return a.title=a.headline,a.link=a.url,a},toString:function(){return"promoted link: "+c.toString.call(this)}})}(g),j={RelatedThread:h,Advertisement:i};return DISQUS.testing&&(j.BaseContentModel=g),j}),define("discovery/models/BaseAd",["backbone"],function(a){"use strict";return a.Model.extend({idAttribute:"advertisement_id"})}),define("discovery/collections",["backbone","underscore","core/api","core/utils/html","discovery/models","discovery/models/BaseAd"],function(a,b,c,d,e,f){"use strict";var g=a.Collection.extend({url:function(a){return c.getURL(a)},parse:function(a){return a.response}}),h=function(a){var b=a.prototype;return a.extend({url:function(){return b.url.call(this,"discovery/listTopPost.json")},parse:function(a){for(var c=b.parse.call(this,a),e=0,f=c.length;f>e;e++)c[e].plaintext=d.stripTags(c[e].message);return c}})}(g),i=function(a){return a.extend({initialize:function(){this.model=e[this.modelName]}})}(g),j=function(a){var b=a.prototype;return a.extend({modelName:"RelatedThread",url:function(){return b.url.call(this,"discovery/listRelated.json")}})}(i),k=function(a){var b=a.prototype;return a.extend({modelName:"Advertisement",url:"//tempest.services.disqus.com/listPromoted",initialize:function(a){return this._display=new f,this._native=new f,this._video=new f,b.initialize.call(this,a)},getTopPlacementAd:function(){return this._video.id?this._video:this._native.id?this._native:this._display.id?this._display:void 0},parse:function(a){return a.sponsored_comment&&a.sponsored_comment.length&&(a.sponsored_comment[0].placement_id=a.placement_id,this._native.clear(),this._native.set(a.sponsored_comment[0])),a.video&&a.video.length&&this._video.set(a.video[0]),a.direct_response&&a.direct_response.length&&this._display.set(a.direct_response[0]),a.response||a.promoted_discovery}})}(i),l={PostCollection:h,RelatedThreadCollection:j,AdvertisementCollection:k};return DISQUS.testing&&(l.BaseCollection=g,l.BaseContentCollection=i),l}),define("discovery/custom-comments",["jquery","underscore","core/models/Media","shared/urls","shared/corefuncs","common/utils","common/urls","common/templates","exports"],function(a,b,c,d,e,f,g,h,i){"use strict";i.getProtocol=function(a){var b=(a||"").match(/^\s*(\w+:)?\/\//);return b?(b[1]||"").toLowerCase():null},i.getPageProtocol=function(){return window.location.protocol},i.forceWebProtocol=function(a,b){var c=i.getProtocol(a);if(null===c)return"";var e=i.getPageProtocol();return c||(c=e),"http:"===e&&(b=!0),"http:"===c&&b||(c="https:"),d.ensureHttpBasedProtocol(a,c)};var j=/<(\S+)[^<]+$/;i.extractTrackingTags=function(a){if(b.isArray(a))return b.map(a,function(a){return{tag:"img",url:a}});for(var c=f.bleachFindUrls(a),d=[],e=0;e0&&(k=c[e-1].endIndex);var l=a.substr(k,h-k),m=j.exec(l);if(m){var n=m[1].toLowerCase();if("img"===n||"iframe"===n){var o=i.forceWebProtocol(g.url);o&&d.push({tag:n,url:o})}}}return d},i.handlers={},i.adsNativeVideoTransformer=function(a){return{layout:"iframe",media_url:i.forceWebProtocol(a.embedUrl),target_url:i.forceWebProtocol(a.url,!0),brand_name:a.promotedBy,brand_image_url:i.forceWebProtocol(a.brandImageUrl),summary:a.summary,tracking_pixels_onload:i.extractTrackingTags(a.trackingTags),tracking_pixels_onview:i.extractTrackingTags(a.viewableTags)}};var k=function(a){return{title:a.title,summary:a.summary,target_url:i.forceWebProtocol(a.url),brand_name:a.promotedBy,thumbnail_url:i.forceWebProtocol(a.imageSrc),layout:"image_target",tracking_pixels_onload:i.extractTrackingTags(a.trackingTags),tracking_pixels_onview:i.extractTrackingTags(a.viewableTags)}};i.handlers.adsnativeVideoAds=function(b,c){return a.ajax({dataType:"jsonp",url:"https://api.adsnative.com/v1/ad.json",data:{url:c,zid:"PySlQoeeO71JbyG53QDzMCzp2uRP_ip0yZmgoltF"}}).always(function(a){var c=a.ad;return"OK"===a.status&&c&&"video"===c.type?void b.set(i.adsNativeVideoTransformer(c)):void b.clear()})},i.handlers.adsnative=function(b,c){return a.ajax({dataType:"jsonp",url:"https://api.adsnative.com/v1/ad.json",data:{url:c}}).always(function(a){return"OK"===a.status&&a.ad?void("video"===a.ad.type?b.set(i.adsNativeVideoTransformer(a.ad)):"story"===a.ad.type?b.set(k(a.ad)):b.clear()):void b.clear()})};var l=function(a){var b=(a.main_media&&a.main_media[0]||{}).url,c=(a.custom||{}).brand_name,d=i.forceWebProtocol(decodeURIComponent(a.click_url));return{title:a.title,summary:a.description,target_url:d,brand_name:c,thumbnail_url:i.forceWebProtocol(b),layout:"image_target",tracking_pixels_onload:i.extractTrackingTags(a.impression_trackers),tracking_pixels_onclick:i.extractTrackingTags(a.click_trackers)}},m=function(a){var b=(a.main_media&&a.main_media[0]||{}).url;return{media_url:i.forceWebProtocol(b),target_url:i.forceWebProtocol(a.click_url,!0),brand_name:(a.custom||{}).brand_name||a.title,brand_image_url:i.forceWebProtocol(a.icon_img_url),summary:a.description,layout:"iframe",tracking_pixels_onload:i.extractTrackingTags(a.impression_trackers),tracking_pixels_onclick:i.extractTrackingTags(a.click_trackers)}};i.handlers.appnexus=function(b,c){return b.get("placement_id")?a.get("https://mobile.adnxs.com/mob",{id:b.get("placement_id"),size:"1x1",st:"web",version:1,referrer:c}).always(function(a){if(!a)return void b.clear();var c=(a["native"]||a.ads||[])[0];if("ok"!==a.status||!c)return void b.clear();var d=!1;try{d=JSON.parse(c.custom.object).is_video}catch(e){}b.set(d?m(c):l(c))}):void b.clear()},i.handlers.appnexus_dr=function(b){return b.get("placement_id")?a.get("https://ib.adnxs.com/mob",{id:b.get("placement_id"),format:"json",psa:0}).always(function(a){if(!(a&&"ok"===a.status&&a.ads&&a.ads.length))return void b.unset("layout");var c=a.ads[0];return c.content&&c.width&&c.height?void b.set({content:c.content,width:c.width,height:c.height}):void b.unset("layout")}):void b.clear()}}),define("discovery/helpers",["underscore","jquery","remote/config","core/switches"],function(a,b,c,d){"use strict";var e=function(b,e,f){var g=c.discovery||{},h=d.isFeatureActive("discovery_override")&&e.get("discoveryOverride"),i=h||b.discoveryVariant,j=g.variantSpecific||{};if(i)i=a.extend(a.omit(g,"variantSpecific"),{name:i,thumbnailsEnabled:b.discoveryThumbnailsEnabled},j[i]);else{if(!b.sponsoredCommentsEnabled)return;i={organicEnabled:!1,promotedEnabled:!1}}return f.disable_promoted&&!b.discoveryLocked&&(i.promotedEnabled=!1,i.thumbnailsEnabled=!1),i},f=!1,g=!1,h=function(a){f=!!a.lineTruncationEnabled,g=!!a.consoleLoggingEnabled},i=function(a){return b(a).closest("body").length&&!a.offsetTop},j=function(){};window.console&&(j=function(){if(g){var b=a.toArray(arguments);b.unshift("[Discovery]"),window.console.log.apply?window.console.log.apply(window.console,b):window.console.log(b.join(" "))}});var k=function(b){return a.isUndefined(b)?g:void(g=!!b)},l=function(b){return a.isUndefined(b)?f:void(f=!!b)},m=function(c,d){function e(){return k.scrollHeight-k.offsetHeight>.2*l}function g(){i.lastChild&&!a.contains(["...","…"],i.lastChild.nodeValue)&&(m=i.appendChild(window.document.createTextNode(" "+o)),e()&&(i.removeChild(m),i.removeChild(i.lastChild),g()))}if(f){if(!c.closest("body").length)return void j("lineTruncate called on el not on DOM");if(c.text().length<1)return void j("lineTruncated called on empty el");var h=function(a){return 3!==a.nodeType};if(a.any(c.children(),h))return void j("lineTruncate called on non-flat el");var i=c[0],k=i;if("block"!==c.css("display"))for(;k.parentNode&&(k=k.parentNode,"block"!==b(k).css("display")););var l=parseFloat(c.css("font-size"),10);if(e()){d=d||{};var m,n=d.lines||1,o=d.ellipsis,p=c.text();if(p.length){var q=c.width()/l,r=parseInt(q*n,10),s=p.split(/\s/),t=0;c.empty();for(var u=0,v=s.length;v>u&&(t+=s[u].length+1,!(t>=r));u++)i.appendChild(document.createTextNode(" "+s[u]));if(e()){do m=i.removeChild(i.lastChild);while(e())}else{do m=i.appendChild(document.createTextNode(" "+s[u++]));while(!e()&&v>u);i.removeChild(m)}o&&(a.isString(o)||(o="…"),g())}}}},n=function(b){function c(a,b){return a+b}var d,e,f=a.keys(b),g=Math.floor(a.reduce(b,c,0)/2),h=f.length+1,i=g+1,j=new Array(h);for(d=0;h>d;d++)j[d]=new Array(i),j[d][0]={};for(e=1;i>e;e++)j[0][e]=!1;var k,l,m,n={};for(e=1;i>e;e++)for(d=1;h>d;d++)k=f[d-1],l=b[k],m=a.clone(j[d-1][e]),!m&&e>=l&&(m=a.clone(j[d-1][e-l]),m&&(m[k]=l,n=m)),j[d][e]=m;return[n,a.omit(b,a.keys(n))]},o=["product","zone","service","experiment","variant"],p=function(b){b=b||"";var c=a.object(o,b.split(":"));return{bin:b,experiment:c.experiment||"",variant:c.variant||""}};return{generateVariantConfig:e,config:h,looksAdblocked:i,log:j,allowLog:k,allowLineTruncate:l,lineTruncate:m,balancedPartition:n,binToEventParams:p}}),define("discovery/variants",[],function(){"use strict";return{"default":{maxPerColumn:2,inlineMeta:!1,contentPreviews:!0,promotedEnabled:!1,topPlacementEnabled:!1},promoted:{maxPerColumn:4,inlineMeta:!0,contentPreviews:!1,promotedEnabled:!0,topPlacementEnabled:!1,promotedSide:"right"},max:{maxPerColumn:4,inlineMeta:!0,contentPreviews:!1,promotedEnabled:!0,topPlacementEnabled:!0,promotedSide:"left"},thumbnails:{maxOrganicThumbnailLinks:0,maxPromotedThumbnailLinks:4,promotedSide:"left",numLinesHeadline:4}}}),define("discovery/views",["backbone","underscore","jquery","stance","core/analytics/jester","core/bus","core/strings","common/templates","common/utils","discovery/helpers"],function(a,b,c,d,e,f,g,h,i,j){"use strict";var k=g.get,l=a.View.extend({getTemplateContext:function(){return this.appContext||(this.appContext=this.model.toJSON()),{variant:this.appContext}},template:function(a,b){return b=b||this.templateName,h.render(b,a)},report:function(a){this.model.report(b.extend({object_type:"advertisement",area:"promoted_discovery"},a))}}),m=function(a){var e=a.prototype;return a.extend({events:{"click [data-redirect]":"handleClick"},templateName:"discoveryCollection",handleClick:function(a){this.swapHref(a.currentTarget)},swapHref:function(a){a.setAttribute("data-href",a.getAttribute("href")),a.setAttribute("href",a.getAttribute("data-redirect")),b.delay(function(){a.setAttribute("href",a.getAttribute("data-href"))},100)},initialize:function(a){e.initialize.call(this,a),this.elementsSelector="li.discovery-post",this.$elements=this.$el.find(this.elementsSelector),this.initContext=a.context;var b=this.collection;this.listenTo(b,{remove:this.remove,reset:this.render}),this.visibilityTrackers={},this.queueViewEvents()},queueViewEvents:function(){if(this.model.get("promotedEnabled")){var a=function(){return c(this.el).height()/2};b.each(this.visibilityTrackers,function(a,b){a&&(this.collection.get(b)||(this.stopListening(a),this.visibilityTrackers[b]=null))},this),b.each(this.$elements,function(c){var e=c.getAttribute("data-id");if(!this.visibilityTrackers[e]){var f=this.collection.get(e);if(f){var g=d({el:c,timer:null,topEdgeOffset:a,bottomEdgeOffset:a});this.visibilityTrackers[e]=g;var h=b.bind(function(){this.reportIABView(e),this.stopListening(g)},this);this.listenTo(g,{enter:function(){g.timer=b.delay(h,1e3)},exit:function(){clearTimeout(g.timer)}})}}},this)}},reportIABView:function(a){var c=this.collection.get(a),d=c.get("tracking_pixels_onview")||[];i.loadPixels(d,b.bind(this.pixelLoadErrorCallback,this,a),this.$el)},loadOnLoadPixels:function(){this.collection.each(function(a){var c=a.get("tracking_pixels_onload")||[],d=a.id;i.loadPixels(c,b.bind(this.pixelLoadErrorCallback,this,d),this.$el)},this)},pixelLoadErrorCallback:function(a,b){this.report({verb:"load",adverb:"failed",adjective:"tracking-pixel",object_type:"service",object_id:b,advertisement_id:a})},truncate:function(){var a=this.$el.find(".line-truncate");b.each(a,function(a){var b=c(a);j.lineTruncate(b,{lines:parseInt(b.attr("data-line-truncate"),10),ellipsis:!0})})},getTemplateContext:function(){var a=e.getTemplateContext.call(this);b.extend(a,this.initContext),a.collection=this.collection.toJSON();var c=this.collection.at(0);if(c){var d=c.has("id")?"organic-":"promoted-",f=c.idAttribute;b.each(a.collection,function(a){a.advertisement_id=a[f],a.domIdSuffix=a[f],a.domIdSuffix=d+a.domIdSuffix})}return a},render:function(){var a=this.getTemplateContext();return this.$el.html(this.template(a)),this.$elements=this.$el.find(this.elementsSelector),this.truncate(),this.loadOnLoadPixels(),this.queueViewEvents(),this},remove:function(a,d,e){if(0===arguments.length)return l.prototype.remove.call(this);var f=b.toArray(this.$elements),g=f.splice(e.index,1)[0];return c(g).remove(),this.$elements=c(f),this.queueViewEvents(),this}})}(l),n=function(a,b){this.modelIds=a||[],this.$elements=c(b||[])};b.extend(n.prototype,{height:function(){var a=this;a.heights=[];var d=c(a.$elements),e=d.first().offset().top,f=function(){var a=d.last();return a.offset().top+a.height()}(),g=f-e,h=0;return b.each(d,function(b){var d=c(b).height();a.heights.push(d),h+=d}),this.interstice=(g-h)/(d.length-1),g}});var o=function(){this.divideIntoColumns=function(){var a=this,b=a.subviews[0];a.left=new n,a.right=new n;var c=0;b.collection.each(function(d,e){var f=c++%2===0?"left":"right";a[f].modelIds.push(d.id),Array.prototype.push.call(a[f].$elements,b.$elements[e])})},this.removeOneFromColumn=function(a,c){var d,e=b.chain(a.modelIds).map(function(b,c){return[b,a.heights[c]]}).sortBy(function(a){return-1*a[1]}).find(function(a){return a[1]<=c}).value()[0],f=this.subviews[0].collection,g=f.models,h=f.get(e),i=g.indexOf(h),j=[],k=[],l=[k,j],m=g.length;for(d=0;m>d;d++)l[d%2].push(g[d]);var n=l[i%2];n.splice(b.indexOf(n,h),1),g=[];var o=(i+1)%2;for(d=0;m-1>d;d++)g.push(l[(d+o)%2].shift());f.reset(g)},this.balanceColumns=function(){var a=this.subviews[0],c=a.collection,d={};c.each(function(b,c){d[c]=a.$elements[c]});var e=j.balancedPartition(d);e=b.sortBy(e,"length");var f=e[1],g=e[0],h=c.models,i=new Array(h.length);b.each(f,function(a,b){i[2*b]=h[b]}),b.each(g,function(a,b){i[2*b+1]=h[b]}),c.reset(h)},this.shortenColumn=function(a,b){var c=this.subviews[0].collection;c.length%2!==0&&a===this.left?this.removeOneFromColumn(a,this.fudge*b):this.balanceColumns()}},p=function(){this.divideIntoColumns=function(){var a=this,b=a.subviews,c=b[0],d=b[1],e=c.collection.model.prototype.idAttribute;a.left=new n(c.collection.pluck(e),c.$elements);var f=d.collection.model.prototype.idAttribute;a.right=new n(d.collection.pluck(f),d.$elements)},this.shortenColumn=function(a,c){for(var d=a===this.left?this.subviews[0]:this.subviews[1],e=a===this.left?this.right:this.left,f=e,g=c/f.$elements.length,h=d.collection,i=b.chain(a.modelIds).map(function(b,c){return[b,a.heights[c]]}).sortBy(function(a){return a[1]}).value(),j=[],k=0,l=c,m=g;i.length;){var n=i.pop(),o=n[0],p=n[1],q=p+a.interstice;if(k+q>c&&(f=a),l=Math.abs(c-(k+q)),m=l/f.$elements.length,!(m>=g)){g=m;var r=a.modelIds.indexOf(o);a.modelIds.splice(r,1),Array.prototype.splice.call(a.$elements,r,1),k+=q,j.push(o)}}h.remove(j)}},q=function(a){this.fudge=a.fudge,this.subviews=a.views.slice(0,2),1===this.subviews.length?o.call(this):p.call(this)};b.extend(q.prototype,{ascendingByHeight:function(){var a=this.left,c=this.right,d=[[a,a.height()],[c,c.height()]];return b.sortBy(d,function(a){return a[1]})},evenColumns:function(a){var c=this.ascendingByHeight(),d=c[0][0],e=c[0][1],f=c[1][0],g=c[1][1];if(e!==g){var h=g-e,i=this.fudge*h,j=b.find(f.heights,function(a){return a+f.intersticee)){var f=d/e;b.each(a.$elements,function(a){var b=c(a),d=parseInt(b.css("margin-bottom"),10),e=d+f;b.css("margin-bottom",e+"px")});var g=a===this.left?this.right:this.left,h=a===this.right?"left":"right";g.$elements.css("clear",h)}},render:function(){return this.divideIntoColumns(),this.evenColumns(),this}});var r=function(a){var c=a.prototype;return a.extend({templateName:"discoveryMain",topEdgeOffset:0,bottomEdgeOffset:1/0,events:{"click [data-action=discovery-help]":function(a){a.preventDefault(),this.model.set("help",!0)},"click [data-action=discovery-help-close]":function(a){a.preventDefault(),this.model.set("help",!1)}},toggleHelp:function(a){var b=this;b.$el.find("#discovery-note").toggle(),a.trigger("resize")},rerenderHelp:function(){var a=this.$el.find("#discovery-note");a.length&&a.html(this.template(this.getTemplateContext(),"discoveryNote"))},initialize:function(a){c.initialize.call(this,a),this.listenTo(this.model,{"change:display":this.show,"change:help":this.toggleHelp}),this.listenTo(this.model.get("session"),"change",this.rerenderHelp),this.$el.css({position:"absolute",visibility:"hidden",display:"block",width:this.$el.width()-20+"px"})},createSections:function(){var a=this.model,c=a.get("sectionNames"),d=a.get("sectionIds");return b.map(a.collections,function(b,e){var f,g="";return b===a.threads?f="organic":b===a.ads&&(f="promoted",b.each(function(a){if(a)switch(a.get("brand")){case"Women & Co":g=k("Sponsored Stories");break;case"American Express OPEN":g=k("Sponsored Links")}})),{id:d[e],className:c[e],type:f,showThumbnailsInRows:"promoted"===f&&a.getThumbnailLinksMobile("Promoted"),promotedTitle:g}})},areThumbnailsEnabled:function(){return this.model.get("maxOrganicThumbnailLinks")||this.model.get("maxPromotedThumbnailLinks")},getTemplateContext:function(){var a=this.model,b=this.createSections();return{id:a.get("innerContainerId"),sections:b,styleVariant:a.get("styleVariant"),forum:a.get("sourceForum"),discoverySettingsUrl:a.get("promotedEnabled")&&a.get("discoverySettingsUrl"),session:a.get("session").toJSON(),thumbnailsEnabled:this.areThumbnailsEnabled()}},render:function(){this.$el.html(this.template(this.getTemplateContext()))},show:function(a){a.get("display")&&(this.$el.css({position:"static",visibility:"visible",width:"100%"}),a.trigger("resize"))},remove:function(a){var b;return a&&a.cloneContainer&&(b=this.el.cloneNode(!1),this.$el.attr("id",""),this.$el.after(b)),c.remove.call(this)}})}(l);return{BaseCollectionView:m,TwoColumn:q,MainView:r}}),define("discovery/views/BaseUnit",["backbone","underscore","jquery","stance","common/utils","core/analytics/jester","discovery/helpers"],function(a,b,c,d,e,f,g){"use strict";return a.View.extend({setupViewEvents:function(){var a=this,b=function(b,c){var d=!1,e=null,f=function(){d=!0,a.trigger("view:"+c.delayed,a)};a.listenTo(b,{enter:function(){a.trigger("view:"+c.enter,a),d||(e=window.setTimeout(f,1e3))},exit:function(){a.trigger("view:"+c.exit,a),window.clearTimeout(e)}})},c=function(){return a.$el.height()/2};b(d({el:a.el,topEdgeOffset:c,bottomEdgeOffset:c}),{enter:"50in",exit:"50out",delayed:"iab"}),b(d({el:a.el}),{enter:"enter",exit:"exit",delayed:"full"})},getProvider:function(){return this.model.get("ad_provider")||this.model.get("provider")},reportIABView:function(){this._fireViewPixels(),this.report({verb:"view",adverb:"iab-scroll"})},reportLoad:function(){this._fireLoadPixels(),this.report({verb:"load"})},reportNoOffer:function(){this.report({verb:"fail",object_type:"provider",object_id:this.getProvider(),adverb:"no_ads"})},reportTimeout:function(){this.report({verb:"fail",object_type:"provider",object_id:this.getProvider(),adverb:"timeout"})},reportRequest:function(){this.report({verb:"call",object_type:"provider",object_id:this.getProvider(),adjective:1})},fireClickPixels:function(){var a=this.model.get("tracking_pixels_onclick");e.loadPixels(a,b.bind(this._reportPixelErrors,this),this.$el)},report:function(a){f.client.emit(b.defaults(a,{object_type:"advertisement",object_id:"["+this.model.id+"]",advertisement_id:this.model.id,ad_product_name:this.productName,zone:"thread",area:"sponsored_comment"},g.binToEventParams(this.requestBin)))},_fireViewPixels:function(){var a=this.model.get("tracking_pixels_onview")||[],c=this.model.get("tracking_pixel_url");c&&a.push({tag:"img",url:c}),e.loadPixels(a,b.bind(this._reportPixelErrors,this),this.$el)},_fireLoadPixels:function(){var a=this.model.get("tracking_pixels_onload")||[];e.loadPixels(a,b.bind(this._reportPixelErrors,this),this.$el)},_reportPixelErrors:function(a){this.report({verb:"load",adverb:"failed",adjective:"tracking-pixel",object_type:"service",object_id:a})}})}),define("discovery/views/Iframe",["jquery","underscore","backbone","core/utils/urls"],function(a,b,c,d){"use strict";var e=c.View.extend({tagName:"iframe",initialize:function(c){var e=c.src||this.el.src;this._source=e,this._origin=d.getOrigin(e),this._onMessage=b.bind(this._onMessage,this),a(window).on("message",this._onMessage),this._ready=!1,this._buffer=[],this.once("message",this._onLoad)},_onLoad:function(){this._ready=!0,b.each(this._buffer,this.postMessage,this)},_onMessage:function(a){a=a.originalEvent,a&&a.origin===this._origin&&this.trigger("message",a.data,this)},render:function(){return this.$el.attr("src",this._source),this},postMessage:function(a){if(this._ready)try{this.el.contentWindow.postMessage(a,this._origin)}catch(b){}else this._buffer.push(a)},remove:function(){return a(window).off("message",this._onMessage),c.View.prototype.remove.apply(this,arguments)}});return e}),define("discovery/views/IframeUnit",["jquery","underscore","backbone","core/bus","core/strings","common/templates","discovery/views/BaseUnit","discovery/views/Iframe"],function(a,b,c,d,e,f,g,h){"use strict";var i=g.extend({READY_TIMEOUT:45e3,proxyEvents:{"view:iab":"disqus.inView","view:50in":"disqus.view:50in","view:50out":"disqus.view:50out"},initialize:function(a){this.setupViewEvents(),this.listenTo(this,"view:iab",this.reportIABView),this.listenTo(this,"all",this._proxyEvents),this.listenTo(d.frame,"embed.resized",b.debounce(b.bind(this.render,this),100)),this.requestBin=a.requestBin},isEmbedHidden:function(){return!a("body").width()},_proxyEvents:function(a){this.proxyEvents[a]&&this.frame&&this.frame.postMessage(this.proxyEvents[a])},remove:function(){return this._removeFrame(),g.prototype.remove.apply(this,arguments)},_removeFrame:function(){this.frame&&(this.stopListening(this.frame),this.frame.remove())},render:function(){if(this.isEmbedHidden())return this;this.stopListening(d.frame,"embed.resized"),this._removeFrame();var a=this.serializeData();return this.$el.hide().html(f.render("iframeAd",a)),this.frame=new h({el:this.$('[data-role="iframe-ad"]')[0],src:a.iframeUrl}),this.listenTo(this.frame,"message",this.handleMessage),this.frame.render(),this.reportRequest(),this._providerTimeout=b.delay(b.bind(this.timeoutUnit,this),this.READY_TIMEOUT),this.listenTo(this,"iframe:ready",function(){window.clearTimeout(this._providerTimeout)}),this},timeoutUnit:function(){this.reportTimeout(),this.remove()},_postMessage:function(a){this.frame.postMessage(JSON.stringify(a))}});return i}),define("discovery/views/VideoIframeUnit",["jquery","underscore","backbone","core/bus","core/analytics/jester","core/strings","common/templates","discovery/views/IframeUnit"],function(a,b,c,d,e,f,g,h){"use strict";var i="ready",j="noOffer",k={ready:i,noOffer:j,"viroolWidget.playerReady":i,"viroolWidget.noOffers":j},l=h.extend({productName:"video",getIframeUrl:function(){return this.model.get("media_url")},serializeData:function(){var c,d=this.getIframeUrl(),e=this.model.get("width")||640;return e=Math.min(e,a("body").width()),c=e/1.6,{iframeUrl:b.template(d)({width:e,height:c}),height:c,width:"100%",title:this.model.get("title"),summary:this.model.get("summary"),targetUrl:this.model.get("target_url"),brandName:this.model.get("brand_name"),brandImageUrl:this.model.get("brand_image_url")}},handleMessage:function(a){switch(k[a]){case i:this.trigger("iframe:ready",a),this.$el.show(),this.frame&&this.stopListening(this.frame),this.reportLoad();break;case j:this.reportNoOffer(),this.remove()}}});return l}),define("discovery/views/IABDisplayUnit",["jquery","underscore","remote/config","discovery/views/IframeUnit"],function(a,b,c,d){"use strict";var e=d.extend({className:"iab-ad_centered",initialize:function(){this.listenTo(this,"iframe:ready",this.showAd),d.prototype.initialize.apply(this,arguments)},getIframeUrl:function(){return c.discovery.iabDisplayUrl||""},serializeData:function(){var b=this.getIframeUrl(),c=this.model.get("width")||640,d=this.model.get("height")||480;if(!(c>a("body").width()))return{iframeUrl:b,height:d,width:c}},handleMessage:function(a){switch(a.eventName){case"iframeLoaded":this.initAd();break;case"ready":this.trigger("iframe:ready",a)}},showAd:function(a){a.width&&a.height&&(this.frame.$el.width(a.width),this.frame.$el.height(a.height)),this.$el.show(),this.reportLoad()},initAd:function(){this._postMessage({method:"initAd",content:this.model.get("content")})}});return e}),define("discovery/views/VastUnit",["jquery","underscore","stance","remote/config","discovery/views/IframeUnit"],function(a,b,c,d,e){"use strict";var f=e.extend({events:{"mouseenter [data-role=iframe-wrapper]":"turnSoundOn","mouseleave [data-role=iframe-wrapper]":"turnSoundOff"},productName:"video",supportedSizes:[{width:320,height:180},{width:480,height:352},{width:640,height:360}],initialize:function(){this.listenTo(this,{"view:50in":this.startAd,"view:50out":this.pauseAd}),this.listenTo(this,"iframe:ready",this.showPlayer),e.prototype.initialize.apply(this,arguments)},getIframeUrl:function(){return d.discovery.videoPlayerUrl||""},handleMessage:function(a){switch(a.eventName){case"iframeLoaded":this.initVideoPlayer();break;case"ready":this.trigger("iframe:ready",a);break;case"play":this.reportPlay();break;case"error":this.reportError();break;case"ended":a.isVast||this.showReplayOverlay(!0),this.reportVideoComplete()}},serializeData:function(){var c,d=this.getIframeUrl(),e=this.model.get("width")||640;return e=Math.min(e,a("body").width()),c=e/1.6,{iframeUrl:b.template(d)({width:e,height:c}),height:c,width:"100%"}},initVideoPlayer:function(){var a=this.$el.parent().width(),c=b.find(this.supportedSizes,function(b){return b.width>a});c=c||b.last(this.supportedSizes),this._postMessage({method:"initPlayer",url:this.model.get("media_url"),width:c.width,height:c.height})},showPlayer:function(a){a.width&&a.height&&(this.frame.$el.width(a.width),this.frame.$el.height(a.height)),this.$el.show(),this.reportLoad()},showReplayOverlay:function(a){this.$("[data-role=iframe-wrapper]").toggleClass("generic-ad__hidden",a)},reportPlay:function(){this.hasStarted=!0,this.report({verb:"start-playing"})},reportError:function(){this.report({verb:"error",adjective:this.player.src()})},reportVideoComplete:function(){this.hasStarted&&this.report({verb:"finish-playing"})},startAd:function(){this._postMessage({method:"playVideo"})},pauseAd:function(){this._postMessage({method:"pauseVideo"})},turnSoundOn:function(){this._postMessage({method:"turnSoundOn"})},turnSoundOff:function(){this._postMessage({method:"turnSoundOff"})}});return f}),define("discovery/views/ImageUnit",["underscore","discovery/views/BaseUnit","common/templates"],function(a,b,c){"use strict";var d=b.extend({productName:"native_dr",className:"style-variant-default",events:{"click a":"fireClickPixels"},initialize:function(b){this.render=a.compose(this.render,a.bind(this.trigger,this,"render")),this.setupViewEvents(),this.listenTo(this,"view:iab",this.reportIABView),this.listenTo(this,"render",this.reportLoad),this.requestBin=b.requestBin},serializeData:function(){var a=this.model;return{title:a.get("title"),summary:a.get("summary"),targetUrl:a.get("target_url"),brandName:a.get("brand_name"),thumbnailUrl:a.get("thumbnail_url")}},render:function(){return this.$el.html(c.render("imageAd",this.serializeData())),this}});return d}),define("discovery/views/Placement",["underscore","backbone","common/templates","discovery/views/IframeUnit","discovery/views/VideoIframeUnit","discovery/views/IABDisplayUnit","discovery/views/VastUnit","discovery/views/ImageUnit","core/logger"],function(a,b,c,d,e,f,g,h,i){"use strict";var j=b.View.extend({template:"adPlacement",itemViewContainer:".post-list",LAYOUT_TO_CLASS:{image_target:h,iframe:e,iab_display:f,video_vast:g},initialize:function(a){this.visible=a.visible,this.requestBin=a.requestBin,this.initSubViews(),this.listenTo(this.model,"change",function(){this.initSubViews(),this.render()})},initSubViews:function(){if(this.removeSubViews(),this.model){var a=this.model.get("layout"),b=this.LAYOUT_TO_CLASS[a];if(!b)return void i.debug("Specified Placement layout "+a+" was not found.");var c=new b({model:this.model,requestBin:this.requestBin,excludeAnchor:!0});this.adView=c}},removeSubViews:function(){this.adView&&this.adView.remove()},setVisible:function(a){a!==this.visible&&(this.visible=a,this.render())},remove:function(){return this.removeSubViews(),b.View.prototype.remove.apply(this,arguments)},render:function(){if(this.visible&&this.adView){var a=this.$el.html(c.render(this.template)).find(this.itemViewContainer);a.append(this.adView.render().$el),this.adView.delegateEvents(),this.$el.show()}else this.$el.hide();return this}});return j}),define("templates/discovery",["handlebars"],function(a){return a.template({1:function(a,b,c,d){var e,f='\n"},2:function(a,b,c,d){var e,f="";return e=b["if"].call(a,null!=(e=null!=a?a.user:a)?e.isEditable:e,{name:"if",hash:{},fn:this.program(3,d),inverse:this.noop,data:d}),null!=e&&(f+=e),f+"\n"},3:function(a,b,c,d){var e,f=this.lambda,g=this.escapeExpression;return'\n" +},5:function(a,b,c,d){var e,f="";return e=b["if"].call(a,null!=(e=null!=a?a.user:a)?e.isPrivate:e,{name:"if",hash:{},fn:this.program(6,d),inverse:this.program(8,d),data:d}),null!=e&&(f+=e),f},6:function(a,b,c,d){var e=this.escapeExpression;return'\n"},8:function(a,b,c,d){var e,f=this.lambda,g=this.escapeExpression,h='\n'},9:function(){return"following"},11:function(a,b,c,d,e){var f,g="";return f=b.each.call(a,null!=a?a.collection:a,{name:"each",hash:{},fn:this.program(12,d,e),inverse:this.noop,data:d}),null!=f&&(g+=f),g},12:function(a,b,c,d,e){var f,g=this.lambda,h=this.escapeExpression,i='\n"},13:function(){return" hasthumbnail"},15:function(a){var b=this.lambda,c=this.escapeExpression;return'
    \n
    \n'},17:function(a,b,c,d){var e,f="";return e=b["if"].call(a,b.gt.call(a,null!=a?a.posts:a,0,{name:"gt",hash:{},data:d}),{name:"if",hash:{},fn:this.program(18,d),inverse:this.program(20,d),data:d}),null!=e&&(f+=e),e=b["if"].call(a,null!=a?a.brand:a,{name:"if",hash:{},fn:this.program(23,d),inverse:this.noop,data:d}),null!=e&&(f+=e),f},18:function(a,b,c,d){var e,f='\n';return e=this.invokePartial(c.discoveryPostCount,"","discoveryPostCount",a,void 0,b,c,d),null!=e&&(f+=e),f+"\n"},20:function(a,b,c,d){var e,f="";return e=b["if"].call(a,null!=a?a.createdAgo:a,{name:"if",hash:{},fn:this.program(21,d),inverse:this.noop,data:d}),null!=e&&(f+=e),f},21:function(a){var b=this.lambda,c=this.escapeExpression;return''+c(b(null!=a?a.createdAgo:a,a))+"\n"},23:function(a){var b=this.lambda,c=this.escapeExpression;return'\n'+c(b(null!=a?a.brand:a,a))+"\n\n"},25:function(a,b,c,d){var e,f='
      \n';return e=b["if"].call(a,b.gt.call(a,null!=a?a.posts:a,0,{name:"gt",hash:{},data:d}),{name:"if",hash:{},fn:this.program(26,d),inverse:this.noop,data:d}),null!=e&&(f+=e),e=b["if"].call(a,null!=a?a.createdAgo:a,{name:"if",hash:{},fn:this.program(28,d),inverse:this.noop,data:d}),null!=e&&(f+=e),f+"
    \n"},26:function(a,b,c,d){var e,f='
  2. \n';return e=this.invokePartial(c.discoveryPostCount,"","discoveryPostCount",a,void 0,b,c,d),null!=e&&(f+=e),f+"
  3. \n"},28:function(a){var b=this.lambda,c=this.escapeExpression;return'
  4. '+c(b(null!=a?a.createdAgo:a,a))+"
  5. \n"},30:function(a,b,c,d){var e,f="";return e=this.invokePartial(c.discoveryContentPreview,"","discoveryContentPreview",a,void 0,b,c,d),null!=e&&(f+=e),f},32:function(a,b,c,d){var e,f=this.lambda,g=this.escapeExpression,h='href="'+g(f(null!=a?a.redirectUrl:a,a))+'" ';return e=b["if"].call(a,null!=a?a.brand:a,{name:"if",hash:{},fn:this.program(33,d),inverse:this.noop,data:d}),null!=e&&(h+=e),h+"\n"},33:function(){return'target="_blank" rel="nofollow norewrite"'},35:function(a,b,c,d){var e,f=this.lambda,g=this.escapeExpression,h="\n'+g(b.gettext.call(a,\n

    '+g(f(null!=(e=null!=(e=null!=a?a.preview:a)?e.author:e)?e.name:e,a))+''+g(f(null!=(e=null!=a?a.preview:a)?e.plaintext:e,a))+"

    \n
    \n"},37:function(a,b,c,d){var e,f="";return e=b["if"].call(a,b.eq.call(a,null!=a?a.posts:a,1,{name:"eq",hash:{},data:d}),{name:"if",hash:{},fn:this.program(38,d),inverse:this.program(40,d),data:d}),null!=e&&(f+=e),f},38:function(a,b,c,d){var e=this.escapeExpression;return e(b.gettext.call(a,"1 comment",{name:"gettext",hash:{},data:d}))+"\n"},40:function(a,b,c,d){var e=this.escapeExpression;return e(b.gettext.call(a,"%(numPosts)s comments",{name:"gettext",hash:{numPosts:null!=a?a.posts:a},data:d}))+"\n"},42:function(a,b,c,d,e){var f,g=this.lambda,h=this.escapeExpression,i='
    \n
    \n',f=this.invokePartial(c.discoveryNote,"","discoveryNote",a,void 0,b,c,d),null!=f&&(i+=f),i+='
    \n\n
    \n\n
    \n\n",f=b.each.call(a,null!=a?a.sections:a,{name:"each",hash:{},fn:this.program(47,d,e),inverse:this.noop,data:d}),null!=f&&(i+=f),i+"\n
    \n"},43:function(){return" discovery-thumbnails"},45:function(a){var b=this.lambda,c=this.escapeExpression;return"style-variant-"+c(b(null!=a?a.styleVariant:a,a))},47:function(a,b,c,d,e){var f,g=this.lambda,h=this.escapeExpression,i='
    \n
    \n\n',f=b["if"].call(a,b.eq.call(a,null!=a?a.type:a,"organic",{name:"eq",hash:{},data:d}),{name:"if",hash:{},fn:this.program(50,d,e),inverse:this.noop,data:d}),null!=f&&(i+=f),i+="\n",f=b["if"].call(a,b.eq.call(a,null!=a?a.type:a,"promoted",{name:"eq",hash:{},data:d}),{name:"if",hash:{},fn:this.program(52,d,e),inverse:this.noop,data:d}),null!=f&&(i+=f),i+'\n
    \n
      \n
    \n
    \n'},48:function(){return" thumbnails-rows"},50:function(a,b,c,d,e){var f=this.escapeExpression;return"

    "+f(b.gettext.call(a,"Also on %(forumName)s",{name:"gettext",hash:{forumName:b.getPartial.call(a,"forumName",null!=e[2]?e[2].forum:e[2],{name:"getPartial",hash:{},data:d})},data:d}))+"

    \n"},52:function(a,b,c,d){var e,f="

    ";return e=b["if"].call(a,null!=a?a.promotedTitle:a,{name:"if",hash:{},fn:this.program(53,d),inverse:this.program(55,d),data:d}),null!=e&&(f+=e),f+"

    \n"},53:function(a){var b=this.lambda,c=this.escapeExpression;return"\n"+c(b(null!=a?a.promotedTitle:a,a))+"\n"},55:function(a,b,c,d){var e=this.escapeExpression;return e(b.gettext.call(a,"Around The Web",{name:"gettext",hash:{},data:d}))+"\n"},57:function(a,b,c,d){var e=this.escapeExpression;return''+e(b.gettext.call(a,"Learn more",{name:"gettext",hash:{},data:d}))+"\n"},59:function(a,b,c,d){var e=this.escapeExpression;return'\n'+e(b.gettext.call(a,"give us feedback",{name:"gettext",hash:{},data:d}))+""},61:function(a){var b=this.lambda,c=this.escapeExpression;return""+c(b(null!=a?a.name:a,a))+"\n"},63:function(a,b,c,d){var e,f=this.escapeExpression,g='
    \n\n'+f(b.gettext.call(a,"Disqus helps you find new and interesting content, discussions and products. Some sponsors and ecommerce sites may pay us for these recommendations and links. %(learnMore)s or %(feedback)s.",{name:"gettext",hash:{feedback:b.getPartial.call(a,"feedback",{name:"getPartial",hash:{},data:d}),learnMore:b.getPartial.call(a,"learnMore",{name:"getPartial",hash:{},data:d})},data:d}))+"\n";return e=b.if_all.call(a,null!=(e=null!=(e=null!=a?a.session:a)?e.thread:e)?e.canModerate:e,null!=a?a.discoverySettingsUrl:a,{name:"if_all",hash:{},fn:this.program(64,d),inverse:this.noop,data:d}),null!=e&&(g+=e),g+"
    \n"},64:function(a,b,c,d){var e,f=this.lambda,g=this.escapeExpression;return'
    \n'+g(b.gettext.call(a,"Change %(Discovery)s settings for %(forumName)s",{name:"gettext",hash:{forumName:null!=(e=null!=a?a.forum:a)?e.name:e,Discovery:"Discovery"},data:d}))+"\n"},66:function(){return'
      \n'},68:function(a,b,c,d){var e,f=this.escapeExpression,g=this.lambda,h='\n"},69:function(a,b,c,d){var e,f=this.lambda,g=this.escapeExpression,h='\n'},70:function(){return"has-brand-logo"},72:function(a){var b=this.lambda,c=this.escapeExpression;return'\n'},74:function(a,b,c,d){var e,f=this.escapeExpression,g='
      \n
      \n';return e=b["if"].call(a,null!=a?a.title:a,{name:"if",hash:{},fn:this.program(75,d),inverse:this.noop,data:d}),null!=e&&(g+=e),g+='\n
      \n '+f(b.gettext.call(a,"Sponsored Video",{name:"gettext",hash:{},data:d}))+'\n
      \n
      \n\n
      \n\n
      \n
      \n"},75:function(a){var b=this.lambda,c=this.escapeExpression;return'

      '+c(b(null!=a?a.title:a,a))+"

      \n"},77:function(a){var b=this.lambda,c=this.escapeExpression;return'

      \n'+c(b(null!=a?a.description:a,a))+"\n

      \n"},79:function(a,b,c,d){var e,f=this.lambda,g=this.escapeExpression,h='
      \n
      \n\n
      \n
      \n
      \n';return e=b["if"].call(a,null!=a?a.brandName:a,{name:"if",hash:{},fn:this.program(80,d),inverse:this.noop,data:d}),null!=e&&(h+=e),h+''+g(b.gettext.call(a,"Sponsored",{name:"gettext",hash:{},data:d}))+'\n
      \n
      \n\n
      \n

      \n'+g(f(null!=a?a.title:a,a))+'\n

      \n
      \n'+g(f(null!=a?a.summary:a,a))+'\n
      \n\n
      \n
      \n"},80:function(a){var b=this.lambda,c=this.escapeExpression;return'\n'+c(b(null!=a?a.brandName:a,a))+'\n\n'},compiler:[6,">= 2.0.0-beta.1"],main:function(a,b,c,d,e){var f,g="";return f=b.partial.call(a,"followButton",{name:"partial",hash:{},fn:this.program(1,d,e),inverse:this.noop,data:d}),null!=f&&(g+=f),g+="\n",f=b.partial.call(a,"discoveryCollection",{name:"partial",hash:{},fn:this.program(11,d,e),inverse:this.noop,data:d}),null!=f&&(g+=f),g+="\n",f=b.partial.call(a,"linkAttributes",{name:"partial",hash:{},fn:this.program(32,d,e),inverse:this.noop,data:d}),null!=f&&(g+=f),g+="\n",f=b.partial.call(a,"discoveryContentPreview",{name:"partial",hash:{},fn:this.program(35,d,e),inverse:this.noop,data:d}),null!=f&&(g+=f),g+="\n",f=b.partial.call(a,"discoveryPostCount",{name:"partial",hash:{},fn:this.program(37,d,e),inverse:this.noop,data:d}),null!=f&&(g+=f),g+="\n",f=b.partial.call(a,"discoveryMain",{name:"partial",hash:{},fn:this.program(42,d,e),inverse:this.noop,data:d}),null!=f&&(g+=f),g+="\n",f=b.partial.call(a,"learnMore",{name:"partial",hash:{},fn:this.program(57,d,e),inverse:this.noop,data:d}),null!=f&&(g+=f),g+="\n",f=b.partial.call(a,"feedback",{name:"partial",hash:{},fn:this.program(59,d,e),inverse:this.noop,data:d}),null!=f&&(g+=f),g+="\n\n",f=b.partial.call(a,"forumName",{name:"partial",hash:{},fn:this.program(61,d,e),inverse:this.noop,data:d}),null!=f&&(g+=f),g+="\n\n",f=b.partial.call(a,"discoveryNote",{name:"partial",hash:{},fn:this.program(63,d,e),inverse:this.noop,data:d}),null!=f&&(g+=f),g+="\n",f=b.partial.call(a,"adPlacement",{name:"partial",hash:{},fn:this.program(66,d,e),inverse:this.noop,data:d}),null!=f&&(g+=f),g+="\n",f=b.partial.call(a,"iframeAd",{name:"partial",hash:{},fn:this.program(68,d,e),inverse:this.noop,data:d}),null!=f&&(g+=f),g+="\n",f=b.partial.call(a,"videoVastAd",{name:"partial",hash:{},fn:this.program(74,d,e),inverse:this.noop,data:d}),null!=f&&(g+=f),g+="\n",f=b.partial.call(a,"imageAd",{name:"partial",hash:{},fn:this.program(79,d,e),inverse:this.noop,data:d}),null!=f&&(g+=f),g},usePartial:!0,useData:!0,useDepths:!0})}),define("discovery/main",["backbone","underscore","jquery","stance","when","core/analytics/jester","core/utils","common/defines","common/utils","remote/config","discovery/collections","discovery/custom-comments","discovery/helpers","discovery/variants","discovery/views","discovery/views/Placement","templates/discovery"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){"use strict";q();var r={},s=1e4,t="discovery-top";return r.DiscoveryApp=a.Model.extend({defaults:{name:"promoted",inlineMeta:!0,contentPreviews:!1,organicEnabled:!0,promotedEnabled:!0,topPlacementEnabled:!1,redirectUrl:i.shouldSample(j.discovery.NEW_REDIRECT_PERCENTAGE)?"http://disq.us/url":"http://redirect.disqus.com/url",sourceThread:null,sourceForum:null,sourceThreadUrl:null,discoverySettingsUrl:null,help:!1,display:!1,columnEveningEnabled:!0,numColumns:2,minPerColumn:1,maxPerColumn:null,toleranceCoefficient:1.2,maxOrganicTextLinks:null,maxPromotedTextLinks:null,maxOrganicThumbnailLinks:null,maxPromotedThumbnailLinks:null,maxPromotedThumbnailLinksMobile:null,minWidthForColumnLayout:440,containerId:"discovery",innerContainerName:"discovery-main",sectionNames:null,collectionTagName:"ul",collectionClassName:"discovery-posts",promotedSide:"right",organicThumbnailClass:"discovery-thumbnails",promotedThumbnailClass:"doublethumbnails",styleVariant:"default",sponsoredCommentStyleVariant:"default",injectScriptUrl:void 0,hasSpaceForSponsoredComment:!1,sponsoredCommentsEnabled:!1,sponsoredCommentId:null,consoleLoggingEnabled:h.debug,lineTruncationEnabled:!0,session:null,numLinesHeadline:2,requestBinOverride:null,thumbnailMinHeight:200,thumbnailMinWidth:200,thumbnailAspectRatioMin:.5,thumbnailAspectRatioMax:1.8,shouldEvenThumbnails:!1,thumbnailTimeout:2e3,minThumbnailsNeeded:null,js:null,css:null,seenByUserThresholdTime:2e3,trackAdVisibility:null},get:function(b){if(b in this.constructor.loggedinOverrides){var c=this.get("session");if(c&&c.isLoggedIn())return this.constructor.loggedinOverrides[b]}return a.Model.prototype.get.apply(this,arguments)},initialize:function(a){var c=this;c.collections=[],c.ads=new k.AdvertisementCollection,c.augmentCollection(c.ads,"Promoted"),c.threads=new k.RelatedThreadCollection,c.augmentCollection(c.threads,"Organic"),c.userSuggestions=a.userSuggestions,c.configure(a),c.once("change:display",function(){c.onComplete()}),b.bindAll(c,"getContentPreviews","validateData","prepareData","showData","reportIfVisible")},trackVisibility:function(){this.debouncedReportIfVisible=b.debounce(this.reportIfVisible,this.get("seenByUserThresholdTime")),this.visibilityTracker=d(this.mainView),this.listenTo(this.visibilityTracker,"enter",this.debouncedReportIfVisible)},configure:function(a){a=a||{};var c=this,d=n[c.get("name")]||{};if(c.get("thumbnailsEnabled")&&b.extend(d,n.thumbnails),c.set(b.defaults(a,d)),c.has("maxPerColumn")){var e=c.get("promotedEnabled")?1:2;c.set("maxOrganicTextLinks",e*c.get("maxPerColumn")),c.set("maxPromotedTextLinks",c.get("maxPerColumn"))}else c.has("maxOrganicTextLinks")&&c.set("maxPerColumn",c.get("maxOrganicTextLinks"));c.set("innerContainerId",c.get("innerContainerName")+"-"+c.cid),c.get("sectionNames")||c.set("sectionNames",["col-organic","col-promoted"]),c.set("sectionIds",b.map(c.get("sectionNames"),function(a){return a+"-"+c.cid}))},numSections:function(){return this.collections.length||(this.get("promotedEnabled")?2:1)},commonClickMetadata:function(){var a=this.get("sourceForum"),b={redirectUrl:this.get("redirectUrl"),sourceThreadId:this.get("sourceThread").id,forumId:a.pk,forum:a.id,majorVersion:this.majorVersion(),requestBin:this.get("requestBin"),service:this.get("service")},c=this.get("session");return c&&c.isLoggedIn()&&(b.userId=c.user.id),b},augmentModels:function(a){a.invoke("set",this.commonClickMetadata())},getViewportWidth:function(){return c(document).width()},getThumbnailLinksMobile:function(a){return this.getViewportWidth()<=480&&this.get("max"+a+"ThumbnailLinksMobile")},augmentCollection:function(a,b){var c=this;a.meta={max:function(){return c.getThumbnailLinksMobile(b)||c.get("max"+b+"ThumbnailLinks")||c.get("max"+b+"TextLinks")},min:function(){return c.get("minThumbnailsNeeded")||c.get("numColumns")/c.numSections()*c.get("minPerColumn")},name:b}},run:function(){var a=b.bind(this.configureContainerId,this),c=b.bind(this.onComplete,this);this.getData().then(a).then(this.validateData).then(this.prepareData).then(this.showData).otherwise(c)},getDataOrganic:function(){var a=this,b={timeout:s,data:{thread:this.get("sourceThread").id,limit:2*a.threads.meta.max()},sourceThread:this.get("sourceThread"),reset:!0};b.humanFriendlyTimestamp=!0;var c=e(a.threads.fetch(b));return a.get("contentPreviews")&&(c=c.then(function(){return a.getContentPreviews().otherwise(function(a){m.log("There was a problem getting snippets: ",a)})})),c},deactivateThumbnails:function(){this.set({columnEveningEnabled:!0,contentPreviews:!0})},getAllowedTopUnits:function(){var a=[];return this.get("hasSpaceForSponsoredComment")&&this.get("sponsoredCommentsEnabled")&&a.push("native_dr","video"),this.get("topPlacementEnabled")&&a.push("sponsored_links"),a},getAllowedBottomUnits:function(){return this.get("promotedEnabled")?["sponsored_links"]:[]},fetchAds:function(a){return e(this.ads.fetch(a))},getDataPromoted:function(){var a=this;a.get("preview")&&a.has("previewQueryParam")&&(a.ads.url="//tempest.services.disqus.com/preview/serve/"+a.get("previewQueryParam")),a.augmentCollection(a.ads,"Promoted");var c={timeout:s,data:{thread:this.get("sourceThread").id,count:2*a.ads.meta.max(),top_placement:this.getAllowedTopUnits(),bottom_placement:this.getAllowedBottomUnits()},sourceThread:this.get("sourceThread"),dataType:"jsonp",omitDisqusApiKey:!0,reset:!0};null!==a.get("sponsoredCommentId")&&(c.data.HTTP_X_DEBUG=1,c.data.HTTP_X_DEBUG_AD_ID=a.get("sponsoredCommentId")),null!==a.get("requestBinOverride")&&(c.data.HTTP_X_DEBUG=1,c.data.HTTP_X_DEBUG_BIN=a.get("requestBinOverride"));var d=a.fetchAds(c);return d.then(function(c){var e=c.bin;if(!e)return d;if(a.has("requestBin"))return d;a.set("requestBin",e);var g,h=c.extra;return h&&h.service&&h.service_version&&(g=b.pick(h,"service","service_version"),f.client.set(g),a.set("service",g)),d}).then(b.bind(a.augmentAd,a)).always(function(){a.ads.getTopPlacementAd()&&a.get("sponsoredCommentsEnabled")&&a.set("topPlacementEnabled",!1)})},augmentAd:function(){var a=this.ads.getTopPlacementAd();if(a){var c=a.get("provider")||a.get("ad_provider");if(c&&b.has(l.handlers,c))return l.handlers[c](a,this.get("sourceThreadUrl"))}},configureContainerId:function(){this.get("topPlacementEnabled")&&this.set("containerId",t)},getData:function(){var a=e();if(this.get("organicEnabled")){var c=this.getDataOrganic();a=a.always(function(){return c})}if(this.get("promotedEnabled")||this.get("sponsoredCommentsEnabled")){var d=this.getDataPromoted();a=a.always(function(){return d})}return a.always(b.bind(this.sequenceDataCollections,this))},sequenceDataCollections:function(){this.collections=[this.threads],this.get("promotedEnabled")&&this.collections.push(this.ads),this.collections=b.compact(this.collections);var a=this.get("promotedEnabled")&&1===this.collections.length,c=this.get("promotedEnabled")&&"left"===this.get("promotedSide");(c||a)&&(this.get("sectionNames")&&this.get("sectionNames").reverse(),this.get("sectionIds")&&this.get("sectionIds").reverse(),this.collections.reverse())},getContentPreviews:function(){var a=this.threads.map(function(a){return parseInt(a.get("id"),10)});if(a.length0;)a=c[--f],b=a.meta.min(),a.lengthe;e++)a=c[e],b=a.meta.max(),a.length>b&&a.reset(a.slice(0,b));this.get("shouldEvenThumbnails")&&this.threads.length%2!==0&&(m.log("Number of related threads ("+this.threads.length+") is odd.","Removing one to make even."),this.threads.pop())},isThumbnailOk:function(a){var b=this,c=a.width,d=a.height,e=c/d;return c>=b.get("thumbnailMinWidth")&&d>=b.get("thumbnailMinHeight")&&e>=b.get("thumbnailAspectRatioMin")&&e<=b.get("thumbnailAspectRatioMax")},areThumbnailsGood:function(a,d){var f=this;return a.map(function(a){var g,h=new Image,i=e.defer();return c(h).on("load",function(){f.isThumbnailOk(this)?(d.push(a),i.resolve(a.id)):(m.log("Image is not good. Width",this.width,"Height",this.height,"Aspect Ratio",this.width/this.height,"Src",this.src),i.reject("Image is not good")),clearTimeout(g)}).on("error",function(){m.log("Image could not be loaded. Src",this.src),i.reject("Error loading image"),clearTimeout(g)}),h.src=a.get("thumbnail"),g=b.delay(function(){m.log("Image is taking too long to load. Src",h.src),i.reject("Image taking too long")},f.get("thumbnailTimeout")),i.promise})},validateThumbnails:function(a){function c(){return m.log("Verified minimum number of thumbnails needed: "+g),e.some(j,h).then(function(c){var d=a.pluck("id"),e=b.difference(d,c);m.log("Maximum number ("+h+") of thumbnails verified.","Removing excess models.",e),a.reset(i)},function(){m.log("Cannot reach thumbnail max. Carrying on with the amount obtained: "+i.length),a.reset(i)})}function d(){m.log("Cannot get enough good thumbnails. Falling back to normal design."),f.set("maxOrganicThumbnailLinks",0),1===f.collections.length&&f.deactivateThumbnails()}if(a.length){var f=this,g=a.meta.min(),h=a.meta.max(),i=[],j=f.areThumbnailsGood(a,i);return j.length0&&this.ads.remove(this.ads.where({mobile:!1})),this.validateCollectionMin(),b.each(this.collections,this.augmentModels,this),this.threads&&this.get("maxOrganicThumbnailLinks")?this.validateThumbnails(this.threads):void 0},renderViews:function(){if(this.get("sponsoredCommentsEnabled")&&!this.get("topPlacementEnabled")&&this.renderTopPlacement(),!this.collections.length)throw new Error("Not enough data");this.renderMainViews(),this.get("trackAdVisibility")&&this.trackVisibility()},renderMainViews:function(){var a=document.getElementById(this.get("containerId"));if(!a)throw new Error("No container on the DOM");var d=this.mainView=new o.MainView({el:a,model:this});d.render();var e=this.get("sectionIds"),f=this.get("collectionTagName"),g=this.get("collectionClassName");this.views=b.map(this.collections,function(a,b){var d=!!this.get("max"+a.meta.name+"ThumbnailLinks"),h=new o.BaseCollectionView({model:this,collection:a,el:c("#"+e[b]+" "+f+"."+g),context:{thumbnailsEnabled:d}});return a.meta.view=h,h},this),this.get("maxPromotedThumbnailLinks")?d.$el.find("#"+this.get("innerContainerId")).addClass("doublethumbnails"):2===this.views.length&&d.$el.find("#"+this.get("innerContainerId")).addClass("doublesection"),b.invoke(this.views,"render")},canShowSponsoredComment:function(){return this.get("hasSpaceForSponsoredComment")&&this.get("sponsoredCommentsEnabled")},renderTopPlacement:function(){var a=document.getElementById(t),b=this.ads.getTopPlacementAd();if(a&&b){var c=new p({el:a,model:b,styleVariant:this.get("sponsoredCommentStyleVariant"),session:this.get("session"),userSuggestions:this.userSuggestions,visible:this.canShowSponsoredComment(),sourceForum:this.get("sourceForum"),sourceThread:this.get("sourceThread"),requestBin:this.get("requestBin"),injectScriptUrl:this.get("injectScriptUrl")});c.render(),this.listenTo(this,"change:hasSpaceForSponsoredComment",function(){c.setVisible(this.canShowSponsoredComment())})}},areThumbnailsViable:function(){return b.any(this.collections,function(a){return this.get("max"+a.meta.name+"ThumbnailLinks")},this)},evenColumns:function(){var a=this;if(!a.areThumbnailsViable())if(a.get("columnEveningEnabled")&&a.mainView.$el.width()>a.get("minWidthForColumnLayout")){var c=new o.TwoColumn({views:a.views,fudge:this.get("toleranceCoefficient")});c.render()}else{var d=b.min(b.pluck(a.collections,"length"));b.each(a.views,function(a){for(;a.collection.length>d;)a.collection.pop()})}},showData:function(){this.renderViews(),this.manageAdblock(),this.evenColumns(),this.set("display",!0)},manageAdblock:function(){var a=this.ads&&this.ads.meta.view;if(a&&m.looksAdblocked(a.el)){if(!(this.views.length>1))throw new Error("No organic results and promoted results appear to be blocked");this.mainView.remove({cloneContainer:!0}),this.ads.reset(null,{silent:!0}),this.validateCollections(),this.renderViews()}},onComplete:function(a){var b=m.log;return a&&b("It looks like there was a problem:",a),this.onCompleteCalled?b("Error: Final reporting function called more than once"):(this.onCompleteCalled=!0,void(this.get("promotedEnabled")&&this.report({event:"activity.load_advertisement",verb:"load"})))},report:function(a){b.isEmpty(a)||f.client.emit(b.extend(this.snapshot(),a))},reportIfVisible:function(){this.visibilityTracker&&this.visibilityTracker.isVisible()&&this.ads&&this.ads.length&&(this.stopListening(this.visibilityTracker),this.visibilityTracker=null,this.report({verb:"view"}))},majorVersion:function(){return this.get("promotedEnabled")?"midway":"metadata"},snapshot:function(){var a=this.threads,c=m.binToEventParams(this.get("requestBin")),d=this.get("session"),e=d&&d.isLoggedIn()?{userId:d.user.id}:{},f=b.extend({major_version:this.majorVersion(),internal_organic:a&&a.length,external_organic:0,promoted:0,display:this.get("display"),placement:this.get("containerId")===t?"top":"bottom",zone:"thread",area:"discovery",thread_id:this.get("sourceThread").id,forum_id:this.get("sourceForum").pk},e,c,this.getAdData());return f},getAdData:function(){if(!this.get("promotedEnabled"))return{object_type:"link"};var a=JSON.stringify(this.ads.pluck("advertisement_id")),b=this.mainView&&this.mainView.areThumbnailsEnabled();return{promoted:this.ads.length,promoted_ids:a,object_type:"advertisement",object_id:a,advertisement_id:a,ad_product_name:"sponsored_links",ad_product_layout:b?"thumbnails":"headlines"}}},{loggedinOverrides:{topPlacementEnabled:!1,promotedSide:"right"}}),r.init=function(a,c,d,e){var f=a.forum.get("settings"),g=m.generateVariantConfig(f,c,d); +if(g){var h=b.extend(g,e,{sourceThread:a.toJSON(),sourceForum:a.forum.toJSON(),sourceThreadUrl:a.currentUrl||document.referrer,discoverySettingsUrl:f.discoverySettingsUrl,sponsoredCommentsEnabled:f.sponsoredCommentsEnabled,organicEnabled:f.organicDiscoveryEnabled,topPlacementEnabled:g.topPlacementEnabled&&e.hasSpaceForSponsoredComment});if(d.preview){var i=document.createElement("a");i.href=h.sourceThreadUrl,h.previewQueryParam=i.search,h.preview=!0}var j=c.get("sponsoredCommentAdId")||d.sponsored_comment_id;j&&(h.sponsoredCommentsEnabled=!0,h.sponsoredCommentId=j);var k=c.get("discoveryRequestBin");k&&(h.requestBinOverride=k);var l=["lineTruncationEnabled","consoleLoggingEnabled"];m.config(b.defaults(b.pick(h,l),b.pick(r.DiscoveryApp.prototype.defaults,l)));var n=new r.DiscoveryApp(h);return n.run(),n}},r}),define("discovery.bundle",function(){}); \ No newline at end of file diff --git a/Examples/pandas/IntroductionToPandas_files/embed.js b/Examples/pandas/IntroductionToPandas_files/embed.js new file mode 100644 index 0000000..54498c0 --- /dev/null +++ b/Examples/pandas/IntroductionToPandas_files/embed.js @@ -0,0 +1,2 @@ +var DISQUS=function(a){"use strict";var b=a.DISQUS||{};return b.define=function(c,d){"function"==typeof c&&(d=c,c="");for(var e=c.split("."),f=e.shift(),g=b,h=(d||function(){return{}}).call({overwrites:function(a){return a.__overwrites__=!0,a}},a);f;)g=g[f]?g[f]:g[f]={},f=e.shift();for(var i in h)h.hasOwnProperty(i)&&(!h.__overwrites__&&null!==g[i]&&g.hasOwnProperty(i)?b.log&&b.log("Unsafe attempt to redefine existing module: "+i):g[i]=h[i]);return g},b.use=function(a){return b.define(a)},b.define("next"),b}(window);DISQUS.define(function(a,b){"use strict";var c=a.DISQUS,d=a.document,e=d.head||d.getElementsByTagName("head")[0]||d.body,f=0;c.getUid=function(a){var b=++f+"";return a?a+b:b},c.isOwn=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)},c.isString=function(a){return"[object String]"===Object.prototype.toString.call(a)},c.each=function(a,b){var d=a.length,e=Array.prototype.forEach;if(isNaN(d))for(var f in a)c.isOwn(a,f)&&b(a[f],f,a);else if(e)e.call(a,b);else for(var g=0;d>g;g++)b(a[g],g,a)},c.extend=function(a){return c.each(Array.prototype.slice.call(arguments,1),function(b){for(var c in b)a[c]=b[c]}),a},c.serializeArgs=function(a){var d=[];return c.each(a,function(a,c){a!==b&&d.push(c+(null!==a?"="+encodeURIComponent(a):""))}),d.join("&")},c.serialize=function(a,b,d){if(b&&(a+=a.indexOf("?")>-1?"&"===a.charAt(a.length-1)?"":"&":"?",a+=c.serializeArgs(b)),d){var e={};return e[(new Date).getTime()]=null,c.serialize(a,e)}var f=a.length;return"&"===a.charAt(f-1)?a.slice(0,f-1):a};var g,h,i=2e4;"addEventListener"in a?(g=function(a,b,c){a.addEventListener(b,c,!1)},h=function(a,b,c){a.removeEventListener(b,c,!1)}):(g=function(a,b,c){a.attachEvent("on"+b,c)},h=function(a,b,c){a.detachEvent("on"+b,c)}),c.require=function(b,f,j,k,l){function m(b){b=b||a.event,b.target||(b.target=b.srcElement),("load"===b.type||/^(complete|loaded)$/.test(b.target.readyState))&&(k&&k(),p&&clearTimeout(p),h(b.target,o,m))}var n=d.createElement("script"),o=n.addEventListener?"load":"readystatechange",p=null;return n.src=c.serialize(b,f,j),n.async=!0,n.charset="UTF-8",(k||l)&&g(n,o,m),l&&(p=setTimeout(function(){l()},i)),e.appendChild(n),c}}),DISQUS.define("next.host.urls",function(){"use strict";var a="default",b={lounge:"http://disqus.com/embed/comments/",onboard:"http://disqus.com/embed/onboard/",home:"https://disqus.com/home/".replace("home/","")},c=function(a,b){return/^http/.test(b)||(b="http:"),b+"//"+a.replace(/^\s*(\w+:)?\/\//,"")},d=function(d,e,f){var g=b[d];if(!g)throw new Error("Unknown app: "+d);var h=c(g,document.location.protocol),i=DISQUS.extend({base:a},e||{}),j=f?"#"+encodeURIComponent(JSON.stringify(f)):"";return DISQUS.serialize(h,i)+j};return{BASE:a,apps:b,get:d,ensureHttpBasedProtocol:c}}),DISQUS.define(function(a){"use strict";var b;return b=a.console?a.console.log.apply?function(){return a.console.log.apply(a.console,arguments)}:function(){return a.console.log(Array.prototype.slice.call(arguments,0).join(" "))}:function(){},{log:b}}),DISQUS.define("Events",function(){"use strict";var a=function(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),a=null,b)}},b=DISQUS.isOwn,c=Object.keys||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[];for(var d in a)b(a,d)&&(c[c.length]=d);return c},d=[].slice,e={on:function(a,b,c){if(!g(this,"on",a,[b,c])||!b)return this;this._events=this._events||{};var d=this._events[a]||(this._events[a]=[]);return d.push({callback:b,context:c,ctx:c||this}),this},once:function(b,c,d){if(!g(this,"once",b,[c,d])||!c)return this;var e=this,f=a(function(){e.off(b,f),c.apply(this,arguments)});return f._callback=c,this.on(b,f,d)},off:function(a,b,d){var e,f,h,i,j,k,l,m;if(!this._events||!g(this,"off",a,[b,d]))return this;if(!a&&!b&&!d)return this._events={},this;for(i=a?[a]:c(this._events),j=0,k=i.length;k>j;j++)if(a=i[j],h=this._events[a]){if(this._events[a]=e=[],b||d)for(l=0,m=h.length;m>l;l++)f=h[l],(b&&b!==f.callback&&b!==f.callback._callback||d&&d!==f.context)&&e.push(f);e.length||delete this._events[a]}return this},trigger:function(a){if(!this._events)return this;var b=d.call(arguments,1);if(!g(this,"trigger",a,b))return this;var c=this._events[a],e=this._events.all;return c&&h(c,b),e&&h(e,arguments),this},stopListening:function(a,b,c){var d=this._listeners;if(!d)return this;var e=!b&&!c;"object"==typeof b&&(c=this),a&&((d={})[a._listenerId]=a);for(var f in d)d[f].off(b,c,this),e&&delete this._listeners[f];return this}},f=/\s+/,g=function(a,b,c,d){if(!c)return!0;if("object"==typeof c){for(var e in c)a[b].apply(a,[e,c[e]].concat(d));return!1}if(f.test(c)){for(var g=c.split(f),h=0,i=g.length;i>h;h++)a[b].apply(a,[g[h]].concat(d));return!1}return!0},h=function(a,b){var c,d=-1,e=a.length,f=b[0],g=b[1],h=b[2];switch(b.length){case 0:for(;++d=k?(clearTimeout(f),f=null,h=j,g=a.apply(d,e)):f||(f=setTimeout(i,k+c)),g}},h.addEvent(a,"message",function(a){var b;try{b=e.parse(a.data)}catch(c){return}var g=b.sender,i=f(d,g)&&d[g];i&&h.getHost(a.origin)===i.host&&(a.origin!==i.origin&&(i.origin=a.origin),"host"===b.scope&&i.trigger(b.name,b.data))},!1),h.addEvent(a,"hashchange",function(){DISQUS.trigger("window.hashchange",{hash:a.location.hash})},!1),h.addEvent(a,"resize",h.throttle(function(){DISQUS.trigger("window.resize")},250,50),!1),h.addEvent(c,"mousemove",h.throttle(function(){DISQUS.trigger("window.mousemove")},250,50),!1);var i=function(){DISQUS.trigger("window.scroll")};h.addEvent(a,"scroll",h.throttle(i,250,50)),h.addEvent(c,"click",function(){DISQUS.trigger("window.click")});var j=h.WindowBase=function(a){a=a||{},this.state=j.INIT,this.uid=a.uid||DISQUS.getUid(),this.origin=a.origin,this.host=h.getHost(this.origin),this.target=a.target,this.window=null,d[this.uid]=this,this.on("ready",function(){this.state=j.READY},this),this.on("die",function(){this.state=j.KILLED},this)};DISQUS.extend(j,{INIT:0,READY:1,KILLED:2,postMessage:function(a,b,c){return a.postMessage(b,c)}}),DISQUS.extend(j.prototype,DISQUS.Events),j.prototype.sendMessage=function(a,b){var c=e.stringify({scope:"client",name:a,data:b}),d=function(a,b){return function(){var c=a.window;c?j.postMessage(c,b,a.origin):setTimeout(d,500)}}(this,c);this.isReady()?d():this.on("ready",d)},j.prototype.hide=function(){},j.prototype.show=function(){},j.prototype.url=function(){return this.target+"#"+this.uid},j.prototype.destroy=function(){this.state=j.KILLED,this.off()},j.prototype.isReady=function(){return this.state===j.READY},j.prototype.isKilled=function(){return this.state===j.KILLED};var k=h.Popup=function(a){j.call(this,a),this.windowName=a.windowName};DISQUS.extend(k.prototype,j.prototype),k.prototype.load=function(){this.window=a.open("",this.windowName||"_blank"),this.window.location=this.url()},k.prototype.isKilled=function(){return j.prototype.isKilled()||this.window.closed};var l=h.Iframe=function(a){j.call(this,a),this.styles=a.styles||{},this.tabIndex=a.tabIndex||0,this.title=a.title||"Disqus",this.container=a.container,this.elem=null};DISQUS.extend(l.prototype,j.prototype),l.prototype.load=function(){var a=this.elem=c.createElement("iframe");a.setAttribute("id","dsq-"+this.uid),a.setAttribute("data-disqus-uid",this.uid),a.setAttribute("allowTransparency","true"),a.setAttribute("frameBorder","0"),a.setAttribute("scrolling","no"),this.role&&a.setAttribute("role",this.role),a.setAttribute("tabindex",this.tabIndex),a.setAttribute("title",this.title),this.setInlineStyle(this.styles)},l.prototype.getOffset=function(a){return h.getOffset(this.elem,a)},l.prototype.setInlineStyle=function(a,b){var c={};DISQUS.isString(a)?c[a]=b:c=a;var d=this.elem.style;return"setProperty"in d?void DISQUS.each(c,function(a,b){d.setProperty(b,""+a,"important")}):this._setInlineStyleCompat(c)},l.prototype._setInlineStyleCompat=function(a){this._stylesCache=this._stylesCache||{},DISQUS.extend(this._stylesCache,a);var b=[];DISQUS.each(this._stylesCache,function(a,c){b.push(c+":"+a+" !important")}),this.elem.style.cssText=b.join(";")},l.prototype.removeInlineStyle=function(a){var b=this.elem.style;return"removeProperty"in b?void b.removeProperty(a):this._removeInlineStyleCompat(a)},l.prototype._removeInlineStyleCompat=function(a){this._stylesCache&&(delete this._stylesCache[a],this._setInlineStyleCompat({}))},l.prototype.hide=function(){this.setInlineStyle("display","none")},l.prototype.show=function(){this.removeInlineStyle("display")},l.prototype.destroy=function(){return this.elem&&this.elem.parentNode&&(this.elem.parentNode.removeChild(this.elem),this.elem=null),j.prototype.destroy.call(this)};var m=h.Channel=function(a){var b=this;b.window=null,l.call(b,a),b.styles=DISQUS.extend({width:"100%",border:"none",overflow:"hidden",height:"0"},a.styles||{})};DISQUS.extend(m.prototype,l.prototype),m.prototype.load=function(a){var c=this;l.prototype.load.call(c);var d=c.elem;d.setAttribute("width","100%"),d.setAttribute("src",this.url()),h.addEvent(d,"load",function(){c.window=d.contentWindow,a&&a()});var e=DISQUS.isString(this.container)?b(this.container):this.container;e.appendChild(d)},m.prototype.destroy=function(){return this.window=null,l.prototype.destroy.call(this)};var n=h.Sandbox=function(a){l.call(this,a),this.contents=a.contents||"",this.styles=DISQUS.extend({width:"100%",border:"none",overflow:"hidden"},a.styles||{})};return DISQUS.extend(n.prototype,l.prototype),n.prototype.load=function(){l.prototype.load.call(this);var a=this.elem,d=DISQUS.isString(this.container)?b(this.container):this.container;d.appendChild(a),this.window=a.contentWindow;try{this.window.document.open()}catch(e){a.src='javascript:var d=document.open();d.domain="'+c.domain+'";void(0);'}return this.document=this.window.document,this.document.write(this.contents),this.document.close(),this.updateHeight(),this},n.prototype.updateHeight=function(){var a,b=this.document.body;b&&(a=b.offsetHeight+"px",this.setInlineStyle({height:a,"min-height":a,"max-height":a}))},n.prototype.show=function(){this.setInlineStyle("display","block")},n.prototype.click=function(a){var b=this,c=b.document.body;h.addEvent(c,"click",function(c){a.call(b,c)})},n.prototype.setBodyClass=function(a){this.document.body.className=a},h.on=DISQUS.Events.on,h.off=DISQUS.Events.off,h.trigger=DISQUS.Events.trigger,h}),DISQUS.define("JSON",function(a){"use strict";var b,c=new DISQUS.Sandbox({container:"disqus_thread",styles:{display:"none"}});try{b=c.load().window.JSON}catch(d){}return b||(b=a.JSON),{stringify:b.stringify,parse:b.parse}}),DISQUS.define("next.host.utils",function(a,b){"use strict";function c(a){a=a.toLowerCase(),a=a.replace(/\s/,"");var b={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#00FFFF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blue:"#0000FF",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#FF00FF",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",green:"#008000",greenyellow:"#ADFF2F",grey:"#808080",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#00FF00",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",red:"#FF0000",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",white:"#FFFFFF",whitesmoke:"#F5F5F5",yellow:"#FFFF00",yellowgreen:"#9ACD32"};return b[a]||""}function d(a){if(!a||"embed.js"!==a.substring(a.length-8))return null;for(var b,c=[/(https?:)?\/\/(www\.)?disqus\.com\/forums\/([\w_\-]+)/i,/(https?:)?\/\/(www\.)?([\w_\-]+)\.disqus\.com/i,/(https?:)?\/\/(www\.)?dev\.disqus\.org\/forums\/([\w_\-]+)/i,/(https?:)?\/\/(www\.)?([\w_\-]+)\.dev\.disqus\.org/i],d=c.length,e=0;d>e;e++)if(b=a.match(c[e]),b&&b.length&&4===b.length)return b[3];return null}function e(a,b){var c,e,f,g=a.getElementsByTagName("script"),h=g.length;b=b||d;for(var i=h-1;i>=0;i--)if(c=g[i],e=c.getAttribute?c.getAttribute("src"):c.src,f=b(e),null!==f)return f.toLowerCase();return null}function f(a,b){for(var c=0,d=new Array(a.length),e=0;e<=a.length;e++){d[e]=new Array(b.length);for(var f=0;f<=b.length;f++)d[e][f]=0}for(var g=0;gc&&(c=d[g+1][h+1]));return c}function g(){for(var a=t.getElementsByTagName("h1"),c=t.title,d=c.length,e=c,g=.6,h=0;hg&&(g=h,e=i))}(a[h]);return e}function h(a,b,c){if(c=c||b,a===t)return"";var d=r(a,b,c);return"transparent"===d||""===d||"rgba(0, 0, 0, 0)"===d?h(a.parentNode,b,c):d||null}function i(a){a=j(a),"#"===a.charAt(0)&&(a=a.substr(1));var b=parseInt(a.substr(0,2),16),c=parseInt(a.substr(2,2),16),d=parseInt(a.substr(4,2),16),e=(299*b+587*c+114*d)/1e3;return e}function j(a){return a=a.replace(/^#?([a-f0-9])([a-f0-9])([a-f0-9])$/i,"#$1$1$2$2$3$3"),/^#?[a-f0-9]{6}$/.test(a)?a:k(a)||c(a)}function k(a){function b(a){return a=Number(a).toString(16),1===a.length?"0"+a:a}var c=/rgb\((\d+),\s*(\d+),\s*(\d+)\)/.exec(a);if(!c||4!==c.length)return"";var d=b(c[1]),e=b(c[2]),f=b(c[3]);return"#"+d+e+f}function l(a,b,c,d){DISQUS.isString(b)&&(b=t.createElement(b));var e=null;return b.style.visibility="hidden",a.appendChild(b),e=h(b,c,d),a.removeChild(b),e}function m(a){var b=t.createElement("a");return b.href=+new Date,l(a,b,"color")}function n(a){return a.toLowerCase().replace(/^\s+|\s+$/g,"").replace(/['"]/g,"")}function o(a){for(var b,c=l(a,"span","font-family","fontFamily"),d=c.split(","),e={courier:1,times:1,"times new roman":1,georgia:1,palatino:1,serif:1},f=0;f2?b[b.length-2]:"";return c.match(/^[0-9a-f]{32}$/i)&&c},x={isIE:function(){return!!t.documentMode},isSafari:function(){var a=navigator.userAgent.toLowerCase();return a.indexOf("safari")>-1&&-1===a.indexOf("chrome")}},y={getItem:function(c){try{return a.localStorage.getItem(c)}catch(d){return b}},setItem:function(b,c){try{return a.localStorage.setItem(b,c)}catch(d){return}}};return{MAX_Z_INDEX:2147483647,getShortnameFromUrl:d,getForum:e,guessThreadTitle:g,getContrastYIQ:i,ensureHexColor:j,getElementStyle:l,getAnchorColor:m,normalizeFontValue:n,isSerif:o,getBrowserSupport:p,logStat:q,getComputedStyle:r,pageVisibility:u,getScrollbarWidth:v,getLoaderVersionFromUrl:w,browser:x,storage:y}}),DISQUS.define("next.host.app",function(a){"use strict";var b=DISQUS.isOwn,c=DISQUS.extend,d=DISQUS.use("next.host"),e=d.urls,f=document,g=f.documentElement,h=f.location.protocol,i={getRegistry:function(){var a=this._registry;return a?a:this._registry={}},register:function(a){var b=this.getRegistry();b[a.uid]=a},unregister:function(a){var b=this.getRegistry();delete b[a.uid]},listByKey:function(){return this.getRegistry()},list:function(){var a=this.getRegistry(),c=[];for(var d in a)b(a,d)&&c.push(a[d]);return c},get:function(a){var c=this.getRegistry();return b(c,a)?c[a]:null}},j=function(a){var b=this.constructor;this.uid=DISQUS.getUid(),b.register&&b.register(this),this.settings=a||{};var c=[],d=this;do c.unshift(d),d=d.constructor.__super__;while(d);for(var e=0,f=c.length;f>e;e++)d=c[e],d.events&&this.on(d.events,this),d.onceEvents&&this.once(d.onceEvents,this)};c(j.prototype,DISQUS.Events),j.prototype.destroy=function(){var a=this.constructor;this.off(),this.stopListening(),a.unregister&&a.unregister(this)},j.extend=function(a,d){var e,f=this;e=a&&b(a,"constructor")?a.constructor:function(){return f.apply(this,arguments)},c(e,f,d);var g=function(){this.constructor=e};return g.prototype=f.prototype,e.prototype=new g,a&&c(e.prototype,a),e.__super__=f.prototype,e};var k=j.extend({name:null,loaderVersion:null,frame:null,origin:e.ensureHttpBasedProtocol("http://disqus.com",h),state:null,getUrl:function(a,b){return a=this.loaderVersion?DISQUS.extend({version:this.loaderVersion},a):DISQUS.extend({disqus_version:"f7574a91"},a),e.ensureHttpBasedProtocol(e.get(this.name,a,b),h)},getFrame:function(){var a,b=this.settings,c={target:this.getUrl(),origin:this.origin,uid:this.uid};return b.windowName?c.windowName=b.windowName:c.container=this.settings.container||f.body,this.getFrameSettings&&(c=this.getFrameSettings(c)),new(a=c.windowName?DISQUS.Popup:DISQUS.Channel)(c)},setState:function(a){var b=this.constructor;return a in b.states?(this.state=b.states[a],void this.trigger("state:"+a)):!1},init:function(){var a,b=this;b.frame=a=this.getFrame(),b.listenTo(a,"all",function(c,d){b.trigger("frame:"+c,d,a)}),b.trigger("change:frame",a),b.frame.load(function(){b.setState("LOADED")}),b.setState("INIT")},destroy:function(){var a=this.frame;a&&(this.stopListening(a),a.destroy()),this.setState("KILLED"),this.frame=null,j.prototype.destroy.call(this)},events:{"frame:ready":function(){this.setState("READY")}}},{states:{INIT:0,LOADED:1,READY:2,RUNNING:3,KILLED:4}});c(k,i);var l=k.extend({getUrl:function(){var b=this.settings,c={f:b.forum,t_i:b.identifier,t_u:b.url||a.location.href,t_s:b.slug,t_e:b.title,t_d:b.documentTitle,t_t:b.title||b.documentTitle,t_c:b.category,s_o:b.sortOrder,l:b.language};return b.unsupported&&(c.n_s=b.unsupported),k.prototype.getUrl.call(this,c)},getFrameInitParams:function(b,c){var d=this.settings,e={permalink:d.permalink,anchorColor:d.anchorColor,referrer:a.location.href,hostReferrer:f.referrer,colorScheme:d.colorScheme,typeface:d.typeface,remoteAuthS3:d.remoteAuthS3,apiKey:d.apiKey,sso:d.sso,parentWindowHash:a.location.hash,forceAutoStyles:d.forceAutoStyles,layout:d.layout,timestamp:this.timestamp};return c&&c.elem&&a.navigator.userAgent.match(/(iPad|iPhone|iPod)/)&&(e.width=c.elem.offsetWidth),e.initialPosition=this.getViewportAndScrollStatus(),e},listenToScrollEvent:function(a){var b=this,c=b.getScrollContainer();if(c===g)return b.listenTo(DISQUS,"window.scroll",a),function(){b.stopListening(DISQUS,"window.scroll",a)};var d=DISQUS.throttle(function(){a.call(b)},250,50);return DISQUS.addEvent(c,"scroll",d),function(){DISQUS.removeEvent(c,"scroll",d)}},getScrollContainer:function(){if(this.scrollContainer)return this.scrollContainer;if(!this.settings.enableScrollContainer)return g;var a=this.settings.container;do{var b=d.utils.getComputedStyle(a,"overflow-y","overflowY");if(("scroll"===b||"auto"===b)&&a.clientHeight=c&&(h=d>=e,i=h&&g>=c);var j=this.frame;j.sendMessage("window.scroll.always",a),h&&j.sendMessage("window.scroll",a),i!==this.wasInViewport&&(j.sendMessage(i?"window.inViewport":"window.scrollOffViewport"),this.wasInViewport=i)}},getBestNextFrameHeight:function(a){var b=this.getViewportAndScrollStatus();if(!b||this.settings.enableScrollContainer||!this.getScrollContainer())return a;var c=b.frameOffset;if(a>=c.height)return a;var d=this.getDocumentHeight(),e=d-(c.height+c.top),f=b.pageOffset+b.height-(c.top+e);return f>a?f+1:a},events:{"state:INIT":function(){this.settings.unsupported||(this.settings.windowName||(this.listenToScrollEvent(this.communicateViewportAndScrollStatus),this.listenTo(DISQUS,"window.resize",this.communicateViewportAndScrollStatus)),this.timestamp=+new Date)},"state:LOADED":function(){var a=this.frame,b=a.elem;this.settings.unsupported?(a.setInlineStyle("height","500px"),b.setAttribute("scrolling","yes"),b.setAttribute("horizontalscrolling","no"),b.setAttribute("verticalscrolling","yes"),a.show()):this.settings.windowName||(this.rendered=!1,a.setInlineStyle("height","0"),b.setAttribute("scrolling","no"),b.setAttribute("horizontalscrolling","no"),b.setAttribute("verticalscrolling","no"))},"frame:ready":function(a,b){var c=this.getFrameInitParams(a,b);b.sendMessage("init",c)},"frame:resize":function(a,b){var c=a.height;b.elem&&this.rendered&&(c=this.getBestNextFrameHeight(c),b.setInlineStyle("height",c+"px"),b.sendMessage("embed.resized")),this.communicateViewportAndScrollStatus()},"frame:rendered":function(a,b){this.rendered=!0,this.wasInViewport=!1,b.trigger("resize",a),b.sendMessage("embed.rendered")},"frame:fail":function(a,b){b.elem&&b.setInlineStyle("height",a&&a.height||"75px")},"frame:scrollTo":function(b,c){if(c.elem&&c.getOffset){var d=this.getScrollContainer(),e=c.getOffset(d),f="window"===b.relative?b.top:e.top+b.top,h=this.getViewportCoords();!b.force&&f>h.top&&f0&&c<=a.height},showSlowLoadingMessage:function(){var a,b=this;if(b.loadingElem){if(d.pageVisibility.isHidden())return a=function(){d.pageVisibility.stopListening(a),b.setSlowLoadingMessageTimer(2e3)},void d.pageVisibility.listen(a);b.triggeredSlowEvent=!0,d.logStat(b.state===b.constructor.states.READY?"slow_embed.got_ready":b.state===b.constructor.states.LOADED?"slow_embed.loaded":"slow_embed.no_ready"),b.loadingElem.firstChild.insertAdjacentHTML("afterend",'

      Disqus seems to be taking longer than usual. Reload?

      ')}},clearSlowLoadingMessageTimer:function(){this.timeout&&(clearTimeout(this.timeout),this.timeout=null)},setSlowLoadingMessageTimer:function(a){var b=this;b.clearSlowLoadingMessageTimer(),b.timeout=setTimeout(function(){b.showSlowLoadingMessage()},a)},addLoadingAnimOnContainerVisible:function(){var a,b=this;a=b.listenToScrollEvent(function(){var c=b.isContainerVisible();(c||b.state>=b.constructor.states.RUNNING)&&a(),c&&b.addLoadingAnim()})},addLoadingAnim:function(){var a,c,e,f=this,g=f.settings.container;if(f.loadingElem)return f.loadingElem;if(!(f.state>=f.constructor.states.RUNNING)){var h=b.createElement("link");h.rel="stylesheet",h.href="//a.disquscdn.com/next/embed/styles/loading.aaa873ed4a78106f29994d34d7eabec1.css",(b.head||b.getElementsByTagName("head")[0]).appendChild(h),a=b.createElement("div"),c=b.createElement("div"),e=b.createElement("div"),c.appendChild(e),a.appendChild(c),a.dir="ltr",a.style.overflow="hidden";var i="dark"===f.settings.colorScheme;c.className="disqus-loader-bubble";var j=c.style;j.height="52px",j.width="54px",j.margin="0 auto",j.overflow="hidden",j.position="relative",i&&(j.backgroundPosition="0 -52px");var k=13,l=i?"rgba(223, 228, 237, .4)":"rgba(51, 54, 58, .4)",m=i?"#6D6F72":"#A3A7AD",n=e.style;return j.boxSizing=n.boxSizing="border-box",n.height=n.width=2*k+"px",n.position="absolute",n.top="13px",n.left="15px","borderRadius"in n?(n.borderWidth="3px",n.borderStyle="solid",n.borderColor=l+" transparent",n.borderRadius=k+"px",n.transformOrigin="50% 50% 0px",e.className="disqus-loader-spinner"):n.borderLeft="3px solid "+m,g.appendChild(a),f.loadingElem=a,d.logStat("lounge.loading.view"),f.setSlowLoadingMessageTimer(15e3),f.loadingElem}},removeLoadingAnim:function(){var a=this.loadingElem,b=this.settings.container;this.clearSlowLoadingMessageTimer(),a&&a.parentNode===b&&(b.removeChild(a),this.loadingElem=null)},destroy:function(){var a=this.indicators;this.removeLoadingAnim(),a&&a.north&&(a.north.destroy(),a.north=null),a&&a.south&&(a.south.destroy(),a.south=null),e.prototype.destroy.call(this)}},{LEGACY_EVENTS_MAPPING:{onReady:"frame:rendered",onNewComment:"posts.create",onPaginate:"posts.paginate",onCommentCountChange:"posts.count",onIdentify:"session.identify"}}),g=function(a){return new f(a)};return c.app.expose(f,["list","listByKey","get"],g),{Lounge:g}}),DISQUS.define("next.host.config",function(a,b){"use strict";var c=DISQUS.use("next.host.utils"),d=function(a,c){this.win=a,this.configurator=c,this.config={page:{url:b,title:b,slug:b,category_id:b,identifier:b,language:b,api_key:b,remote_auth_s3:b,author_s3:b},experiment:{enable_scroll_container:!0,force_auto_styles:b,sort_order:b},discovery:{disable_all:b,disable_promoted:b,sponsored_comment_id:b,preview:!1},strings:b,sso:{},callbacks:{preData:[],preInit:[],onInit:[],afterRender:[],onReady:[],onNewComment:[],preReset:[],onPaginate:[],onIdentify:[],beforeComment:[]}}};d.DISQUS_GLOBALS=["shortname","identifier","url","title","category_id","slug"];var e=d.prototype;return e.getContainer=function(){var a=this.win;return a.document.getElementById(a.disqus_container_id||"disqus_thread")},e.runConfigurator=function(){var a=this.configurator||this.win.disqus_config;if("function"==typeof a)try{a.call(this.config)}catch(b){}},e.getValuesFromGlobals=function(){var a,b=this.win,e=this.config,f=e.page;DISQUS.each(d.DISQUS_GLOBALS,function(a){var c=b["disqus_"+a];"undefined"!=typeof c&&(f[a]=c)}),this.runConfigurator(),e.forum||(a=f.shortname,e.forum=a?a.toLowerCase():c.getForum(b.document))},e.toJSON=function(){var a=this.win,b=this.config,d=b.page,e=this.getContainer();return this.getValuesFromGlobals(),{container:e,forum:b.forum,sortOrder:b.experiment.sort_order||c.storage.getItem("disqus.sort")||"default",language:b.language,typeface:c.isSerif(e)?"serif":"sans-serif",anchorColor:c.getAnchorColor(e),colorScheme:128a[y]("/")[0][q](":")&&(a=k+f[2][B](0,f[2].lastIndexOf("/"))+"/"+a):a=k+f[2]+(a||Be);d.href=a;e=c(d);return{protocol:(d[A]||"")[D](),host:e[0], +port:e[1],path:e[2],Oa:d[va]||"",url:a||""}}function Na(a,b){function c(b,c){a.contains(b)||a.set(b,[]);a.get(b)[n](c)}for(var d=Da(b)[y]("&"),e=0;ef?c(d[e],"1"):c(d[e][B](0,f),d[e][B](f+1))}}function Pa(a,b){if(F(a)||"["==a[ma](0)&&"]"==a[ma](a[w]-1))return"-";var c=J.domain;return a[q](c+(b&&"/"!=b?b:""))==(0==a[q]("http://")?7:0==a[q]("https://")?8:0)?"0":a};var Qa=0;function Ra(a,b,c){1<=Qa||1<=100*m.random()||ld()||(a=["utmt=error","utmerr="+a,"utmwv=5.6.4","utmn="+Ea(),"utmsp=1"],b&&a[n]("api="+b),c&&a[n]("msg="+G(c[B](0,100))),M.w&&a[n]("aip=1"),Sa(a[C]("&")),Qa++)};var Ta=0,Ua={};function N(a){return Va("x"+Ta++,a)}function Va(a,b){Ua[a]=!!b;return a} +var Wa=N(),Xa=Va("anonymizeIp"),Ya=N(),$a=N(),ab=N(),bb=N(),O=N(),P=N(),cb=N(),db=N(),eb=N(),fb=N(),gb=N(),hb=N(),ib=N(),jb=N(),kb=N(),lb=N(),nb=N(),ob=N(),pb=N(),qb=N(),rb=N(),sb=N(),tb=N(),ub=N(),vb=N(),wb=N(),xb=N(),yb=N(),zb=N(),Ab=N(),Bb=N(),Cb=N(),Db=N(),Eb=N(),Fb=N(!0),Gb=Va("currencyCode"),Hb=Va("page"),Ib=Va("title"),Jb=N(),Kb=N(),Lb=N(),Mb=N(),Nb=N(),Ob=N(),Pb=N(),Qb=N(),Rb=N(),Q=N(!0),Sb=N(!0),Tb=N(!0),Ub=N(!0),Vb=N(!0),Wb=N(!0),Zb=N(!0),$b=N(!0),ac=N(!0),bc=N(!0),cc=N(!0),R=N(!0),dc=N(!0), +ec=N(!0),fc=N(!0),gc=N(!0),hc=N(!0),ic=N(!0),jc=N(!0),S=N(!0),kc=N(!0),lc=N(!0),mc=N(!0),nc=N(!0),oc=N(!0),pc=N(!0),qc=N(!0),rc=Va("campaignParams"),sc=N(),tc=Va("hitCallback"),uc=N();N();var vc=N(),wc=N(),xc=N(),yc=N(),zc=N(),Ac=N(),Bc=N(),Cc=N(),Dc=N(),Ec=N(),Fc=N(),Gc=N(),Hc=N(),Ic=N();N();var Mc=N(),Nc=N(),Yb=N(),Jc=N(),Kc=N(),Lc=Va("utmtCookieName"),Cd=Va("displayFeatures"),Oc=N(),of=Va("gtmid"),Oe=Va("uaName"),Pe=Va("uaDomain"),Qe=Va("uaPath"),pf=Va("linkid");var Re=function(){function a(a,c,d){T(qf[x],a,c,d)}a("_createTracker",qf[x].r,55);a("_getTracker",qf[x].oa,0);a("_getTrackerByName",qf[x].u,51);a("_getTrackers",qf[x].pa,130);a("_anonymizeIp",qf[x].aa,16);a("_forceSSL",qf[x].la,125);a("_getPlugin",Pc,120)},Se=function(){function a(a,c,d){T(U[x],a,c,d)}Qc("_getName",$a,58);Qc("_getAccount",Wa,64);Qc("_visitCode",Q,54);Qc("_getClientInfo",ib,53,1);Qc("_getDetectTitle",lb,56,1);Qc("_getDetectFlash",jb,65,1);Qc("_getLocalGifPath",wb,57);Qc("_getServiceMode", +xb,59);V("_setClientInfo",ib,66,2);V("_setAccount",Wa,3);V("_setNamespace",Ya,48);V("_setAllowLinker",fb,11,2);V("_setDetectFlash",jb,61,2);V("_setDetectTitle",lb,62,2);V("_setLocalGifPath",wb,46,0);V("_setLocalServerMode",xb,92,void 0,0);V("_setRemoteServerMode",xb,63,void 0,1);V("_setLocalRemoteServerMode",xb,47,void 0,2);V("_setSampleRate",vb,45,1);V("_setCampaignTrack",kb,36,2);V("_setAllowAnchor",gb,7,2);V("_setCampNameKey",ob,41);V("_setCampContentKey",tb,38);V("_setCampIdKey",nb,39);V("_setCampMediumKey", +rb,40);V("_setCampNOKey",ub,42);V("_setCampSourceKey",qb,43);V("_setCampTermKey",sb,44);V("_setCampCIdKey",pb,37);V("_setCookiePath",P,9,0);V("_setMaxCustomVariables",yb,0,1);V("_setVisitorCookieTimeout",cb,28,1);V("_setSessionCookieTimeout",db,26,1);V("_setCampaignCookieTimeout",eb,29,1);V("_setReferrerOverride",Jb,49);V("_setSiteSpeedSampleRate",Dc,132);a("_trackPageview",U[x].Fa,1);a("_trackEvent",U[x].F,4);a("_trackPageLoadTime",U[x].Ea,100);a("_trackSocial",U[x].Ga,104);a("_trackTrans",U[x].Ia, +18);a("_sendXEvent",U[x].t,78);a("_createEventTracker",U[x].ia,74);a("_getVersion",U[x].qa,60);a("_setDomainName",U[x].B,6);a("_setAllowHash",U[x].va,8);a("_getLinkerUrl",U[x].na,52);a("_link",U[x].link,101);a("_linkByPost",U[x].ua,102);a("_setTrans",U[x].za,20);a("_addTrans",U[x].$,21);a("_addItem",U[x].Y,19);a("_clearTrans",U[x].ea,105);a("_setTransactionDelim",U[x].Aa,82);a("_setCustomVar",U[x].wa,10);a("_deleteCustomVar",U[x].ka,35);a("_getVisitorCustomVar",U[x].ra,50);a("_setXKey",U[x].Ca,83); +a("_setXValue",U[x].Da,84);a("_getXKey",U[x].sa,76);a("_getXValue",U[x].ta,77);a("_clearXKey",U[x].fa,72);a("_clearXValue",U[x].ga,73);a("_createXObj",U[x].ja,75);a("_addIgnoredOrganic",U[x].W,15);a("_clearIgnoredOrganic",U[x].ba,97);a("_addIgnoredRef",U[x].X,31);a("_clearIgnoredRef",U[x].ca,32);a("_addOrganic",U[x].Z,14);a("_clearOrganic",U[x].da,70);a("_cookiePathCopy",U[x].ha,30);a("_get",U[x].ma,106);a("_set",U[x].xa,107);a("_addEventListener",U[x].addEventListener,108);a("_removeEventListener", +U[x].removeEventListener,109);a("_addDevId",U[x].V);a("_getPlugin",Pc,122);a("_setPageGroup",U[x].ya,126);a("_trackTiming",U[x].Ha,124);a("_initData",U[x].v,2);a("_setVar",U[x].Ba,22);V("_setSessionTimeout",db,27,3);V("_setCookieTimeout",eb,25,3);V("_setCookiePersistence",cb,24,1);a("_setAutoTrackOutbound",Fa,79);a("_setTrackOutboundSubdomains",Fa,81);a("_setHrefExamineLimit",Fa,80)};function Pc(a){var b=this.plugins_;if(b)return b.get(a)} +var T=function(a,b,c,d){a[b]=function(){try{return void 0!=d&&H(d),c[ya](this,arguments)}catch(a){throw Ra("exc",b,a&&a[r]),a;}}},Qc=function(a,b,c,d){U[x][a]=function(){try{return H(c),Aa(this.a.get(b),d)}catch(e){throw Ra("exc",a,e&&e[r]),e;}}},V=function(a,b,c,d,e){U[x][a]=function(f){try{H(c),void 0==e?this.a.set(b,Aa(f,d)):this.a.set(b,e)}catch(Be){throw Ra("exc",a,Be&&Be[r]),Be;}}},Te=function(a,b){return{type:b,target:a,stopPropagation:function(){throw"aborted";}}};var Rc=new RegExp(/(^|\.)doubleclick\.net$/i),Sc=function(a,b){return Rc[ia](J[z].hostname)?!0:"/"!==b?!1:0!=a[q]("www.google.")&&0!=a[q](".google.")&&0!=a[q]("google.")||-1b[w]||ad(b[0],c))return!1;b=b[ja](1)[C](".")[y]("|");0=b[w])return!0; +b=b[1][y](-1==b[1][q](",")?"^":",");for(c=0;cb[w]||ad(b[0],c))return a.set(ec,void 0),a.set(fc,void 0),a.set(gc,void 0),a.set(ic,void 0),a.set(jc,void 0),a.set(nc,void 0),a.set(oc,void 0),a.set(pc,void 0),a.set(qc,void 0),a.set(S,void 0),a.set(kc,void 0),a.set(lc,void 0),a.set(mc,void 0),!1;a.set(ec,1*b[1]);a.set(fc,1*b[2]);a.set(gc,1*b[3]);Ve(a,b[ja](4)[C]("."));return!0},Ve=function(a,b){function c(a){return(a=b[oa](a+"=(.*?)(?:\\|utm|$)"))&& +2==a[w]?a[1]:void 0}function d(b,c){c?(c=e?I(c):c[y]("%20")[C](" "),a.set(b,c)):a.set(b,void 0)}-1==b[q]("=")&&(b=I(b));var e="2"==c("utmcvr");d(ic,c("utmcid"));d(jc,c("utmccn"));d(nc,c("utmcsr"));d(oc,c("utmcmd"));d(pc,c("utmctr"));d(qc,c("utmcct"));d(S,c("utmgclid"));d(kc,c("utmgclsrc"));d(lc,c("utmdclid"));d(mc,c("utmdsid"))},ad=function(a,b){return b?a!=b:!/^\d+$/[ia](a)};var Uc=function(){this.filters=[]};Uc[x].add=function(a,b){this.filters[n]({name:a,s:b})};Uc[x].cb=function(a){try{for(var b=0;b=100*a.get(vb)&&a[ta]()}function kd(a){ld(a.get(Wa))&&a[ta]()}function md(a){"file:"==J[z][A]&&a[ta]()}function Ge(a){He()&&a[ta]()}function nd(a){a.get(Ib)||a.set(Ib,J.title,!0);a.get(Hb)||a.set(Hb,J[z].pathname+J[z][va],!0)} +function lf(a){a.get(Wa)&&"UA-XXXXX-X"!=a.get(Wa)||a[ta]()};var od=new function(){var a=[];this.set=function(b){a[b]=!0};this.encode=function(){for(var b=[],c=0;c=b[0]||0>=b[1]?"":b[C]("x");a.Wa=d}catch(k){H(135)}qd=a}},td=function(){sd();for(var a= +qd,b=W[za],a=b.appName+b.version+a.language+b.platform+b.userAgent+a.javaEnabled+a.Q+a.P+(J.cookie?J.cookie:"")+(J.referrer?J.referrer:""),b=a[w],c=W.history[w];0d?(this.i=b[B](0,d),this.l=b[B](d+1,c),this.h=b[B](c+1)):(this.i=b[B](0,d),this.h=b[B](d+1));this.k=a[ja](1);this.Ma=!this.l&&"_require"==this.h;this.J=!this.i&&!this.l&&"_provide"==this.h}},Y=function(){T(Y[x],"push",Y[x][n],5);T(Y[x],"_getPlugin",Pc,121);T(Y[x], +"_createAsyncTracker",Y[x].Sa,33);T(Y[x],"_getAsyncTracker",Y[x].Ta,34);this.I=new nf;this.p=[]};E=Y[x];E.Na=function(a,b,c){var d=this.I.get(a);if(!Ba(d))return!1;b.plugins_=b.plugins_||new nf;b.plugins_.set(a,new d(b,c||{}));return!0};E.push=function(a){var b=Z.Va[ya](this,arguments),b=Z.p.concat(b);for(Z.p=[];0e?b+"#"+d:b+"&"+d;c="";f=b[q]("?");0f?b+"?"+d+c:b+"&"+d+c},$d=function(a,b,c,d){for(var e=0;3>e;e++){for(var f=0;3>f;f++){if(d==Yc(a+b+c))return H(127),[b,c]; +var Be=b[p](/ /g,"%20"),k=c[p](/ /g,"%20");if(d==Yc(a+Be+k))return H(128),[Be,k];Be=Be[p](/\+/g,"%20");k=k[p](/\+/g,"%20");if(d==Yc(a+Be+k))return H(129),[Be,k];try{var Ja=b[oa]("utmctr=(.*?)(?:\\|utm|$)");if(Ja&&2==Ja[w]&&(Be=b[p](Ja[1],G(I(Ja[1]))),d==Yc(a+Be+c)))return H(139),[Be,c]}catch(t){}b=I(b)}c=I(c)}};var de="|",fe=function(a,b,c,d,e,f,Be,k,Ja){var t=ee(a,b);t||(t={},a.get(Cb)[n](t));t.id_=b;t.affiliation_=c;t.total_=d;t.tax_=e;t.shipping_=f;t.city_=Be;t.state_=k;t.country_=Ja;t.items_=t.items_||[];return t},ge=function(a,b,c,d,e,f,Be){a=ee(a,b)||fe(a,b,"",0,0,0,"","","");var k;a:{if(a&&a.items_){k=a.items_;for(var Ja=0;Jab[w]||!/^\d+$/[ia](b[0])||(b[0]=""+c,Fd(a,"__utmx",b[C]("."),void 0))},be=function(a,b){var c=$c(a.get(O),pd("__utmx"));"-"==c&&(c="");return b?G(c):c},Ye=function(a){try{var b=La(J[z][xa],!1),c=ea(L(b.d.get("utm_referrer")))||"";c&&a.set(Jb,c);var d=ea(K(b.d.get("utm_expid")))||"";d&&(d=d[y](".")[0],a.set(Oc,""+d))}catch(e){H(146)}},l=function(a){var b=W.gaData&&W.gaData.expId;b&&a.set(Oc,""+b)};var ke=function(a,b){var c=m.min(a.b(Dc,0),100);if(a.b(Q,0)%100>=c)return!1;c=Ze()||$e();if(void 0==c)return!1;var d=c[0];if(void 0==d||d==ba||da(d))return!1;0a[b])return!1;return!0},le=function(a){return da(a)|| +0>a?0:5E3>a?10*m[la](a/10):5E4>a?100*m[la](a/100):41E5>a?1E3*m[la](a/1E3):41E5},je=function(a){for(var b=new yd,c=0;cc[w])){for(var d=[],e=0;e=f)return!1;c=1*(""+c);if(""==a||!wd(a)||""==b||!wd(b)||!xd(c)||da(c)||0>c||0>f||100=a||a>e.get(yb))a=!1;else if(!b||!c||128=a&&Ca(b)&&""!=b){var c=this.get(Fc)||[];c[a]=b;this.set(Fc,c)}};E.V=function(a){a=""+a;if(a[oa](/^[A-Za-z0-9]{1,5}$/)){var b=this.get(Ic)||[];b[n](a);this.set(Ic,b)}};E.v=function(){this.a[ka]()};E.Ba=function(a){a&&""!=a&&(this.set(Tb,a),this.a.j("var"))};var ne=function(a){"trans"!==a.get(sc)&&500<=a.b(cc,0)&&a[ta]();if("event"===a.get(sc)){var b=(new Date)[g](),c=a.b(dc,0),d=a.b(Zb,0),c=m[la]((b-(c!=d?c:1E3*c))/1E3*1);0=a.b(R,0)&&a[ta]()}},pe=function(a){"event"===a.get(sc)&&a.set(R,m.max(0,a.b(R,10)-1))};var qe=function(){var a=[];this.add=function(b,c,d){d&&(c=G(""+c));a[n](b+"="+c)};this.toString=function(){return a[C]("&")}},re=function(a,b){(b||2!=a.get(xb))&&a.Za(cc)},se=function(a,b){b.add("utmwv","5.6.4");b.add("utms",a.get(cc));b.add("utmn",Ea());var c=J[z].hostname;F(c)||b.add("utmhn",c,!0);c=a.get(vb);100!=c&&b.add("utmsp",c,!0)},te=function(a,b){b.add("utmht",(new Date)[g]());b.add("utmac",Da(a.get(Wa)));a.get(Oc)&&b.add("utmxkey",a.get(Oc),!0);a.get(vc)&&b.add("utmni",1);a.get(of)&&b.add("utmgtm", +a.get(of),!0);var c=a.get(Ic);c&&0=a[w])gf(a,b,c);else if(8192>=a[w]){if(0<=W[za].userAgent[q]("Firefox")&&![].reduce)throw new De(a[w]);df(a,b)||ef(a,b)||Ee(a,b)||b()}else throw new Ce(a[w]);},gf=function(a,b,c){c=c||Ne()+"/__utm.gif?";var d=new Image(1,1);d.src=c+ +a;Ie(d,function(){Ie(d,null);Je(d,null);b()});Je(d,function(){Ie(d,null);Je(d,null);b()})},ef=function(a,b){if(0!=Ne()[q](J[z][A]))return!1;var c;c=W.XDomainRequest;if(!c)return!1;c=new c;c.open("POST",Ne()+"/p/__utm.gif");Je(c,function(){b()});Ie(c,b);c.send(a);return!0},df=function(a,b){var c=W.XMLHttpRequest;if(!c)return!1;var d=new c;if(!("withCredentials"in d))return!1;d.open("POST",Ne()+"/p/__utm.gif",!0);d.withCredentials=!0;d.setRequestHeader("Content-Type","text/plain");d.onreadystatechange= +function(){4==d.readyState&&(b(),d=null)};d.send(a);return!0},Ee=function(a,b){if(!J.body)return We(function(){Ee(a,b)},100),!0;a=aa(a);try{var c=J[qa]('')}catch(d){c=J[qa]("iframe"),ha(c,a)}c.height="0";c.width="0";c.style.display="none";c.style.visibility="hidden";var e=Ne()+"/u/post_iframe.html";Ga(W,"beforeunload",function(){c.src="";c.parentNode&&c.parentNode.removeChild(c)});ca(b,1E3);J.body.appendChild(c);c.src=e;return!0};var qf=function(){this.G=this.w=!1;0==Ea()%1E4&&(H(142),this.G=!0);this.C={};this.D=[];this.U=0;this.S=[["www.google-analytics.com","","/plugins/"]];this._gasoCPath=this._gasoDomain=this.bb=void 0;Re();Se()};E=qf[x];E.oa=function(a,b){return this.r(a,void 0,b)};E.r=function(a,b,c){b&&H(23);c&&H(67);void 0==b&&(b="~"+M.U++);a=new U(b,a,c);M.C[b]=a;M.D[n](a);return a};E.u=function(a){a=a||"";return M.C[a]||M.r(void 0,a)};E.pa=function(){return M.D[ja](0)};E.ab=function(){return M.D[w]}; +E.aa=function(){this.w=!0};E.la=function(){this.G=!0};var Fe=function(a){if("prerender"==J.visibilityState)return!1;a();return!0};var M=new qf;var Ha=W._gat;Ha&&Ba(Ha._getTracker)?M=Ha:W._gat=M;var Z=new Y;(function(a){if(!Fe(a)){H(123);var b=!1,c=function(){if(!b&&Fe(a)){b=!0;var d=J,e=c;d.removeEventListener?d.removeEventListener("visibilitychange",e,!1):d.detachEvent&&d.detachEvent("onvisibilitychange",e)}};Ga(J,"visibilitychange",c)}})(function(){var a=W._gaq,b=!1;if(a&&Ba(a[n])&&(b="[object Array]"==Object[x][v].call(Object(a)),!b)){Z=a;return}W._gaq=Z;b&&Z[n][ya](Z,a)});function Yc(a){var b=1,c=0,d;if(a)for(b=0,d=a[w]-1;0<=d;d--)c=a.charCodeAt(d),b=(b<<6&268435455)+c+(c<<14),c=b&266338304,b=0!=c?b^c>>21:b;return b};})(); diff --git a/Examples/pandas/IntroductionToPandas_files/lounge.bundle.04998cf95d03a1f4b8b137eaf58a9cad.js b/Examples/pandas/IntroductionToPandas_files/lounge.bundle.04998cf95d03a1f4b8b137eaf58a9cad.js new file mode 100644 index 0000000..63bfe0a --- /dev/null +++ b/Examples/pandas/IntroductionToPandas_files/lounge.bundle.04998cf95d03a1f4b8b137eaf58a9cad.js @@ -0,0 +1,8 @@ +define("stance/utils",["underscore","exports"],function(a,b){"use strict";b.getElement=function(b){return a.isElement(b)?b:b&&b.el},b.EL_ID_ATTR="data-visibility-id",b.OBJ_ID_PROP="_visibility_id",b.getId=function(c){var d=null;return a.isElement(c)?(d=c.getAttribute(b.EL_ID_ATTR)||null,d||(d=a.uniqueId(),c.setAttribute(b.EL_ID_ATTR,d))):c&&(d=c[b.OBJ_ID_PROP]||null,d||(d=c[b.OBJ_ID_PROP]=a.uniqueId())),d}}),define("stance/tracking",["underscore","jquery","./utils","exports"],function(a,b,c,d){"use strict";d.events=[],d.lastPos=null,d.clearCache=function(a){if(void 0!==a){var b=c.getId(a);b&&(d.getElementOffset.cache[b]=null)}else d.getElementOffset.cache={}},d.calculateOffset=function(a){var c=b(a).filter(":visible").offset();return c?{top:c.top,height:b(a).height()}:null},d._getElementOffset=function(b){var e=c.getElement(b);if(!e)return null;var f=d.calculateOffset(e);return f?{visibleTop:f.top+(a.result(b,"topEdgeOffset")||0),visibleBottom:f.top+f.height-(a.result(b,"bottomEdgeOffset")||0),offsetTop:f.top,height:f.height}:null},d.getElementOffset=function(){var a=function(b){var e=a.cache,f=c.getId(b);if(f&&e[f])return e[f];var g=d._getElementOffset(b);return f&&g&&(e[f]=g),g};return a.cache={},a}(),d.EVENT_NAMES=["enter","exit","visible","invisible","all"],d.updateTracking=function(b){var c,e=function(b){return b?function(a){return b[a]}:a.constant(void 0)};a.any(d.EVENT_NAMES,e(b._events))?(c=a.indexOf(d.events,b),-1===c&&d.events.push(b)):(c=a.indexOf(d.events,b),-1!==c&&d.events.splice(c,1))},d.processEvents=function(a){d.lastPos=a;var b=d.events;if(b.length)for(var c=b.length-1;c>=0;--c){var e=b[c],f=e.isVisible(a);null!==f&&(f!==e.lastVisible&&e.trigger(f?"enter":"exit",e,a),e.trigger(f?"visible":"invisible",e,a),e.lastVisible=f)}}}),define("stance/main",["underscore","jquery","backbone","./tracking"],function(a,b,c,d){"use strict";function e(a){return this instanceof e?(this.obj=a,void(this.lastVisible=!1)):new e(a)}return a.extend(e.prototype,c.Events,{on:function(a){var b=!(this._events&&this._events[a]),e=c.Events.on.apply(this,arguments);return b&&d.updateTracking(this),e},off:function(a){var b=c.Events.off.apply(this,arguments);return this._events&&this._events[a]||d.updateTracking(this),b},isVisible:function(a){if(a=a||d.lastPos,!a)return null;var b=a.top,c=b+a.height,e=d.getElementOffset(this.obj);return e?e.offsetTop>=b&&e.visibleTopb:null},invalidate:function(){return d.clearCache(this.obj),this}}),a.extend(e,{invalidate:d.clearCache,scroll:d.processEvents,_windowScrollHandlerBound:!1,_windowScrollHandler:a.throttle(function(){d.processEvents({top:b(window).scrollTop(),height:b(window).height()})},250),bindWindowEvents:function(){this._windowScrollHandlerBound||(b(window).on("scroll",this._windowScrollHandler).on("resize",this._windowScrollHandler),this._windowScrollHandlerBound=!0)},unbindWindowEvents:function(){b(window).off("scroll",this._windowScrollHandler).off("resize",this._windowScrollHandler),this._windowScrollHandlerBound=!1}}),e}),define("stance",["stance/main"],function(a){return a}),define("core/analytics/experiment",["underscore","remote/config","core/analytics/identity","core/utils/cookies"],function(a,b,c,d){"use strict";var e={},f=function(a,b){return b[0]<=a&&a2048&&this.has("page_referrer")){var f=document.createElement("a");f.href=this.get("page_referrer");var g=f.hostname;g&&(c.page_referrer_domain=g),delete c.page_referrer}return c},emit:function(c){return a.ajax({url:b.result(this,"url"),data:this.decoratePayload(c),dataType:"script",cache:!0})},telemetry:function(c,d){b.any(d,function(a){return 0>=a})||(b.each(d,function(a,b){d[b]=Math.round(a)}),(new Image).src=f.jester+"/telemetry/"+c+".gif?"+a.param(d))}}),h=new g;return{ActivityClient:g,client:h}}),define("lounge/common",[],function(){"use strict";var a,b=function(b){a=b},c=function(){return a};return{setLounge:b,getLounge:c}}),define("lounge/menu-handler",["jquery","core/bus"],function(a,b){"use strict";return{init:function(){function c(){a(".dropdown").removeClass("open")}a("html").on("click",c),a("body").delegate("[data-toggle]","click",function(b){b.stopPropagation(),b.preventDefault();var d=a(b.currentTarget),e=d.closest("."+d.attr("data-toggle")),f="disabled"!==e.attr("data-dropdown")&&!e.hasClass("open");e.attr("data-dropdown","enabled"),c(),f&&e.addClass("open")}),b.frame.on("window.click",c)}}}),define("lounge/mixins",["backbone","underscore","core/api","common/urls","common/templates","shared/corefuncs"],function(a,b,c,d,e,f){"use strict";var g={_getShortUrl:function(a){var d=this,e=this._shareUrl(),f=e,g=b.extend({url:e,source:"disqus_embed_next"},this.model.relatedIds());c.call("shortener/create.json",{method:"POST",data:g,timeout:5e3,success:function(a){var b=a.code,c=a.response;0===b&&(f=c.url)},complete:function(){a.call(d,f)}})},_shareWaitPopup:function(a){return window.open(d.loading,"_blank",a||"width=550,height=520")},share:function(a){this.sharers[a].call(this)},sharers:{twitter:function(){var a="https://twitter.com/intent/tweet",b=this._shareWaitPopup();this._getShortUrl(function(c){b.location=f.serialize(a,{url:c,text:this.model.twitterText(c)})})},facebook:function(){var a="https://www.facebook.com/sharer.php",b=this._shareWaitPopup("width=655,height=352");this._getShortUrl(function(c){b.location=f.serialize(a,{u:c})})}}},h=a.View.extend({className:"alert",events:{"click [data-action=dismiss]":"dismiss"},initialize:function(a){b.extend(this,a)},render:function(){var a=this,b=a.$el;return b.html(e.render("alert",{message:a.message,safe:a.safe,icon:"error"===a.type})),b.attr("class",a.className),a.type&&b.addClass(a.type),a},dismiss:function(a){a&&a.preventDefault&&a.preventDefault(),this.remove(),this.trigger("dismiss")}}),i={alert:function(a,c){b.isObject(c)||(c={});var d=c.target||this._alertSelector;this.dismissAlert();var e=this._alert=new h(b.extend({message:a},c));return e.render(),d?this.$el.find(d).prepend(e.el):this.el.parentNode&&this.el.parentNode.insertBefore(e.el,this.el),e},dismissAlert:function(){this._alert&&this._alert.dismiss()},setAlertSelector:function(a){this._alertSelector=a}},j=function(){function a(){return this.collapseTarget&&this.collapseTarget.length||(this.collapseTarget=this.collapseTargetSelector?this[this.collapseScope].find(this.collapseTargetSelector):this[this.collapseScope]),this.collapseTarget}function b(){var b=this;if(b.isCollapseAllowed){var c=a.call(b);c&&c.length&&(c.height(b.collapsedHeight),e.call(b))}}function c(a){var b=this;if(b.collapseTarget&&b.collapseTarget.length){var c=b.collapseTarget;c.css("height","auto"),c.css("maxHeight","none"),f.call(b),a||(b.isCollapseAllowed=!1)}}function d(){return this.seeMoreButton&&this.seeMoreButton.length||(this.seeMoreButton=a.call(this).siblings("[data-action=see-more]")),this.seeMoreButton}function e(){var a=this;d.call(this).removeClass("hidden").on("click",function(){a.expand()})}function f(){d.call(this).addClass("hidden").off("click")}return function(a){var d=this;d.isCollapseAllowed=!0,d.collapsedHeight=a.collapsedHeight,d.collapseTargetSelector=a.collapseTargetSelector,d.collapseScope=a.collapseScope||"$el",d.collapse=b,d.expand=c}}();return{ShareMixin:g,AlertView:h,AlertMixin:i,asCollapsible:j}}),define("lounge/realtime",["jquery","underscore","backbone","common/utils","common/urls","shared/corefuncs","core/logger"],function(a,b,c,d,e,f,g){"use strict";function h(){n.apply(this,arguments),this.reqCounter=0,this.marker=0,this.interval=1,this._boundOnError=b.bind(this.onError,this),this._boundOnLoad=b.bind(this.onLoad,this),this._boundOnProgress=b.bind(this.onProgress,this)}function i(){n.apply(this,arguments),this.handshakeSuccess=null,this.interval=1,this._boundOnOpen=b.bind(this.onOpen,this),this._boundError=b.bind(this.onError,this),this._boundClose=b.bind(this.onClose,this),this._boundMessage=b.compose(b.bind(this.onMessage,this),function(a){return JSON.parse(a.data)})}var j=2,k=120,l=function(){},m=function(){throw new Error("Pipe class cannot be used directly.")},n=function(a,c){this.channel=a,this.since=c,this.connection=null,this.paused=!1,this._msgBuffer=[],this._boundOpen=b.bind(this.open,this)};b.extend(n.prototype,c.Events,{getUrl:function(a){var c={};return this.since&&(c.since=this.since),b.extend(c,a),f.serialize(this.baseUrl+this.channel,c)},onMessage:function(a){var b=a.message_type,c=a.firehose_id;this.lastEventId=c,g.debug("RT: new message:",b,c);var d={type:b,data:a.message_body,lastEventId:c};this.trigger(b,d)},_msgToBuffer:function(){this._msgBuffer.push(b.toArray(arguments))},pause:function(a){this.paused||(this.paused=!0,this._trigger=this.trigger,this.trigger=a===!1?l:this._msgToBuffer,g.debug("RT: paused, buffered: %s",a!==!1))},resume:function(){if(this.paused){this.paused=!1,this.trigger=this._trigger,g.debug("RT: resumed, buffered messages: %s",this._msgBuffer.length);for(var a;a=this._msgBuffer.shift();)this.trigger.apply(this,a)}},open:m,close:function(){var a=this.connection;return a?(this.connection=null,a):!1}}),b.extend(h.prototype,n.prototype,{baseUrl:e.realertime+"/api/2/",onError:function(){this.connection&&(this.connection=null,this.trigger("error",this),this.interval<=k&&(this.interval*=j),g.error("RT: Connection error, backing off %s secs",this.interval),b.delay(this._boundOpen,1e3*this.interval))},onLoad:function(){this.connection&&(this.connection=null,this.since=null,this.trigger("success",this),b.defer(this._boundOpen))},onProgress:function(){if(this.connection){var a,b=this.connection.responseText,c=0;if(b&&!(this.marker>=b.length)){a=b.slice(this.marker).split("\n");for(var d,e,f,h=a.length,i=0;h>i;i++)if(d=a[i],c+=d.length+1,e=d.replace(/^\s+|\s+$/g,"")){try{f=JSON.parse(e)}catch(j){if(i===h-1){c-=d.length+1;break}g.debug("RT: unable to parse: ",e,d);continue}this.onMessage(f)}else g.debug("RT: ignoring empty row...");c>0&&(this.marker+=c-1)}}},open:function(){this.close();var a=this.connection=d.CORS.request("GET",this.getUrl({bust:++this.reqCounter}),this._boundOnLoad,this._boundOnError);if(!a)return void g.debug("RT: Cannot use any cross-domain request tool with StreamPipe. Bailing out.");a.onprogress=this._boundOnProgress,this.connection=a,this.marker=0;try{a.send()}catch(b){this.connection=null,g.debug("RT: Attempt to send a CORS request failed.")}},close:function(){var a=n.prototype.close.apply(this);return a&&a.abort()}}),b.extend(i.prototype,n.prototype,{baseUrl:("https:"===window.location.protocol?"wss:":"ws:")+e.realertime+"/ws/2/",onOpen:function(){g.debug("RT: [Socket] Connection established."),this.handshakeSuccess=!0,this.since=null},onError:function(){if(this.connection){if(this.connection=null,!this.handshakeSuccess)return g.debug("RT: [Socket] Error before open, bailing out."),void this.trigger("fail");this.trigger("error"),this.interval<=k&&(this.interval*=j),g.error("RT: Connection error, backing off %s secs",this.interval),b.delay(this._boundOpen,1e3*this.interval)}},onClose:function(a){if(this.connection){if(!a.wasClean)return void this.onError();this.connection=null,g.debug("RT: [Socket] Connection closed. Restarting..."),this.trigger("close"),this.open()}},open:function(){this.close();var a=this.connection=new window.WebSocket(this.getUrl());a.onopen=this._boundOnOpen,a.onerror=this._boundError,a.onmessage=this._boundMessage,a.onclose=this._boundClose},close:function(){var a=n.prototype.close.apply(this);return a&&a.close()}});var o={_wsSupported:window.WebSocket&&2===WebSocket.CLOSING,initialize:function(a,c,d,e){this.close(),this._initArgs=[a,c,d,e];var f=this._wsSupported,g=f?i:h,j=this.pipe=new g(a,c);b.chain(d).pairs().each(function(a){j.on(a[0],a[1],e)}),f&&j.on("fail",function(){this._wsSupported=!1,j.off(),this.initialize.apply(this,this._initArgs)},this),j.open()},pause:function(a){this.pipe&&this.pipe.pause(a)},resume:function(){this.pipe&&this.pipe.resume()},close:function(){this.pipe&&(this.pipe.close(),this.pipe=null)}};return a(window).on("unload",b.bind(o.close,o)),{Pipe:n,StreamPipe:h,SocketPipe:i,Manager:o}}),function(a){"use strict";function b(a){return a.replace(g," ")}function c(a,d,e){var f,g,h,j,k="",l=[];for("string"!=typeof e&&(e="\n\n"),j=0;jc;c++)d=h[c],f=this.createParagraph(d),g.appendChild(f);g.lastChild.appendChild(e.createElement("br")),this.elem.innerHTML="",this.elem.appendChild(g);var j=a.getSelection&&a.getSelection();j&&j.anchorNode===this.elem&&j.modify&&j.modify("move","forward","line")},createParagraph:function(a){var b,c,d,f,g,h,i,j=e.createElement("p");for(d=a.split(/\r\n|\r|\n/),c=0,g=d.length;g>c;c++){for(f=d[c],i=this.getHtmlElements(f),b=0,h=i.length;h>b;b++)j.appendChild(i[b]);j.appendChild(e.createElement("br"))}return j.lastChild&&j.removeChild(j.lastChild),j},getHtmlElements:function(a){return[e.createTextNode(a)]},plainTextReformat:function(){if(!(this.elem.getElementsByTagName("p").length<=1)){this.emulateTextarea=!1;var a=this.text();this.emulateTextarea=!0,this.setText(a)}},removeNode:function(b){var c,d,f;a.getSelection?(c=b.previousSibling,b.parentNode.removeChild(b),d=a.getSelection(),f=e.createRange(),c&&(f.setStart(c,c.length),f.setEnd(c,c.length)),d.addRange(f)):b.parentNode.removeChild(b)},selectedTextNode:function(){var c,d,g=this.elem;if(a.getSelection)return c=a.getSelection(),c.anchorNode;if(e.selection.createRange){for(d=e.selection.createRange().duplicate();-1e3===d.moveStart(f,-1e3);)continue;var h,i,j,k,l,m,n,o=d.text;for(m=0;m-1)k=i,o=o.replace(l,"");else if(l.indexOf(o)>-1)return i;return k}},selectedTextNodeOffset:function(c){var d,g;if(a.getSelection){var h=a.getSelection();h&&h.anchorOffset&&(g=h.anchorOffset)}else if(c&&e.selection.createRange){d=e.selection.createRange();for(var i=b(c.nodeValue),j=d.duplicate(),k=j.parentElement(),l=0;0!==d.moveStart(f,-1)&&++l&&0!==i.indexOf(b(d.text))&&k===d.parentElement();)j=d.duplicate(),k=j.parentElement();g=l}return isNaN(g)?0:g},selectNodeText:function(c,d,g){var h,i,j=this.elem;if(a.getSelection)return h=a.getSelection(),h.removeAllRanges(),i=e.createRange(),i.setStart(c,d),i.setEnd(c,g),h.addRange(i),h;if(e.selection.createRange){i=e.selection.createRange();var k=b(c.nodeValue);if("body"===i.parentElement().nodeName.toLowerCase()){for(j.focus(),i=e.selection.createRange();-1e3===i.moveStart(f,-1e3);)continue;for(;1e3===i.moveEnd(f,1e3);)continue;var l=b(i.text),m=l.indexOf(k);m>0&&i.moveStart(f,m+2),i.collapse()}for(;-1===i.moveStart(f,-1)&&0!==k.indexOf(b(i.text));)continue;for(;1===i.moveEnd(f,1)&&k!==b(i.text);)continue;return i.moveStart(f,d),i.moveEnd(f,-1*(g-d-i.text.length)),i.select(),i}}},k.normalizeSpace=b,a.Editable=k}(this),define("editable",function(a){return function(){var b;return b||a.Editable}}(this)),define("core/CappedStorage",[],function(){"use strict";var a=function(a,b,c){this.store=a,this.max=b||10,this.queueKey=c||"__queue",this.getQueue()||this.setQueue([])};return a.prototype.setItem=function(a,b){var c=this.getQueue()||this.setQueue([]);c.length===this.max&&this.store.removeItem(c.shift()),this.store.setItem(a,b),c.push(a),this.setQueue(c)},a.prototype.getItem=function(a){return this.store.getItem(a)},a.prototype.removeItem=function(a){this.store.removeItem(a);for(var b=this.getQueue()||[],c=0;c":"\n",g=c.height(),h=function(){var d={};b.each(d,function(a,b){d[b]=c.css(b)});var e=a(c[0].cloneNode(!0));return e.removeAttr("id").removeAttr("name").css({visibility:"hidden",position:"absolute",top:"-9999px",left:"-9999px",contentEditable:!1}).css(d).attr("tabIndex","-1"),e.insertAfter(c[0]),e}(),i=null,j=function(){h[0].style.height=0,h[e](c[e]()+f),h.scrollTop(h[0].scrollHeight);var a=Math.max(h[0].scrollHeight,g)+parseInt(d.extraSpace,10);d.maxHeight&&(a>=d.maxHeight?(c.css("overflow",""),a=d.maxHeight):c.css("overflow","hidden")),i!==a&&(i=a,c.height(a),c.trigger&&c.trigger("resize"))},k=b.throttle(j,500),l=function(a){13===a.keyCode?j():k()};c.bind("keyup",l).bind("paste",j).css("overflow","hidden"),j()})},a}),define("core/views/TextareaView",["underscore","jquery","backbone","core/utils/storage","core/CappedStorage","core/extensions/jquery.autoresize"],function(a,b,c,d,e){"use strict";var f=c.View.extend({events:{"keydown [data-role=editable]":"handleKeyDown","keyup [data-role=editable]":"handleKeyUp","paste [data-role=editable]":"handlePaste","focusin [data-role=editable]":"handleFocusIn"},initialize:function(b){b=b||{},this.storageKey=b.storageKey,this.value=b.value||this.getDraft(),this.placeholder=b.placeholder,this.listenTo(this,"keychange",a.debounce(this.saveDraft,this.constructor.SAVE_DRAFT_INTERVAL))},render:function(){var a=this.$input=b("