Last active
November 5, 2024 08:30
-
-
Save dutc/4eb5124bda88eedd476e to your computer and use it in GitHub Desktop.
IPython Notebook for "Generators Will Free Your Mind"
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"metadata": { | |
"celltoolbar": "Slideshow", | |
"name": "", | |
"signature": "sha256:107a668bacd0d19dcd4abeb61c878791d1ceee5dc2e62b2fe4358538eb74e597" | |
}, | |
"nbformat": 3, | |
"nbformat_minor": 0, | |
"worksheets": [ | |
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"source": [ | |
"Generators Will Free Your Mind\n", | |
"==============================\n", | |
"\n", | |
"James Powell\n", | |
"\n", | |
"[http://gist.github.com/dutc](http://gist.github.com/dutc)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"source": [ | |
"[[email protected]]([email protected])\n", | |
"\n", | |
"[@dontusethiscode](http://twitter.com/dontusethiscode)\n", | |
"\n", | |
"[seriously.dontusethiscode.com](http://seriously.dontusethiscode.com)\n", | |
"\n", | |
"dutc on irc.freenode.net" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"source": [ | |
"NYC Python\n", | |
"----------\n", | |
"\n", | |
"[nycpython.org](http://nycpython.org)\n", | |
"\n", | |
"[pygotham.org](http://pygotham.org)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"source": [ | |
"A Conference \"for Python Quants\"\n", | |
"--------------------------------\n", | |
"\n", | |
"[forpythonquants.com](http://forpythonquants.com)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"source": [ | |
"*I used to be addicted to the Hokey Pokey, but I turned myself around.*\n", | |
"-----------------------------------------------------------------------" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"source": [ | |
"Themes\n", | |
"------\n", | |
"\n", | |
"- generators are a very useful way of modelling problems in Python\n", | |
"- the ways we model problems using generators is fundamentally different" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"source": [ | |
"Not Covered\n", | |
"-----------\n", | |
"\n", | |
"- what is a generator; see my previous talks\n", | |
"- efficiencies" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from __future__ import print_function\n", | |
"from __future__ import division\n", | |
"from __future__ import unicode_literals" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [], | |
"prompt_number": 1 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"source": [ | |
"*Functional Programming Has Already Freed Your Mind*\n", | |
"----------------------------------------------------" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from random import randrange\n", | |
"\n", | |
"markets = {\n", | |
" 'US': randrange(-4000000, 4000000),\n", | |
" 'UK': randrange(-4000000, 4000000),\n", | |
" 'EU': randrange(-4000000, 4000000),\n", | |
" 'CEMEA': randrange(-4000000, 4000000), \n", | |
" 'Central America': randrange(-4000000, 4000000),\n", | |
" 'Asia': randrange(-4000000, 4000000),\n", | |
" 'Antarctica': 0,\n", | |
"}" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [], | |
"prompt_number": 2 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def output(markets):\n", | |
" for region, profit in markets.items():\n", | |
" print(region, profit)\n", | |
" \n", | |
"output(markets)" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Central America -675140\n", | |
"Asia -3614396\n", | |
"Antarctica 0\n", | |
"US -2724620\n", | |
"UK -2380001\n", | |
"EU 771665\n", | |
"CEMEA 3480172\n" | |
] | |
} | |
], | |
"prompt_number": 3 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def output(markets):\n", | |
" align = max(map(len,markets))\n", | |
" for region, profit in markets.items():\n", | |
" print('{region:<{align}} {profit:>10,}'.format(region=region, profit=profit, align=align))\n", | |
" \n", | |
"output(markets)" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Central America -675,140\n", | |
"Asia -3,614,396\n", | |
"Antarctica 0\n", | |
"US -2,724,620\n", | |
"UK -2,380,001\n", | |
"EU 771,665\n", | |
"CEMEA 3,480,172\n" | |
] | |
} | |
], | |
"prompt_number": 4 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def output(markets, filename=None):\n", | |
" align = max(map(len,markets))\n", | |
" for region, profit in markets.items():\n", | |
" line = '{region:<{align}} {profit:>10,}'.format(region=region,\n", | |
" profit=profit,\n", | |
" align=align)\n", | |
" if filename:\n", | |
" with open(filename) as f:\n", | |
" f.write(line)\n", | |
" \n", | |
" print(line)\n", | |
" \n", | |
"output(markets)" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Central America -675,140\n", | |
"Asia -3,614,396\n", | |
"Antarctica 0\n", | |
"US -2,724,620\n", | |
"UK -2,380,001\n", | |
"EU 771,665\n", | |
"CEMEA 3,480,172\n" | |
] | |
} | |
], | |
"prompt_number": 5 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from logging import info\n", | |
"\n", | |
"def output(markets, filename=None, to_log=False):\n", | |
" align = max(map(len,markets))\n", | |
" for region, profit in markets.items():\n", | |
" line = '{region:<{align}} {profit:>10,}'.format(region=region,\n", | |
" profit=profit,\n", | |
" align=align)\n", | |
" if filename:\n", | |
" with open(filename) as f:\n", | |
" f.write(line)\n", | |
" \n", | |
" if to_log:\n", | |
" info(line)\n", | |
" \n", | |
" print(line)\n", | |
" \n", | |
"output(markets, to_log=True)" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Central America -675,140\n", | |
"Asia -3,614,396\n", | |
"Antarctica 0\n", | |
"US -2,724,620\n", | |
"UK -2,380,001\n", | |
"EU 771,665\n", | |
"CEMEA 3,480,172\n" | |
] | |
} | |
], | |
"prompt_number": 6 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def output(markets, filename=None, to_log=False, to_email=False, accounting=False):\n", | |
" align = max(map(len,markets))\n", | |
" \n", | |
" for region, profit in markets.items():\n", | |
" if accounting:\n", | |
" if profit < 0:\n", | |
" profit = '({:>10,})'.format(-profit)\n", | |
" else:\n", | |
" profit = ' {:>10,}'.format(profit)\n", | |
" \n", | |
" line = '{region:<{align}} {profit}'.format(region=region,\n", | |
" profit=profit,\n", | |
" align=align)\n", | |
" if filename:\n", | |
" with open(filename) as f:\n", | |
" f.write(line)\n", | |
" \n", | |
" if to_log:\n", | |
" info(line)\n", | |
" \n", | |
" print(line)\n", | |
" \n", | |
"output(markets, accounting=True)" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Central America ( 675,140)\n", | |
"Asia ( 3,614,396)\n", | |
"Antarctica 0\n", | |
"US ( 2,724,620)\n", | |
"UK ( 2,380,001)\n", | |
"EU 771,665\n", | |
"CEMEA 3,480,172\n" | |
] | |
} | |
], | |
"prompt_number": 7 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def output(markets, filename=None, to_log=False, to_email=False, accounting=False):\n", | |
" align = max(map(len,markets))\n", | |
" \n", | |
" if to_email:\n", | |
" lines = []\n", | |
" \n", | |
" for region, profit in markets.items():\n", | |
" if accounting:\n", | |
" if profit < 0:\n", | |
" profit = '({:>10,})'.format(-profit)\n", | |
" else:\n", | |
" profit = ' {:>10,}'.format(profit)\n", | |
" \n", | |
" line = '{region:<{align}} {profit}'.format(region=region,\n", | |
" profit=profit,\n", | |
" align=align)\n", | |
" if filename:\n", | |
" with open(filename) as f:\n", | |
" f.write(line)\n", | |
" \n", | |
" if to_email:\n", | |
" lines.append(line)\n", | |
" \n", | |
" if to_log:\n", | |
" info(line)\n", | |
" \n", | |
" print(line)\n", | |
" \n", | |
" if to_email:\n", | |
" email('\\n'.join(lines))\n", | |
" \n", | |
"output(markets, accounting=True)" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Central America ( 675,140)\n", | |
"Asia ( 3,614,396)\n", | |
"Antarctica 0\n", | |
"US ( 2,724,620)\n", | |
"UK ( 2,380,001)\n", | |
"EU 771,665\n", | |
"CEMEA 3,480,172\n" | |
] | |
} | |
], | |
"prompt_number": 8 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from numbers import Real\n", | |
"class Accounting(Real, float):\n", | |
" def __metaclass__(name, bases, body):\n", | |
" for method in Real.__abstractmethods__:\n", | |
" if method not in body:\n", | |
" body[method] = (lambda meth: lambda *args, **kwargs: Accounting(getattr(float,meth)(*args, **kwargs)))(method)\n", | |
" for method in ('__ne__','__nonzero__',):\n", | |
" if method not in body:\n", | |
" body[method] = (lambda meth: lambda *args, **kwargs: getattr(float,meth)(*args, **kwargs))(method)\n", | |
" return Real.__metaclass__(name, bases, body)\n", | |
" __new__ = float.__new__\n", | |
" def __format__(self, fmt): \n", | |
" return { 1: ' %s'%float.__format__(self, fmt),\n", | |
" 0: ' %s'%float.__format__(self, fmt).replace('0', '-'),\n", | |
" -1: '(%s)'%float.__format__(self, fmt) }[cmp(self,0)]" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [], | |
"prompt_number": 9 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"template = '{region:<{align}} {profit:>14,.0f}'.format\n", | |
"def output(markets, write=print, template=template):\n", | |
" align = max(map(len,markets))\n", | |
" for region, profit in markets.items():\n", | |
" line = template(region=region, profit=profit, align=align)\n", | |
" write(line)\n", | |
"\n", | |
"output({region:Accounting(profit) for region, profit in markets.items()})" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Central America ( -675,140)\n", | |
"US ( -2,724,620)\n", | |
"Antarctica -\n", | |
"Asia ( -3,614,396)\n", | |
"UK ( -2,380,001)\n", | |
"EU 771,665\n", | |
"CEMEA 3,480,172\n" | |
] | |
} | |
], | |
"prompt_number": 10 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"source": [ | |
"Functional Programming Frees Your Mind From Presuming Modalities\n", | |
"----------------------------------------------------------------" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"source": [ | |
"Functional Programming Simplified your Internal API\n", | |
"---------------------------------------------------" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"source": [ | |
"Functional Programming Empowered Your Users\n", | |
"-------------------------------------------" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"source": [ | |
"(Pure Functional Programming Has Further Freed Your Mind)\n", | |
"---------------------------------------------------------" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"source": [ | |
"What is a Generator & What is a Coroutine?\n", | |
"------------------------------------------" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def fib(a=1, b=1, n=10):\n", | |
" rv = []\n", | |
" for _ in xrange(n):\n", | |
" rv.append(a)\n", | |
" a, b = b, a + b\n", | |
" return rv\n", | |
"\n", | |
"fib()" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 11, | |
"text": [ | |
"[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]" | |
] | |
} | |
], | |
"prompt_number": 11 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def ratio(xs):\n", | |
" xs = iter(xs)\n", | |
" x1 = next(xs) # raises StopIteration\n", | |
" x2 = next(xs)\n", | |
" rv = [x2/x1]\n", | |
" x1 = x2\n", | |
" for x2 in xs:\n", | |
" rv.append(x2/x1)\n", | |
" x1 = x2 \n", | |
" return rv\n", | |
"\n", | |
"from math import sqrt\n", | |
"ratio(fib(n=5))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 12, | |
"text": [ | |
"[1.0, 2.0, 1.5, 1.6666666666666667]" | |
] | |
} | |
], | |
"prompt_number": 12 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"phi = (1+sqrt(5))/2\n", | |
"[abs(x - phi) for x in ratio(fib(n=5))]" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 13, | |
"text": [ | |
"[0.6180339887498949,\n", | |
" 0.3819660112501051,\n", | |
" 0.1180339887498949,\n", | |
" 0.04863267791677184]" | |
] | |
} | |
], | |
"prompt_number": 13 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"# 1.609 km per mi" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"outputs": [], | |
"prompt_number": 14 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def fib(a=1, b=1):\n", | |
" while True:\n", | |
" yield a\n", | |
" a, b = b, a + b\n", | |
"\n", | |
"from itertools import islice\n", | |
"list(islice(fib(),10))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 15, | |
"text": [ | |
"[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]" | |
] | |
} | |
], | |
"prompt_number": 15 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from itertools import islice, izip, tee\n", | |
"nwise = lambda g,n: izip(*(islice(g,i,None) for i,g in enumerate(tee(g,n))))\n", | |
"ratio = lambda g: (y/x for x,y in nwise(g,2))\n", | |
"\n", | |
"list(islice(ratio(fib()),5))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 16, | |
"text": [ | |
"[1.0, 2.0, 1.5, 1.6666666666666667, 1.6]" | |
] | |
} | |
], | |
"prompt_number": 16 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"phi = (1+sqrt(5))/2\n", | |
"[abs(x - phi) for x in islice(ratio(fib()),5)]" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 17, | |
"text": [ | |
"[0.6180339887498949,\n", | |
" 0.3819660112501051,\n", | |
" 0.1180339887498949,\n", | |
" 0.04863267791677184,\n", | |
" 0.018033988749894814]" | |
] | |
} | |
], | |
"prompt_number": 17 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"source": [ | |
"Generators Free You From Presumptions About Use\n", | |
"-----------------------------------------------" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def fib(a=1, b=1, n=10):\n", | |
" rv = []\n", | |
" for _ in xrange(10):\n", | |
" rv.append(a)\n", | |
" a, b = b, a + b\n", | |
" return rv\n", | |
"\n", | |
"print(fib())\n", | |
"\n", | |
"def fib(a=1, b=1, n=10):\n", | |
" rv = []\n", | |
" while True:\n", | |
" if a > n: break\n", | |
" rv.append(a)\n", | |
" a, b = b, a + b\n", | |
" return rv\n", | |
"\n", | |
"print(fib())" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]\n", | |
"[1, 1, 2, 3, 5, 8]\n" | |
] | |
} | |
], | |
"prompt_number": 18 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def fib(a=1, b=1):\n", | |
" while True:\n", | |
" yield a\n", | |
" a, b = b, a+b\n", | |
" \n", | |
"from itertools import islice\n", | |
"print(list(islice(fib(),10)))\n", | |
"\n", | |
"from itertools import takewhile\n", | |
"print(list(takewhile(lambda x: x < 10, fib())))\n", | |
"\n", | |
"from itertools import dropwhile\n", | |
"print(list(dropwhile(lambda x: x < 5, \n", | |
" takewhile(lambda x: x < 100,\n", | |
" islice(fib(),15)))))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]\n", | |
"[1, 1, 2, 3, 5, 8]\n", | |
"[5, 8, 13, 21, 34, 55, 89]\n" | |
] | |
} | |
], | |
"prompt_number": 19 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from time import sleep \n", | |
"\n", | |
"def query():\n", | |
" for x in xrange(10):\n", | |
" sleep(.1)\n", | |
" yield x\n", | |
" \n", | |
"% time list(islice(query(),1))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"CPU times: user 0 ns, sys: 0 ns, total: 0 ns\n", | |
"Wall time: 100 ms\n" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 20, | |
"text": [ | |
"[0]" | |
] | |
} | |
], | |
"prompt_number": 20 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"source": [ | |
"Generators Free You From Presumptions About Return Type\n", | |
"-------------------------------------------------------" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def process(xs):\n", | |
" rv = []\n", | |
" for x in xs:\n", | |
" rv.append(x)\n", | |
" return rv\n", | |
" \n", | |
"def process(xs):\n", | |
" rv = set()\n", | |
" for x in xs:\n", | |
" rv.add(x)\n", | |
" return rv\n", | |
"\n", | |
"def process(xs):\n", | |
" rv = ()\n", | |
" for x in xs:\n", | |
" rv += (x,)\n", | |
" return rv" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [], | |
"prompt_number": 21 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def fib(a=1, b=1, n=100):\n", | |
" rv = []\n", | |
" for _ in xrange(n):\n", | |
" rv.append(a)\n", | |
" a, b = b, a+b\n", | |
" return rv\n", | |
"\n", | |
"% timeit -r 5 fib()\n", | |
"\n", | |
"% timeit -r 5 tuple(fib())\n", | |
"% timeit -r 5 set(fib())" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"100000 loops, best of 5: 13.1 \u00b5s per loop\n", | |
"100000 loops, best of 5: 13.5 \u00b5s per loop" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"\n", | |
"100000 loops, best of 5: 17.8 \u00b5s per loop" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"\n" | |
] | |
} | |
], | |
"prompt_number": 24 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def fib(a=1, b=1):\n", | |
" while True:\n", | |
" yield a\n", | |
" a, b = b, a+b \n", | |
" \n", | |
"from itertools import islice\n", | |
"% timeit -r 5 list(islice(fib(),100))\n", | |
"% timeit -r 5 tuple(islice(fib(),100))\n", | |
"% timeit -r 5 set(islice(fib(),100))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"100000 loops, best of 5: 13.6 \u00b5s per loop\n", | |
"100000 loops, best of 5: 13.7 \u00b5s per loop" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"\n", | |
"100000 loops, best of 5: 16.5 \u00b5s per loop" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"\n" | |
] | |
} | |
], | |
"prompt_number": 25 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def average(xs):\n", | |
" if not isinstance(xs, list):\n", | |
" raise TypeError('xs must strictly be a list')\n", | |
" return sum(xs) / len(xs)\n", | |
"\n", | |
"average([1,2,4,8,16])" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 27, | |
"text": [ | |
"6.2" | |
] | |
} | |
], | |
"prompt_number": 27 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"average((1,2,4,8,16))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"outputs": [ | |
{ | |
"ename": "TypeError", | |
"evalue": "xs must strictly be a list", | |
"output_type": "pyerr", | |
"traceback": [ | |
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", | |
"\u001b[1;32m<ipython-input-28-4a82f84bdc7a>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0maverage\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m4\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m8\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m16\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", | |
"\u001b[1;32m<ipython-input-27-c010f9029beb>\u001b[0m in \u001b[0;36maverage\u001b[1;34m(xs)\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0maverage\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mxs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mxs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlist\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'xs must strictly be a list'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0msum\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mxs\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m/\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mxs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;31mTypeError\u001b[0m: xs must strictly be a list" | |
] | |
} | |
], | |
"prompt_number": 28 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from collections import Sized\n", | |
"\n", | |
"def average(xs):\n", | |
" if not isinstance(xs, Sized):\n", | |
" raise TypeError('xs must be Sized')\n", | |
" return sum(xs) / len(xs)\n", | |
"\n", | |
"average((1,2,4,8,16))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 29, | |
"text": [ | |
"6.2" | |
] | |
} | |
], | |
"prompt_number": 29 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from collections import Iterable\n", | |
"\n", | |
"def average(xs):\n", | |
" if not isinstance(xs, Iterable):\n", | |
" raise TypeError('xs must be Iterable')\n", | |
" total, count = reduce(lambda x,acc: map(sum,zip(x,acc)), ((x,1) for x in xs))\n", | |
" return total / count\n", | |
"\n", | |
"average(2**x for x in xrange(5))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 31, | |
"text": [ | |
"6.2" | |
] | |
} | |
], | |
"prompt_number": 31 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"source": [ | |
"Generators Simplify Your APIs & Remove Presumptions About Modes\n", | |
"---------------------------------------------------------------" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from time import sleep\n", | |
"from random import randrange\n", | |
"\n", | |
"def source():\n", | |
" for _ in xrange(randrange(10,20)):\n", | |
" yield randrange(-100, 100)\n", | |
" sleep(randrange(5,10)/50)\n", | |
"\n", | |
"def load_data(source):\n", | |
" rv = []\n", | |
" for datum in source:\n", | |
" average = sum(x for x,_ in rv)/len(rv) if rv else datum\n", | |
" rv.append((datum, average))\n", | |
" return rv\n", | |
"\n", | |
"load_data(source())" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 32, | |
"text": [ | |
"[(-35, -35),\n", | |
" (-45, -35.0),\n", | |
" (88, -40.0),\n", | |
" (-32, 2.6666666666666665),\n", | |
" (-67, -6.0),\n", | |
" (-57, -18.2),\n", | |
" (83, -24.666666666666668),\n", | |
" (98, -9.285714285714286),\n", | |
" (-74, 4.125),\n", | |
" (-71, -4.555555555555555),\n", | |
" (-95, -11.2),\n", | |
" (93, -18.818181818181817)]" | |
] | |
} | |
], | |
"prompt_number": 32 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def source(n):\n", | |
" for _ in xrange(n):\n", | |
" yield randrange(-100, 100)\n", | |
" sleep(randrange(5,10)/50)\n", | |
"\n", | |
"def load_data(source, size):\n", | |
" rv = []\n", | |
" for i, datum in enumerate(source):\n", | |
" average = sum(x for x,_ in rv)/len(rv) if rv else datum\n", | |
" rv.append((datum, average))\n", | |
" print('loading {:.2%}'.format(i/size))\n", | |
" return rv\n", | |
"\n", | |
"load_data(source(5), 5)" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"loading 0.00%\n", | |
"loading 20.00%" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"\n", | |
"loading 40.00%" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"\n", | |
"loading 60.00%" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"\n", | |
"loading 80.00%" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"\n" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 33, | |
"text": [ | |
"[(-18, -18), (-24, -18.0), (23, -21.0), (22, -6.333333333333333), (35, 0.75)]" | |
] | |
} | |
], | |
"prompt_number": 33 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def load_data(source, size):\n", | |
" rv = []\n", | |
" print('loading', end=' ')\n", | |
" for i, datum in enumerate(source):\n", | |
" average = sum(x for x,_ in rv)/len(rv) if rv else datum\n", | |
" rv.append((datum, average))\n", | |
" print('{:.2%}'.format(i/size), end=' ')\n", | |
" print('done loading!')\n", | |
" return rv\n", | |
"\n", | |
"load_data(source(5), 5)" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"loading 0.00% 20.00%" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 40.00%" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 60.00%" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 80.00%" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" done loading!" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"\n" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 34, | |
"text": [ | |
"[(22, 22), (-26, 22.0), (19, -2.0), (-19, 5.0), (68, -1.0)]" | |
] | |
} | |
], | |
"prompt_number": 34 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def load_data(source, size, before, during, after):\n", | |
" rv = []\n", | |
" before()\n", | |
" for i, datum in enumerate(source):\n", | |
" average = sum(x for x,_ in rv)/len(rv) if rv else datum\n", | |
" rv.append((datum, average))\n", | |
" during(i, size)\n", | |
" after()\n", | |
" return rv\n", | |
"\n", | |
"def before():\n", | |
" print('loading', end=' ')\n", | |
"def during(i, size):\n", | |
" print('{:.2%}'.format(i/size), end=' ')\n", | |
"def after():\n", | |
" print('done loading!')\n", | |
"\n", | |
"load_data(source(5), 5, before=after, during=during, after=before)" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"done loading!\n", | |
"0.00% 20.00%" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 40.00%" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 60.00%" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 80.00%" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" loading" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" " | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 35, | |
"text": [ | |
"[(-26, -26), (-78, -26.0), (86, -52.0), (15, -6.0), (-12, -0.75)]" | |
] | |
} | |
], | |
"prompt_number": 35 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def load_data(source, update):\n", | |
" rv = []\n", | |
" next(update)\n", | |
" for i, datum in enumerate(source):\n", | |
" average = sum(x for x,_ in rv)/len(rv) if rv else datum\n", | |
" rv.append((datum, average))\n", | |
" update.send(datum)\n", | |
" next(update)\n", | |
" update.close() \n", | |
" return rv\n", | |
"\n", | |
"def update(n):\n", | |
" print('loading', end=' ')\n", | |
" count, datum = 0, (yield)\n", | |
" while datum is not None: \n", | |
" print('{:.2%}'.format(count/n), end=' ') \n", | |
" count, datum = count+1, (yield)\n", | |
" print('done loading!')\n", | |
" while True: yield \n", | |
"\n", | |
"load_data(source(5), update(5))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"loading 0.00% 20.00%" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 40.00%" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 60.00%" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 80.00%" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" done loading!" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"\n" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 36, | |
"text": [ | |
"[(35, 35), (15, 35.0), (91, 25.0), (91, 47.0), (81, 58.0)]" | |
] | |
} | |
], | |
"prompt_number": 36 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"# http://www.sifma.org/services/holiday-schedule/\n", | |
"# \"All SIFMA holiday recommendations apply to the trading of U.S. dollar-denominated \n", | |
"# government securities, mortgage- and asset-backed securities, over-the-counter \n", | |
"# investment-grade and high-yield corporate bonds, municipal bonds and secondary \n", | |
"# money market trading in bankers' acceptances, commercial paper and Yankee and \n", | |
"# Euro certificates of deposit.\"\n", | |
" \n", | |
"from datetime import date \n", | |
"\n", | |
"holidays = { # early # full\n", | |
" 'Bank Holiday #1': (None, date(2014, 1, 2)),\n", | |
" 'Bank Holiday #2': (None, date(2014, 1, 3)),\n", | |
" 'Coming of Age Day': (None, date(2014, 1, 13)),\n", | |
" 'U.S. Martin Luther King Day': (None, date(2014, 1, 20)),\n", | |
" 'National Foundation Day': (None, date(2014, 2, 11)),\n", | |
" \"U.S. Presidents' Day\": (None, date(2014, 2, 17)),\n", | |
" 'Spring Equinox': (None, date(2014, 3, 21)),\n", | |
" 'Good Friday': (None, date(2014, 4, 18)),\n", | |
" 'U.K Easter Monday': (date(2014, 4, 21), None),\n", | |
" 'Showa Day': (None, date(2014, 4, 29)),\n", | |
" 'Constitutional Day': (None, None),\n", | |
" \"Children's Day\": (None, date(2014, 5, 5)),\n", | |
" 'U.K. May Day': (None, date(2014, 5, 5)),\n", | |
" 'Greenery Day': (None, date(2014, 5, 6)),\n", | |
" 'U.S. Memorial Day': (None, date(2014, 5, 26)),\n", | |
" 'U.K. Spring Bank Holiday': (None, date(2014, 5, 26)),\n", | |
" \"U.K. Queen's Diamond Jubilee\": (None, None),\n", | |
" 'U.S. Independence Day': (None, date(2014, 7, 4)),\n", | |
" 'Marine Day': (None, date(2014, 7, 21)),\n", | |
" 'U.K. Summer Bank Holiday': (date(2014, 8, 25), None),\n", | |
" 'U.S. Labor Day': (None, date(2014, 9, 1)),\n", | |
" 'Respect for the Aged Day': (None, date(2014, 9, 15)),\n", | |
" 'Autumn Equinox': (None, date(2014, 9, 23)),\n", | |
" 'Sports Day/U.S. Columbus Day': (None, date(2014, 10, 13)),\n", | |
" 'Culture Day': (None, date(2014, 11, 3)),\n", | |
" 'U.S. Veterans Day': (None, date(2014, 11, 11)),\n", | |
" 'Labor Thanksgiving Day': (None, date(2014, 11, 24)),\n", | |
" 'U.S. Thanksgiving Day': (None, date(2014, 11, 27)),\n", | |
" \"Emperor's Birthday\": (None, date(2014, 12, 23)),\n", | |
" 'Christmas Day': (None, date(2014, 12, 25)),\n", | |
" 'U.K. Boxing Day': (date(2014, 12, 26), None),\n", | |
" 'Bank Holiday #3': (None, date(2014, 12, 31)), }" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"outputs": [], | |
"prompt_number": 37 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from datetime import timedelta\n", | |
"def nthbusinessdate(refdate, n, holidays={full for early,full in holidays.values()}): \n", | |
" while n > 0:\n", | |
" refdate += timedelta(days=1)\n", | |
" while refdate.weekday() in {5,6} or refdate in holidays:\n", | |
" refdate += timedelta(days=1)\n", | |
" n -= 1\n", | |
" return refdate\n", | |
" \n", | |
"# July 2014 \n", | |
"# Su Mo Tu We Th Fr Sa\n", | |
"# 1 2 3 4* 5 \n", | |
"# 6 7 8 9 10 11 12 \n", | |
"# 13 14 15 16 17 18 19 \n", | |
"# 20 21* 22 23 24 25 26 \n", | |
"# 27 28 29 30 31 \n", | |
"\n", | |
"nthbusinessdate(date(2014,7,2), 2)" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 38, | |
"text": [ | |
"datetime.date(2014, 7, 7)" | |
] | |
} | |
], | |
"prompt_number": 38 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"nthbusinessdate(date(2014,7,2), 1), nthbusinessdate(date(2014,7,2), 2), nthbusinessdate(date(2014,7,2), 3)" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 39, | |
"text": [ | |
"(datetime.date(2014, 7, 3),\n", | |
" datetime.date(2014, 7, 7),\n", | |
" datetime.date(2014, 7, 8))" | |
] | |
} | |
], | |
"prompt_number": 39 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def businessdays(refdate, holidays={full for early,full in holidays.values()}): \n", | |
" while True:\n", | |
" refdate += timedelta(days=1)\n", | |
" while refdate.weekday() in {5,6} or refdate in holidays:\n", | |
" refdate += timedelta(days=1)\n", | |
" yield refdate\n", | |
"\n", | |
"g = businessdays(date(2014,7,2))\n", | |
"next(g), next(g), next(g)" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 40, | |
"text": [ | |
"(datetime.date(2014, 7, 3),\n", | |
" datetime.date(2014, 7, 7),\n", | |
" datetime.date(2014, 7, 8))" | |
] | |
} | |
], | |
"prompt_number": 40 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from operator import add, sub\n", | |
"NBD, PBD = add, sub\n", | |
"def businessdays(refdate, direction=NBD, holidays={full for early,full in holidays.values()}): \n", | |
" while True:\n", | |
" refdate = direction(refdate, timedelta(days=1))\n", | |
" while refdate.weekday() in {5,6} or refdate in holidays:\n", | |
" refdate = direction(refdate, timedelta(days=1))\n", | |
" yield refdate\n", | |
"\n", | |
"g = businessdays(date(2014,7,2), direction=PBD)\n", | |
"next(g), next(g), next(g)" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 41, | |
"text": [ | |
"(datetime.date(2014, 7, 1),\n", | |
" datetime.date(2014, 6, 30),\n", | |
" datetime.date(2014, 6, 27))" | |
] | |
} | |
], | |
"prompt_number": 41 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"NBD, PBD = lambda d: d+timedelta(days=1), lambda d: d-timedelta(days=1)\n", | |
"\n", | |
"def datecount(refdate, direction=NBD):\n", | |
" while True:\n", | |
" yield refdate\n", | |
" refdate = direction(refdate)\n", | |
" \n", | |
"def businessdays(refdate, direction=NBD, holidays={full for early,full in holidays.values()}): \n", | |
" return (d for d in datecount(refdate, direction) if d.weekday() not in {5,6} and d not in holidays)\n", | |
"\n", | |
"g = businessdays(date(2014,7,2), direction=PBD)\n", | |
"next(g), next(g), next(g)" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 42, | |
"text": [ | |
"(datetime.date(2014, 7, 2),\n", | |
" datetime.date(2014, 7, 1),\n", | |
" datetime.date(2014, 6, 30))" | |
] | |
} | |
], | |
"prompt_number": 42 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"g = businessdays(date(2014,7,2), direction=NBD)\n", | |
"next(g), next(g), next(g)" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 43, | |
"text": [ | |
"(datetime.date(2014, 7, 2),\n", | |
" datetime.date(2014, 7, 3),\n", | |
" datetime.date(2014, 7, 7))" | |
] | |
} | |
], | |
"prompt_number": 43 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from functools import wraps\n", | |
"\n", | |
"def pumped(gen):\n", | |
" @wraps(gen)\n", | |
" def inner(*args, **kwargs):\n", | |
" g = gen(*args, **kwargs)\n", | |
" next(g)\n", | |
" return g.send\n", | |
" return inner" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "notes" | |
} | |
}, | |
"outputs": [], | |
"prompt_number": 44 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"@pumped\n", | |
"def jp_holidays(): # Jurassic Park \n", | |
" \n", | |
" @apply\n", | |
" def calendar(): # simulate lookup\n", | |
" for d in sorted(full for early,full in holidays.values() if full is not None):\n", | |
" sleep(.2)\n", | |
" yield d\n", | |
" \n", | |
" refdate, next_holiday = None, next(calendar)\n", | |
" while True:\n", | |
" refdate = yield (refdate == next_holiday)\n", | |
" while refdate > next_holiday:\n", | |
" next_holiday = next(calendar)\n", | |
" \n", | |
"def businessdays(refdate, direction=NBD, holidays=lambda _: False):\n", | |
" return (d for d in datecount(refdate, direction) if d.weekday() not in {5,6} and not holidays(d))\n", | |
"\n", | |
"g = businessdays(date(2014,7,2), direction=NBD, holidays=jp_holidays())\n", | |
"% time list(islice(g,3))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"CPU times: user 4 ms, sys: 0 ns, total: 4 ms\n", | |
"Wall time: 3 s\n" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 46, | |
"text": [ | |
"[datetime.date(2014, 7, 2),\n", | |
" datetime.date(2014, 7, 3),\n", | |
" datetime.date(2014, 7, 7)]" | |
] | |
} | |
], | |
"prompt_number": 46 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"% time list(islice(g,11,12))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"CPU times: user 0 ns, sys: 0 ns, total: 0 ns\n", | |
"Wall time: 200 ms\n" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 47, | |
"text": [ | |
"[datetime.date(2014, 7, 24)]" | |
] | |
} | |
], | |
"prompt_number": 47 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from decimal import Decimal\n", | |
"\n", | |
"def change(amount, denominations = map(Decimal,('1.00', '0.50', '0.25', '0.10', '0.05', '0.01'))):\n", | |
" coins = [] \n", | |
" while any(amount >= d for d in denominations): \n", | |
" coins.append(next((d for d in denominations if amount >= d)))\n", | |
" amount -= coins[-1]\n", | |
" return coins\n", | |
" \n", | |
"change(Decimal('1.72'))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 48, | |
"text": [ | |
"[Decimal('1.00'),\n", | |
" Decimal('0.50'),\n", | |
" Decimal('0.10'),\n", | |
" Decimal('0.10'),\n", | |
" Decimal('0.01'),\n", | |
" Decimal('0.01')]" | |
] | |
} | |
], | |
"prompt_number": 48 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from decimal import Decimal\n", | |
"\n", | |
"def change(amount, denominations = {Decimal(d):5 for d in ('1.00', '0.50', '0.25', '0.10', '0.05', '0.01')}):\n", | |
" coins = [] \n", | |
" while any(amount >= d for d in sorted(denominations,reverse=True) if denominations[d] > 0): \n", | |
" coins.append(next(d for d in sorted(denominations,reverse=True) if amount >= d and denominations[d] > 0))\n", | |
" denominations[coins[-1]] -= 1\n", | |
" amount -= coins[-1]\n", | |
" return coins\n", | |
" \n", | |
"print(change(Decimal('1.72')))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"[Decimal('1.00'), Decimal('0.50'), Decimal('0.10'), Decimal('0.10'), Decimal('0.01'), Decimal('0.01')]\n" | |
] | |
} | |
], | |
"prompt_number": 49 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print(change(Decimal('1.72'), denominations={Decimal('0.50'): 3, Decimal('0.10'): 10, Decimal('0.01'): 20}))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"[Decimal('0.50'), Decimal('0.50'), Decimal('0.50'), Decimal('0.10'), Decimal('0.10'), Decimal('0.01'), Decimal('0.01')]\n" | |
] | |
} | |
], | |
"prompt_number": 50 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print(change(Decimal('1.72'), denominations={Decimal('0.50'): 2, Decimal('0.10'): 10, Decimal('0.01'): 20}))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"[Decimal('0.50'), Decimal('0.50'), Decimal('0.10'), Decimal('0.10'), Decimal('0.10'), Decimal('0.10'), Decimal('0.10'), Decimal('0.10'), Decimal('0.10'), Decimal('0.01'), Decimal('0.01')]\n" | |
] | |
} | |
], | |
"prompt_number": 51 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from itertools import repeat, chain, takewhile\n", | |
"greedy = lambda items, predicate: chain.from_iterable(takewhile(predicate,repeat(x)) for x in items)" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [], | |
"prompt_number": 52 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"@pumped\n", | |
"def predicate(x, state=0):\n", | |
" value = yield\n", | |
" while True:\n", | |
" if state+value <= x: # take values until you exceed the maximum\n", | |
" state += value\n", | |
" value = yield True \n", | |
" else:\n", | |
" value = yield False" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"outputs": [], | |
"prompt_number": 53 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"amounts = [randrange(0,1000) for _ in xrange(5)] # randomly pick dollar amounts" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [], | |
"prompt_number": 58 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from itertools import groupby\n", | |
"\n", | |
"denominations = [1,5,10,25,100,500,1000,2000]\n", | |
"\n", | |
"for amount in amounts:\n", | |
" pred = predicate(amount) # create the predicate\n", | |
"\n", | |
" coins = greedy(reversed(denominations), pred) # greedy algorithm\n", | |
"\n", | |
" # pretty print\n", | |
" print('your change for {:>5.2f}$ = {}'.format(amount/100, \n", | |
" ' + '.join('{:>2d}\u00d7{:<3}'.format(sum(1 for _ in cs),\n", | |
" (('{:d}\u00a2' if c < 100 else '{:.0f}$').format(c if c < 100 else c/100))) for c,cs in groupby(coins))))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"your change for 7.44$ = 1\u00d75$ + 2\u00d71$ + 1\u00d725\u00a2 + 1\u00d710\u00a2 + 1\u00d75\u00a2 + 4\u00d71\u00a2 \n", | |
"your change for 9.09$ = 1\u00d75$ + 4\u00d71$ + 1\u00d75\u00a2 + 4\u00d71\u00a2 \n", | |
"your change for 8.60$ = 1\u00d75$ + 3\u00d71$ + 2\u00d725\u00a2 + 1\u00d710\u00a2\n", | |
"your change for 0.96$ = 3\u00d725\u00a2 + 2\u00d710\u00a2 + 1\u00d71\u00a2 \n", | |
"your change for 7.41$ = 1\u00d75$ + 2\u00d71$ + 1\u00d725\u00a2 + 1\u00d710\u00a2 + 1\u00d75\u00a2 + 1\u00d71\u00a2 \n" | |
] | |
} | |
], | |
"prompt_number": 59 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"@pumped\n", | |
"def predicate(x, state=0, constraint=lambda _, __: True):\n", | |
" values = []\n", | |
" value = yield\n", | |
" while True:\n", | |
" if state+value <= x and constraint(values, value): # take values until you exceed the maximum\n", | |
" state += value\n", | |
" value = yield True\n", | |
" values.append(value)\n", | |
" else:\n", | |
" value = yield False" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [], | |
"prompt_number": 60 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from collections import Counter\n", | |
"three_coins = lambda coins, coin: Counter(coins)[coin] < 2\n", | |
"\n", | |
"for amount in amounts:\n", | |
" pred = predicate(amount, constraint=three_coins) # create the predicate\n", | |
"\n", | |
" coins = list(greedy(reversed(denominations), pred)) # greedy algorithm\n", | |
"\n", | |
" # pretty print\n", | |
" print('your change for {:>5.2f}$ -{:>5.2f}$ = {}'.format(amount/100, (amount - sum(coins))/100,\n", | |
" ' + '.join('{:>2d}\u00d7{:<3}'.format(sum(1 for _ in cs),\n", | |
" (('{:d}\u00a2' if c < 100 else '{:.0f}$').format(c if c < 100 else c/100))) for c,cs in groupby(coins))))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"your change for 7.44$ - 0.02$ = 1\u00d75$ + 2\u00d71$ + 1\u00d725\u00a2 + 1\u00d710\u00a2 + 1\u00d75\u00a2 + 2\u00d71\u00a2 \n", | |
"your change for 9.09$ - 1.27$ = 1\u00d75$ + 2\u00d71$ + 2\u00d725\u00a2 + 2\u00d710\u00a2 + 2\u00d75\u00a2 + 2\u00d71\u00a2 \n", | |
"your change for 8.60$ - 0.78$ = 1\u00d75$ + 2\u00d71$ + 2\u00d725\u00a2 + 2\u00d710\u00a2 + 2\u00d75\u00a2 + 2\u00d71\u00a2 \n", | |
"your change for 0.96$ - 0.14$ = 2\u00d725\u00a2 + 2\u00d710\u00a2 + 2\u00d75\u00a2 + 2\u00d71\u00a2 \n", | |
"your change for 7.41$ - 0.00$ = 1\u00d75$ + 2\u00d71$ + 1\u00d725\u00a2 + 1\u00d710\u00a2 + 1\u00d75\u00a2 + 1\u00d71\u00a2 \n" | |
] | |
} | |
], | |
"prompt_number": 70 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"roman = { 1: 'i', 4: 'iv', 5: 'v', 9: 'ix', 10: 'x',\n", | |
" 40: 'ix', 50: 'x', 90: 'xc', 100: 'c', 400: 'cd',\n", | |
" 500: 'd', 900: 'cm', 1000: 'm',}" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "subslide" | |
} | |
}, | |
"outputs": [], | |
"prompt_number": 62 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"years = [randint(1900,2200) for _ in xrange(5)] # randomly pick a year" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"outputs": [], | |
"prompt_number": 63 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"@pumped\n", | |
"def predicate(x, state=0, constraint=lambda _, __: True):\n", | |
" values = []\n", | |
" value = yield\n", | |
" while True:\n", | |
" if state+value <= x and constraint(values, value): # take values until you exceed the maximum\n", | |
" state += value\n", | |
" value = yield True\n", | |
" values.append(value)\n", | |
" else:\n", | |
" value = yield False" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "skip" | |
} | |
}, | |
"outputs": [], | |
"prompt_number": 64 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"for year in years: \n", | |
" pred = predicate(year) # create the predicate\n", | |
" \n", | |
" numerals = greedy(reversed(sorted(roman)), pred) # greedy algorithm\n", | |
" \n", | |
" print('the year {} is written {}'.format( year,''.join(roman[x].upper() for x in list(numerals))))" | |
], | |
"language": "python", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"the year 1903 is written MCMIII\n", | |
"the year 2052 is written MMXII\n", | |
"the year 2029 is written MMXXIX\n", | |
"the year 1975 is written MCMXXXV\n", | |
"the year 1945 is written MCMIXV\n" | |
] | |
} | |
], | |
"prompt_number": 65 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "slide" | |
} | |
}, | |
"source": [ | |
"Generators Have Freed Your Mind\n", | |
"===============================" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"source": [ | |
"Go In Peace\n", | |
"-----------" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"slideshow": { | |
"slide_type": "fragment" | |
} | |
}, | |
"source": [ | |
"James Powell\n", | |
"\n", | |
"[[email protected]]([email protected])\n", | |
"\n", | |
"[@dontusethiscode](http://twitter.com/dontusethiscode)\n", | |
"\n", | |
"[seriously.dontusethiscode.com](http://seriously.dontusethiscode.com)\n", | |
"\n", | |
"dutc on irc.freenode.net" | |
] | |
} | |
], | |
"metadata": {} | |
} | |
] | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8" /> | |
<meta http-equiv="X-UA-Compatible" content="chrome=1" /> | |
<meta name="apple-mobile-web-app-capable" content="yes" /> | |
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> | |
<title>Generators Will Free Your Mind slides</title> | |
<!-- General and theme style sheets --> | |
<link rel="stylesheet" href="reveal.js/css/reveal.css"> | |
<link rel="stylesheet" href="reveal.js/css/theme/simple.css" id="theme"> | |
<!-- For syntax highlighting --> | |
<link rel="stylesheet" href="reveal.js/lib/css/zenburn.css"> | |
<!-- If the query includes 'print-pdf', use the PDF print sheet --> | |
<script> | |
document.write( '<link rel="stylesheet" href="reveal.js/css/print/' + ( window.location.search.match( /print-pdf/gi ) ? 'pdf' : 'paper' ) + '.css" type="text/css" media="print">' ); | |
</script> | |
<!--[if lt IE 9]> | |
<script src="reveal.js/lib/js/html5shiv.js"></script> | |
<![endif]--> | |
<!-- Get Font-awesome from cdn --> | |
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css"> | |
<style type="text/css"> | |
.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0} | |
.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{max-width:100%;width:auto\9;height:auto;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"]{-webkit-appearance:button;cursor:pointer} | |
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{*{text-shadow:none !important;color:#000 !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:.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:13px;line-height:20px;color:#000;background-color:#fff} | |
a{color:#08c;text-decoration:none} | |
a:hover,a:focus{color:#005580;text-decoration:underline} | |
.img-rounded{border-radius:6px;-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{border-radius:500px;-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px} | |
.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:"";line-height:0} | |
.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;content:"";line-height:0} | |
.row-fluid:after{clear:both} | |
.row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%} | |
.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;content:"";line-height:0} | |
.container:after{clear:both} | |
.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0} | |
.container-fluid:after{clear:both} | |
p{margin:0 0 10px} | |
.lead{margin-bottom:20px;font-size:19.5px;font-weight:200;line-height:30px} | |
small{font-size:85%} | |
strong{font-weight:bold} | |
em{font-style:italic} | |
cite{font-style:normal} | |
.muted{color:#999} | |
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:#999} | |
h1,h2,h3{line-height:40px} | |
h1{font-size:35.75px} | |
h2{font-size:29.25px} | |
h3{font-size:22.75px} | |
h4{font-size:16.25px} | |
h5{font-size:13px} | |
h6{font-size:11.049999999999999px} | |
h1 small{font-size:22.75px} | |
h2 small{font-size:16.25px} | |
h3 small{font-size:13px} | |
h4 small{font-size:13px} | |
.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee} | |
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;*zoom:1;padding-left:5px;padding-right:5px} | |
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;content:"";line-height:0} | |
.dl-horizontal:after{clear:both} | |
.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} | |
.dl-horizontal dd{margin-left:180px} | |
hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff} | |
abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999} | |
abbr.initialism{font-size:90%;text-transform:uppercase} | |
blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16.25px;font-weight:300;line-height:1.25} | |
blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'} | |
blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;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:monospace;font-size:11px;color:#333;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} | |
code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;white-space:nowrap} | |
pre{display:block;padding:9.5px;margin:0 0 10px;font-size:12px;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);border-radius:4px;-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:19.5px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999} | |
label,input,button,select,textarea{font-size:13px;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:13px;line-height:20px;color:#555;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;vertical-align:middle} | |
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:#fff;border:1px solid #ccc;-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 .2s, box-shadow linear .2s;-moz-transition:border linear .2s, box-shadow linear .2s;-o-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .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;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6)} | |
input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;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;*margin-top:4px;line-height:30px} | |
select{width:220px;border:1px solid #ccc;background-color:#fff} | |
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:#999;background-color:#fcfcfc;border-color:#ccc;-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);cursor:not-allowed} | |
.uneditable-input{overflow:hidden;white-space:nowrap} | |
.uneditable-textarea{width:auto;height:auto} | |
input:-moz-placeholder,textarea:-moz-placeholder{color:#999} | |
input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999} | |
input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999} | |
.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;content:"";line-height:0} | |
.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:#eee} | |
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;content:"";line-height:0} | |
.form-actions:after{clear:both} | |
.help-block,.help-inline{color:#262626} | |
.help-block{display:block;margin-bottom:10px} | |
.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px} | |
.input-append,.input-prepend{display:inline-block;margin-bottom:10px;vertical-align:middle;font-size:0;white-space:nowrap}.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:13px} | |
.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;border-radius:0 4px 4px 0;-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:13px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;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;border-radius:0;-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{border-radius:4px 0 0 4px;-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{border-radius:4px 0 0 4px;-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{border-radius:0 4px 4px 0;-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{border-radius:0 4px 4px 0;-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{border-radius:0;-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{border-radius:0 4px 4px 0;-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;border-radius:4px 0 0 4px;-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;border-radius:0 4px 4px 0;-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;margin-bottom:0;border-radius:15px;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px} | |
.form-search .input-append .search-query,.form-search .input-prepend .search-query{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0} | |
.form-search .input-append .search-query{border-radius:14px 0 0 14px;-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{border-radius:0 14px 14px 0;-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{border-radius:0 14px 14px 0;-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{border-radius:14px 0 0 14px;-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;*zoom:1;margin-bottom:0;vertical-align:middle} | |
.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;content:"";line-height:0} | |
.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 #ddd} | |
.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 #ddd} | |
.table .table{background-color:#fff} | |
.table-condensed th,.table-condensed td{padding:4px 5px} | |
.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd} | |
.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;-moz-border-radius-topleft:4px;border-top-left-radius: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;-moz-border-radius-topright:4px;border-top-right-radius: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;-moz-border-radius-bottomleft:4px;border-bottom-left-radius: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;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px} | |
.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0} | |
.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius: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;-moz-border-radius-topleft:4px;border-top-left-radius: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;-moz-border-radius-topright:4px;border-top-right-radius: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-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;margin-top:1px} | |
.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{background-position:-216px -120px;width:16px} | |
.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{background-position:-384px -120px;width:16px} | |
.icon-folder-open{background-position:-408px -120px;width:16px} | |
.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 #000;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:#fff;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 #fff} | |
.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap} | |
.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #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:#fff;text-decoration:none;outline:0;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;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:#999} | |
.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:default} | |
.open{*z-index:1000}.open>.dropdown-menu{display:block} | |
.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top: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 #000;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;border-radius:0 6px 6px 6px;-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;border-radius:5px 5px 5px 0;-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;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#ccc;margin-top:5px;margin-right:-10px} | |
.dropdown-submenu:hover>a:after{border-left-color:#fff} | |
.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;border-radius:6px 0 6px 6px;-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-left:20px;padding-right:20px} | |
.typeahead{z-index:1051;margin-top:2px;border-radius:4px;-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;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px} | |
.well-small{padding:9px;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} | |
.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1} | |
.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto} | |
.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)} | |
button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none} | |
.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:13px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #fff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #fff, #e6e6e6);background-image:-o-linear-gradient(top, #fff, #e6e6e6);background-image:linear-gradient(to bottom, #fff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=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);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #ccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9} | |
.btn:active,.btn.active{background-color:#ccc \9} | |
.btn:first-child{*margin-left:0} | |
.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .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,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)} | |
.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none} | |
.btn-large{padding:11px 19px;font-size:16.25px;border-radius:6px;-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.049999999999999px;border-radius:3px;-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:9.75px;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} | |
.btn-block{display:block;width:100%;padding-left:0;padding-right: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:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#04c;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:#fff;background-color:#04c;*background-color:#003bb3} | |
.btn-primary:active,.btn-primary.active{background-color:#039 \9} | |
.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);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);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);*background-color:#f89406;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:#fff;background-color:#f89406;*background-color:#df8505} | |
.btn-warning:active,.btn-warning.active{background-color:#c67605 \9} | |
.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;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;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);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);*background-color:#bd362f;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:#fff;background-color:#bd362f;*background-color:#a9302a} | |
.btn-danger:active,.btn-danger.active{background-color:#942a25 \9} | |
.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;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;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);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);*background-color:#51a351;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:#fff;background-color:#51a351;*background-color:#499249} | |
.btn-success:active,.btn-success.active{background-color:#408140 \9} | |
.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;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;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);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);*background-color:#2f96b4;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:#fff;background-color:#2f96b4;*background-color:#2a85a0} | |
.btn-info:active,.btn-info.active{background-color:#24748c \9} | |
.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;background-image:-moz-linear-gradient(top, #444, #222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#444), to(#222));background-image:-webkit-linear-gradient(top, #444, #222);background-image:-o-linear-gradient(top, #444, #222);background-image:linear-gradient(to bottom, #444, #222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#222;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:#fff;background-color:#222;*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{border-color:transparent;cursor:pointer;color:#08c;border-radius:0;-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:#333;text-decoration:none} | |
.btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em}.btn-group:first-child{*margin-left:0} | |
.btn-group+.btn-group{margin-left:5px} | |
.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px} | |
.btn-group>.btn{position:relative;border-radius:0;-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:13px} | |
.btn-group>.btn-mini{font-size:9.75px} | |
.btn-group>.btn-small{font-size:11.049999999999999px} | |
.btn-group>.btn-large{font-size:16.25px} | |
.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px} | |
.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px} | |
.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px} | |
.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius: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-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px} | |
.btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px} | |
.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px} | |
.btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px} | |
.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)} | |
.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6} | |
.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c} | |
.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:#222} | |
.btn .caret{margin-top:8px;margin-left:0} | |
.btn-large .caret{margin-top:6px} | |
.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-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:#fff;border-bottom-color:#fff} | |
.btn-group-vertical{display:inline-block;*display:inline;*zoom:1} | |
.btn-group-vertical>.btn{display:block;float:none;max-width:100%;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0} | |
.btn-group-vertical>.btn+.btn{margin-left:0;margin-top:-1px} | |
.btn-group-vertical>.btn:first-child{border-radius:4px 4px 0 0;-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{border-radius:0 0 4px 4px;-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{border-radius:6px 6px 0 0;-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{border-radius:0 0 6px 6px;-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;border-radius:4px;-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{background-color:#dff0d8;border-color:#d6e9c6;color:#468847} | |
.alert-success h4{color:#468847} | |
.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48} | |
.alert-danger h4,.alert-error h4{color:#b94a48} | |
.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad} | |
.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-left:0;margin-bottom:20px;list-style:none} | |
.nav>li>a{display:block} | |
.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee} | |
.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:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase} | |
.nav li+.nav-header{margin-top:9px} | |
.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0} | |
.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-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:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c} | |
.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 #fff} | |
.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";line-height:0} | |
.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;border-radius:4px 4px 0 0;-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:#eee #eee #ddd} | |
.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default} | |
.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;border-radius:5px;-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:#fff;background-color:#08c} | |
.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;border-radius:0;-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;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px} | |
.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px} | |
.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{border-color:#ddd;z-index:2} | |
.nav-pills.nav-stacked>li>a{margin-bottom:3px} | |
.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px} | |
.nav-tabs .dropdown-menu{border-radius:0 0 6px 6px;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px} | |
.nav-pills .dropdown-menu{border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px} | |
.nav .dropdown-toggle .caret{border-top-color:#08c;border-bottom-color:#08c;margin-top:6px} | |
.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580} | |
.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:#555;border-bottom-color:#555} | |
.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:#fff;background-color:#999;border-color:#999} | |
.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:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)} | |
.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999} | |
.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;content:"";line-height:0} | |
.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{border-radius:0 0 4px 4px;-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-bottom-color:transparent;border-top-color:#ddd} | |
.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;border-radius:4px 0 0 4px;-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:#eee #ddd #eee #eee} | |
.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:#fff} | |
.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd} | |
.tabs-right>.nav-tabs>li>a{margin-left:-1px;border-radius:0 4px 4px 0;-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:#eee #eee #eee #ddd} | |
.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:#fff} | |
.nav>.disabled>a{color:#999} | |
.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;background-color:transparent;cursor:default} | |
.navbar{overflow:visible;margin-bottom:20px;*position:relative;*z-index:2} | |
.navbar-inner{min-height:36px;padding-left:20px;padding-right:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top, #fff, #f2f2f2);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#f2f2f2));background-image:-webkit-linear-gradient(top, #fff, #f2f2f2);background-image:-o-linear-gradient(top, #fff, #f2f2f2);background-image:linear-gradient(to bottom, #fff, #f2f2f2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-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);*zoom:1}.navbar-inner:before,.navbar-inner:after{display:table;content:"";line-height:0} | |
.navbar-inner:after{clear:both} | |
.navbar .container{width:auto} | |
.nav-collapse.collapse{height:auto;overflow:visible} | |
.navbar .brand{float:left;display:block;padding:8px 20px 8px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none} | |
.navbar-text{margin-bottom:0;line-height:36px;color:#777} | |
.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333} | |
.navbar .divider-vertical{height:36px;margin:0 9px;border-left:1px solid #f2f2f2;border-right:1px solid #fff} | |
.navbar .btn,.navbar .btn-group{margin-top:3px} | |
.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;content:"";line-height:0} | |
.navbar-form:after{clear:both} | |
.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:3px} | |
.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:3px;margin-bottom:0}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;border-radius:15px;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px} | |
.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{border-radius:0;-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-left:0;padding-right:0;border-radius: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,.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);box-shadow:0 1px 10px rgba(0,0,0,.1)} | |
.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,.1);box-shadow:0 -1px 10px rgba(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:8px 15px 8px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff} | |
.navbar .nav .dropdown-toggle .caret{margin-top:8px} | |
.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#333;text-decoration:none} | |
.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;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-left:5px;margin-right:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;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;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);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);*background-color:#e5e5e5;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.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:#fff;background-color:#e5e5e5;*background-color:#d9d9d9} | |
.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \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{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute;top:-7px;left:9px} | |
.navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:10px} | |
.navbar-fixed-bottom .nav>li>.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);border-bottom:0;bottom:-7px;top:auto} | |
.navbar-fixed-bottom .nav>li>.dropdown-menu:after{border-top:6px solid #fff;border-bottom:0;bottom:-6px;top:auto} | |
.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333} | |
.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#e5e5e5;color:#555} | |
.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777} | |
.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:#555;border-bottom-color:#555} | |
.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{left:auto;right:0}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{left:auto;right:12px} | |
.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{left:auto;right:13px} | |
.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;border-radius:6px 0 6px 6px;-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, #222, #111);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#222), to(#111));background-image:-webkit-linear-gradient(top, #222, #111);background-image:-o-linear-gradient(top, #222, #111);background-image:linear-gradient(to bottom, #222, #111);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);border-color:#252525} | |
.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;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:#fff} | |
.navbar-inverse .brand{color:#999} | |
.navbar-inverse .navbar-text{color:#999} | |
.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:transparent;color:#fff} | |
.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111} | |
.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff} | |
.navbar-inverse .divider-vertical{border-left-color:#111;border-right-color:#222} | |
.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{background-color:#111;color:#fff} | |
.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff} | |
.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999} | |
.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:#fff;border-bottom-color:#fff} | |
.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc} | |
.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc} | |
.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc} | |
.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border: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);outline:0} | |
.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;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;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#040404;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:#fff;background-color:#040404;*background-color:#000} | |
.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9} | |
.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #fff}.breadcrumb>li>.divider{padding:0 5px;color:#ccc} | |
.breadcrumb>.active{color:#999} | |
.pagination{margin:20px 0} | |
.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-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:#fff;border:1px solid #ddd;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:#999;cursor:default} | |
.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;background-color:transparent;cursor:default} | |
.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px} | |
.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius: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:16.25px} | |
.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px} | |
.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius: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-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius: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;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px} | |
.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.049999999999999px} | |
.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:9.75px} | |
.pager{margin:20px 0;list-style:none;text-align:center;*zoom:1}.pager:before,.pager:after{display:table;content:"";line-height:0} | |
.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;border-radius:15px;-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:#999;background-color:#fff;cursor:default} | |
.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0} | |
.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)} | |
.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;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;-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;outline:none}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%} | |
.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;overflow-y:auto;max-height:400px;padding:15px} | |
.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;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;*zoom:1}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0} | |
.modal-footer:after{clear:both} | |
.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0} | |
.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;visibility:visible;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.8;filter:alpha(opacity=80)} | |
.tooltip.top{margin-top:-3px;padding:5px 0} | |
.tooltip.right{margin-left:3px;padding:0 5px} | |
.tooltip.bottom{margin-top:3px;padding:5px 0} | |
.tooltip.left{margin-left:-3px;padding:0 5px} | |
.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px;-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-width:5px 5px 0;border-top-color:#000} | |
.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000} | |
.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000} | |
.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000} | |
.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;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);white-space:normal}.popover.top{margin-top:-10px} | |
.popover.right{margin-left:10px} | |
.popover.bottom{margin-top:10px} | |
.popover.left{margin-left:-10px} | |
.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0;-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{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff} | |
.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff} | |
.popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff} | |
.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px} | |
.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;content:"";line-height:0} | |
.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 .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out} | |
a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-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-left:auto;margin-right:auto} | |
.thumbnail .caption{padding:9px;color:#555} | |
.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:10.998px;font-weight:bold;line-height:14px;color:#fff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#999} | |
.label{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} | |
.badge{padding-left:9px;padding-right:9px;border-radius: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:#fff;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:#333} | |
.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{overflow:hidden;height:20px;margin-bottom:20px;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;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);border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px} | |
.progress .bar{width:0;height:100%;color:#fff;float:left;font-size:12px;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 .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease} | |
.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15)} | |
.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.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(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.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(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.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(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.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(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.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;border-radius:4px;-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{overflow:hidden;width:100%;position:relative} | |
.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.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:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{left:auto;right:15px} | |
.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.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;left:0;right:0;bottom:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)} | |
.carousel-caption h4,.carousel-caption p{color:#fff;line-height:20px} | |
.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:#eee;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px} | |
.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} | |
@-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;content:"";line-height:0} .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;content:"";line-height:0} .row-fluid:after{clear:both} .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%} .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;content:"";line-height:0} .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;content:"";line-height:0} .row-fluid:after{clear:both} .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%} .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-left:20px;padding-right:20px} .navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-left:-20px;margin-right:-20px} .container-fluid{padding:0} .dl-horizontal dt{float:none;clear:none;width:auto;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"]{float:none;display:block;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;left:20px;right: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-left:10px;padding-right:10px} .media .pull-left,.media .pull-right{float:none;display:block;margin-bottom:10px} .media-object{margin-right:0;margin-left:0} .modal{top:10px;left:10px;right: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-left:10px;padding-right: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:#777;text-shadow:none} .nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} .nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;border-radius:4px;-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:#999} .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:#111} .nav-collapse.in .btn-group{margin-top:5px;padding:0} .nav-collapse .dropdown-menu{position:static;top:auto;left:auto;float:none;display:none;max-width:none;margin:0 15px;padding:0;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,.1), 0 1px 0 rgba(255,255,255,.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1)} .navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111} .navbar .nav-collapse .nav.pull-right{float:none;margin-left:0} .nav-collapse,.nav-collapse.collapse{overflow:hidden;height:0} .navbar .btn-navbar{display:block} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px}}@media (min-width:979px + 1){.nav-collapse.collapse{height:auto !important;overflow:visible !important}}@font-face{font-family:'FontAwesome';src:url('../components/font-awesome/font/fontawesome-webfont.eot?v=3.2.1');src:url('../components/font-awesome/font/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'),url('../components/font-awesome/font/fontawesome-webfont.woff?v=3.2.1') format('woff'),url('../components/font-awesome/font/fontawesome-webfont.ttf?v=3.2.1') format('truetype'),url('../components/font-awesome/font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg');font-weight:normal;font-style:normal}[class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em} | |
[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none} | |
.icon-large:before{vertical-align:-10%;font-size:1.3333333333333333em} | |
a [class^="icon-"],a [class*=" icon-"]{display:inline} | |
[class^="icon-"].icon-fixed-width,[class*=" icon-"].icon-fixed-width{display:inline-block;width:1.1428571428571428em;text-align:right;padding-right:.2857142857142857em}[class^="icon-"].icon-fixed-width.icon-large,[class*=" icon-"].icon-fixed-width.icon-large{width:1.4285714285714286em} | |
.icons-ul{margin-left:2.142857142857143em;list-style-type:none}.icons-ul>li{position:relative} | |
.icons-ul .icon-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;text-align:center;line-height:inherit} | |
[class^="icon-"].hide,[class*=" icon-"].hide{display:none} | |
.icon-muted{color:#eee} | |
.icon-light{color:#fff} | |
.icon-dark{color:#333} | |
.icon-border{border:solid 1px #eee;padding:.2em .25em .15em;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} | |
.icon-2x{font-size:2em}.icon-2x.icon-border{border-width:2px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px} | |
.icon-3x{font-size:3em}.icon-3x.icon-border{border-width:3px;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px} | |
.icon-4x{font-size:4em}.icon-4x.icon-border{border-width:4px;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px} | |
.icon-5x{font-size:5em}.icon-5x.icon-border{border-width:5px;border-radius:7px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px} | |
.pull-right{float:right} | |
.pull-left{float:left} | |
[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.3em} | |
[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em} | |
[class^="icon-"],[class*=" icon-"]{display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0 0;background-repeat:repeat;margin-top:0} | |
.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:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:none} | |
.btn [class^="icon-"].icon-large,.nav [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large,.nav [class*=" icon-"].icon-large{line-height:.9em} | |
.btn [class^="icon-"].icon-spin,.nav [class^="icon-"].icon-spin,.btn [class*=" icon-"].icon-spin,.nav [class*=" icon-"].icon-spin{display:inline-block} | |
.nav-tabs [class^="icon-"],.nav-pills [class^="icon-"],.nav-tabs [class*=" icon-"],.nav-pills [class*=" icon-"],.nav-tabs [class^="icon-"].icon-large,.nav-pills [class^="icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large{line-height:.9em} | |
.btn [class^="icon-"].pull-left.icon-2x,.btn [class*=" icon-"].pull-left.icon-2x,.btn [class^="icon-"].pull-right.icon-2x,.btn [class*=" icon-"].pull-right.icon-2x{margin-top:.18em} | |
.btn [class^="icon-"].icon-spin.icon-large,.btn [class*=" icon-"].icon-spin.icon-large{line-height:.8em} | |
.btn.btn-small [class^="icon-"].pull-left.icon-2x,.btn.btn-small [class*=" icon-"].pull-left.icon-2x,.btn.btn-small [class^="icon-"].pull-right.icon-2x,.btn.btn-small [class*=" icon-"].pull-right.icon-2x{margin-top:.25em} | |
.btn.btn-large [class^="icon-"],.btn.btn-large [class*=" icon-"]{margin-top:0}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x,.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-top:.05em} | |
.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x{margin-right:.2em} | |
.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-left:.2em} | |
.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{line-height:inherit} | |
.icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:-35%}.icon-stack [class^="icon-"],.icon-stack [class*=" icon-"]{display:block;text-align:center;position:absolute;width:100%;height:100%;font-size:1em;line-height:inherit;*line-height:2em} | |
.icon-stack .icon-stack-base{font-size:2em;*line-height:1em} | |
.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear} | |
a .icon-stack,a .icon-spin{display:inline-block;text-decoration:none} | |
@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)} 100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)} 100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)} 100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)} 100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)} 100%{transform:rotate(359deg)}}.icon-rotate-90:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)} | |
.icon-rotate-180:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2)} | |
.icon-rotate-270:before{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)} | |
.icon-flip-horizontal:before{-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1)} | |
.icon-flip-vertical:before{-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1)} | |
a .icon-rotate-90:before,a .icon-rotate-180:before,a .icon-rotate-270:before,a .icon-flip-horizontal:before,a .icon-flip-vertical:before{display:inline-block} | |
.icon-glass:before{content:"\f000"} | |
.icon-music:before{content:"\f001"} | |
.icon-search:before{content:"\f002"} | |
.icon-envelope-alt:before{content:"\f003"} | |
.icon-heart:before{content:"\f004"} | |
.icon-star:before{content:"\f005"} | |
.icon-star-empty:before{content:"\f006"} | |
.icon-user:before{content:"\f007"} | |
.icon-film:before{content:"\f008"} | |
.icon-th-large:before{content:"\f009"} | |
.icon-th:before{content:"\f00a"} | |
.icon-th-list:before{content:"\f00b"} | |
.icon-ok:before{content:"\f00c"} | |
.icon-remove:before{content:"\f00d"} | |
.icon-zoom-in:before{content:"\f00e"} | |
.icon-zoom-out:before{content:"\f010"} | |
.icon-power-off:before,.icon-off:before{content:"\f011"} | |
.icon-signal:before{content:"\f012"} | |
.icon-gear:before,.icon-cog:before{content:"\f013"} | |
.icon-trash:before{content:"\f014"} | |
.icon-home:before{content:"\f015"} | |
.icon-file-alt:before{content:"\f016"} | |
.icon-time:before{content:"\f017"} | |
.icon-road:before{content:"\f018"} | |
.icon-download-alt:before{content:"\f019"} | |
.icon-download:before{content:"\f01a"} | |
.icon-upload:before{content:"\f01b"} | |
.icon-inbox:before{content:"\f01c"} | |
.icon-play-circle:before{content:"\f01d"} | |
.icon-rotate-right:before,.icon-repeat:before{content:"\f01e"} | |
.icon-refresh:before{content:"\f021"} | |
.icon-list-alt:before{content:"\f022"} | |
.icon-lock:before{content:"\f023"} | |
.icon-flag:before{content:"\f024"} | |
.icon-headphones:before{content:"\f025"} | |
.icon-volume-off:before{content:"\f026"} | |
.icon-volume-down:before{content:"\f027"} | |
.icon-volume-up:before{content:"\f028"} | |
.icon-qrcode:before{content:"\f029"} | |
.icon-barcode:before{content:"\f02a"} | |
.icon-tag:before{content:"\f02b"} | |
.icon-tags:before{content:"\f02c"} | |
.icon-book:before{content:"\f02d"} | |
.icon-bookmark:before{content:"\f02e"} | |
.icon-print:before{content:"\f02f"} | |
.icon-camera:before{content:"\f030"} | |
.icon-font:before{content:"\f031"} | |
.icon-bold:before{content:"\f032"} | |
.icon-italic:before{content:"\f033"} | |
.icon-text-height:before{content:"\f034"} | |
.icon-text-width:before{content:"\f035"} | |
.icon-align-left:before{content:"\f036"} | |
.icon-align-center:before{content:"\f037"} | |
.icon-align-right:before{content:"\f038"} | |
.icon-align-justify:before{content:"\f039"} | |
.icon-list:before{content:"\f03a"} | |
.icon-indent-left:before{content:"\f03b"} | |
.icon-indent-right:before{content:"\f03c"} | |
.icon-facetime-video:before{content:"\f03d"} | |
.icon-picture:before{content:"\f03e"} | |
.icon-pencil:before{content:"\f040"} | |
.icon-map-marker:before{content:"\f041"} | |
.icon-adjust:before{content:"\f042"} | |
.icon-tint:before{content:"\f043"} | |
.icon-edit:before{content:"\f044"} | |
.icon-share:before{content:"\f045"} | |
.icon-check:before{content:"\f046"} | |
.icon-move:before{content:"\f047"} | |
.icon-step-backward:before{content:"\f048"} | |
.icon-fast-backward:before{content:"\f049"} | |
.icon-backward:before{content:"\f04a"} | |
.icon-play:before{content:"\f04b"} | |
.icon-pause:before{content:"\f04c"} | |
.icon-stop:before{content:"\f04d"} | |
.icon-forward:before{content:"\f04e"} | |
.icon-fast-forward:before{content:"\f050"} | |
.icon-step-forward:before{content:"\f051"} | |
.icon-eject:before{content:"\f052"} | |
.icon-chevron-left:before{content:"\f053"} | |
.icon-chevron-right:before{content:"\f054"} | |
.icon-plus-sign:before{content:"\f055"} | |
.icon-minus-sign:before{content:"\f056"} | |
.icon-remove-sign:before{content:"\f057"} | |
.icon-ok-sign:before{content:"\f058"} | |
.icon-question-sign:before{content:"\f059"} | |
.icon-info-sign:before{content:"\f05a"} | |
.icon-screenshot:before{content:"\f05b"} | |
.icon-remove-circle:before{content:"\f05c"} | |
.icon-ok-circle:before{content:"\f05d"} | |
.icon-ban-circle:before{content:"\f05e"} | |
.icon-arrow-left:before{content:"\f060"} | |
.icon-arrow-right:before{content:"\f061"} | |
.icon-arrow-up:before{content:"\f062"} | |
.icon-arrow-down:before{content:"\f063"} | |
.icon-mail-forward:before,.icon-share-alt:before{content:"\f064"} | |
.icon-resize-full:before{content:"\f065"} | |
.icon-resize-small:before{content:"\f066"} | |
.icon-plus:before{content:"\f067"} | |
.icon-minus:before{content:"\f068"} | |
.icon-asterisk:before{content:"\f069"} | |
.icon-exclamation-sign:before{content:"\f06a"} | |
.icon-gift:before{content:"\f06b"} | |
.icon-leaf:before{content:"\f06c"} | |
.icon-fire:before{content:"\f06d"} | |
.icon-eye-open:before{content:"\f06e"} | |
.icon-eye-close:before{content:"\f070"} | |
.icon-warning-sign:before{content:"\f071"} | |
.icon-plane:before{content:"\f072"} | |
.icon-calendar:before{content:"\f073"} | |
.icon-random:before{content:"\f074"} | |
.icon-comment:before{content:"\f075"} | |
.icon-magnet:before{content:"\f076"} | |
.icon-chevron-up:before{content:"\f077"} | |
.icon-chevron-down:before{content:"\f078"} | |
.icon-retweet:before{content:"\f079"} | |
.icon-shopping-cart:before{content:"\f07a"} | |
.icon-folder-close:before{content:"\f07b"} | |
.icon-folder-open:before{content:"\f07c"} | |
.icon-resize-vertical:before{content:"\f07d"} | |
.icon-resize-horizontal:before{content:"\f07e"} | |
.icon-bar-chart:before{content:"\f080"} | |
.icon-twitter-sign:before{content:"\f081"} | |
.icon-facebook-sign:before{content:"\f082"} | |
.icon-camera-retro:before{content:"\f083"} | |
.icon-key:before{content:"\f084"} | |
.icon-gears:before,.icon-cogs:before{content:"\f085"} | |
.icon-comments:before{content:"\f086"} | |
.icon-thumbs-up-alt:before{content:"\f087"} | |
.icon-thumbs-down-alt:before{content:"\f088"} | |
.icon-star-half:before{content:"\f089"} | |
.icon-heart-empty:before{content:"\f08a"} | |
.icon-signout:before{content:"\f08b"} | |
.icon-linkedin-sign:before{content:"\f08c"} | |
.icon-pushpin:before{content:"\f08d"} | |
.icon-external-link:before{content:"\f08e"} | |
.icon-signin:before{content:"\f090"} | |
.icon-trophy:before{content:"\f091"} | |
.icon-github-sign:before{content:"\f092"} | |
.icon-upload-alt:before{content:"\f093"} | |
.icon-lemon:before{content:"\f094"} | |
.icon-phone:before{content:"\f095"} | |
.icon-unchecked:before,.icon-check-empty:before{content:"\f096"} | |
.icon-bookmark-empty:before{content:"\f097"} | |
.icon-phone-sign:before{content:"\f098"} | |
.icon-twitter:before{content:"\f099"} | |
.icon-facebook:before{content:"\f09a"} | |
.icon-github:before{content:"\f09b"} | |
.icon-unlock:before{content:"\f09c"} | |
.icon-credit-card:before{content:"\f09d"} | |
.icon-rss:before{content:"\f09e"} | |
.icon-hdd:before{content:"\f0a0"} | |
.icon-bullhorn:before{content:"\f0a1"} | |
.icon-bell:before{content:"\f0a2"} | |
.icon-certificate:before{content:"\f0a3"} | |
.icon-hand-right:before{content:"\f0a4"} | |
.icon-hand-left:before{content:"\f0a5"} | |
.icon-hand-up:before{content:"\f0a6"} | |
.icon-hand-down:before{content:"\f0a7"} | |
.icon-circle-arrow-left:before{content:"\f0a8"} | |
.icon-circle-arrow-right:before{content:"\f0a9"} | |
.icon-circle-arrow-up:before{content:"\f0aa"} | |
.icon-circle-arrow-down:before{content:"\f0ab"} | |
.icon-globe:before{content:"\f0ac"} | |
.icon-wrench:before{content:"\f0ad"} | |
.icon-tasks:before{content:"\f0ae"} | |
.icon-filter:before{content:"\f0b0"} | |
.icon-briefcase:before{content:"\f0b1"} | |
.icon-fullscreen:before{content:"\f0b2"} | |
.icon-group:before{content:"\f0c0"} | |
.icon-link:before{content:"\f0c1"} | |
.icon-cloud:before{content:"\f0c2"} | |
.icon-beaker:before{content:"\f0c3"} | |
.icon-cut:before{content:"\f0c4"} | |
.icon-copy:before{content:"\f0c5"} | |
.icon-paperclip:before,.icon-paper-clip:before{content:"\f0c6"} | |
.icon-save:before{content:"\f0c7"} | |
.icon-sign-blank:before{content:"\f0c8"} | |
.icon-reorder:before{content:"\f0c9"} | |
.icon-list-ul:before{content:"\f0ca"} | |
.icon-list-ol:before{content:"\f0cb"} | |
.icon-strikethrough:before{content:"\f0cc"} | |
.icon-underline:before{content:"\f0cd"} | |
.icon-table:before{content:"\f0ce"} | |
.icon-magic:before{content:"\f0d0"} | |
.icon-truck:before{content:"\f0d1"} | |
.icon-pinterest:before{content:"\f0d2"} | |
.icon-pinterest-sign:before{content:"\f0d3"} | |
.icon-google-plus-sign:before{content:"\f0d4"} | |
.icon-google-plus:before{content:"\f0d5"} | |
.icon-money:before{content:"\f0d6"} | |
.icon-caret-down:before{content:"\f0d7"} | |
.icon-caret-up:before{content:"\f0d8"} | |
.icon-caret-left:before{content:"\f0d9"} | |
.icon-caret-right:before{content:"\f0da"} | |
.icon-columns:before{content:"\f0db"} | |
.icon-sort:before{content:"\f0dc"} | |
.icon-sort-down:before{content:"\f0dd"} | |
.icon-sort-up:before{content:"\f0de"} | |
.icon-envelope:before{content:"\f0e0"} | |
.icon-linkedin:before{content:"\f0e1"} | |
.icon-rotate-left:before,.icon-undo:before{content:"\f0e2"} | |
.icon-legal:before{content:"\f0e3"} | |
.icon-dashboard:before{content:"\f0e4"} | |
.icon-comment-alt:before{content:"\f0e5"} | |
.icon-comments-alt:before{content:"\f0e6"} | |
.icon-bolt:before{content:"\f0e7"} | |
.icon-sitemap:before{content:"\f0e8"} | |
.icon-umbrella:before{content:"\f0e9"} | |
.icon-paste:before{content:"\f0ea"} | |
.icon-lightbulb:before{content:"\f0eb"} | |
.icon-exchange:before{content:"\f0ec"} | |
.icon-cloud-download:before{content:"\f0ed"} | |
.icon-cloud-upload:before{content:"\f0ee"} | |
.icon-user-md:before{content:"\f0f0"} | |
.icon-stethoscope:before{content:"\f0f1"} | |
.icon-suitcase:before{content:"\f0f2"} | |
.icon-bell-alt:before{content:"\f0f3"} | |
.icon-coffee:before{content:"\f0f4"} | |
.icon-food:before{content:"\f0f5"} | |
.icon-file-text-alt:before{content:"\f0f6"} | |
.icon-building:before{content:"\f0f7"} | |
.icon-hospital:before{content:"\f0f8"} | |
.icon-ambulance:before{content:"\f0f9"} | |
.icon-medkit:before{content:"\f0fa"} | |
.icon-fighter-jet:before{content:"\f0fb"} | |
.icon-beer:before{content:"\f0fc"} | |
.icon-h-sign:before{content:"\f0fd"} | |
.icon-plus-sign-alt:before{content:"\f0fe"} | |
.icon-double-angle-left:before{content:"\f100"} | |
.icon-double-angle-right:before{content:"\f101"} | |
.icon-double-angle-up:before{content:"\f102"} | |
.icon-double-angle-down:before{content:"\f103"} | |
.icon-angle-left:before{content:"\f104"} | |
.icon-angle-right:before{content:"\f105"} | |
.icon-angle-up:before{content:"\f106"} | |
.icon-angle-down:before{content:"\f107"} | |
.icon-desktop:before{content:"\f108"} | |
.icon-laptop:before{content:"\f109"} | |
.icon-tablet:before{content:"\f10a"} | |
.icon-mobile-phone:before{content:"\f10b"} | |
.icon-circle-blank:before{content:"\f10c"} | |
.icon-quote-left:before{content:"\f10d"} | |
.icon-quote-right:before{content:"\f10e"} | |
.icon-spinner:before{content:"\f110"} | |
.icon-circle:before{content:"\f111"} | |
.icon-mail-reply:before,.icon-reply:before{content:"\f112"} | |
.icon-github-alt:before{content:"\f113"} | |
.icon-folder-close-alt:before{content:"\f114"} | |
.icon-folder-open-alt:before{content:"\f115"} | |
.icon-expand-alt:before{content:"\f116"} | |
.icon-collapse-alt:before{content:"\f117"} | |
.icon-smile:before{content:"\f118"} | |
.icon-frown:before{content:"\f119"} | |
.icon-meh:before{content:"\f11a"} | |
.icon-gamepad:before{content:"\f11b"} | |
.icon-keyboard:before{content:"\f11c"} | |
.icon-flag-alt:before{content:"\f11d"} | |
.icon-flag-checkered:before{content:"\f11e"} | |
.icon-terminal:before{content:"\f120"} | |
.icon-code:before{content:"\f121"} | |
.icon-reply-all:before{content:"\f122"} | |
.icon-mail-reply-all:before{content:"\f122"} | |
.icon-star-half-full:before,.icon-star-half-empty:before{content:"\f123"} | |
.icon-location-arrow:before{content:"\f124"} | |
.icon-crop:before{content:"\f125"} | |
.icon-code-fork:before{content:"\f126"} | |
.icon-unlink:before{content:"\f127"} | |
.icon-question:before{content:"\f128"} | |
.icon-info:before{content:"\f129"} | |
.icon-exclamation:before{content:"\f12a"} | |
.icon-superscript:before{content:"\f12b"} | |
.icon-subscript:before{content:"\f12c"} | |
.icon-eraser:before{content:"\f12d"} | |
.icon-puzzle-piece:before{content:"\f12e"} | |
.icon-microphone:before{content:"\f130"} | |
.icon-microphone-off:before{content:"\f131"} | |
.icon-shield:before{content:"\f132"} | |
.icon-calendar-empty:before{content:"\f133"} | |
.icon-fire-extinguisher:before{content:"\f134"} | |
.icon-rocket:before{content:"\f135"} | |
.icon-maxcdn:before{content:"\f136"} | |
.icon-chevron-sign-left:before{content:"\f137"} | |
.icon-chevron-sign-right:before{content:"\f138"} | |
.icon-chevron-sign-up:before{content:"\f139"} | |
.icon-chevron-sign-down:before{content:"\f13a"} | |
.icon-html5:before{content:"\f13b"} | |
.icon-css3:before{content:"\f13c"} | |
.icon-anchor:before{content:"\f13d"} | |
.icon-unlock-alt:before{content:"\f13e"} | |
.icon-bullseye:before{content:"\f140"} | |
.icon-ellipsis-horizontal:before{content:"\f141"} | |
.icon-ellipsis-vertical:before{content:"\f142"} | |
.icon-rss-sign:before{content:"\f143"} | |
.icon-play-sign:before{content:"\f144"} | |
.icon-ticket:before{content:"\f145"} | |
.icon-minus-sign-alt:before{content:"\f146"} | |
.icon-check-minus:before{content:"\f147"} | |
.icon-level-up:before{content:"\f148"} | |
.icon-level-down:before{content:"\f149"} | |
.icon-check-sign:before{content:"\f14a"} | |
.icon-edit-sign:before{content:"\f14b"} | |
.icon-external-link-sign:before{content:"\f14c"} | |
.icon-share-sign:before{content:"\f14d"} | |
.icon-compass:before{content:"\f14e"} | |
.icon-collapse:before{content:"\f150"} | |
.icon-collapse-top:before{content:"\f151"} | |
.icon-expand:before{content:"\f152"} | |
.icon-euro:before,.icon-eur:before{content:"\f153"} | |
.icon-gbp:before{content:"\f154"} | |
.icon-dollar:before,.icon-usd:before{content:"\f155"} | |
.icon-rupee:before,.icon-inr:before{content:"\f156"} | |
.icon-yen:before,.icon-jpy:before{content:"\f157"} | |
.icon-renminbi:before,.icon-cny:before{content:"\f158"} | |
.icon-won:before,.icon-krw:before{content:"\f159"} | |
.icon-bitcoin:before,.icon-btc:before{content:"\f15a"} | |
.icon-file:before{content:"\f15b"} | |
.icon-file-text:before{content:"\f15c"} | |
.icon-sort-by-alphabet:before{content:"\f15d"} | |
.icon-sort-by-alphabet-alt:before{content:"\f15e"} | |
.icon-sort-by-attributes:before{content:"\f160"} | |
.icon-sort-by-attributes-alt:before{content:"\f161"} | |
.icon-sort-by-order:before{content:"\f162"} | |
.icon-sort-by-order-alt:before{content:"\f163"} | |
.icon-thumbs-up:before{content:"\f164"} | |
.icon-thumbs-down:before{content:"\f165"} | |
.icon-youtube-sign:before{content:"\f166"} | |
.icon-youtube:before{content:"\f167"} | |
.icon-xing:before{content:"\f168"} | |
.icon-xing-sign:before{content:"\f169"} | |
.icon-youtube-play:before{content:"\f16a"} | |
.icon-dropbox:before{content:"\f16b"} | |
.icon-stackexchange:before{content:"\f16c"} | |
.icon-instagram:before{content:"\f16d"} | |
.icon-flickr:before{content:"\f16e"} | |
.icon-adn:before{content:"\f170"} | |
.icon-bitbucket:before{content:"\f171"} | |
.icon-bitbucket-sign:before{content:"\f172"} | |
.icon-tumblr:before{content:"\f173"} | |
.icon-tumblr-sign:before{content:"\f174"} | |
.icon-long-arrow-down:before{content:"\f175"} | |
.icon-long-arrow-up:before{content:"\f176"} | |
.icon-long-arrow-left:before{content:"\f177"} | |
.icon-long-arrow-right:before{content:"\f178"} | |
.icon-apple:before{content:"\f179"} | |
.icon-windows:before{content:"\f17a"} | |
.icon-android:before{content:"\f17b"} | |
.icon-linux:before{content:"\f17c"} | |
.icon-dribbble:before{content:"\f17d"} | |
.icon-skype:before{content:"\f17e"} | |
.icon-foursquare:before{content:"\f180"} | |
.icon-trello:before{content:"\f181"} | |
.icon-female:before{content:"\f182"} | |
.icon-male:before{content:"\f183"} | |
.icon-gittip:before{content:"\f184"} | |
.icon-sun:before{content:"\f185"} | |
.icon-moon:before{content:"\f186"} | |
.icon-archive:before{content:"\f187"} | |
.icon-bug:before{content:"\f188"} | |
.icon-vk:before{content:"\f189"} | |
.icon-weibo:before{content:"\f18a"} | |
.icon-renren:before{content:"\f18b"} | |
code{color:#000} | |
.border-box-sizing{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box} | |
.corner-all{border-radius:4px} | |
.hbox{display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch} | |
.hbox>*{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:none} | |
.vbox{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch} | |
.vbox>*{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:none} | |
.hbox.reverse,.vbox.reverse,.reverse{-webkit-box-direction:reverse;-moz-box-direction:reverse;box-direction:reverse;flex-direction:row-reverse} | |
.hbox.box-flex0,.vbox.box-flex0,.box-flex0{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:none;width:auto} | |
.hbox.box-flex1,.vbox.box-flex1,.box-flex1{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1} | |
.hbox.box-flex,.vbox.box-flex,.box-flex{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1} | |
.hbox.box-flex2,.vbox.box-flex2,.box-flex2{-webkit-box-flex:2;-moz-box-flex:2;box-flex:2;flex:2} | |
.box-group1{-webkit-box-flex-group:1;-moz-box-flex-group:1;box-flex-group:1} | |
.box-group2{-webkit-box-flex-group:2;-moz-box-flex-group:2;box-flex-group:2} | |
.hbox.start,.vbox.start,.start{-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start} | |
.hbox.end,.vbox.end,.end{-webkit-box-pack:end;-moz-box-pack:end;box-pack:end;justify-content:flex-end} | |
.hbox.center,.vbox.center,.center{-webkit-box-pack:center;-moz-box-pack:center;box-pack:center;justify-content:center} | |
.hbox.align-start,.vbox.align-start,.align-start{-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start} | |
.hbox.align-end,.vbox.align-end,.align-end{-webkit-box-align:end;-moz-box-align:end;box-align:end;align-items:flex-end} | |
.hbox.align-center,.vbox.align-center,.align-center{-webkit-box-align:center;-moz-box-align:center;box-align:center;align-items:center} | |
div.error{margin:2em;text-align:center} | |
div.error>h1{font-size:500%;line-height:normal} | |
div.error>p{font-size:200%;line-height:normal} | |
div.traceback-wrapper{text-align:left;max-width:800px;margin:auto} | |
body{background-color:#fff;position:absolute;left:0;right:0;top:0;bottom:0;overflow:visible} | |
div#header{display:none} | |
#ipython_notebook{padding-left:16px} | |
#noscript{width:auto;padding-top:16px;padding-bottom:16px;text-align:center;font-size:22px;color:#f00;font-weight:bold} | |
#ipython_notebook img{font-family:Verdana,"Helvetica Neue",Arial,Helvetica,Geneva,sans-serif;height:24px;text-decoration:none;color:#000} | |
#site{width:100%;display:none} | |
.ui-button .ui-button-text{padding:.2em .8em;font-size:77%} | |
input.ui-button{padding:.3em .9em} | |
.navbar span{margin-top:3px} | |
span#login_widget{float:right} | |
.nav-header{text-transform:none} | |
.navbar-nobg{background-color:transparent;background-image:none} | |
#header>span{margin-top:10px} | |
.modal_stretch{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;height:80%}.modal_stretch .modal-body{max-height:none;flex:1} | |
@media (min-width:768px){.modal{width:700px;margin-left:-350px}}.center-nav{display:inline-block;margin-bottom:-4px} | |
.alternate_upload{background-color:none;display:inline} | |
.alternate_upload.form{padding:0;margin:0} | |
.alternate_upload input.fileinput{background-color:#f00;position:relative;opacity:0;z-index:2;width:295px;margin-left:163px;cursor:pointer;height:26px} | |
ul#tabs{margin-bottom:4px} | |
ul#tabs a{padding-top:4px;padding-bottom:4px} | |
ul.breadcrumb a:focus,ul.breadcrumb a:hover{text-decoration:none} | |
ul.breadcrumb i.icon-home{font-size:16px;margin-right:4px} | |
ul.breadcrumb span{color:#5e5e5e} | |
.list_toolbar{padding:4px 0 4px 0} | |
.list_toolbar [class*="span"]{min-height:26px} | |
.list_header{font-weight:bold} | |
.list_container{margin-top:4px;margin-bottom:20px;border:1px solid #ababab;border-radius:4px} | |
.list_container>div{border-bottom:1px solid #ababab}.list_container>div:hover .list-item{background-color:#f00} | |
.list_container>div:last-child{border:none} | |
.list_item:hover .list_item{background-color:#ddd} | |
.list_item a{text-decoration:none} | |
.list_header>div,.list_item>div{padding-top:4px;padding-bottom:4px;padding-left:7px;padding-right:7px;height:22px;line-height:22px} | |
.item_name{line-height:22px;height:26px} | |
.item_icon{font-size:14px;color:#5e5e5e;margin-right:7px} | |
.item_buttons{line-height:1em} | |
.toolbar_info{height:26px;line-height:26px} | |
input.nbname_input,input.engine_num_input{padding-top:3px;padding-bottom:3px;height:14px;line-height:14px;margin:0} | |
input.engine_num_input{width:60px} | |
.highlight_text{color:#00f} | |
#project_name>.breadcrumb{padding:0;margin-bottom:0;background-color:transparent;font-weight:bold} | |
.ansibold{font-weight:bold} | |
.ansiblack{color:#000} | |
.ansired{color:#8b0000} | |
.ansigreen{color:#006400} | |
.ansiyellow{color:#a52a2a} | |
.ansiblue{color:#00008b} | |
.ansipurple{color:#9400d3} | |
.ansicyan{color:#4682b4} | |
.ansigray{color:#808080} | |
.ansibgblack{background-color:#000} | |
.ansibgred{background-color:#f00} | |
.ansibggreen{background-color:#008000} | |
.ansibgyellow{background-color:#ff0} | |
.ansibgblue{background-color:#00f} | |
.ansibgpurple{background-color:#f0f} | |
.ansibgcyan{background-color:#0ff} | |
.ansibggray{background-color:#808080} | |
div.cell{border:1px solid transparent;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}div.cell.selected{border-radius:4px;border:thin #ababab solid} | |
div.cell.edit_mode{border-radius:4px;border:thin #008000 solid} | |
div.cell{width:100%;padding:5px 5px 5px 0;margin:0;outline:none} | |
div.prompt{min-width:11ex;padding:.4em;margin:0;font-family:monospace;text-align:right;line-height:1.21429em} | |
@media (max-width:480px){div.prompt{text-align:left}}div.inner_cell{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1} | |
div.input_area{border:1px solid #cfcfcf;border-radius:4px;background:#f7f7f7} | |
div.prompt:empty{padding-top:0;padding-bottom:0} | |
div.input{page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch} | |
@media (max-width:480px){div.input{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}}div.input_prompt{color:#000080;border-top:1px solid transparent} | |
div.input_area>div.highlight{margin:.4em;border:none;padding:0;background-color:transparent} | |
div.input_area>div.highlight>pre{margin:0;border:0;padding:0;background-color:transparent;font-size:14px;line-height:1.21429em} | |
.CodeMirror{line-height:1.21429em;height:auto;background:none;} | |
.CodeMirror-scroll{overflow-y:hidden;overflow-x:auto} | |
@-moz-document url-prefix(){.CodeMirror-scroll{overflow-x:hidden}}.CodeMirror-lines{padding:.4em} | |
.CodeMirror-linenumber{padding:0 8px 0 4px} | |
.CodeMirror-gutters{border-bottom-left-radius:4px;border-top-left-radius:4px} | |
.CodeMirror pre{padding:0;border:0;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0} | |
pre code{display:block;padding:.5em} | |
.highlight-base,pre code,pre .subst,pre .tag .title,pre .lisp .title,pre .clojure .built_in,pre .nginx .title{color:#000} | |
.highlight-string,pre .string,pre .constant,pre .parent,pre .tag .value,pre .rules .value,pre .rules .value .number,pre .preprocessor,pre .ruby .symbol,pre .ruby .symbol .string,pre .aggregate,pre .template_tag,pre .django .variable,pre .smalltalk .class,pre .addition,pre .flow,pre .stream,pre .bash .variable,pre .apache .tag,pre .apache .cbracket,pre .tex .command,pre .tex .special,pre .erlang_repl .function_or_atom,pre .markdown .header{color:#ba2121} | |
.highlight-comment,pre .comment,pre .annotation,pre .template_comment,pre .diff .header,pre .chunk,pre .markdown .blockquote{color:#408080;font-style:italic} | |
.highlight-number,pre .number,pre .date,pre .regexp,pre .literal,pre .smalltalk .symbol,pre .smalltalk .char,pre .go .constant,pre .change,pre .markdown .bullet,pre .markdown .link_url{color:#080} | |
pre .label,pre .javadoc,pre .ruby .string,pre .decorator,pre .filter .argument,pre .localvars,pre .array,pre .attr_selector,pre .important,pre .pseudo,pre .pi,pre .doctype,pre .deletion,pre .envvar,pre .shebang,pre .apache .sqbracket,pre .nginx .built_in,pre .tex .formula,pre .erlang_repl .reserved,pre .prompt,pre .markdown .link_label,pre .vhdl .attribute,pre .clojure .attribute,pre .coffeescript .property{color:#88f} | |
.highlight-keyword,pre .keyword,pre .id,pre .phpdoc,pre .aggregate,pre .css .tag,pre .javadoctag,pre .phpdoc,pre .yardoctag,pre .smalltalk .class,pre .winutils,pre .bash .variable,pre .apache .tag,pre .go .typename,pre .tex .command,pre .markdown .strong,pre .request,pre .status{color:#008000;font-weight:bold} | |
.highlight-builtin,pre .built_in{color:#008000} | |
pre .markdown .emphasis{font-style:italic} | |
pre .nginx .built_in{font-weight:normal} | |
pre .coffeescript .javascript,pre .javascript .xml,pre .tex .formula,pre .xml .javascript,pre .xml .vbscript,pre .xml .css,pre .xml .cdata{opacity:.5} | |
.cm-s-ipython span.cm-variable{color:#000} | |
.cm-s-ipython span.cm-keyword{color:#008000;font-weight:bold} | |
.cm-s-ipython span.cm-number{color:#080} | |
.cm-s-ipython span.cm-comment{color:#408080;font-style:italic} | |
.cm-s-ipython span.cm-string{color:#ba2121} | |
.cm-s-ipython span.cm-builtin{color:#008000} | |
.cm-s-ipython span.cm-error{color:#f00} | |
.cm-s-ipython span.cm-operator{color:#a2f;font-weight:bold} | |
.cm-s-ipython span.cm-meta{color:#a2f} | |
.cm-s-ipython span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat} | |
div.output_wrapper{position:relative;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch} | |
div.output_scroll{height:24em;width:100%;overflow:auto;border-radius:4px;-webkit-box-shadow:inset 0 2px 8px rgba(0,0,0,0.8);-moz-box-shadow:inset 0 2px 8px rgba(0,0,0,0.8);box-shadow:inset 0 2px 8px rgba(0,0,0,0.8);display:block} | |
div.output_collapsed{margin:0;padding:0;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch} | |
div.out_prompt_overlay{height:100%;padding:0 .4em;position:absolute;border-radius:4px} | |
div.out_prompt_overlay:hover{-webkit-box-shadow:inset 0 0 1px #000;-moz-box-shadow:inset 0 0 1px #000;box-shadow:inset 0 0 1px #000;background:rgba(240,240,240,0.5)} | |
div.output_prompt{color:#8b0000} | |
div.output_area{padding:0;page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}div.output_area .MathJax_Display{text-align:left !important} | |
div.output_area .rendered_html table{margin-left:0;margin-right:0} | |
div.output_area .rendered_html img{margin-left:0;margin-right:0} | |
.output{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch} | |
@media (max-width:480px){div.output_area{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}}div.output_area pre{margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline;color:#000;background-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;line-height:inherit} | |
div.output_subarea{padding:.4em .4em 0 .4em;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1} | |
div.output_text{text-align:left;color:#000;line-height:1.21429em} | |
div.output_stderr{background:#fdd;} | |
div.output_latex{text-align:left} | |
div.output_javascript:empty{padding:0} | |
.js-error{color:#8b0000} | |
div.raw_input_container{font-family:monospace;padding-top:5px} | |
span.raw_input_prompt{} | |
input.raw_input{font-family:inherit;font-size:inherit;color:inherit;width:auto;vertical-align:baseline;padding:0 .25em;margin:0 .25em} | |
input.raw_input:focus{box-shadow:none} | |
p.p-space{margin-bottom:10px} | |
.rendered_html{color:#000;}.rendered_html em{font-style:italic} | |
.rendered_html strong{font-weight:bold} | |
.rendered_html u{text-decoration:underline} | |
.rendered_html :link{text-decoration:underline} | |
.rendered_html :visited{text-decoration:underline} | |
.rendered_html h1{font-size:185.7%;margin:1.08em 0 0 0;font-weight:bold;line-height:1} | |
.rendered_html h2{font-size:157.1%;margin:1.27em 0 0 0;font-weight:bold;line-height:1} | |
.rendered_html h3{font-size:128.6%;margin:1.55em 0 0 0;font-weight:bold;line-height:1} | |
.rendered_html h4{font-size:100%;margin:2em 0 0 0;font-weight:bold;line-height:1} | |
.rendered_html h5{font-size:100%;margin:2em 0 0 0;font-weight:bold;line-height:1;font-style:italic} | |
.rendered_html h6{font-size:100%;margin:2em 0 0 0;font-weight:bold;line-height:1;font-style:italic} | |
.rendered_html h1:first-child{margin-top:.538em} | |
.rendered_html h2:first-child{margin-top:.636em} | |
.rendered_html h3:first-child{margin-top:.777em} | |
.rendered_html h4:first-child{margin-top:1em} | |
.rendered_html h5:first-child{margin-top:1em} | |
.rendered_html h6:first-child{margin-top:1em} | |
.rendered_html ul{list-style:disc;margin:0 2em} | |
.rendered_html ul ul{list-style:square;margin:0 2em} | |
.rendered_html ul ul ul{list-style:circle;margin:0 2em} | |
.rendered_html ol{list-style:decimal;margin:0 2em} | |
.rendered_html ol ol{list-style:upper-alpha;margin:0 2em} | |
.rendered_html ol ol ol{list-style:lower-alpha;margin:0 2em} | |
.rendered_html ol ol ol ol{list-style:lower-roman;margin:0 2em} | |
.rendered_html ol ol ol ol ol{list-style:decimal;margin:0 2em} | |
.rendered_html *+ul{margin-top:1em} | |
.rendered_html *+ol{margin-top:1em} | |
.rendered_html hr{color:#000;background-color:#000} | |
.rendered_html pre{margin:1em 2em} | |
.rendered_html pre,.rendered_html code{border:0;background-color:#fff;color:#000;font-size:100%;padding:0} | |
.rendered_html blockquote{margin:1em 2em} | |
.rendered_html table{margin-left:auto;margin-right:auto;border:1px solid #000;border-collapse:collapse} | |
.rendered_html tr,.rendered_html th,.rendered_html td{border:1px solid #000;border-collapse:collapse;margin:1em 2em} | |
.rendered_html td,.rendered_html th{text-align:left;vertical-align:middle;padding:4px} | |
.rendered_html th{font-weight:bold} | |
.rendered_html *+table{margin-top:1em} | |
.rendered_html p{text-align:justify} | |
.rendered_html *+p{margin-top:1em} | |
.rendered_html img{display:block;margin-left:auto;margin-right:auto} | |
.rendered_html *+img{margin-top:1em} | |
div.text_cell{padding:5px 5px 5px 0;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch} | |
@media (max-width:480px){div.text_cell>div.prompt{display:none}}div.text_cell_render{outline:none;resize:none;width:inherit;border-style:none;padding:.5em .5em .5em .4em;color:#000} | |
a.anchor-link:link{text-decoration:none;padding:0 20px;visibility:hidden} | |
h1:hover .anchor-link,h2:hover .anchor-link,h3:hover .anchor-link,h4:hover .anchor-link,h5:hover .anchor-link,h6:hover .anchor-link{visibility:visible} | |
div.cell.text_cell.rendered{padding:0} | |
.widget-area{page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}.widget-area .widget-subarea{padding:.44em .4em .4em 1px;margin-left:6px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;-webkit-box-flex:2;-moz-box-flex:2;box-flex:2;flex:2;-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start} | |
.widget-hlabel{min-width:10ex;padding-right:8px;padding-top:3px;text-align:right;vertical-align:text-top} | |
.widget-vlabel{padding-bottom:5px;text-align:center;vertical-align:text-bottom} | |
.widget-hreadout{padding-left:8px;padding-top:3px;text-align:left;vertical-align:text-top} | |
.widget-vreadout{padding-top:5px;text-align:center;vertical-align:text-top} | |
.slide-track{border:1px solid #ccc;background:#fff;border-radius:4px;} | |
.widget-hslider{padding-left:8px;padding-right:5px;overflow:visible;width:348px;height:5px;max-height:5px;margin-top:11px;margin-bottom:10px;border:1px solid #ccc;background:#fff;border-radius:4px;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}.widget-hslider .ui-slider{border:0 !important;background:none !important;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}.widget-hslider .ui-slider .ui-slider-handle{width:14px !important;height:28px !important;margin-top:-8px !important} | |
.widget-vslider{padding-bottom:8px;overflow:visible;width:5px;max-width:5px;height:250px;margin-left:12px;border:1px solid #ccc;background:#fff;border-radius:4px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}.widget-vslider .ui-slider{border:0 !important;background:none !important;margin-left:-4px;margin-top:5px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}.widget-vslider .ui-slider .ui-slider-handle{width:28px !important;height:14px !important;margin-left:-9px} | |
.widget-text{width:350px;margin:0 !important} | |
.widget-listbox{width:364px;margin-bottom:0} | |
.widget-numeric-text{width:150px;margin:0 !important} | |
.widget-progress{width:363px}.widget-progress .bar{-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none} | |
.widget-combo-btn{min-width:138px;} | |
.widget-box{margin:5px;-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start} | |
.widget-hbox{margin:5px;-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch} | |
.widget-hbox-single{margin:5px;-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;height:30px} | |
.widget-vbox{margin:5px;-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch} | |
.widget-vbox-single{margin:5px;-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;width:30px} | |
.widget-modal{overflow:hidden;position:absolute !important;top:0;left:0;margin-left:0 !important} | |
.widget-modal-body{max-height:none !important} | |
.widget-container{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start} | |
.widget-radio-box{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding-top:4px} | |
.docked-widget-modal{overflow:hidden;position:relative !important;top:0 !important;left:0 !important;margin-left:0 !important} | |
body{background-color:#fff} | |
body.notebook_app{overflow:hidden} | |
@media (max-width:767px){body.notebook_app{padding-left:0;padding-right:0}}span#notebook_name{height:1em;line-height:1em;padding:3px;border:none;font-size:146.5%} | |
div#notebook_panel{margin:0 0 0 0;padding:0;-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)} | |
div#notebook{font-size:14px;line-height:20px;overflow-y:scroll;overflow-x:auto;width:100%;padding:1em 0 1em 0;margin:0;border-top:1px solid #ababab;outline:none;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box} | |
div.ui-widget-content{border:1px solid #ababab;outline:none} | |
pre.dialog{background-color:#f7f7f7;border:1px solid #ddd;border-radius:4px;padding:.4em;padding-left:2em} | |
p.dialog{padding:.2em} | |
pre,code,kbd,samp{white-space:pre-wrap} | |
#fonttest{font-family:monospace} | |
p{margin-bottom:0} | |
.end_space{height:200px} | |
.celltoolbar{border:thin solid #cfcfcf;border-bottom:none;background:#eee;border-radius:3px 3px 0 0;width:100%;-webkit-box-pack:end;height:22px;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;-webkit-box-direction:reverse;-moz-box-direction:reverse;box-direction:reverse;flex-direction:row-reverse} | |
.ctb_hideshow{display:none;vertical-align:bottom;padding-right:2px} | |
.celltoolbar>div{padding-top:0} | |
.ctb_global_show .ctb_show.ctb_hideshow{display:block} | |
.ctb_global_show .ctb_show+.input_area,.ctb_global_show .ctb_show+div.text_cell_input{border-top-right-radius:0;border-top-left-radius:0} | |
.celltoolbar .button_container select{margin:10px;margin-top:1px;margin-bottom:0;padding:0;font-size:87%;width:auto;display:inline-block;height:18px;line-height:18px;vertical-align:top} | |
.celltoolbar label{display:inline-block;height:15px;line-height:15px;vertical-align:top} | |
.celltoolbar label span{font-size:85%} | |
.celltoolbar input[type=checkbox]{margin:0;margin-left:4px;margin-right:4px} | |
.celltoolbar .ui-button{border:none;vertical-align:top;height:20px;min-width:30px} | |
.completions{position:absolute;z-index:10;overflow:hidden;border:1px solid #ababab;border-radius:4px;-webkit-box-shadow:0 6px 10px -1px #adadad;-moz-box-shadow:0 6px 10px -1px #adadad;box-shadow:0 6px 10px -1px #adadad} | |
.completions select{background:#fff;outline:none;border:none;padding:0;margin:0;overflow:auto;font-family:monospace;font-size:110%;color:#000;width:auto} | |
.completions select option.context{color:#0064cd} | |
#menubar .navbar-inner{min-height:28px;border-top:1px;border-radius:0 0 4px 4px} | |
#menubar .navbar{margin-bottom:8px} | |
.nav-wrapper{border-bottom:1px solid #d4d4d4} | |
#menubar li.dropdown{line-height:12px} | |
i.menu-icon{padding-top:4px} | |
ul#help_menu li a{overflow:hidden;padding-right:2.2em}ul#help_menu li a i{margin-right:-1.2em} | |
#notification_area{z-index:10} | |
.indicator_area{color:#777;padding:4px 3px;margin:0;width:11px;z-index:10;text-align:center} | |
#kernel_indicator{margin-right:-16px} | |
.edit_mode_icon:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f040"} | |
.command_mode_icon:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:' '} | |
.kernel_idle_icon:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f10c"} | |
.kernel_busy_icon:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f111"} | |
.notification_widget{color:#777;padding:1px 12px;margin:2px 4px;z-index:10;border:1px solid #ccc;border-radius:4px;background:rgba(240,240,240,0.5)}.notification_widget.span{padding-right:2px} | |
div#pager_splitter{height:8px} | |
#pager-container{position:relative;padding:15px 0} | |
div#pager{font-size:14px;line-height:20px;overflow:auto;display:none}div#pager pre{font-size:13px;line-height:1.21429em;color:#000;background-color:#f7f7f7;padding:.4em} | |
.quickhelp{display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch} | |
.shortcut_key{display:inline-block;width:20ex;text-align:right;font-family:monospace} | |
.shortcut_descr{display:inline-block;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1} | |
span#save_widget{padding:0 5px;margin-top:12px} | |
span#checkpoint_status,span#autosave_status{font-size:small} | |
@media (max-width:767px){span#save_widget{font-size:small} span#checkpoint_status,span#autosave_status{font-size:x-small}}@media (max-width:767px){span#checkpoint_status,span#autosave_status{display:none}}@media (min-width:768px) and (max-width:979px){span#checkpoint_status{display:none} span#autosave_status{font-size:x-small}}.toolbar{padding:0 10px;margin-top:-5px}.toolbar select,.toolbar label{width:auto;height:26px;vertical-align:middle;margin-right:2px;margin-bottom:0;display:inline;font-size:92%;margin-left:.3em;margin-right:.3em;padding:0;padding-top:3px} | |
.toolbar .btn{padding:2px 8px} | |
.toolbar .btn-group{margin-top:0} | |
.toolbar-inner{border:none !important;-webkit-box-shadow:none !important;-moz-box-shadow:none !important;box-shadow:none !important} | |
#maintoolbar{margin-bottom:0} | |
@-moz-keyframes fadeOut{from{opacity:1} to{opacity:0}}@-webkit-keyframes fadeOut{from{opacity:1} to{opacity:0}}@-moz-keyframes fadeIn{from{opacity:0} to{opacity:1}}@-webkit-keyframes fadeIn{from{opacity:0} to{opacity:1}}.bigtooltip{overflow:auto;height:200px;-webkit-transition-property:height;-webkit-transition-duration:500ms;-moz-transition-property:height;-moz-transition-duration:500ms;transition-property:height;transition-duration:500ms} | |
.smalltooltip{-webkit-transition-property:height;-webkit-transition-duration:500ms;-moz-transition-property:height;-moz-transition-duration:500ms;transition-property:height;transition-duration:500ms;text-overflow:ellipsis;overflow:hidden;height:80px} | |
.tooltipbuttons{position:absolute;padding-right:15px;top:0;right:0} | |
.tooltiptext{padding-right:30px} | |
.ipython_tooltip{max-width:700px;-webkit-animation:fadeOut 400ms;-moz-animation:fadeOut 400ms;animation:fadeOut 400ms;-webkit-animation:fadeIn 400ms;-moz-animation:fadeIn 400ms;animation:fadeIn 400ms;vertical-align:middle;background-color:#f7f7f7;overflow:visible;border:#ababab 1px solid;outline:none;padding:3px;margin:0;padding-left:7px;font-family:monospace;min-height:50px;-moz-box-shadow:0 6px 10px -1px #adadad;-webkit-box-shadow:0 6px 10px -1px #adadad;box-shadow:0 6px 10px -1px #adadad;border-radius:4px;position:absolute;z-index:2}.ipython_tooltip a{float:right} | |
.ipython_tooltip .tooltiptext pre{border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;font-size:100%;background-color:#f7f7f7} | |
.pretooltiparrow{left:0;margin:0;top:-16px;width:40px;height:16px;overflow:hidden;position:absolute} | |
.pretooltiparrow:before{background-color:#f7f7f7;border:1px #ababab solid;z-index:11;content:"";position:absolute;left:15px;top:10px;width:25px;height:25px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg)} | |
</style> | |
<style type="text/css"> | |
.highlight .hll { background-color: #ffffcc } | |
.highlight { background: #f8f8f8; } | |
.highlight .c { color: #408080; font-style: italic } /* Comment */ | |
.highlight .err { border: 1px solid #FF0000 } /* Error */ | |
.highlight .k { color: #008000; font-weight: bold } /* Keyword */ | |
.highlight .o { color: #666666 } /* Operator */ | |
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */ | |
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */ | |
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */ | |
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */ | |
.highlight .gd { color: #A00000 } /* Generic.Deleted */ | |
.highlight .ge { font-style: italic } /* Generic.Emph */ | |
.highlight .gr { color: #FF0000 } /* Generic.Error */ | |
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ | |
.highlight .gi { color: #00A000 } /* Generic.Inserted */ | |
.highlight .go { color: #888888 } /* Generic.Output */ | |
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ | |
.highlight .gs { font-weight: bold } /* Generic.Strong */ | |
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ | |
.highlight .gt { color: #0044DD } /* Generic.Traceback */ | |
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ | |
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ | |
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ | |
.highlight .kp { color: #008000 } /* Keyword.Pseudo */ | |
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ | |
.highlight .kt { color: #B00040 } /* Keyword.Type */ | |
.highlight .m { color: #666666 } /* Literal.Number */ | |
.highlight .s { color: #BA2121 } /* Literal.String */ | |
.highlight .na { color: #7D9029 } /* Name.Attribute */ | |
.highlight .nb { color: #008000 } /* Name.Builtin */ | |
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ | |
.highlight .no { color: #880000 } /* Name.Constant */ | |
.highlight .nd { color: #AA22FF } /* Name.Decorator */ | |
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ | |
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ | |
.highlight .nf { color: #0000FF } /* Name.Function */ | |
.highlight .nl { color: #A0A000 } /* Name.Label */ | |
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ | |
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ | |
.highlight .nv { color: #19177C } /* Name.Variable */ | |
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ | |
.highlight .w { color: #bbbbbb } /* Text.Whitespace */ | |
.highlight .mf { color: #666666 } /* Literal.Number.Float */ | |
.highlight .mh { color: #666666 } /* Literal.Number.Hex */ | |
.highlight .mi { color: #666666 } /* Literal.Number.Integer */ | |
.highlight .mo { color: #666666 } /* Literal.Number.Oct */ | |
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ | |
.highlight .sc { color: #BA2121 } /* Literal.String.Char */ | |
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ | |
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ | |
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ | |
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ | |
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ | |
.highlight .sx { color: #008000 } /* Literal.String.Other */ | |
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */ | |
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ | |
.highlight .ss { color: #19177C } /* Literal.String.Symbol */ | |
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ | |
.highlight .vc { color: #19177C } /* Name.Variable.Class */ | |
.highlight .vg { color: #19177C } /* Name.Variable.Global */ | |
.highlight .vi { color: #19177C } /* Name.Variable.Instance */ | |
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ | |
</style> | |
<style type="text/css"> | |
/* Overrides of notebook CSS for static HTML export */ | |
html { | |
overflow-y: auto; | |
} | |
.reveal { | |
font-size: 160%; | |
} | |
.reveal pre { | |
width: inherit; | |
padding: 0.4em; | |
margin: 0px; | |
font-family: monospace, sans-serif; | |
font-size: 80%; | |
box-shadow: 0px 0px 0px rgba(0, 0, 0, 0); | |
} | |
.reveal section img { | |
border: 0px solid black; | |
box-shadow: 0 0 10px rgba(0, 0, 0, 0); | |
} | |
.reveal i { | |
font-style: normal; | |
font-family: FontAwesome; | |
font-size: 2em; | |
} | |
.reveal .slides { | |
text-align: left; | |
} | |
.reveal.fade { | |
opacity: 1; | |
} | |
.reveal .progress { | |
position: static; | |
} | |
div.input_area { | |
padding: 0.06em; | |
} | |
div.code_cell { | |
background-color: transparent; | |
} | |
div.prompt { | |
width: 11ex; | |
padding: 0.4em; | |
margin: 0px; | |
font-family: monospace, sans-serif; | |
font-size: 80%; | |
text-align: right; | |
} | |
div.output_area pre { | |
font-family: monospace, sans-serif; | |
font-size: 80%; | |
} | |
div.output_prompt { | |
/* 5px right shift to account for margin in parent container */ | |
margin: 5px 5px 0 0; | |
} | |
.rendered_html p { | |
text-align: inherit; | |
} | |
</style> | |
<!-- Custom stylesheet, it must be in the same directory as the html file --> | |
<link rel="stylesheet" href="custom.css"> | |
</head> | |
<body> | |
<div class="reveal"> | |
<div class="slides"> | |
<section> | |
<section> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<h1 id="generators-will-free-your-mind">Generators Will Free Your Mind</h1> | |
<p>James Powell</p> | |
<p><a href="http://gist.github.com/dutc">http://gist.github.com/dutc</a></p> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<p><a href="[email protected]">[email protected]</a></p> | |
<p><a href="http://twitter.com/dontusethiscode">@dontusethiscode</a></p> | |
<p><a href="http://seriously.dontusethiscode.com">seriously.dontusethiscode.com</a></p> | |
<p>dutc on irc.freenode.net</p> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<h2 id="nyc-python">NYC Python</h2> | |
<p><a href="http://nycpython.org">nycpython.org</a></p> | |
<p><a href="http://pygotham.org">pygotham.org</a></p> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<h2 id="a-conference-for-python-quants">A Conference "for Python Quants"</h2> | |
<p><a href="http://forpythonquants.com">forpythonquants.com</a></p> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<h2 id="i-used-to-be-addicted-to-the-hokey-pokey-but-i-turned-myself-around."><em>I used to be addicted to the Hokey Pokey, but I turned myself around.</em></h2> | |
</div> | |
</div> | |
</div></section> | |
</section><section> | |
<section> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<h2 id="themes">Themes</h2> | |
<ul> | |
<li>generators are a very useful way of modelling problems in Python</li> | |
<li>the ways we model problems using generators is fundamentally different</li> | |
</ul> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<h2 id="not-covered">Not Covered</h2> | |
<ul> | |
<li>what is a generator; see my previous talks</li> | |
<li>efficiencies</li> | |
</ul> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [1]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span> | |
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">division</span> | |
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">unicode_literals</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
</div></section> | |
</section><section> | |
<section> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<h2 id="functional-programming-has-already-freed-your-mind"><em>Functional Programming Has Already Freed Your Mind</em></h2> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [2]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">random</span> <span class="kn">import</span> <span class="n">randrange</span> | |
<span class="n">markets</span> <span class="o">=</span> <span class="p">{</span> | |
<span class="s">'US'</span><span class="p">:</span> <span class="n">randrange</span><span class="p">(</span><span class="o">-</span><span class="mi">4000000</span><span class="p">,</span> <span class="mi">4000000</span><span class="p">),</span> | |
<span class="s">'UK'</span><span class="p">:</span> <span class="n">randrange</span><span class="p">(</span><span class="o">-</span><span class="mi">4000000</span><span class="p">,</span> <span class="mi">4000000</span><span class="p">),</span> | |
<span class="s">'EU'</span><span class="p">:</span> <span class="n">randrange</span><span class="p">(</span><span class="o">-</span><span class="mi">4000000</span><span class="p">,</span> <span class="mi">4000000</span><span class="p">),</span> | |
<span class="s">'CEMEA'</span><span class="p">:</span> <span class="n">randrange</span><span class="p">(</span><span class="o">-</span><span class="mi">4000000</span><span class="p">,</span> <span class="mi">4000000</span><span class="p">),</span> | |
<span class="s">'Central America'</span><span class="p">:</span> <span class="n">randrange</span><span class="p">(</span><span class="o">-</span><span class="mi">4000000</span><span class="p">,</span> <span class="mi">4000000</span><span class="p">),</span> | |
<span class="s">'Asia'</span><span class="p">:</span> <span class="n">randrange</span><span class="p">(</span><span class="o">-</span><span class="mi">4000000</span><span class="p">,</span> <span class="mi">4000000</span><span class="p">),</span> | |
<span class="s">'Antarctica'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> | |
<span class="p">}</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [3]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">output</span><span class="p">(</span><span class="n">markets</span><span class="p">):</span> | |
<span class="k">for</span> <span class="n">region</span><span class="p">,</span> <span class="n">profit</span> <span class="ow">in</span> <span class="n">markets</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> | |
<span class="k">print</span><span class="p">(</span><span class="n">region</span><span class="p">,</span> <span class="n">profit</span><span class="p">)</span> | |
<span class="n">output</span><span class="p">(</span><span class="n">markets</span><span class="p">)</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
Central America -675140 | |
Asia -3614396 | |
Antarctica 0 | |
US -2724620 | |
UK -2380001 | |
EU 771665 | |
CEMEA 3480172 | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [4]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">output</span><span class="p">(</span><span class="n">markets</span><span class="p">):</span> | |
<span class="n">align</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">len</span><span class="p">,</span><span class="n">markets</span><span class="p">))</span> | |
<span class="k">for</span> <span class="n">region</span><span class="p">,</span> <span class="n">profit</span> <span class="ow">in</span> <span class="n">markets</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> | |
<span class="k">print</span><span class="p">(</span><span class="s">'{region:<{align}} {profit:>10,}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">region</span><span class="o">=</span><span class="n">region</span><span class="p">,</span> <span class="n">profit</span><span class="o">=</span><span class="n">profit</span><span class="p">,</span> <span class="n">align</span><span class="o">=</span><span class="n">align</span><span class="p">))</span> | |
<span class="n">output</span><span class="p">(</span><span class="n">markets</span><span class="p">)</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
Central America -675,140 | |
Asia -3,614,396 | |
Antarctica 0 | |
US -2,724,620 | |
UK -2,380,001 | |
EU 771,665 | |
CEMEA 3,480,172 | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [5]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">output</span><span class="p">(</span><span class="n">markets</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> | |
<span class="n">align</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">len</span><span class="p">,</span><span class="n">markets</span><span class="p">))</span> | |
<span class="k">for</span> <span class="n">region</span><span class="p">,</span> <span class="n">profit</span> <span class="ow">in</span> <span class="n">markets</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> | |
<span class="n">line</span> <span class="o">=</span> <span class="s">'{region:<{align}} {profit:>10,}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">region</span><span class="o">=</span><span class="n">region</span><span class="p">,</span> | |
<span class="n">profit</span><span class="o">=</span><span class="n">profit</span><span class="p">,</span> | |
<span class="n">align</span><span class="o">=</span><span class="n">align</span><span class="p">)</span> | |
<span class="k">if</span> <span class="n">filename</span><span class="p">:</span> | |
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> | |
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> | |
<span class="k">print</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> | |
<span class="n">output</span><span class="p">(</span><span class="n">markets</span><span class="p">)</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
Central America -675,140 | |
Asia -3,614,396 | |
Antarctica 0 | |
US -2,724,620 | |
UK -2,380,001 | |
EU 771,665 | |
CEMEA 3,480,172 | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [6]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">logging</span> <span class="kn">import</span> <span class="n">info</span> | |
<span class="k">def</span> <span class="nf">output</span><span class="p">(</span><span class="n">markets</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">to_log</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> | |
<span class="n">align</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">len</span><span class="p">,</span><span class="n">markets</span><span class="p">))</span> | |
<span class="k">for</span> <span class="n">region</span><span class="p">,</span> <span class="n">profit</span> <span class="ow">in</span> <span class="n">markets</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> | |
<span class="n">line</span> <span class="o">=</span> <span class="s">'{region:<{align}} {profit:>10,}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">region</span><span class="o">=</span><span class="n">region</span><span class="p">,</span> | |
<span class="n">profit</span><span class="o">=</span><span class="n">profit</span><span class="p">,</span> | |
<span class="n">align</span><span class="o">=</span><span class="n">align</span><span class="p">)</span> | |
<span class="k">if</span> <span class="n">filename</span><span class="p">:</span> | |
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> | |
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> | |
<span class="k">if</span> <span class="n">to_log</span><span class="p">:</span> | |
<span class="n">info</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> | |
<span class="k">print</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> | |
<span class="n">output</span><span class="p">(</span><span class="n">markets</span><span class="p">,</span> <span class="n">to_log</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
Central America -675,140 | |
Asia -3,614,396 | |
Antarctica 0 | |
US -2,724,620 | |
UK -2,380,001 | |
EU 771,665 | |
CEMEA 3,480,172 | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [7]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">output</span><span class="p">(</span><span class="n">markets</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">to_log</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">to_email</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">accounting</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> | |
<span class="n">align</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">len</span><span class="p">,</span><span class="n">markets</span><span class="p">))</span> | |
<span class="k">for</span> <span class="n">region</span><span class="p">,</span> <span class="n">profit</span> <span class="ow">in</span> <span class="n">markets</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> | |
<span class="k">if</span> <span class="n">accounting</span><span class="p">:</span> | |
<span class="k">if</span> <span class="n">profit</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span> | |
<span class="n">profit</span> <span class="o">=</span> <span class="s">'({:>10,})'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">-</span><span class="n">profit</span><span class="p">)</span> | |
<span class="k">else</span><span class="p">:</span> | |
<span class="n">profit</span> <span class="o">=</span> <span class="s">' {:>10,}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">profit</span><span class="p">)</span> | |
<span class="n">line</span> <span class="o">=</span> <span class="s">'{region:<{align}} {profit}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">region</span><span class="o">=</span><span class="n">region</span><span class="p">,</span> | |
<span class="n">profit</span><span class="o">=</span><span class="n">profit</span><span class="p">,</span> | |
<span class="n">align</span><span class="o">=</span><span class="n">align</span><span class="p">)</span> | |
<span class="k">if</span> <span class="n">filename</span><span class="p">:</span> | |
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> | |
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> | |
<span class="k">if</span> <span class="n">to_log</span><span class="p">:</span> | |
<span class="n">info</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> | |
<span class="k">print</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> | |
<span class="n">output</span><span class="p">(</span><span class="n">markets</span><span class="p">,</span> <span class="n">accounting</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
Central America ( 675,140) | |
Asia ( 3,614,396) | |
Antarctica 0 | |
US ( 2,724,620) | |
UK ( 2,380,001) | |
EU 771,665 | |
CEMEA 3,480,172 | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [8]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">output</span><span class="p">(</span><span class="n">markets</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">to_log</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">to_email</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">accounting</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> | |
<span class="n">align</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">len</span><span class="p">,</span><span class="n">markets</span><span class="p">))</span> | |
<span class="k">if</span> <span class="n">to_email</span><span class="p">:</span> | |
<span class="n">lines</span> <span class="o">=</span> <span class="p">[]</span> | |
<span class="k">for</span> <span class="n">region</span><span class="p">,</span> <span class="n">profit</span> <span class="ow">in</span> <span class="n">markets</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> | |
<span class="k">if</span> <span class="n">accounting</span><span class="p">:</span> | |
<span class="k">if</span> <span class="n">profit</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span> | |
<span class="n">profit</span> <span class="o">=</span> <span class="s">'({:>10,})'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">-</span><span class="n">profit</span><span class="p">)</span> | |
<span class="k">else</span><span class="p">:</span> | |
<span class="n">profit</span> <span class="o">=</span> <span class="s">' {:>10,}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">profit</span><span class="p">)</span> | |
<span class="n">line</span> <span class="o">=</span> <span class="s">'{region:<{align}} {profit}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">region</span><span class="o">=</span><span class="n">region</span><span class="p">,</span> | |
<span class="n">profit</span><span class="o">=</span><span class="n">profit</span><span class="p">,</span> | |
<span class="n">align</span><span class="o">=</span><span class="n">align</span><span class="p">)</span> | |
<span class="k">if</span> <span class="n">filename</span><span class="p">:</span> | |
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> | |
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> | |
<span class="k">if</span> <span class="n">to_email</span><span class="p">:</span> | |
<span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> | |
<span class="k">if</span> <span class="n">to_log</span><span class="p">:</span> | |
<span class="n">info</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> | |
<span class="k">print</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> | |
<span class="k">if</span> <span class="n">to_email</span><span class="p">:</span> | |
<span class="n">email</span><span class="p">(</span><span class="s">'</span><span class="se">\n</span><span class="s">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lines</span><span class="p">))</span> | |
<span class="n">output</span><span class="p">(</span><span class="n">markets</span><span class="p">,</span> <span class="n">accounting</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
Central America ( 675,140) | |
Asia ( 3,614,396) | |
Antarctica 0 | |
US ( 2,724,620) | |
UK ( 2,380,001) | |
EU 771,665 | |
CEMEA 3,480,172 | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [9]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">numbers</span> <span class="kn">import</span> <span class="n">Real</span> | |
<span class="k">class</span> <span class="nc">Accounting</span><span class="p">(</span><span class="n">Real</span><span class="p">,</span> <span class="nb">float</span><span class="p">):</span> | |
<span class="k">def</span> <span class="nf">__metaclass__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">bases</span><span class="p">,</span> <span class="n">body</span><span class="p">):</span> | |
<span class="k">for</span> <span class="n">method</span> <span class="ow">in</span> <span class="n">Real</span><span class="o">.</span><span class="n">__abstractmethods__</span><span class="p">:</span> | |
<span class="k">if</span> <span class="n">method</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">body</span><span class="p">:</span> | |
<span class="n">body</span><span class="p">[</span><span class="n">method</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="k">lambda</span> <span class="n">meth</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="n">Accounting</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="nb">float</span><span class="p">,</span><span class="n">meth</span><span class="p">)(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)))(</span><span class="n">method</span><span class="p">)</span> | |
<span class="k">for</span> <span class="n">method</span> <span class="ow">in</span> <span class="p">(</span><span class="s">'__ne__'</span><span class="p">,</span><span class="s">'__nonzero__'</span><span class="p">,):</span> | |
<span class="k">if</span> <span class="n">method</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">body</span><span class="p">:</span> | |
<span class="n">body</span><span class="p">[</span><span class="n">method</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="k">lambda</span> <span class="n">meth</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="nb">getattr</span><span class="p">(</span><span class="nb">float</span><span class="p">,</span><span class="n">meth</span><span class="p">)(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">))(</span><span class="n">method</span><span class="p">)</span> | |
<span class="k">return</span> <span class="n">Real</span><span class="o">.</span><span class="n">__metaclass__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">bases</span><span class="p">,</span> <span class="n">body</span><span class="p">)</span> | |
<span class="n">__new__</span> <span class="o">=</span> <span class="nb">float</span><span class="o">.</span><span class="n">__new__</span> | |
<span class="k">def</span> <span class="nf">__format__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fmt</span><span class="p">):</span> | |
<span class="k">return</span> <span class="p">{</span> <span class="mi">1</span><span class="p">:</span> <span class="s">' </span><span class="si">%s</span><span class="s">'</span><span class="o">%</span><span class="k">float</span><span class="o">.</span><span class="n">__format__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fmt</span><span class="p">),</span> | |
<span class="mi">0</span><span class="p">:</span> <span class="s">' </span><span class="si">%s</span><span class="s">'</span><span class="o">%</span><span class="k">float</span><span class="o">.</span><span class="n">__format__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fmt</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">'0'</span><span class="p">,</span> <span class="s">'-'</span><span class="p">),</span> | |
<span class="o">-</span><span class="mi">1</span><span class="p">:</span> <span class="s">'(</span><span class="si">%s</span><span class="s">)'</span><span class="o">%</span><span class="k">float</span><span class="o">.</span><span class="n">__format__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fmt</span><span class="p">)</span> <span class="p">}[</span><span class="nb">cmp</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="mi">0</span><span class="p">)]</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [10]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="n">template</span> <span class="o">=</span> <span class="s">'{region:<{align}} {profit:>14,.0f}'</span><span class="o">.</span><span class="n">format</span> | |
<span class="k">def</span> <span class="nf">output</span><span class="p">(</span><span class="n">markets</span><span class="p">,</span> <span class="n">write</span><span class="o">=</span><span class="k">print</span><span class="p">,</span> <span class="n">template</span><span class="o">=</span><span class="n">template</span><span class="p">):</span> | |
<span class="n">align</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">len</span><span class="p">,</span><span class="n">markets</span><span class="p">))</span> | |
<span class="k">for</span> <span class="n">region</span><span class="p">,</span> <span class="n">profit</span> <span class="ow">in</span> <span class="n">markets</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> | |
<span class="n">line</span> <span class="o">=</span> <span class="n">template</span><span class="p">(</span><span class="n">region</span><span class="o">=</span><span class="n">region</span><span class="p">,</span> <span class="n">profit</span><span class="o">=</span><span class="n">profit</span><span class="p">,</span> <span class="n">align</span><span class="o">=</span><span class="n">align</span><span class="p">)</span> | |
<span class="n">write</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> | |
<span class="n">output</span><span class="p">({</span><span class="n">region</span><span class="p">:</span><span class="n">Accounting</span><span class="p">(</span><span class="n">profit</span><span class="p">)</span> <span class="k">for</span> <span class="n">region</span><span class="p">,</span> <span class="n">profit</span> <span class="ow">in</span> <span class="n">markets</span><span class="o">.</span><span class="n">items</span><span class="p">()})</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
Central America ( -675,140) | |
US ( -2,724,620) | |
Antarctica - | |
Asia ( -3,614,396) | |
UK ( -2,380,001) | |
EU 771,665 | |
CEMEA 3,480,172 | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section> | |
</section><section> | |
<section> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<h2 id="functional-programming-frees-your-mind-from-presuming-modalities">Functional Programming Frees Your Mind From Presuming Modalities</h2> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<h2 id="functional-programming-simplified-your-internal-api">Functional Programming Simplified your Internal API</h2> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<h2 id="functional-programming-empowered-your-users">Functional Programming Empowered Your Users</h2> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<h2 id="pure-functional-programming-has-further-freed-your-mind">(Pure Functional Programming Has Further Freed Your Mind)</h2> | |
</div> | |
</div> | |
</div></section> | |
</section><section> | |
<section> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<h2 id="what-is-a-generator-what-is-a-coroutine">What is a Generator & What is a Coroutine?</h2> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [11]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">fib</span><span class="p">(</span><span class="n">a</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span> | |
<span class="n">rv</span> <span class="o">=</span> <span class="p">[]</span> | |
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="n">n</span><span class="p">):</span> | |
<span class="n">rv</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> | |
<span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">b</span><span class="p">,</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span> | |
<span class="k">return</span> <span class="n">rv</span> | |
<span class="n">fib</span><span class="p">()</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[11]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [12]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">ratio</span><span class="p">(</span><span class="n">xs</span><span class="p">):</span> | |
<span class="n">xs</span> <span class="o">=</span> <span class="nb">iter</span><span class="p">(</span><span class="n">xs</span><span class="p">)</span> | |
<span class="n">x1</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">xs</span><span class="p">)</span> <span class="c"># raises StopIteration</span> | |
<span class="n">x2</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">xs</span><span class="p">)</span> | |
<span class="n">rv</span> <span class="o">=</span> <span class="p">[</span><span class="n">x2</span><span class="o">/</span><span class="n">x1</span><span class="p">]</span> | |
<span class="n">x1</span> <span class="o">=</span> <span class="n">x2</span> | |
<span class="k">for</span> <span class="n">x2</span> <span class="ow">in</span> <span class="n">xs</span><span class="p">:</span> | |
<span class="n">rv</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">x2</span><span class="o">/</span><span class="n">x1</span><span class="p">)</span> | |
<span class="n">x1</span> <span class="o">=</span> <span class="n">x2</span> | |
<span class="k">return</span> <span class="n">rv</span> | |
<span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">sqrt</span> | |
<span class="n">ratio</span><span class="p">(</span><span class="n">fib</span><span class="p">(</span><span class="n">n</span><span class="o">=</span><span class="mi">5</span><span class="p">))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[12]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
[1.0, 2.0, 1.5, 1.6666666666666667] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [13]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="n">phi</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">5</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span> | |
<span class="p">[</span><span class="nb">abs</span><span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="n">phi</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">ratio</span><span class="p">(</span><span class="n">fib</span><span class="p">(</span><span class="n">n</span><span class="o">=</span><span class="mi">5</span><span class="p">))]</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[13]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
[0.6180339887498949, | |
0.3819660112501051, | |
0.1180339887498949, | |
0.04863267791677184] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [14]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="c"># 1.609 km per mi</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [15]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">fib</span><span class="p">(</span><span class="n">a</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span> | |
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span> | |
<span class="k">yield</span> <span class="n">a</span> | |
<span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">b</span><span class="p">,</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span> | |
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">islice</span> | |
<span class="nb">list</span><span class="p">(</span><span class="n">islice</span><span class="p">(</span><span class="n">fib</span><span class="p">(),</span><span class="mi">10</span><span class="p">))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[15]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [16]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">islice</span><span class="p">,</span> <span class="n">izip</span><span class="p">,</span> <span class="n">tee</span> | |
<span class="n">nwise</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">g</span><span class="p">,</span><span class="n">n</span><span class="p">:</span> <span class="n">izip</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">islice</span><span class="p">(</span><span class="n">g</span><span class="p">,</span><span class="n">i</span><span class="p">,</span><span class="bp">None</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">g</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">tee</span><span class="p">(</span><span class="n">g</span><span class="p">,</span><span class="n">n</span><span class="p">))))</span> | |
<span class="n">ratio</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">g</span><span class="p">:</span> <span class="p">(</span><span class="n">y</span><span class="o">/</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span><span class="n">y</span> <span class="ow">in</span> <span class="n">nwise</span><span class="p">(</span><span class="n">g</span><span class="p">,</span><span class="mi">2</span><span class="p">))</span> | |
<span class="nb">list</span><span class="p">(</span><span class="n">islice</span><span class="p">(</span><span class="n">ratio</span><span class="p">(</span><span class="n">fib</span><span class="p">()),</span><span class="mi">5</span><span class="p">))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[16]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
[1.0, 2.0, 1.5, 1.6666666666666667, 1.6] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [17]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="n">phi</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">5</span><span class="p">))</span><span class="o">/</span><span class="mi">2</span> | |
<span class="p">[</span><span class="nb">abs</span><span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="n">phi</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">islice</span><span class="p">(</span><span class="n">ratio</span><span class="p">(</span><span class="n">fib</span><span class="p">()),</span><span class="mi">5</span><span class="p">)]</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[17]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
[0.6180339887498949, | |
0.3819660112501051, | |
0.1180339887498949, | |
0.04863267791677184, | |
0.018033988749894814] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section> | |
</section><section> | |
<section> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<h2 id="generators-free-you-from-presumptions-about-use">Generators Free You From Presumptions About Use</h2> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [18]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">fib</span><span class="p">(</span><span class="n">a</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span> | |
<span class="n">rv</span> <span class="o">=</span> <span class="p">[]</span> | |
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">10</span><span class="p">):</span> | |
<span class="n">rv</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> | |
<span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">b</span><span class="p">,</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span> | |
<span class="k">return</span> <span class="n">rv</span> | |
<span class="k">print</span><span class="p">(</span><span class="n">fib</span><span class="p">())</span> | |
<span class="k">def</span> <span class="nf">fib</span><span class="p">(</span><span class="n">a</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span> | |
<span class="n">rv</span> <span class="o">=</span> <span class="p">[]</span> | |
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span> | |
<span class="k">if</span> <span class="n">a</span> <span class="o">></span> <span class="n">n</span><span class="p">:</span> <span class="k">break</span> | |
<span class="n">rv</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> | |
<span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">b</span><span class="p">,</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span> | |
<span class="k">return</span> <span class="n">rv</span> | |
<span class="k">print</span><span class="p">(</span><span class="n">fib</span><span class="p">())</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55] | |
[1, 1, 2, 3, 5, 8] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [19]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">fib</span><span class="p">(</span><span class="n">a</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span> | |
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span> | |
<span class="k">yield</span> <span class="n">a</span> | |
<span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="o">+</span><span class="n">b</span> | |
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">islice</span> | |
<span class="k">print</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">islice</span><span class="p">(</span><span class="n">fib</span><span class="p">(),</span><span class="mi">10</span><span class="p">)))</span> | |
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">takewhile</span> | |
<span class="k">print</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">takewhile</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span> <span class="o"><</span> <span class="mi">10</span><span class="p">,</span> <span class="n">fib</span><span class="p">())))</span> | |
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">dropwhile</span> | |
<span class="k">print</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">dropwhile</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span> <span class="o"><</span> <span class="mi">5</span><span class="p">,</span> | |
<span class="n">takewhile</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span> <span class="o"><</span> <span class="mi">100</span><span class="p">,</span> | |
<span class="n">islice</span><span class="p">(</span><span class="n">fib</span><span class="p">(),</span><span class="mi">15</span><span class="p">)))))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55] | |
[1, 1, 2, 3, 5, 8] | |
[5, 8, 13, 21, 34, 55, 89] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [20]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">time</span> <span class="kn">import</span> <span class="n">sleep</span> | |
<span class="k">def</span> <span class="nf">query</span><span class="p">():</span> | |
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">10</span><span class="p">):</span> | |
<span class="n">sleep</span><span class="p">(</span><span class="o">.</span><span class="mi">1</span><span class="p">)</span> | |
<span class="k">yield</span> <span class="n">x</span> | |
<span class="o">%</span> <span class="n">time</span> <span class="nb">list</span><span class="p">(</span><span class="n">islice</span><span class="p">(</span><span class="n">query</span><span class="p">(),</span><span class="mi">1</span><span class="p">))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
CPU times: user 0 ns, sys: 0 ns, total: 0 ns | |
Wall time: 100 ms | |
</pre> | |
</div> | |
</div> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[20]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
[0] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section> | |
</section><section> | |
<section> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<h2 id="generators-free-you-from-presumptions-about-return-type">Generators Free You From Presumptions About Return Type</h2> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [21]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">process</span><span class="p">(</span><span class="n">xs</span><span class="p">):</span> | |
<span class="n">rv</span> <span class="o">=</span> <span class="p">[]</span> | |
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">xs</span><span class="p">:</span> | |
<span class="n">rv</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> | |
<span class="k">return</span> <span class="n">rv</span> | |
<span class="k">def</span> <span class="nf">process</span><span class="p">(</span><span class="n">xs</span><span class="p">):</span> | |
<span class="n">rv</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span> | |
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">xs</span><span class="p">:</span> | |
<span class="n">rv</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> | |
<span class="k">return</span> <span class="n">rv</span> | |
<span class="k">def</span> <span class="nf">process</span><span class="p">(</span><span class="n">xs</span><span class="p">):</span> | |
<span class="n">rv</span> <span class="o">=</span> <span class="p">()</span> | |
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">xs</span><span class="p">:</span> | |
<span class="n">rv</span> <span class="o">+=</span> <span class="p">(</span><span class="n">x</span><span class="p">,)</span> | |
<span class="k">return</span> <span class="n">rv</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [24]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">fib</span><span class="p">(</span><span class="n">a</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">100</span><span class="p">):</span> | |
<span class="n">rv</span> <span class="o">=</span> <span class="p">[]</span> | |
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="n">n</span><span class="p">):</span> | |
<span class="n">rv</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> | |
<span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="o">+</span><span class="n">b</span> | |
<span class="k">return</span> <span class="n">rv</span> | |
<span class="o">%</span> <span class="n">timeit</span> <span class="o">-</span><span class="n">r</span> <span class="mi">5</span> <span class="n">fib</span><span class="p">()</span> | |
<span class="o">%</span> <span class="n">timeit</span> <span class="o">-</span><span class="n">r</span> <span class="mi">5</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">fib</span><span class="p">())</span> | |
<span class="o">%</span> <span class="n">timeit</span> <span class="o">-</span><span class="n">r</span> <span class="mi">5</span> <span class="nb">set</span><span class="p">(</span><span class="n">fib</span><span class="p">())</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
100000 loops, best of 5: 13.1 µs per loop | |
100000 loops, best of 5: 13.5 µs per loop | |
100000 loops, best of 5: 17.8 µs per loop | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [25]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">fib</span><span class="p">(</span><span class="n">a</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span> | |
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span> | |
<span class="k">yield</span> <span class="n">a</span> | |
<span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="o">+</span><span class="n">b</span> | |
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">islice</span> | |
<span class="o">%</span> <span class="n">timeit</span> <span class="o">-</span><span class="n">r</span> <span class="mi">5</span> <span class="nb">list</span><span class="p">(</span><span class="n">islice</span><span class="p">(</span><span class="n">fib</span><span class="p">(),</span><span class="mi">100</span><span class="p">))</span> | |
<span class="o">%</span> <span class="n">timeit</span> <span class="o">-</span><span class="n">r</span> <span class="mi">5</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">islice</span><span class="p">(</span><span class="n">fib</span><span class="p">(),</span><span class="mi">100</span><span class="p">))</span> | |
<span class="o">%</span> <span class="n">timeit</span> <span class="o">-</span><span class="n">r</span> <span class="mi">5</span> <span class="nb">set</span><span class="p">(</span><span class="n">islice</span><span class="p">(</span><span class="n">fib</span><span class="p">(),</span><span class="mi">100</span><span class="p">))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
100000 loops, best of 5: 13.6 µs per loop | |
100000 loops, best of 5: 13.7 µs per loop | |
100000 loops, best of 5: 16.5 µs per loop | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [27]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">average</span><span class="p">(</span><span class="n">xs</span><span class="p">):</span> | |
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">xs</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> | |
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">'xs must strictly be a list'</span><span class="p">)</span> | |
<span class="k">return</span> <span class="nb">sum</span><span class="p">(</span><span class="n">xs</span><span class="p">)</span> <span class="o">/</span> <span class="nb">len</span><span class="p">(</span><span class="n">xs</span><span class="p">)</span> | |
<span class="n">average</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">16</span><span class="p">])</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[27]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
6.2 | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [28]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="n">average</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">16</span><span class="p">))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_text output_pyerr"> | |
<pre> | |
<span class="ansired">---------------------------------------------------------------------------</span> | |
<span class="ansired">TypeError</span> Traceback (most recent call last) | |
<span class="ansigreen"><ipython-input-28-4a82f84bdc7a></span> in <span class="ansicyan"><module></span><span class="ansiblue">()</span> | |
<span class="ansigreen">----> 1</span><span class="ansiyellow"> </span>average<span class="ansiyellow">(</span><span class="ansiyellow">(</span><span class="ansicyan">1</span><span class="ansiyellow">,</span><span class="ansicyan">2</span><span class="ansiyellow">,</span><span class="ansicyan">4</span><span class="ansiyellow">,</span><span class="ansicyan">8</span><span class="ansiyellow">,</span><span class="ansicyan">16</span><span class="ansiyellow">)</span><span class="ansiyellow">)</span><span class="ansiyellow"></span> | |
<span class="ansigreen"><ipython-input-27-c010f9029beb></span> in <span class="ansicyan">average</span><span class="ansiblue">(xs)</span> | |
<span class="ansigreen"> 1</span> <span class="ansigreen">def</span> average<span class="ansiyellow">(</span>xs<span class="ansiyellow">)</span><span class="ansiyellow">:</span><span class="ansiyellow"></span> | |
<span class="ansigreen"> 2</span> <span class="ansigreen">if</span> <span class="ansigreen">not</span> isinstance<span class="ansiyellow">(</span>xs<span class="ansiyellow">,</span> list<span class="ansiyellow">)</span><span class="ansiyellow">:</span><span class="ansiyellow"></span> | |
<span class="ansigreen">----> 3</span><span class="ansiyellow"> </span><span class="ansigreen">raise</span> TypeError<span class="ansiyellow">(</span><span class="ansiblue">'xs must strictly be a list'</span><span class="ansiyellow">)</span><span class="ansiyellow"></span> | |
<span class="ansigreen"> 4</span> <span class="ansigreen">return</span> sum<span class="ansiyellow">(</span>xs<span class="ansiyellow">)</span> <span class="ansiyellow">/</span> len<span class="ansiyellow">(</span>xs<span class="ansiyellow">)</span><span class="ansiyellow"></span> | |
<span class="ansigreen"> 5</span> <span class="ansiyellow"></span> | |
<span class="ansired">TypeError</span>: xs must strictly be a list</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [29]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">Sized</span> | |
<span class="k">def</span> <span class="nf">average</span><span class="p">(</span><span class="n">xs</span><span class="p">):</span> | |
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">xs</span><span class="p">,</span> <span class="n">Sized</span><span class="p">):</span> | |
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">'xs must be Sized'</span><span class="p">)</span> | |
<span class="k">return</span> <span class="nb">sum</span><span class="p">(</span><span class="n">xs</span><span class="p">)</span> <span class="o">/</span> <span class="nb">len</span><span class="p">(</span><span class="n">xs</span><span class="p">)</span> | |
<span class="n">average</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">16</span><span class="p">))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[29]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
6.2 | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [31]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">Iterable</span> | |
<span class="k">def</span> <span class="nf">average</span><span class="p">(</span><span class="n">xs</span><span class="p">):</span> | |
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">xs</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">):</span> | |
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">'xs must be Iterable'</span><span class="p">)</span> | |
<span class="n">total</span><span class="p">,</span> <span class="n">count</span> <span class="o">=</span> <span class="nb">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span><span class="n">acc</span><span class="p">:</span> <span class="nb">map</span><span class="p">(</span><span class="nb">sum</span><span class="p">,</span><span class="nb">zip</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">acc</span><span class="p">)),</span> <span class="p">((</span><span class="n">x</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">xs</span><span class="p">))</span> | |
<span class="k">return</span> <span class="n">total</span> <span class="o">/</span> <span class="n">count</span> | |
<span class="n">average</span><span class="p">(</span><span class="mi">2</span><span class="o">**</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">5</span><span class="p">))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[31]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
6.2 | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section> | |
</section><section> | |
<section> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<h2 id="generators-simplify-your-apis-remove-presumptions-about-modes">Generators Simplify Your APIs & Remove Presumptions About Modes</h2> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [32]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">time</span> <span class="kn">import</span> <span class="n">sleep</span> | |
<span class="kn">from</span> <span class="nn">random</span> <span class="kn">import</span> <span class="n">randrange</span> | |
<span class="k">def</span> <span class="nf">source</span><span class="p">():</span> | |
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="n">randrange</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="mi">20</span><span class="p">)):</span> | |
<span class="k">yield</span> <span class="n">randrange</span><span class="p">(</span><span class="o">-</span><span class="mi">100</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span> | |
<span class="n">sleep</span><span class="p">(</span><span class="n">randrange</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">10</span><span class="p">)</span><span class="o">/</span><span class="mi">50</span><span class="p">)</span> | |
<span class="k">def</span> <span class="nf">load_data</span><span class="p">(</span><span class="n">source</span><span class="p">):</span> | |
<span class="n">rv</span> <span class="o">=</span> <span class="p">[]</span> | |
<span class="k">for</span> <span class="n">datum</span> <span class="ow">in</span> <span class="n">source</span><span class="p">:</span> | |
<span class="n">average</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span><span class="n">_</span> <span class="ow">in</span> <span class="n">rv</span><span class="p">)</span><span class="o">/</span><span class="nb">len</span><span class="p">(</span><span class="n">rv</span><span class="p">)</span> <span class="k">if</span> <span class="n">rv</span> <span class="k">else</span> <span class="n">datum</span> | |
<span class="n">rv</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">datum</span><span class="p">,</span> <span class="n">average</span><span class="p">))</span> | |
<span class="k">return</span> <span class="n">rv</span> | |
<span class="n">load_data</span><span class="p">(</span><span class="n">source</span><span class="p">())</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[32]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
[(-35, -35), | |
(-45, -35.0), | |
(88, -40.0), | |
(-32, 2.6666666666666665), | |
(-67, -6.0), | |
(-57, -18.2), | |
(83, -24.666666666666668), | |
(98, -9.285714285714286), | |
(-74, 4.125), | |
(-71, -4.555555555555555), | |
(-95, -11.2), | |
(93, -18.818181818181817)] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [33]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">source</span><span class="p">(</span><span class="n">n</span><span class="p">):</span> | |
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="n">n</span><span class="p">):</span> | |
<span class="k">yield</span> <span class="n">randrange</span><span class="p">(</span><span class="o">-</span><span class="mi">100</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span> | |
<span class="n">sleep</span><span class="p">(</span><span class="n">randrange</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">10</span><span class="p">)</span><span class="o">/</span><span class="mi">50</span><span class="p">)</span> | |
<span class="k">def</span> <span class="nf">load_data</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span> | |
<span class="n">rv</span> <span class="o">=</span> <span class="p">[]</span> | |
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">datum</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">source</span><span class="p">):</span> | |
<span class="n">average</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span><span class="n">_</span> <span class="ow">in</span> <span class="n">rv</span><span class="p">)</span><span class="o">/</span><span class="nb">len</span><span class="p">(</span><span class="n">rv</span><span class="p">)</span> <span class="k">if</span> <span class="n">rv</span> <span class="k">else</span> <span class="n">datum</span> | |
<span class="n">rv</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">datum</span><span class="p">,</span> <span class="n">average</span><span class="p">))</span> | |
<span class="k">print</span><span class="p">(</span><span class="s">'loading {:.2%}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="o">/</span><span class="n">size</span><span class="p">))</span> | |
<span class="k">return</span> <span class="n">rv</span> | |
<span class="n">load_data</span><span class="p">(</span><span class="n">source</span><span class="p">(</span><span class="mi">5</span><span class="p">),</span> <span class="mi">5</span><span class="p">)</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
loading 0.00% | |
loading 20.00% | |
loading 40.00% | |
loading 60.00% | |
loading 80.00% | |
</pre> | |
</div> | |
</div> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[33]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
[(-18, -18), (-24, -18.0), (23, -21.0), (22, -6.333333333333333), (35, 0.75)] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [34]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">load_data</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span> | |
<span class="n">rv</span> <span class="o">=</span> <span class="p">[]</span> | |
<span class="k">print</span><span class="p">(</span><span class="s">'loading'</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s">' '</span><span class="p">)</span> | |
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">datum</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">source</span><span class="p">):</span> | |
<span class="n">average</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span><span class="n">_</span> <span class="ow">in</span> <span class="n">rv</span><span class="p">)</span><span class="o">/</span><span class="nb">len</span><span class="p">(</span><span class="n">rv</span><span class="p">)</span> <span class="k">if</span> <span class="n">rv</span> <span class="k">else</span> <span class="n">datum</span> | |
<span class="n">rv</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">datum</span><span class="p">,</span> <span class="n">average</span><span class="p">))</span> | |
<span class="k">print</span><span class="p">(</span><span class="s">'{:.2%}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="o">/</span><span class="n">size</span><span class="p">),</span> <span class="n">end</span><span class="o">=</span><span class="s">' '</span><span class="p">)</span> | |
<span class="k">print</span><span class="p">(</span><span class="s">'done loading!'</span><span class="p">)</span> | |
<span class="k">return</span> <span class="n">rv</span> | |
<span class="n">load_data</span><span class="p">(</span><span class="n">source</span><span class="p">(</span><span class="mi">5</span><span class="p">),</span> <span class="mi">5</span><span class="p">)</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
loading 0.00% 20.00% 40.00% 60.00% 80.00% done loading! | |
</pre> | |
</div> | |
</div> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[34]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
[(22, 22), (-26, 22.0), (19, -2.0), (-19, 5.0), (68, -1.0)] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [35]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">load_data</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">before</span><span class="p">,</span> <span class="n">during</span><span class="p">,</span> <span class="n">after</span><span class="p">):</span> | |
<span class="n">rv</span> <span class="o">=</span> <span class="p">[]</span> | |
<span class="n">before</span><span class="p">()</span> | |
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">datum</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">source</span><span class="p">):</span> | |
<span class="n">average</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span><span class="n">_</span> <span class="ow">in</span> <span class="n">rv</span><span class="p">)</span><span class="o">/</span><span class="nb">len</span><span class="p">(</span><span class="n">rv</span><span class="p">)</span> <span class="k">if</span> <span class="n">rv</span> <span class="k">else</span> <span class="n">datum</span> | |
<span class="n">rv</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">datum</span><span class="p">,</span> <span class="n">average</span><span class="p">))</span> | |
<span class="n">during</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span> | |
<span class="n">after</span><span class="p">()</span> | |
<span class="k">return</span> <span class="n">rv</span> | |
<span class="k">def</span> <span class="nf">before</span><span class="p">():</span> | |
<span class="k">print</span><span class="p">(</span><span class="s">'loading'</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s">' '</span><span class="p">)</span> | |
<span class="k">def</span> <span class="nf">during</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span> | |
<span class="k">print</span><span class="p">(</span><span class="s">'{:.2%}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="o">/</span><span class="n">size</span><span class="p">),</span> <span class="n">end</span><span class="o">=</span><span class="s">' '</span><span class="p">)</span> | |
<span class="k">def</span> <span class="nf">after</span><span class="p">():</span> | |
<span class="k">print</span><span class="p">(</span><span class="s">'done loading!'</span><span class="p">)</span> | |
<span class="n">load_data</span><span class="p">(</span><span class="n">source</span><span class="p">(</span><span class="mi">5</span><span class="p">),</span> <span class="mi">5</span><span class="p">,</span> <span class="n">before</span><span class="o">=</span><span class="n">after</span><span class="p">,</span> <span class="n">during</span><span class="o">=</span><span class="n">during</span><span class="p">,</span> <span class="n">after</span><span class="o">=</span><span class="n">before</span><span class="p">)</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
done loading! | |
0.00% 20.00% 40.00% 60.00% 80.00% loading | |
</pre> | |
</div> | |
</div> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[35]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
[(-26, -26), (-78, -26.0), (86, -52.0), (15, -6.0), (-12, -0.75)] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [36]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">load_data</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">update</span><span class="p">):</span> | |
<span class="n">rv</span> <span class="o">=</span> <span class="p">[]</span> | |
<span class="nb">next</span><span class="p">(</span><span class="n">update</span><span class="p">)</span> | |
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">datum</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">source</span><span class="p">):</span> | |
<span class="n">average</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span><span class="n">_</span> <span class="ow">in</span> <span class="n">rv</span><span class="p">)</span><span class="o">/</span><span class="nb">len</span><span class="p">(</span><span class="n">rv</span><span class="p">)</span> <span class="k">if</span> <span class="n">rv</span> <span class="k">else</span> <span class="n">datum</span> | |
<span class="n">rv</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">datum</span><span class="p">,</span> <span class="n">average</span><span class="p">))</span> | |
<span class="n">update</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">datum</span><span class="p">)</span> | |
<span class="nb">next</span><span class="p">(</span><span class="n">update</span><span class="p">)</span> | |
<span class="n">update</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> | |
<span class="k">return</span> <span class="n">rv</span> | |
<span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="n">n</span><span class="p">):</span> | |
<span class="k">print</span><span class="p">(</span><span class="s">'loading'</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s">' '</span><span class="p">)</span> | |
<span class="n">count</span><span class="p">,</span> <span class="n">datum</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="p">(</span><span class="k">yield</span><span class="p">)</span> | |
<span class="k">while</span> <span class="n">datum</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> | |
<span class="k">print</span><span class="p">(</span><span class="s">'{:.2%}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">count</span><span class="o">/</span><span class="n">n</span><span class="p">),</span> <span class="n">end</span><span class="o">=</span><span class="s">' '</span><span class="p">)</span> | |
<span class="n">count</span><span class="p">,</span> <span class="n">datum</span> <span class="o">=</span> <span class="n">count</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="p">(</span><span class="k">yield</span><span class="p">)</span> | |
<span class="k">print</span><span class="p">(</span><span class="s">'done loading!'</span><span class="p">)</span> | |
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span> <span class="k">yield</span> | |
<span class="n">load_data</span><span class="p">(</span><span class="n">source</span><span class="p">(</span><span class="mi">5</span><span class="p">),</span> <span class="n">update</span><span class="p">(</span><span class="mi">5</span><span class="p">))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
loading 0.00% 20.00% 40.00% 60.00% 80.00% done loading! | |
</pre> | |
</div> | |
</div> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[36]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
[(35, 35), (15, 35.0), (91, 25.0), (91, 47.0), (81, 58.0)] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section> | |
</section><section> | |
<section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [37]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="c"># http://www.sifma.org/services/holiday-schedule/</span> | |
<span class="c"># "All SIFMA holiday recommendations apply to the trading of U.S. dollar-denominated </span> | |
<span class="c"># government securities, mortgage- and asset-backed securities, over-the-counter </span> | |
<span class="c"># investment-grade and high-yield corporate bonds, municipal bonds and secondary </span> | |
<span class="c"># money market trading in bankers' acceptances, commercial paper and Yankee and </span> | |
<span class="c"># Euro certificates of deposit."</span> | |
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">date</span> | |
<span class="n">holidays</span> <span class="o">=</span> <span class="p">{</span> <span class="c"># early # full</span> | |
<span class="s">'Bank Holiday #1'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)),</span> | |
<span class="s">'Bank Holiday #2'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">)),</span> | |
<span class="s">'Coming of Age Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">13</span><span class="p">)),</span> | |
<span class="s">'U.S. Martin Luther King Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">20</span><span class="p">)),</span> | |
<span class="s">'National Foundation Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">11</span><span class="p">)),</span> | |
<span class="s">"U.S. Presidents' Day"</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">17</span><span class="p">)),</span> | |
<span class="s">'Spring Equinox'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">21</span><span class="p">)),</span> | |
<span class="s">'Good Friday'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">18</span><span class="p">)),</span> | |
<span class="s">'U.K Easter Monday'</span><span class="p">:</span> <span class="p">(</span><span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">21</span><span class="p">),</span> <span class="bp">None</span><span class="p">),</span> | |
<span class="s">'Showa Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">29</span><span class="p">)),</span> | |
<span class="s">'Constitutional Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">),</span> | |
<span class="s">"Children's Day"</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">)),</span> | |
<span class="s">'U.K. May Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">5</span><span class="p">)),</span> | |
<span class="s">'Greenery Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">)),</span> | |
<span class="s">'U.S. Memorial Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">26</span><span class="p">)),</span> | |
<span class="s">'U.K. Spring Bank Holiday'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">26</span><span class="p">)),</span> | |
<span class="s">"U.K. Queen's Diamond Jubilee"</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="bp">None</span><span class="p">),</span> | |
<span class="s">'U.S. Independence Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">4</span><span class="p">)),</span> | |
<span class="s">'Marine Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">21</span><span class="p">)),</span> | |
<span class="s">'U.K. Summer Bank Holiday'</span><span class="p">:</span> <span class="p">(</span><span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">25</span><span class="p">),</span> <span class="bp">None</span><span class="p">),</span> | |
<span class="s">'U.S. Labor Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">1</span><span class="p">)),</span> | |
<span class="s">'Respect for the Aged Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">15</span><span class="p">)),</span> | |
<span class="s">'Autumn Equinox'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">23</span><span class="p">)),</span> | |
<span class="s">'Sports Day/U.S. Columbus Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">13</span><span class="p">)),</span> | |
<span class="s">'Culture Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">3</span><span class="p">)),</span> | |
<span class="s">'U.S. Veterans Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">11</span><span class="p">)),</span> | |
<span class="s">'Labor Thanksgiving Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">24</span><span class="p">)),</span> | |
<span class="s">'U.S. Thanksgiving Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">27</span><span class="p">)),</span> | |
<span class="s">"Emperor's Birthday"</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mi">23</span><span class="p">)),</span> | |
<span class="s">'Christmas Day'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mi">25</span><span class="p">)),</span> | |
<span class="s">'U.K. Boxing Day'</span><span class="p">:</span> <span class="p">(</span><span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mi">26</span><span class="p">),</span> <span class="bp">None</span><span class="p">),</span> | |
<span class="s">'Bank Holiday #3'</span><span class="p">:</span> <span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mi">31</span><span class="p">)),</span> <span class="p">}</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [38]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">timedelta</span> | |
<span class="k">def</span> <span class="nf">nthbusinessdate</span><span class="p">(</span><span class="n">refdate</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">holidays</span><span class="o">=</span><span class="p">{</span><span class="n">full</span> <span class="k">for</span> <span class="n">early</span><span class="p">,</span><span class="n">full</span> <span class="ow">in</span> <span class="n">holidays</span><span class="o">.</span><span class="n">values</span><span class="p">()}):</span> | |
<span class="k">while</span> <span class="n">n</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> | |
<span class="n">refdate</span> <span class="o">+=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> | |
<span class="k">while</span> <span class="n">refdate</span><span class="o">.</span><span class="n">weekday</span><span class="p">()</span> <span class="ow">in</span> <span class="p">{</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="p">}</span> <span class="ow">or</span> <span class="n">refdate</span> <span class="ow">in</span> <span class="n">holidays</span><span class="p">:</span> | |
<span class="n">refdate</span> <span class="o">+=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> | |
<span class="n">n</span> <span class="o">-=</span> <span class="mi">1</span> | |
<span class="k">return</span> <span class="n">refdate</span> | |
<span class="c"># July 2014 </span> | |
<span class="c"># Su Mo Tu We Th Fr Sa</span> | |
<span class="c"># 1 2 3 4* 5 </span> | |
<span class="c"># 6 7 8 9 10 11 12 </span> | |
<span class="c"># 13 14 15 16 17 18 19 </span> | |
<span class="c"># 20 21* 22 23 24 25 26 </span> | |
<span class="c"># 27 28 29 30 31 </span> | |
<span class="n">nthbusinessdate</span><span class="p">(</span><span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span> <span class="mi">2</span><span class="p">)</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[38]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
datetime.date(2014, 7, 7) | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [39]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="n">nthbusinessdate</span><span class="p">(</span><span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span> <span class="mi">1</span><span class="p">),</span> <span class="n">nthbusinessdate</span><span class="p">(</span><span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span> <span class="mi">2</span><span class="p">),</span> <span class="n">nthbusinessdate</span><span class="p">(</span><span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span> <span class="mi">3</span><span class="p">)</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[39]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
(datetime.date(2014, 7, 3), | |
datetime.date(2014, 7, 7), | |
datetime.date(2014, 7, 8)) | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [40]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">def</span> <span class="nf">businessdays</span><span class="p">(</span><span class="n">refdate</span><span class="p">,</span> <span class="n">holidays</span><span class="o">=</span><span class="p">{</span><span class="n">full</span> <span class="k">for</span> <span class="n">early</span><span class="p">,</span><span class="n">full</span> <span class="ow">in</span> <span class="n">holidays</span><span class="o">.</span><span class="n">values</span><span class="p">()}):</span> | |
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span> | |
<span class="n">refdate</span> <span class="o">+=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> | |
<span class="k">while</span> <span class="n">refdate</span><span class="o">.</span><span class="n">weekday</span><span class="p">()</span> <span class="ow">in</span> <span class="p">{</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="p">}</span> <span class="ow">or</span> <span class="n">refdate</span> <span class="ow">in</span> <span class="n">holidays</span><span class="p">:</span> | |
<span class="n">refdate</span> <span class="o">+=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> | |
<span class="k">yield</span> <span class="n">refdate</span> | |
<span class="n">g</span> <span class="o">=</span> <span class="n">businessdays</span><span class="p">(</span><span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">2</span><span class="p">))</span> | |
<span class="nb">next</span><span class="p">(</span><span class="n">g</span><span class="p">),</span> <span class="nb">next</span><span class="p">(</span><span class="n">g</span><span class="p">),</span> <span class="nb">next</span><span class="p">(</span><span class="n">g</span><span class="p">)</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[40]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
(datetime.date(2014, 7, 3), | |
datetime.date(2014, 7, 7), | |
datetime.date(2014, 7, 8)) | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [41]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">operator</span> <span class="kn">import</span> <span class="n">add</span><span class="p">,</span> <span class="n">sub</span> | |
<span class="n">NBD</span><span class="p">,</span> <span class="n">PBD</span> <span class="o">=</span> <span class="n">add</span><span class="p">,</span> <span class="n">sub</span> | |
<span class="k">def</span> <span class="nf">businessdays</span><span class="p">(</span><span class="n">refdate</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="n">NBD</span><span class="p">,</span> <span class="n">holidays</span><span class="o">=</span><span class="p">{</span><span class="n">full</span> <span class="k">for</span> <span class="n">early</span><span class="p">,</span><span class="n">full</span> <span class="ow">in</span> <span class="n">holidays</span><span class="o">.</span><span class="n">values</span><span class="p">()}):</span> | |
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span> | |
<span class="n">refdate</span> <span class="o">=</span> <span class="n">direction</span><span class="p">(</span><span class="n">refdate</span><span class="p">,</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">))</span> | |
<span class="k">while</span> <span class="n">refdate</span><span class="o">.</span><span class="n">weekday</span><span class="p">()</span> <span class="ow">in</span> <span class="p">{</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="p">}</span> <span class="ow">or</span> <span class="n">refdate</span> <span class="ow">in</span> <span class="n">holidays</span><span class="p">:</span> | |
<span class="n">refdate</span> <span class="o">=</span> <span class="n">direction</span><span class="p">(</span><span class="n">refdate</span><span class="p">,</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">))</span> | |
<span class="k">yield</span> <span class="n">refdate</span> | |
<span class="n">g</span> <span class="o">=</span> <span class="n">businessdays</span><span class="p">(</span><span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span> <span class="n">direction</span><span class="o">=</span><span class="n">PBD</span><span class="p">)</span> | |
<span class="nb">next</span><span class="p">(</span><span class="n">g</span><span class="p">),</span> <span class="nb">next</span><span class="p">(</span><span class="n">g</span><span class="p">),</span> <span class="nb">next</span><span class="p">(</span><span class="n">g</span><span class="p">)</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[41]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
(datetime.date(2014, 7, 1), | |
datetime.date(2014, 6, 30), | |
datetime.date(2014, 6, 27)) | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [42]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="n">NBD</span><span class="p">,</span> <span class="n">PBD</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">d</span><span class="p">:</span> <span class="n">d</span><span class="o">+</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span> <span class="k">lambda</span> <span class="n">d</span><span class="p">:</span> <span class="n">d</span><span class="o">-</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> | |
<span class="k">def</span> <span class="nf">datecount</span><span class="p">(</span><span class="n">refdate</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="n">NBD</span><span class="p">):</span> | |
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span> | |
<span class="k">yield</span> <span class="n">refdate</span> | |
<span class="n">refdate</span> <span class="o">=</span> <span class="n">direction</span><span class="p">(</span><span class="n">refdate</span><span class="p">)</span> | |
<span class="k">def</span> <span class="nf">businessdays</span><span class="p">(</span><span class="n">refdate</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="n">NBD</span><span class="p">,</span> <span class="n">holidays</span><span class="o">=</span><span class="p">{</span><span class="n">full</span> <span class="k">for</span> <span class="n">early</span><span class="p">,</span><span class="n">full</span> <span class="ow">in</span> <span class="n">holidays</span><span class="o">.</span><span class="n">values</span><span class="p">()}):</span> | |
<span class="k">return</span> <span class="p">(</span><span class="n">d</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">datecount</span><span class="p">(</span><span class="n">refdate</span><span class="p">,</span> <span class="n">direction</span><span class="p">)</span> <span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">weekday</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">{</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="p">}</span> <span class="ow">and</span> <span class="n">d</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">holidays</span><span class="p">)</span> | |
<span class="n">g</span> <span class="o">=</span> <span class="n">businessdays</span><span class="p">(</span><span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span> <span class="n">direction</span><span class="o">=</span><span class="n">PBD</span><span class="p">)</span> | |
<span class="nb">next</span><span class="p">(</span><span class="n">g</span><span class="p">),</span> <span class="nb">next</span><span class="p">(</span><span class="n">g</span><span class="p">),</span> <span class="nb">next</span><span class="p">(</span><span class="n">g</span><span class="p">)</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[42]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
(datetime.date(2014, 7, 2), | |
datetime.date(2014, 7, 1), | |
datetime.date(2014, 6, 30)) | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [43]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="n">g</span> <span class="o">=</span> <span class="n">businessdays</span><span class="p">(</span><span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span> <span class="n">direction</span><span class="o">=</span><span class="n">NBD</span><span class="p">)</span> | |
<span class="nb">next</span><span class="p">(</span><span class="n">g</span><span class="p">),</span> <span class="nb">next</span><span class="p">(</span><span class="n">g</span><span class="p">),</span> <span class="nb">next</span><span class="p">(</span><span class="n">g</span><span class="p">)</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[43]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
(datetime.date(2014, 7, 2), | |
datetime.date(2014, 7, 3), | |
datetime.date(2014, 7, 7)) | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div><aside class="notes"> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [44]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">wraps</span> | |
<span class="k">def</span> <span class="nf">pumped</span><span class="p">(</span><span class="n">gen</span><span class="p">):</span> | |
<span class="nd">@wraps</span><span class="p">(</span><span class="n">gen</span><span class="p">)</span> | |
<span class="k">def</span> <span class="nf">inner</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> | |
<span class="n">g</span> <span class="o">=</span> <span class="n">gen</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> | |
<span class="nb">next</span><span class="p">(</span><span class="n">g</span><span class="p">)</span> | |
<span class="k">return</span> <span class="n">g</span><span class="o">.</span><span class="n">send</span> | |
<span class="k">return</span> <span class="n">inner</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</aside></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [46]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="nd">@pumped</span> | |
<span class="k">def</span> <span class="nf">jp_holidays</span><span class="p">():</span> <span class="c"># Jurassic Park </span> | |
<span class="nd">@apply</span> | |
<span class="k">def</span> <span class="nf">calendar</span><span class="p">():</span> <span class="c"># simulate lookup</span> | |
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">full</span> <span class="k">for</span> <span class="n">early</span><span class="p">,</span><span class="n">full</span> <span class="ow">in</span> <span class="n">holidays</span><span class="o">.</span><span class="n">values</span><span class="p">()</span> <span class="k">if</span> <span class="n">full</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">):</span> | |
<span class="n">sleep</span><span class="p">(</span><span class="o">.</span><span class="mi">2</span><span class="p">)</span> | |
<span class="k">yield</span> <span class="n">d</span> | |
<span class="n">refdate</span><span class="p">,</span> <span class="n">next_holiday</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="nb">next</span><span class="p">(</span><span class="n">calendar</span><span class="p">)</span> | |
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span> | |
<span class="n">refdate</span> <span class="o">=</span> <span class="k">yield</span> <span class="p">(</span><span class="n">refdate</span> <span class="o">==</span> <span class="n">next_holiday</span><span class="p">)</span> | |
<span class="k">while</span> <span class="n">refdate</span> <span class="o">></span> <span class="n">next_holiday</span><span class="p">:</span> | |
<span class="n">next_holiday</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">calendar</span><span class="p">)</span> | |
<span class="k">def</span> <span class="nf">businessdays</span><span class="p">(</span><span class="n">refdate</span><span class="p">,</span> <span class="n">direction</span><span class="o">=</span><span class="n">NBD</span><span class="p">,</span> <span class="n">holidays</span><span class="o">=</span><span class="k">lambda</span> <span class="n">_</span><span class="p">:</span> <span class="bp">False</span><span class="p">):</span> | |
<span class="k">return</span> <span class="p">(</span><span class="n">d</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">datecount</span><span class="p">(</span><span class="n">refdate</span><span class="p">,</span> <span class="n">direction</span><span class="p">)</span> <span class="k">if</span> <span class="n">d</span><span class="o">.</span><span class="n">weekday</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">{</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="p">}</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">holidays</span><span class="p">(</span><span class="n">d</span><span class="p">))</span> | |
<span class="n">g</span> <span class="o">=</span> <span class="n">businessdays</span><span class="p">(</span><span class="n">date</span><span class="p">(</span><span class="mi">2014</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span> <span class="n">direction</span><span class="o">=</span><span class="n">NBD</span><span class="p">,</span> <span class="n">holidays</span><span class="o">=</span><span class="n">jp_holidays</span><span class="p">())</span> | |
<span class="o">%</span> <span class="n">time</span> <span class="nb">list</span><span class="p">(</span><span class="n">islice</span><span class="p">(</span><span class="n">g</span><span class="p">,</span><span class="mi">3</span><span class="p">))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
CPU times: user 4 ms, sys: 0 ns, total: 4 ms | |
Wall time: 3 s | |
</pre> | |
</div> | |
</div> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[46]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
[datetime.date(2014, 7, 2), | |
datetime.date(2014, 7, 3), | |
datetime.date(2014, 7, 7)] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [47]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="o">%</span> <span class="n">time</span> <span class="nb">list</span><span class="p">(</span><span class="n">islice</span><span class="p">(</span><span class="n">g</span><span class="p">,</span><span class="mi">11</span><span class="p">,</span><span class="mi">12</span><span class="p">))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
CPU times: user 0 ns, sys: 0 ns, total: 0 ns | |
Wall time: 200 ms | |
</pre> | |
</div> | |
</div> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[47]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
[datetime.date(2014, 7, 24)] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section> | |
</section><section> | |
<section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [48]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">decimal</span> <span class="kn">import</span> <span class="n">Decimal</span> | |
<span class="k">def</span> <span class="nf">change</span><span class="p">(</span><span class="n">amount</span><span class="p">,</span> <span class="n">denominations</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="n">Decimal</span><span class="p">,(</span><span class="s">'1.00'</span><span class="p">,</span> <span class="s">'0.50'</span><span class="p">,</span> <span class="s">'0.25'</span><span class="p">,</span> <span class="s">'0.10'</span><span class="p">,</span> <span class="s">'0.05'</span><span class="p">,</span> <span class="s">'0.01'</span><span class="p">))):</span> | |
<span class="n">coins</span> <span class="o">=</span> <span class="p">[]</span> | |
<span class="k">while</span> <span class="nb">any</span><span class="p">(</span><span class="n">amount</span> <span class="o">>=</span> <span class="n">d</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">denominations</span><span class="p">):</span> | |
<span class="n">coins</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">next</span><span class="p">((</span><span class="n">d</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">denominations</span> <span class="k">if</span> <span class="n">amount</span> <span class="o">>=</span> <span class="n">d</span><span class="p">)))</span> | |
<span class="n">amount</span> <span class="o">-=</span> <span class="n">coins</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> | |
<span class="k">return</span> <span class="n">coins</span> | |
<span class="n">change</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s">'1.72'</span><span class="p">))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt output_prompt"> | |
Out[48]:</div> | |
<div class="output_text output_subarea output_pyout"> | |
<pre> | |
[Decimal('1.00'), | |
Decimal('0.50'), | |
Decimal('0.10'), | |
Decimal('0.10'), | |
Decimal('0.01'), | |
Decimal('0.01')] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [49]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">decimal</span> <span class="kn">import</span> <span class="n">Decimal</span> | |
<span class="k">def</span> <span class="nf">change</span><span class="p">(</span><span class="n">amount</span><span class="p">,</span> <span class="n">denominations</span> <span class="o">=</span> <span class="p">{</span><span class="n">Decimal</span><span class="p">(</span><span class="n">d</span><span class="p">):</span><span class="mi">5</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="p">(</span><span class="s">'1.00'</span><span class="p">,</span> <span class="s">'0.50'</span><span class="p">,</span> <span class="s">'0.25'</span><span class="p">,</span> <span class="s">'0.10'</span><span class="p">,</span> <span class="s">'0.05'</span><span class="p">,</span> <span class="s">'0.01'</span><span class="p">)}):</span> | |
<span class="n">coins</span> <span class="o">=</span> <span class="p">[]</span> | |
<span class="k">while</span> <span class="nb">any</span><span class="p">(</span><span class="n">amount</span> <span class="o">>=</span> <span class="n">d</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">denominations</span><span class="p">,</span><span class="n">reverse</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">denominations</span><span class="p">[</span><span class="n">d</span><span class="p">]</span> <span class="o">></span> <span class="mi">0</span><span class="p">):</span> | |
<span class="n">coins</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="n">d</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">denominations</span><span class="p">,</span><span class="n">reverse</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">amount</span> <span class="o">>=</span> <span class="n">d</span> <span class="ow">and</span> <span class="n">denominations</span><span class="p">[</span><span class="n">d</span><span class="p">]</span> <span class="o">></span> <span class="mi">0</span><span class="p">))</span> | |
<span class="n">denominations</span><span class="p">[</span><span class="n">coins</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span> <span class="o">-=</span> <span class="mi">1</span> | |
<span class="n">amount</span> <span class="o">-=</span> <span class="n">coins</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> | |
<span class="k">return</span> <span class="n">coins</span> | |
<span class="k">print</span><span class="p">(</span><span class="n">change</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s">'1.72'</span><span class="p">)))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
[Decimal('1.00'), Decimal('0.50'), Decimal('0.10'), Decimal('0.10'), Decimal('0.01'), Decimal('0.01')] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [50]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">print</span><span class="p">(</span><span class="n">change</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s">'1.72'</span><span class="p">),</span> <span class="n">denominations</span><span class="o">=</span><span class="p">{</span><span class="n">Decimal</span><span class="p">(</span><span class="s">'0.50'</span><span class="p">):</span> <span class="mi">3</span><span class="p">,</span> <span class="n">Decimal</span><span class="p">(</span><span class="s">'0.10'</span><span class="p">):</span> <span class="mi">10</span><span class="p">,</span> <span class="n">Decimal</span><span class="p">(</span><span class="s">'0.01'</span><span class="p">):</span> <span class="mi">20</span><span class="p">}))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
[Decimal('0.50'), Decimal('0.50'), Decimal('0.50'), Decimal('0.10'), Decimal('0.10'), Decimal('0.01'), Decimal('0.01')] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [51]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">print</span><span class="p">(</span><span class="n">change</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s">'1.72'</span><span class="p">),</span> <span class="n">denominations</span><span class="o">=</span><span class="p">{</span><span class="n">Decimal</span><span class="p">(</span><span class="s">'0.50'</span><span class="p">):</span> <span class="mi">2</span><span class="p">,</span> <span class="n">Decimal</span><span class="p">(</span><span class="s">'0.10'</span><span class="p">):</span> <span class="mi">10</span><span class="p">,</span> <span class="n">Decimal</span><span class="p">(</span><span class="s">'0.01'</span><span class="p">):</span> <span class="mi">20</span><span class="p">}))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
[Decimal('0.50'), Decimal('0.50'), Decimal('0.10'), Decimal('0.10'), Decimal('0.10'), Decimal('0.10'), Decimal('0.10'), Decimal('0.10'), Decimal('0.10'), Decimal('0.01'), Decimal('0.01')] | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [52]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">repeat</span><span class="p">,</span> <span class="n">chain</span><span class="p">,</span> <span class="n">takewhile</span> | |
<span class="n">greedy</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">items</span><span class="p">,</span> <span class="n">predicate</span><span class="p">:</span> <span class="n">chain</span><span class="o">.</span><span class="n">from_iterable</span><span class="p">(</span><span class="n">takewhile</span><span class="p">(</span><span class="n">predicate</span><span class="p">,</span><span class="n">repeat</span><span class="p">(</span><span class="n">x</span><span class="p">))</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">items</span><span class="p">)</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [53]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="nd">@pumped</span> | |
<span class="k">def</span> <span class="nf">predicate</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">state</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> | |
<span class="n">value</span> <span class="o">=</span> <span class="k">yield</span> | |
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span> | |
<span class="k">if</span> <span class="n">state</span><span class="o">+</span><span class="n">value</span> <span class="o"><=</span> <span class="n">x</span><span class="p">:</span> <span class="c"># take values until you exceed the maximum</span> | |
<span class="n">state</span> <span class="o">+=</span> <span class="n">value</span> | |
<span class="n">value</span> <span class="o">=</span> <span class="k">yield</span> <span class="bp">True</span> | |
<span class="k">else</span><span class="p">:</span> | |
<span class="n">value</span> <span class="o">=</span> <span class="k">yield</span> <span class="bp">False</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [58]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="n">amounts</span> <span class="o">=</span> <span class="p">[</span><span class="n">randrange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1000</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">5</span><span class="p">)]</span> <span class="c"># randomly pick dollar amounts</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [59]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">groupby</span> | |
<span class="n">denominations</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">10</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span><span class="mi">100</span><span class="p">,</span><span class="mi">500</span><span class="p">,</span><span class="mi">1000</span><span class="p">,</span><span class="mi">2000</span><span class="p">]</span> | |
<span class="k">for</span> <span class="n">amount</span> <span class="ow">in</span> <span class="n">amounts</span><span class="p">:</span> | |
<span class="n">pred</span> <span class="o">=</span> <span class="n">predicate</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span> <span class="c"># create the predicate</span> | |
<span class="n">coins</span> <span class="o">=</span> <span class="n">greedy</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">denominations</span><span class="p">),</span> <span class="n">pred</span><span class="p">)</span> <span class="c"># greedy algorithm</span> | |
<span class="c"># pretty print</span> | |
<span class="k">print</span><span class="p">(</span><span class="s">'your change for {:>5.2f}$ = {}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">amount</span><span class="o">/</span><span class="mi">100</span><span class="p">,</span> | |
<span class="s">' + '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s">'{:>2d}×{:<3}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="mi">1</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">cs</span><span class="p">),</span> | |
<span class="p">((</span><span class="s">'{:d}¢'</span> <span class="k">if</span> <span class="n">c</span> <span class="o"><</span> <span class="mi">100</span> <span class="k">else</span> <span class="s">'{:.0f}$'</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">c</span> <span class="k">if</span> <span class="n">c</span> <span class="o"><</span> <span class="mi">100</span> <span class="k">else</span> <span class="n">c</span><span class="o">/</span><span class="mi">100</span><span class="p">)))</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span><span class="n">cs</span> <span class="ow">in</span> <span class="n">groupby</span><span class="p">(</span><span class="n">coins</span><span class="p">))))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
your change for 7.44$ = 1×5$ + 2×1$ + 1×25¢ + 1×10¢ + 1×5¢ + 4×1¢ | |
your change for 9.09$ = 1×5$ + 4×1$ + 1×5¢ + 4×1¢ | |
your change for 8.60$ = 1×5$ + 3×1$ + 2×25¢ + 1×10¢ | |
your change for 0.96$ = 3×25¢ + 2×10¢ + 1×1¢ | |
your change for 7.41$ = 1×5$ + 2×1$ + 1×25¢ + 1×10¢ + 1×5¢ + 1×1¢ | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [60]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="nd">@pumped</span> | |
<span class="k">def</span> <span class="nf">predicate</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">state</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">constraint</span><span class="o">=</span><span class="k">lambda</span> <span class="n">_</span><span class="p">,</span> <span class="n">__</span><span class="p">:</span> <span class="bp">True</span><span class="p">):</span> | |
<span class="n">values</span> <span class="o">=</span> <span class="p">[]</span> | |
<span class="n">value</span> <span class="o">=</span> <span class="k">yield</span> | |
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span> | |
<span class="k">if</span> <span class="n">state</span><span class="o">+</span><span class="n">value</span> <span class="o"><=</span> <span class="n">x</span> <span class="ow">and</span> <span class="n">constraint</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="c"># take values until you exceed the maximum</span> | |
<span class="n">state</span> <span class="o">+=</span> <span class="n">value</span> | |
<span class="n">value</span> <span class="o">=</span> <span class="k">yield</span> <span class="bp">True</span> | |
<span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> | |
<span class="k">else</span><span class="p">:</span> | |
<span class="n">value</span> <span class="o">=</span> <span class="k">yield</span> <span class="bp">False</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [70]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">Counter</span> | |
<span class="n">three_coins</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">coins</span><span class="p">,</span> <span class="n">coin</span><span class="p">:</span> <span class="n">Counter</span><span class="p">(</span><span class="n">coins</span><span class="p">)[</span><span class="n">coin</span><span class="p">]</span> <span class="o"><</span> <span class="mi">2</span> | |
<span class="k">for</span> <span class="n">amount</span> <span class="ow">in</span> <span class="n">amounts</span><span class="p">:</span> | |
<span class="n">pred</span> <span class="o">=</span> <span class="n">predicate</span><span class="p">(</span><span class="n">amount</span><span class="p">,</span> <span class="n">constraint</span><span class="o">=</span><span class="n">three_coins</span><span class="p">)</span> <span class="c"># create the predicate</span> | |
<span class="n">coins</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">greedy</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">denominations</span><span class="p">),</span> <span class="n">pred</span><span class="p">))</span> <span class="c"># greedy algorithm</span> | |
<span class="c"># pretty print</span> | |
<span class="k">print</span><span class="p">(</span><span class="s">'your change for {:>5.2f}$ -{:>5.2f}$ = {}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">amount</span><span class="o">/</span><span class="mi">100</span><span class="p">,</span> <span class="p">(</span><span class="n">amount</span> <span class="o">-</span> <span class="nb">sum</span><span class="p">(</span><span class="n">coins</span><span class="p">))</span><span class="o">/</span><span class="mi">100</span><span class="p">,</span> | |
<span class="s">' + '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s">'{:>2d}×{:<3}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="mi">1</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">cs</span><span class="p">),</span> | |
<span class="p">((</span><span class="s">'{:d}¢'</span> <span class="k">if</span> <span class="n">c</span> <span class="o"><</span> <span class="mi">100</span> <span class="k">else</span> <span class="s">'{:.0f}$'</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">c</span> <span class="k">if</span> <span class="n">c</span> <span class="o"><</span> <span class="mi">100</span> <span class="k">else</span> <span class="n">c</span><span class="o">/</span><span class="mi">100</span><span class="p">)))</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span><span class="n">cs</span> <span class="ow">in</span> <span class="n">groupby</span><span class="p">(</span><span class="n">coins</span><span class="p">))))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
your change for 7.44$ - 0.02$ = 1×5$ + 2×1$ + 1×25¢ + 1×10¢ + 1×5¢ + 2×1¢ | |
your change for 9.09$ - 1.27$ = 1×5$ + 2×1$ + 2×25¢ + 2×10¢ + 2×5¢ + 2×1¢ | |
your change for 8.60$ - 0.78$ = 1×5$ + 2×1$ + 2×25¢ + 2×10¢ + 2×5¢ + 2×1¢ | |
your change for 0.96$ - 0.14$ = 2×25¢ + 2×10¢ + 2×5¢ + 2×1¢ | |
your change for 7.41$ - 0.00$ = 1×5$ + 2×1$ + 1×25¢ + 1×10¢ + 1×5¢ + 1×1¢ | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section><section> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [62]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="n">roman</span> <span class="o">=</span> <span class="p">{</span> <span class="mi">1</span><span class="p">:</span> <span class="s">'i'</span><span class="p">,</span> <span class="mi">4</span><span class="p">:</span> <span class="s">'iv'</span><span class="p">,</span> <span class="mi">5</span><span class="p">:</span> <span class="s">'v'</span><span class="p">,</span> <span class="mi">9</span><span class="p">:</span> <span class="s">'ix'</span><span class="p">,</span> <span class="mi">10</span><span class="p">:</span> <span class="s">'x'</span><span class="p">,</span> | |
<span class="mi">40</span><span class="p">:</span> <span class="s">'ix'</span><span class="p">,</span> <span class="mi">50</span><span class="p">:</span> <span class="s">'x'</span><span class="p">,</span> <span class="mi">90</span><span class="p">:</span> <span class="s">'xc'</span><span class="p">,</span> <span class="mi">100</span><span class="p">:</span> <span class="s">'c'</span><span class="p">,</span> <span class="mi">400</span><span class="p">:</span> <span class="s">'cd'</span><span class="p">,</span> | |
<span class="mi">500</span><span class="p">:</span> <span class="s">'d'</span><span class="p">,</span> <span class="mi">900</span><span class="p">:</span> <span class="s">'cm'</span><span class="p">,</span> <span class="mi">1000</span><span class="p">:</span> <span class="s">'m'</span><span class="p">,}</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [63]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="n">years</span> <span class="o">=</span> <span class="p">[</span><span class="n">randint</span><span class="p">(</span><span class="mi">1900</span><span class="p">,</span><span class="mi">2200</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">5</span><span class="p">)]</span> <span class="c"># randomly pick a year</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div><div style=display:none> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [64]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="nd">@pumped</span> | |
<span class="k">def</span> <span class="nf">predicate</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">state</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">constraint</span><span class="o">=</span><span class="k">lambda</span> <span class="n">_</span><span class="p">,</span> <span class="n">__</span><span class="p">:</span> <span class="bp">True</span><span class="p">):</span> | |
<span class="n">values</span> <span class="o">=</span> <span class="p">[]</span> | |
<span class="n">value</span> <span class="o">=</span> <span class="k">yield</span> | |
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span> | |
<span class="k">if</span> <span class="n">state</span><span class="o">+</span><span class="n">value</span> <span class="o"><=</span> <span class="n">x</span> <span class="ow">and</span> <span class="n">constraint</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="c"># take values until you exceed the maximum</span> | |
<span class="n">state</span> <span class="o">+=</span> <span class="n">value</span> | |
<span class="n">value</span> <span class="o">=</span> <span class="k">yield</span> <span class="bp">True</span> | |
<span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> | |
<span class="k">else</span><span class="p">:</span> | |
<span class="n">value</span> <span class="o">=</span> <span class="k">yield</span> <span class="bp">False</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing code_cell rendered"> | |
<div class="input"> | |
<div class="prompt input_prompt"> | |
In [65]: | |
</div> | |
<div class="inner_cell"> | |
<div class="input_area"> | |
<div class="highlight"><pre><span class="k">for</span> <span class="n">year</span> <span class="ow">in</span> <span class="n">years</span><span class="p">:</span> | |
<span class="n">pred</span> <span class="o">=</span> <span class="n">predicate</span><span class="p">(</span><span class="n">year</span><span class="p">)</span> <span class="c"># create the predicate</span> | |
<span class="n">numerals</span> <span class="o">=</span> <span class="n">greedy</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">roman</span><span class="p">)),</span> <span class="n">pred</span><span class="p">)</span> <span class="c"># greedy algorithm</span> | |
<span class="k">print</span><span class="p">(</span><span class="s">'the year {} is written {}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> <span class="n">year</span><span class="p">,</span><span class="s">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">roman</span><span class="p">[</span><span class="n">x</span><span class="p">]</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">numerals</span><span class="p">))))</span> | |
</pre></div> | |
</div> | |
</div> | |
</div> | |
<div class="output_wrapper"> | |
<div class="output"> | |
<div class="output_area"><div class="prompt"></div> | |
<div class="output_subarea output_stream output_stdout output_text"> | |
<pre> | |
the year 1903 is written MCMIII | |
the year 2052 is written MMXII | |
the year 2029 is written MMXXIX | |
the year 1975 is written MCMXXXV | |
the year 1945 is written MCMIXV | |
</pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div></section> | |
</section><section> | |
<section> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<h1 id="generators-have-freed-your-mind">Generators Have Freed Your Mind</h1> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<h2 id="go-in-peace">Go In Peace</h2> | |
</div> | |
</div> | |
</div> | |
</div><div class="fragment"> | |
<div class="cell border-box-sizing text_cell rendered"> | |
<div class="prompt input_prompt"> | |
</div> | |
<div class="inner_cell"> | |
<div class="text_cell_render border-box-sizing rendered_html"> | |
<p>James Powell</p> | |
<p><a href="[email protected]">[email protected]</a></p> | |
<p><a href="http://twitter.com/dontusethiscode">@dontusethiscode</a></p> | |
<p><a href="http://seriously.dontusethiscode.com">seriously.dontusethiscode.com</a></p> | |
<p>dutc on irc.freenode.net</p> | |
</div> | |
</div> | |
</div> | |
</div></section> | |
</section> | |
</div> | |
</div> | |
<script src="reveal.js/lib/js/head.min.js"></script> | |
<script src="reveal.js/js/reveal.js"></script> | |
<script> | |
// Full list of configuration options available here: https://github.com/hakimel/reveal.js#configuration | |
Reveal.initialize({ | |
controls: true, | |
progress: true, | |
history: true, | |
theme: Reveal.getQueryHash().theme, // available themes are in /css/theme | |
transition: Reveal.getQueryHash().transition || 'linear', // default/cube/page/concave/zoom/linear/none | |
// Optional libraries used to extend on reveal.js | |
dependencies: [ | |
{ src: "reveal.js/lib/js/classList.js", condition: function() { return !document.body.classList; } }, | |
{ src: "reveal.js/plugin/highlight/highlight.js", async: true, callback: function() { hljs.initHighlightingOnLoad(); } }, | |
{ src: "reveal.js/plugin/notes/notes.js", async: true, condition: function() { return !!document.body.classList; } } | |
] | |
}); | |
</script> | |
<!-- Loading mathjax macro --> | |
<!-- Load mathjax --> | |
<script src="https://c328740.ssl.cf1.rackcdn.com/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"></script> | |
<!-- MathJax configuration --> | |
<script type="text/x-mathjax-config"> | |
MathJax.Hub.Config({ | |
tex2jax: { | |
inlineMath: [ ['$','$'], ["\\(","\\)"] ], | |
displayMath: [ ['$$','$$'], ["\\[","\\]"] ], | |
processEscapes: true, | |
processEnvironments: true | |
}, | |
// Center justify equations in code and markdown cells. Elsewhere | |
// we use CSS to left justify single line equations in code cells. | |
displayAlign: 'center', | |
"HTML-CSS": { | |
styles: {'.MathJax_Display': {"margin": 0}}, | |
linebreaks: { automatic: true } | |
} | |
}); | |
</script> | |
<!-- End of mathjax configuration --> | |
<script> | |
Reveal.addEventListener( 'slidechanged', function( event ) { | |
window.scrollTo(0,0); | |
MathJax.Hub.Rerender(event.currentSlide); | |
}); | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment