From 88591c9a03bfc278afaef804a274086c2eb176e4 Mon Sep 17 00:00:00 2001 From: raynardj Date: Wed, 27 Apr 2022 12:38:54 +0800 Subject: [PATCH] Refactory to nbdev-less --- README.md | 199 +- docs/.DS_Store | Bin 6148 -> 0 bytes docs/.gitignore | 1 - docs/CUDA_GPU_Management.html | 185 - docs/Gemfile | 7 - docs/Gemfile.lock | 252 - docs/Untitled.html | 66 - docs/_config.yml | 64 - docs/_data/alerts.yml | 15 - docs/_data/definitions.yml | 1 - docs/_data/glossary.yml | 1 - docs/_data/sidebars/home_sidebar.yml | 114 - docs/_data/tags.yml | 3 - docs/_data/terms.yml | 0 docs/_data/topnav.yml | 10 - docs/_includes/archive.html | 15 - docs/_includes/callout.html | 1 - docs/_includes/footer.html | 9 - docs/_includes/google_analytics.html | 6 - docs/_includes/head.html | 82 - docs/_includes/head_print.html | 28 - docs/_includes/image.html | 1 - docs/_includes/important.html | 1 - docs/_includes/initialize_shuffle.html | 130 - docs/_includes/inline_image.html | 1 - docs/_includes/links.html | 44 - docs/_includes/note.html | 1 - docs/_includes/search_google_custom.html | 16 - docs/_includes/search_simple_jekyll.html | 16 - docs/_includes/sidebar.html | 59 - docs/_includes/tip.html | 1 - docs/_includes/toc.html | 21 - docs/_includes/topnav.html | 62 - docs/_includes/warning.html | 1 - docs/_layouts/default.html | 110 - docs/_layouts/default_print.html | 25 - docs/_layouts/none.html | 3 - docs/_layouts/page.html | 67 - docs/_layouts/page_print.html | 15 - docs/async.html | 177 - docs/b10_conditional_random_field.html | 386 - docs/bert_visualize.html | 393 - docs/bilstm-based-search-on-netflix-data.html | 3728 -------- docs/category.html | 968 --- docs/config.html | 460 - docs/cosine_search.html | 268 - docs/create_different.html | 29 - docs/cross_entropy_weighter.html | 1287 --- docs/css/bootstrap.min.css | 7535 ----------------- docs/css/boxshadowproperties.css | 24 - docs/css/customstyles.css | 1306 --- docs/css/font-awesome.min.css | 4 - docs/css/fonts/FontAwesome.otf | Bin 134808 -> 0 bytes docs/css/fonts/fontawesome-webfont.eot | Bin 165742 -> 0 bytes docs/css/fonts/fontawesome-webfont.svg | 2671 ------ docs/css/fonts/fontawesome-webfont.ttf | Bin 165548 -> 0 bytes docs/css/fonts/fontawesome-webfont.woff | Bin 98024 -> 0 bytes docs/css/fonts/fontawesome-webfont.woff2 | Bin 77160 -> 0 bytes docs/css/modern-business.css | 89 - docs/css/printstyles.css | 159 - docs/css/syntax.css | 60 - docs/css/theme-blue.css | 121 - docs/css/theme-green.css | 110 - docs/dataframe_pipeline.html | 1453 ---- docs/df.html | 289 - docs/df_filter.html | 1183 --- docs/etl.html | 124 - docs/feed.xml | 32 - docs/files.html | 241 - docs/flatten.html | 111 - docs/fonts/FontAwesome.otf | Bin 85908 -> 0 bytes docs/fonts/fontawesome-webfont.eot | Bin 56006 -> 0 bytes docs/fonts/fontawesome-webfont.svg | 520 -- docs/fonts/fontawesome-webfont.ttf | Bin 112160 -> 0 bytes docs/fonts/fontawesome-webfont.woff | Bin 65452 -> 0 bytes docs/fonts/glyphicons-halflings-regular.eot | Bin 20127 -> 0 bytes docs/fonts/glyphicons-halflings-regular.svg | 288 - docs/fonts/glyphicons-halflings-regular.ttf | Bin 45404 -> 0 bytes docs/fonts/glyphicons-halflings-regular.woff | Bin 23424 -> 0 bytes docs/fonts/glyphicons-halflings-regular.woff2 | Bin 18028 -> 0 bytes docs/forgebox_test.html | 1078 --- docs/freemap.html | 259 - docs/hf_transformer_data.html | 437 - docs/html.html | 791 -- docs/image_widgets.html | 418 - docs/images/company_logo.png | Bin 170761 -> 0 bytes docs/images/company_logo_big.png | Bin 1639 -> 0 bytes docs/images/doc_example.png | Bin 29002 -> 0 bytes docs/images/export_example.png | Bin 38947 -> 0 bytes docs/images/favicon.ico | Bin 1150 -> 0 bytes docs/images/workflowarrow.png | Bin 3595 -> 0 bytes docs/imports.html | 41 - docs/index.html | 740 -- docs/inter_widgets.html | 985 --- docs/js/customscripts.js | 54 - docs/js/jekyll-search.js | 1 - docs/js/jquery.ba-throttle-debounce.min.js | 9 - docs/js/jquery.navgoco.min.js | 8 - docs/js/jquery.shuffle.min.js | 1588 ---- docs/js/toc.js | 90 - docs/licenses/LICENSE | 24 - docs/licenses/LICENSE-BSD-NAVGOCO.txt | 27 - docs/log.png | Bin 170761 -> 0 bytes docs/logo.jpg | Bin 42630 -> 0 bytes docs/loop.html | 1642 ---- docs/loopstack.html | 1519 ---- docs/minimum.html | 466 - docs/multiprocess.html | 269 - docs/optimizers.html | 378 - docs/pandas_extra.html | 709 -- docs/pl_training.html | 307 - docs/sidebar.json | 38 - docs/sitemap.xml | 24 - docs/spacy.html | 463 - docs/static_file.html | 220 - docs/test_nbdev.html | 75 - docs/thunder_callbacks.html | 147 - docs/tooltips.json | 19 - docs/traceable_edit_in_flask.html | 294 - docs/train.html | 1024 --- docs/turbo.html | 851 -- docs/widgets.html | 481 -- docs/wild_tree_and_loss.html | 946 --- forgebox/__init__.py | 2 +- forgebox/_nbdev.py | 199 - forgebox/asyncing.py | 55 - forgebox/batcher.py | 38 + forgebox/bert_visualize.py | 118 - forgebox/category.py | 180 +- forgebox/config.py | 10 +- forgebox/cosine.py | 15 +- forgebox/data/__init__.py | 0 forgebox/data/nlp.py | 169 - forgebox/df.py | 14 +- forgebox/df_filter.py | 308 - forgebox/editable.py | 137 - forgebox/etl.py | 67 - forgebox/files.py | 16 +- forgebox/flatten.py | 43 - forgebox/freemap.py | 83 - forgebox/ftorch/README.md | 69 - forgebox/ftorch/callbacks.py | 29 - forgebox/ftorch/cuda.py | 15 +- forgebox/ftorch/optimizer.py | 4 - forgebox/ftorch/prepro.py | 552 +- forgebox/ftorch/train.py | 138 - forgebox/ftorch/utils.py | 31 - forgebox/hf/__init__.py | 0 forgebox/hf/data.py | 217 - forgebox/hf/train.py | 326 - forgebox/html.py | 99 +- forgebox/images/widgets.py | 23 +- forgebox/imports.py | 62 +- forgebox/initialize.py | 9 - forgebox/loop.py | 622 -- forgebox/loopstack.py | 263 - forgebox/minimum.py | 161 - forgebox/multiproc.py | 174 - forgebox/multitask_ce.py | 37 - forgebox/{pdenhanced.py => pd_plus.py} | 33 +- forgebox/pipe.py | 251 - forgebox/spacy.py | 156 - forgebox/static_file.py | 17 - forgebox/tensor.py | 45 - forgebox/test_nbdev.py | 8 - forgebox/thunder/callbacks.py | 39 +- forgebox/train.py | 259 - forgebox/usuals.py | 10 - forgebox/utils.py | 16 - forgebox/widgets.py | 138 +- forgebox/wildtree.py | 8 +- nbs_hide/11_train.ipynb | 989 --- settings.ini | 11 +- setup.backup | 20 - setup.py | 93 +- test/import_test.py | 11 + test/pipeline_test.py | 87 + 177 files changed, 443 insertions(+), 48104 deletions(-) delete mode 100644 docs/.DS_Store delete mode 100644 docs/.gitignore delete mode 100644 docs/CUDA_GPU_Management.html delete mode 100644 docs/Gemfile delete mode 100644 docs/Gemfile.lock delete mode 100644 docs/Untitled.html delete mode 100644 docs/_config.yml delete mode 100644 docs/_data/alerts.yml delete mode 100644 docs/_data/definitions.yml delete mode 100644 docs/_data/glossary.yml delete mode 100644 docs/_data/sidebars/home_sidebar.yml delete mode 100644 docs/_data/tags.yml delete mode 100644 docs/_data/terms.yml delete mode 100644 docs/_data/topnav.yml delete mode 100644 docs/_includes/archive.html delete mode 100644 docs/_includes/callout.html delete mode 100755 docs/_includes/footer.html delete mode 100644 docs/_includes/google_analytics.html delete mode 100644 docs/_includes/head.html delete mode 100644 docs/_includes/head_print.html delete mode 100644 docs/_includes/image.html delete mode 100644 docs/_includes/important.html delete mode 100644 docs/_includes/initialize_shuffle.html delete mode 100644 docs/_includes/inline_image.html delete mode 100644 docs/_includes/links.html delete mode 100644 docs/_includes/note.html delete mode 100644 docs/_includes/search_google_custom.html delete mode 100644 docs/_includes/search_simple_jekyll.html delete mode 100644 docs/_includes/sidebar.html delete mode 100644 docs/_includes/tip.html delete mode 100644 docs/_includes/toc.html delete mode 100644 docs/_includes/topnav.html delete mode 100644 docs/_includes/warning.html delete mode 100644 docs/_layouts/default.html delete mode 100644 docs/_layouts/default_print.html delete mode 100644 docs/_layouts/none.html delete mode 100644 docs/_layouts/page.html delete mode 100644 docs/_layouts/page_print.html delete mode 100644 docs/async.html delete mode 100644 docs/b10_conditional_random_field.html delete mode 100644 docs/bert_visualize.html delete mode 100644 docs/bilstm-based-search-on-netflix-data.html delete mode 100644 docs/category.html delete mode 100644 docs/config.html delete mode 100644 docs/cosine_search.html delete mode 100644 docs/create_different.html delete mode 100644 docs/cross_entropy_weighter.html delete mode 100755 docs/css/bootstrap.min.css delete mode 100644 docs/css/boxshadowproperties.css delete mode 100644 docs/css/customstyles.css delete mode 100644 docs/css/font-awesome.min.css delete mode 100644 docs/css/fonts/FontAwesome.otf delete mode 100644 docs/css/fonts/fontawesome-webfont.eot delete mode 100644 docs/css/fonts/fontawesome-webfont.svg delete mode 100644 docs/css/fonts/fontawesome-webfont.ttf delete mode 100644 docs/css/fonts/fontawesome-webfont.woff delete mode 100644 docs/css/fonts/fontawesome-webfont.woff2 delete mode 100755 docs/css/modern-business.css delete mode 100644 docs/css/printstyles.css delete mode 100644 docs/css/syntax.css delete mode 100644 docs/css/theme-blue.css delete mode 100644 docs/css/theme-green.css delete mode 100644 docs/dataframe_pipeline.html delete mode 100644 docs/df.html delete mode 100644 docs/df_filter.html delete mode 100644 docs/etl.html delete mode 100644 docs/feed.xml delete mode 100644 docs/files.html delete mode 100644 docs/flatten.html delete mode 100644 docs/fonts/FontAwesome.otf delete mode 100644 docs/fonts/fontawesome-webfont.eot delete mode 100644 docs/fonts/fontawesome-webfont.svg delete mode 100644 docs/fonts/fontawesome-webfont.ttf delete mode 100644 docs/fonts/fontawesome-webfont.woff delete mode 100644 docs/fonts/glyphicons-halflings-regular.eot delete mode 100644 docs/fonts/glyphicons-halflings-regular.svg delete mode 100644 docs/fonts/glyphicons-halflings-regular.ttf delete mode 100644 docs/fonts/glyphicons-halflings-regular.woff delete mode 100644 docs/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 docs/forgebox_test.html delete mode 100644 docs/freemap.html delete mode 100644 docs/hf_transformer_data.html delete mode 100644 docs/html.html delete mode 100644 docs/image_widgets.html delete mode 100644 docs/images/company_logo.png delete mode 100644 docs/images/company_logo_big.png delete mode 100644 docs/images/doc_example.png delete mode 100644 docs/images/export_example.png delete mode 100644 docs/images/favicon.ico delete mode 100644 docs/images/workflowarrow.png delete mode 100644 docs/imports.html delete mode 100644 docs/index.html delete mode 100644 docs/inter_widgets.html delete mode 100644 docs/js/customscripts.js delete mode 100644 docs/js/jekyll-search.js delete mode 100644 docs/js/jquery.ba-throttle-debounce.min.js delete mode 100755 docs/js/jquery.navgoco.min.js delete mode 100644 docs/js/jquery.shuffle.min.js delete mode 100644 docs/js/toc.js delete mode 100644 docs/licenses/LICENSE delete mode 100644 docs/licenses/LICENSE-BSD-NAVGOCO.txt delete mode 100644 docs/log.png delete mode 100644 docs/logo.jpg delete mode 100644 docs/loop.html delete mode 100644 docs/loopstack.html delete mode 100644 docs/minimum.html delete mode 100644 docs/multiprocess.html delete mode 100644 docs/optimizers.html delete mode 100644 docs/pandas_extra.html delete mode 100644 docs/pl_training.html delete mode 100644 docs/sidebar.json delete mode 100644 docs/sitemap.xml delete mode 100644 docs/spacy.html delete mode 100644 docs/static_file.html delete mode 100644 docs/test_nbdev.html delete mode 100644 docs/thunder_callbacks.html delete mode 100644 docs/tooltips.json delete mode 100644 docs/traceable_edit_in_flask.html delete mode 100644 docs/train.html delete mode 100644 docs/turbo.html delete mode 100644 docs/widgets.html delete mode 100644 docs/wild_tree_and_loss.html delete mode 100644 forgebox/_nbdev.py delete mode 100644 forgebox/asyncing.py create mode 100644 forgebox/batcher.py delete mode 100644 forgebox/bert_visualize.py delete mode 100644 forgebox/data/__init__.py delete mode 100644 forgebox/data/nlp.py delete mode 100644 forgebox/df_filter.py delete mode 100644 forgebox/editable.py delete mode 100644 forgebox/etl.py delete mode 100644 forgebox/flatten.py delete mode 100644 forgebox/freemap.py delete mode 100644 forgebox/ftorch/README.md delete mode 100644 forgebox/ftorch/callbacks.py delete mode 100644 forgebox/ftorch/train.py delete mode 100644 forgebox/ftorch/utils.py delete mode 100644 forgebox/hf/__init__.py delete mode 100644 forgebox/hf/data.py delete mode 100644 forgebox/hf/train.py delete mode 100644 forgebox/initialize.py delete mode 100644 forgebox/loop.py delete mode 100644 forgebox/loopstack.py delete mode 100644 forgebox/minimum.py delete mode 100644 forgebox/multiproc.py delete mode 100644 forgebox/multitask_ce.py rename forgebox/{pdenhanced.py => pd_plus.py} (65%) delete mode 100644 forgebox/pipe.py delete mode 100644 forgebox/spacy.py delete mode 100644 forgebox/static_file.py delete mode 100644 forgebox/tensor.py delete mode 100644 forgebox/test_nbdev.py delete mode 100644 forgebox/train.py delete mode 100644 forgebox/usuals.py delete mode 100644 forgebox/utils.py delete mode 100644 nbs_hide/11_train.ipynb delete mode 100644 setup.backup create mode 100644 test/import_test.py create mode 100644 test/pipeline_test.py diff --git a/README.md b/README.md index 0bdc058..1e0ab3e 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,5 @@ # ForgeBox -> Data science comprehensive toolbox 🛠⚔️📦 - - -![forgebox logo](https://raw.githubusercontent.com/raynardj/forgebox/new_feature/docs/logo.jpg) +> Data science comprehensive toolbox ## Installation @@ -25,7 +22,7 @@ The following command will import many frequent tools for data science, like **p from frogebox.imports import * ``` -No more🚫 following typings +No more following verbosity ```python import pandas as pd import numpy as np @@ -33,82 +30,6 @@ import os import json ... ``` - -### Categorical converter - -> Mapping and converting categorical infomation - -```python -from forgebox.category import Category -``` - -```python -az = list(map(chr,range(ord("A"), ord("z")+1))) -print(az) -``` - - ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] - - -```python -cate_az = Category(az) -cate_az -``` - - - - - Category Manager with 58 - - - -```python -cate_az.c2i["R"], cate_az.i2c[17] -``` - - - - - (17, 'R') - - - -```python -cate_az.c2i[list("ForgeBox")] -``` - - - - - array([ 5, 46, 49, 38, 36, 1, 46, 55]) - - - -```python -cate_az.i2c[[ 5, 46, 49, 38, 36, 1, 46, 55]] -``` - - - - - array(['F', 'o', 'r', 'g', 'e', 'B', 'o', 'x'], dtype=' - @@ -187,37 +92,6 @@ file_detail("/Users/xiaochen.zhang/.cache/").sample(5) - -### JS style async - -```python -from forgebox.asyncing import Async -from time import sleep -``` - -```python -def something_time_costing_but_you_dont_want_to_wait(x): - sleep(x) - return f"slept for {x} seconds" - -def task2_you_will_perfrom_after_the_time_costing_one(x): - print(f"[result]:\t{x}") - return 1 - -print("1111111111") - -Async(something_time_costing_but_you_dont_want_to_wait)(2)\ -.then(task2_you_will_perfrom_after_the_time_costing_one)\ -.catch(print) - -print("22222222222") -``` - - 1111111111 - 22222222222 - [result]: slept for 2 seconds - - ### HTML in notebook ```python @@ -231,26 +105,6 @@ bands = ["police", "headpin", {"ac":"dc"}] list_group(bands)() ``` - - - - -```python -questions = { - "question":"answer", - "another":{ - "deeper question": "answer again"}, - "final":{ - "questions": ["what","is","the","answer", "to", - ["life", "universe","everything"]]} -} -list_group_kv(questions)() -``` - - - - - #### Coding html in python ```python @@ -271,23 +125,6 @@ ul() -### Free style mapping - -Works on every value of a complicated dictionary structure (eg. list in dict in list in dict, etc,. 😳) - -```python -from forgebox.freemap import FreeMap - -# flatten decides if we want to flatten the strucuture -freemap_tool = FreeMap( - , - , - flatten=True -) - -data2 = freemap_tool(data1) -``` - ### Interactive Widgets > Interactive widgets work with in jupyter notebooks @@ -306,32 +143,14 @@ search_box(data_df, columns=["col1","col2"], manual=False) You can browse through a pandas dataframe like fliping pages 📄. ```python -from forgebox.widgets import paginate - -paginate(your_dataframe, page_len=10) +# this will import many things like enhanced pandas +from forgebox.imports import * +df = pd.read_csv("xxxx.csv") +df.paginate() ``` -#### Single button callback -> a fully functional page with a single button, this single button is bonded to a function - -This is as much code as you need, to build a fully functional interactive page shows sql table from jupyter, that you can:* choose which table to visit* choose how many lines you want to show, (with a slider) -* configure the where condition with a text box on front end - ```python -tablename_list = ["pubmed", "patient", "users", "drugs"] - -from forgebox.html import DOM -def show_sql_table(sql_input:str) -> str: - with engine.connect() as conn: - df=pd.read_sql(sql_input, con=conn) - # display the table as html - DOM(df.to_html(),"div")() - -@SingleButton(callback=show_sql_table) -def abc( - limit:{"typing":int, "default":10, "min":5, "max":20}, - where_condition:{"typing":str, "default": "where 1=1", }, - table:{"typing":list, "options":tablename_list} -): - return f"SELECT * FROM {table} {where_condition} LIMIT {limit}" +from forgebox.widgets import paginate + +paginate(your_dataframe, page_len=10) ``` diff --git a/docs/.DS_Store b/docs/.DS_Store deleted file mode 100644 index 686779fd9056de8e126ec719c22da0b1437ed30b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~u};HK3`MV@NJT6i8Q(AP2T@hNpdU~|!+;c#q3ytyjoYjiVfF<1(U%pJu_uVIUlaX7h#XZ{Yuc*Egxd!EL>wBtsLPYm2X{%p=2rML))fCz|y2#5d)co(HDAF65<0TB>^ zZvy^)D0J5*b*vh%4lXeQP!|k`@j7M+YViQINgb;)LbF;*t)-SDhShS$OXfAHW7S#? z%i+WFWXlP~;&k4>L^`ags#OF;;F^HX-n5nX|7ZHl{O>t35fFiYO28JI?Pkq~%icP9 xOz*XY{zAVPb0eKgv|?(sV*c<}{P-)c_%-*N)Uj%mGaltseF!)gnF#y^fiuytA+i7f diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index 57510a2..0000000 --- a/docs/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_site/ diff --git a/docs/CUDA_GPU_Management.html b/docs/CUDA_GPU_Management.html deleted file mode 100644 index 666e92e..0000000 --- a/docs/CUDA_GPU_Management.html +++ /dev/null @@ -1,185 +0,0 @@ ---- - -title: CUDA GPU Management - -keywords: fastai -sidebar: home_sidebar - -summary: "A handler on GPU management" ---- - - -
- {% raw %} - -
- -
-
-
-

Handler on a single CUDA device

-
-
-
-
-
-

This tool will find the CUDA info from the system, the most current info about

-
    -
  • How much is the total CUDA memory
  • -
  • How much will the CUDA memory is in use
  • -
  • How much CUDA memory is free
  • -
- -
-
-
-
- -
-
- -
-
- -
- - -
-

class CudaDevice[source]

CudaDevice(idx)

-
- -
- -
- -
-
- -
-
-
-

A handler managing multiple devices

-
-
-
-
- -
-
- -
-
- -
- - -
-

class CudaHandler[source]

CudaHandler()

-
- -
- -
- -
-
- -
-
-
-

Tutorial

-
-
-
-
-
-

These handler is to simplify the multi-cuda situation, where you can allocate the most idle GPU

- -
-
-
-
-
- -
-
-
from forgebox.ftorch.cuda import CudaHandler
-
- -
-
-
- -
-
-
-

Substantiate the handler

- -
-
-
-
-
- -
-
-
ch = CudaHandler()
-
- -
-
-
- -
-
-
-

Found the most idle device, by measure of CUDA memory

- -
-
-
-
-
- -
-
-
dev = ch.idle()()
-
- -
-
-
- -
-
-
-

How we use the device in pytorch coding

- -
-
-
-
-
- -
-
-
some_torch_tensor.to(dev)
-
- -
-
-
- -
- {% endraw %} -
- - diff --git a/docs/Gemfile b/docs/Gemfile deleted file mode 100644 index f09053c..0000000 --- a/docs/Gemfile +++ /dev/null @@ -1,7 +0,0 @@ -source "https://rubygems.org" - -gem 'github-pages', group: :jekyll_plugins - - -# Added at 2019-11-25 10:11:40 -0800 by jhoward: -gem "jekyll", "~> 3.7" diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock deleted file mode 100644 index 8d85bea..0000000 --- a/docs/Gemfile.lock +++ /dev/null @@ -1,252 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - activesupport (4.2.11.1) - i18n (~> 0.7) - minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) - tzinfo (~> 1.1) - addressable (2.7.0) - public_suffix (>= 2.0.2, < 5.0) - coffee-script (2.4.1) - coffee-script-source - execjs - coffee-script-source (1.11.1) - colorator (1.1.0) - commonmarker (0.17.13) - ruby-enum (~> 0.5) - concurrent-ruby (1.1.5) - dnsruby (1.61.3) - addressable (~> 2.5) - em-websocket (0.5.1) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0.6.0) - ethon (0.12.0) - ffi (>= 1.3.0) - eventmachine (1.2.7) - execjs (2.7.0) - faraday (0.17.0) - multipart-post (>= 1.2, < 3) - ffi (1.11.3) - forwardable-extended (2.6.0) - gemoji (3.0.1) - github-pages (202) - activesupport (= 4.2.11.1) - github-pages-health-check (= 1.16.1) - jekyll (= 3.8.5) - jekyll-avatar (= 0.6.0) - jekyll-coffeescript (= 1.1.1) - jekyll-commonmark-ghpages (= 0.1.6) - jekyll-default-layout (= 0.1.4) - jekyll-feed (= 0.11.0) - jekyll-gist (= 1.5.0) - jekyll-github-metadata (= 2.12.1) - jekyll-mentions (= 1.4.1) - jekyll-optional-front-matter (= 0.3.0) - jekyll-paginate (= 1.1.0) - jekyll-readme-index (= 0.2.0) - jekyll-redirect-from (= 0.14.0) - jekyll-relative-links (= 0.6.0) - jekyll-remote-theme (= 0.4.0) - jekyll-sass-converter (= 1.5.2) - jekyll-seo-tag (= 2.5.0) - jekyll-sitemap (= 1.2.0) - jekyll-swiss (= 0.4.0) - jekyll-theme-architect (= 0.1.1) - jekyll-theme-cayman (= 0.1.1) - jekyll-theme-dinky (= 0.1.1) - jekyll-theme-hacker (= 0.1.1) - jekyll-theme-leap-day (= 0.1.1) - jekyll-theme-merlot (= 0.1.1) - jekyll-theme-midnight (= 0.1.1) - jekyll-theme-minimal (= 0.1.1) - jekyll-theme-modernist (= 0.1.1) - jekyll-theme-primer (= 0.5.3) - jekyll-theme-slate (= 0.1.1) - jekyll-theme-tactile (= 0.1.1) - jekyll-theme-time-machine (= 0.1.1) - jekyll-titles-from-headings (= 0.5.1) - jemoji (= 0.10.2) - kramdown (= 1.17.0) - liquid (= 4.0.0) - listen (= 3.1.5) - mercenary (~> 0.3) - minima (= 2.5.0) - nokogiri (>= 1.10.4, < 2.0) - rouge (= 3.11.0) - terminal-table (~> 1.4) - github-pages-health-check (1.16.1) - addressable (~> 2.3) - dnsruby (~> 1.60) - octokit (~> 4.0) - public_suffix (~> 3.0) - typhoeus (~> 1.3) - html-pipeline (2.12.2) - activesupport (>= 2) - nokogiri (>= 1.4) - http_parser.rb (0.6.0) - i18n (0.9.5) - concurrent-ruby (~> 1.0) - jekyll (3.8.5) - addressable (~> 2.4) - colorator (~> 1.0) - em-websocket (~> 0.5) - i18n (~> 0.7) - jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 2.0) - kramdown (~> 1.14) - liquid (~> 4.0) - mercenary (~> 0.3.3) - pathutil (~> 0.9) - rouge (>= 1.7, < 4) - safe_yaml (~> 1.0) - jekyll-avatar (0.6.0) - jekyll (~> 3.0) - jekyll-coffeescript (1.1.1) - coffee-script (~> 2.2) - coffee-script-source (~> 1.11.1) - jekyll-commonmark (1.3.1) - commonmarker (~> 0.14) - jekyll (>= 3.7, < 5.0) - jekyll-commonmark-ghpages (0.1.6) - commonmarker (~> 0.17.6) - jekyll-commonmark (~> 1.2) - rouge (>= 2.0, < 4.0) - jekyll-default-layout (0.1.4) - jekyll (~> 3.0) - jekyll-feed (0.11.0) - jekyll (~> 3.3) - jekyll-gist (1.5.0) - octokit (~> 4.2) - jekyll-github-metadata (2.12.1) - jekyll (~> 3.4) - octokit (~> 4.0, != 4.4.0) - jekyll-mentions (1.4.1) - html-pipeline (~> 2.3) - jekyll (~> 3.0) - jekyll-optional-front-matter (0.3.0) - jekyll (~> 3.0) - jekyll-paginate (1.1.0) - jekyll-readme-index (0.2.0) - jekyll (~> 3.0) - jekyll-redirect-from (0.14.0) - jekyll (~> 3.3) - jekyll-relative-links (0.6.0) - jekyll (~> 3.3) - jekyll-remote-theme (0.4.0) - addressable (~> 2.0) - jekyll (~> 3.5) - rubyzip (>= 1.2.1, < 3.0) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) - jekyll-seo-tag (2.5.0) - jekyll (~> 3.3) - jekyll-sitemap (1.2.0) - jekyll (~> 3.3) - jekyll-swiss (0.4.0) - jekyll-theme-architect (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-cayman (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-dinky (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-hacker (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-leap-day (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-merlot (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-midnight (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-minimal (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-modernist (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-primer (0.5.3) - jekyll (~> 3.5) - jekyll-github-metadata (~> 2.9) - jekyll-seo-tag (~> 2.0) - jekyll-theme-slate (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-tactile (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-theme-time-machine (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-titles-from-headings (0.5.1) - jekyll (~> 3.3) - jekyll-watch (2.2.1) - listen (~> 3.0) - jemoji (0.10.2) - gemoji (~> 3.0) - html-pipeline (~> 2.2) - jekyll (~> 3.0) - kramdown (1.17.0) - liquid (4.0.0) - listen (3.1.5) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - ruby_dep (~> 1.2) - mercenary (0.3.6) - mini_portile2 (2.5.0) - minima (2.5.0) - jekyll (~> 3.5) - jekyll-feed (~> 0.9) - jekyll-seo-tag (~> 2.1) - minitest (5.13.0) - multipart-post (2.1.1) - nokogiri (1.11.2) - mini_portile2 (~> 2.5.0) - racc (~> 1.4) - octokit (4.14.0) - sawyer (~> 0.8.0, >= 0.5.3) - pathutil (0.16.2) - forwardable-extended (~> 2.6) - public_suffix (3.1.1) - racc (1.5.2) - rb-fsevent (0.10.3) - rb-inotify (0.10.0) - ffi (~> 1.0) - rouge (3.11.0) - ruby-enum (0.7.2) - i18n - ruby_dep (1.5.0) - rubyzip (2.0.0) - safe_yaml (1.0.5) - sass (3.7.4) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - sawyer (0.8.2) - addressable (>= 2.3.5) - faraday (> 0.8, < 2.0) - terminal-table (1.8.0) - unicode-display_width (~> 1.1, >= 1.1.1) - thread_safe (0.3.6) - typhoeus (1.3.1) - ethon (>= 0.9.0) - tzinfo (1.2.5) - thread_safe (~> 0.1) - unicode-display_width (1.6.0) - -PLATFORMS - ruby - -DEPENDENCIES - github-pages - jekyll (~> 3.7) - -BUNDLED WITH - 2.0.2 diff --git a/docs/Untitled.html b/docs/Untitled.html deleted file mode 100644 index 8604635..0000000 --- a/docs/Untitled.html +++ /dev/null @@ -1,66 +0,0 @@ ---- - -title: Title - -keywords: fastai -sidebar: home_sidebar - - - ---- - - -
- - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
from forgebox.imports import *
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
def learn_it(x,y,model):
-
- -
-
-
- -
- {% endraw %} - -
- - diff --git a/docs/_config.yml b/docs/_config.yml deleted file mode 100644 index 6a36599..0000000 --- a/docs/_config.yml +++ /dev/null @@ -1,64 +0,0 @@ -repository: raynardj/forgebox -output: web -topnav_title: forgebox -site_title: forgebox -company_name: xiaochen(ray) zhang -description: Hackings of data science -# Set to false to disable KaTeX math -use_math: true -# Add Google analytics id if you have one and want to use it here -google_analytics: -# See http://nbdev.fast.ai/search for help with adding Search -google_search: - -host: 127.0.0.1 -# the preview server used. Leave as is. -port: 4000 -# the port where the preview is rendered. - -exclude: - - .idea/ - - .gitignore - - vendor - -exclude: [vendor] - -highlighter: rouge -markdown: kramdown -kramdown: - input: GFM - auto_ids: true - hard_wrap: false - syntax_highlighter: rouge - -collections: - tooltips: - output: false - -defaults: - - - scope: - path: "" - type: "pages" - values: - layout: "page" - comments: true - search: true - sidebar: home_sidebar - topnav: topnav - - - scope: - path: "" - type: "tooltips" - values: - layout: "page" - comments: true - search: true - tooltip: true - -sidebars: -- home_sidebar -permalink: pretty - -theme: jekyll-theme-cayman -baseurl: /forgebox/ \ No newline at end of file diff --git a/docs/_data/alerts.yml b/docs/_data/alerts.yml deleted file mode 100644 index 157e162..0000000 --- a/docs/_data/alerts.yml +++ /dev/null @@ -1,15 +0,0 @@ -tip: '
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
show_idtypetitledirectorcastcountrydate_addedrelease_yearratingdurationlisted_indescription
447680145625MovieGod of WarGordon ChanVincent Zhao, Sammo Kam-Bo Hung, Regina Wan, Y...China, Hong KongDecember 16, 20172017NR129 minAction & Adventure, International MoviesA maverick leader and a clever young general t...
432781094074MovieEl Pepe, a Supreme LifeEmir KusturicaJosé Mujica, Emir KusturicaArgentina, Uruguay, SerbiaDecember 27, 20192018TV-1473 minDocumentaries, International MoviesIn this intimate documentary, former Uruguayan...
607880094603TV ShowHighway Thru HellNaNDave Pettitt, Jamie Davis, Adam Gazzola, Kevin...CanadaDecember 3, 20192016TV-PG3 SeasonsReality TVOn the hazardous highways of Canada's interior...
526080044093MovieTeam FoxcatcherJon GreenhalghNaNUnited StatesApril 29, 20162016TV-1491 minDocumentaries, Sports MoviesWith never-before seen home video, this film r...
546481021447MovieThe SilenceJohn R. LeonettiStanley Tucci, Kiernan Shipka, Miranda Otto, K...GermanyApril 10, 20192019TV-1491 minHorror Movies, ThrillersWith the world under attack by deadly creature...
169781043473MovieSGT. Will GardnerMax MartiniMax Martini, Omari Hardwick, Lily Rabe, Elisab...United StatesMay 19, 20192019TV-MA125 minDramasA homeless vet who has PTSD steals a motorcycl...
117880028357MovieLove, RosieChristian DitterLily Collins, Sam Claflin, Christian Cooke, Ja...Germany, United KingdomNovember 20, 20192014R103 minComedies, International Movies, Romantic MoviesOver the years, as they come and go in each ot...
89380190103MovieNaan Sigappu ManithanThiruVishal, Lakshmi Menon, Saranya Ponvannan, Jaya...IndiaOctober 1, 20182014TV-MA147 minAction & Adventure, Dramas, International MoviesAfter his sleeping disorder hinders him from p...
407580156767MovieLa Última FiestaLeandro Mark, Nicolás SilbertNicolás Vázquez, Alan Sabbagh, Benjamín Amadeo...ArgentinaFebruary 1, 20172016TV-MA104 minComedies, International MoviesThree best buddies are thrown into a wild chas...
578380027373TV ShowOh No! It's an Alien InvasionNaNAl Mukadam, Dan Chameroy, Seán Cullen, Stacey ...CanadaMay 31, 20152014TV-Y7-FV2 SeasonsKids' TV, TV Action & Adventure, TV Sci-Fi & F...Nate and his Super Wicked Extreme Emergency Te...
- - - - - - - - - -
-
-

So... what Y?

-
-
-
-
-
- -
-
-
df.listed_in.value_counts()
-
- -
-
-
- -
-
- -
- - - -
-
Documentaries                                                   299
-Stand-Up Comedy                                                 273
-Dramas, International Movies                                    248
-Dramas, Independent Movies, International Movies                186
-Comedies, Dramas, International Movies                          174
-                                                               ... 
-TV Dramas, TV Mysteries, TV Thrillers                             1
-Kids' TV, TV Dramas, Teen TV Shows                                1
-Romantic TV Shows, Spanish-Language TV Shows, TV Comedies         1
-Classic & Cult TV, TV Horror, TV Mysteries                        1
-International TV Shows, Spanish-Language TV Shows, TV Horror      1
-Name: listed_in, Length: 461, dtype: int64
-
- -
- -
-
- -
-
-
- -
-
-
df.rating.value_counts()
-
- -
-
-
- -
-
- -
- - - -
-
TV-MA       2027
-TV-14       1698
-TV-PG        701
-R            508
-PG-13        286
-NR           218
-PG           184
-TV-Y7        169
-TV-G         149
-TV-Y         143
-TV-Y7-FV      95
-G             37
-UR             7
-NC-17          2
-Name: rating, dtype: int64
-
- -
- -
-
- -
-
-
- -
-
-
df["listed_in"] = df.listed_in.str\
-.replace("&",",")\
-.replace(" , ",",")\
-.replace(" ,",",")\
-.replace(", ",",")\
-.replace(" , ",",")
-
- -
-
-
- -
-
-
- -
-
-
genre = list(set(i.strip() for i in (",".join(list(df.listed_in))).split(",")))
-
- -
-
-
- -
-
-
- -
-
-
print(f"Total genre: {len(genre)}\n")
-for g in genre:
-    print(g,end="\t")
-
- -
-
-
- -
-
- -
- -
-
Total genre: 49
-
-Teen TV Shows	Nature TV	Romantic TV Shows	TV Sci-Fi	Action	Faith	Talk Shows	TV Shows	TV Dramas	Thrillers	Sci-Fi	Sports Movies	TV Thrillers	Movies	Cult Movies	Docuseries	TV Comedies	TV Action	Children	Classic Movies	Korean TV Shows	Dramas	TV Horror	Romantic Movies	Spirituality	International TV Shows	Independent Movies	Stand-Up Comedy	Science	Horror Movies	TV Mysteries	Music	Reality TV	Crime TV Shows	Adventure	Classic	Spanish-Language TV Shows	Family Movies	Documentaries	Anime Series	Musicals	Fantasy	Kids' TV	Anime Features	Comedies	British TV Shows	International Movies	LGBTQ Movies	Cult TV	
-
-
- -
-
- -
-
-
- -
-
-
eye = np.eye(len(genre))
-genre_dict = dict((v,eye[k]) for k,v in enumerate(genre))
-
-def to_nhot(text):
-    return np.sum(list(genre_dict[g.strip()] for g in text.split(",")),axis=0).astype(np.int)
-
-df["genre"] = df.listed_in.apply(to_nhot)
-
- -
-
-
- -
-
-
- -
-
-
PROCESSED = "processed.csv"
-
- -
-
-
- -
-
-
- -
-
-
df.to_csv(PROCESSED,index = False)
-
- -
-
-
- -
-
-
-

Process the text

-
-
-
-
- -
-
- -
-
- -
- - -
-

split_df[source]

split_df(df, valid=0.2, ensure_factor=2)

-
-

df: dataframe -valid: valid ratio, default 0.1 -ensure_factor, ensuring the row number to be the multiplication of this factor, default 2 -return train_df, valid_df

- -
- -
- -
-
- -
-
-
- -
-
-
train_df,val_df = split_df(df,valid=0.1)
-print(f"train:{len(train_df)}\tvalid:{len(val_df)}")
-
- -
-
-
- -
-
- -
- -
-
train:5624	valid:608
-
-
-
- -
-
- -
-
-
- -
-
-
from nltk.tokenize import TweetTokenizer
-tkz = TweetTokenizer()
-def tokenize(txt):
-    return tkz.tokenize(txt)
-
- -
-
-
- -
-
-
- -
-
-
tokenize("A man returns home after being released from ")
-
- -
-
-
- -
-
- -
- - - -
-
['A', 'man', 'returns', 'home', 'after', 'being', 'released', 'from']
-
- -
- -
-
- -
-
-
-

Generate vocabulary map from material

-
-
-
-
- -
-
- -
-
- -
- - -
-

class Vocab[source]

Vocab(iterative, tokenize, max_vocab=20000, nproc=10)

-
- -
- -
- -
-
- -
-
-
- -
-
-
vocab = Vocab(df.description,tokenize=tokenize)
-
- -
-
-
- -
-
-
-

Vocabulary build from training

-
-
-
-
-
- -
-
-
vocab.words
-
- -
-
-
- -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
tokctidx
0four992
1drama993
2brother974
3himself975
4evil956
............
19519Gora119521
19520High-strung119522
19521out-of-the-way119523
0<eos>-10
1<mtk>-11
-

19524 rows × 3 columns

-
-
- -
- -
-
- -
-
- -
-
- -
-
- -
- - -
-

class seqData[source]

seqData(lines, vocab, max_len=-1) :: Dataset

-
-

An abstract class representing a :class:Dataset.

-

All datasets that represent a map from keys to data samples should subclass -it. All subclasses should overwrite :meth:__getitem__, supporting fetching a -data sample for a given key. Subclasses could also optionally overwrite -:meth:__len__, which is expected to return the size of the dataset by many -:class:~torch.utils.data.Sampler implementations and the default options -of :class:~torch.utils.data.DataLoader.

-

.. note:: - :class:~torch.utils.data.DataLoader by default constructs a index - sampler that yields integral indices. To make it work with a map-style - dataset with non-integral indices/keys, a custom sampler must be provided.

- -
- -
- -
-
- -
-
- -
-
- -
- - -
-

class arrData[source]

arrData(*arrs) :: Dataset

-
-

An abstract class representing a :class:Dataset.

-

All datasets that represent a map from keys to data samples should subclass -it. All subclasses should overwrite :meth:__getitem__, supporting fetching a -data sample for a given key. Subclasses could also optionally overwrite -:meth:__len__, which is expected to return the size of the dataset by many -:class:~torch.utils.data.Sampler implementations and the default options -of :class:~torch.utils.data.DataLoader.

-

.. note:: - :class:~torch.utils.data.DataLoader by default constructs a index - sampler that yields integral indices. To make it work with a map-style - dataset with non-integral indices/keys, a custom sampler must be provided.

- -
- -
- -
-
- -
-
-
-

Build vocabulary and train dataset

- -
-
-
-
-
- -
-
-
vocab = Vocab(df.description,tokenize=tokenize)
-
-train_seq = seqData(train_df.description,vocab)
-train_y = arrData(np.stack(train_df.genre.values))
-
-val_seq = seqData(val_df.description,vocab)
-val_y = arrData(np.stack(val_df.genre.values))
-
- -
-
-
- -
-
-
-

Size of train dataset

- -
-
-
-
-
- -
-
-
len(train_seq),len(train_y)
-
- -
-
-
- -
-
- -
- - - -
-
(5624, 5624)
-
- -
- -
-
- -
-
-
- -
-
-
tokenized_line = train_seq[10]
-tokenized_line
-
- -
-
-
- -
-
- -
- - - -
-
array([   0, 4908, 1613, 3527, 2113, 4873,  908, 4819, 8186,  569, 8480,
-       8163, 1476,  579, 4989, 1460, 9109, 1544, 8850, 3102,  908, 3233,
-        941, 5001, 1454, 2152, 3246, 5055, 1454, 8480, 4974, 8019, 8019,
-       8589,  579,    0])
-
- -
- -
-
- -
-
-
-

Reconstruct the sentence from indices

-

<mtk> means the missing tokens, for they are less frequent than we should hav cared

-
- -
-
-
-
-
- -
-
-
train_seq.backward(tokenized_line)
-
- -
-
-
- -
-
- -
- - - -
-
"<eos> Comedian Maria Bamford stars in a series inspired by her own life . It's the sometimes surreal story of a woman who loses – and then finds – her s * * t . <eos>"
-
- -
- -
-
- -
-
-
-

A custom made collate function

    -
  • Collate function will do the following:

    Make rows of dataset output into a batch of tensor

    -
    -
  • -
- -
-
-
-
-
- -
-
-
gen = iter(DataLoader(train_seq,batch_size=16, collate_fn=train_seq.collate))
-next(gen).size()
-
- -
-
-
- -
-
- -
- - - -
-
torch.Size([16, 36])
-
- -
- -
-
- -
-
- -
-
- -
-
- -
- - -
-

class fuse[source]

fuse(*datasets) :: Dataset

-
-

An abstract class representing a :class:Dataset.

-

All datasets that represent a map from keys to data samples should subclass -it. All subclasses should overwrite :meth:__getitem__, supporting fetching a -data sample for a given key. Subclasses could also optionally overwrite -:meth:__len__, which is expected to return the size of the dataset by many -:class:~torch.utils.data.Sampler implementations and the default options -of :class:~torch.utils.data.DataLoader.

-

.. note:: - :class:~torch.utils.data.DataLoader by default constructs a index - sampler that yields integral indices. To make it work with a map-style - dataset with non-integral indices/keys, a custom sampler must be provided.

- -
- -
- -
-
- -
-
-
-

Fusing data set

-
-
-
-
-
- -
-
-
train_ds = fuse(train_seq,train_y)
-val_ds = fuse(val_seq,val_y)
-
- -
-
-
- -
-
-
-

Testing Generator

-
-
-
-
-
- -
-
-
gen = iter(DataLoader(train_ds,batch_size=16, collate_fn=train_ds.collate))
-x,y = next(gen)
-print(x.shape,y.shape)
-
- -
-
-
- -
-
- -
- -
-
torch.Size([16, 36]) torch.Size([16, 49])
-
-
-
- -
-
- -
-
-
-

Model

-
-
-
-
-
- -
-
-
from torch import nn
-import torch
-
- -
-
-
- -
-
-
- -
-
-
class basicNLP(nn.Module):
-    def __init__(self, hs):
-        super().__init__()
-        self.hs = hs
-        self.emb = nn.Embedding(len(vocab),hs)
-        self.rnn = nn.LSTM(input_size = hs,hidden_size = hs,batch_first = True)
-        self.fc = nn.Sequential(*[
-            nn.BatchNorm1d(hs*2),
-            nn.ReLU(),
-            nn.Linear(hs*2,hs*2),
-            nn.BatchNorm1d(hs*2),
-            nn.ReLU(),
-            nn.Linear(hs*2,49),
-        ])
-        
-    def encoder(self,x):
-        x = self.emb(x)
-        o1,(h1,c1) = self.rnn(x)
-        # run sentence backward
-        o2,(h2,c2) = self.rnn(x.flip(dims=[1]))
-        return torch.cat([h1[0],h2[0]],dim=1)
-        
-    def forward(self,x):
-        vec = self.encoder(x)
-        return self.fc(vec)
-
- -
-
-
- -
-
-
- -
-
-
model = basicNLP(100)
-
- -
-
-
- -
-
-
- -
-
-
x[:2,:]
-
- -
-
-
- -
-
- -
- - - -
-
tensor([[    0,  1477,  8844,  2473, 10957, 10958,  4973,   942,  8502,  8945,
-           940,  8844,   923,  2068,   908,  9196,   957,  2153,  8481,  8851,
-          8873,  1454,  2152,  4741,  1460, 10959,   916,  6700,   579,     0,
-             1,     1,     1,     1,     1,     1],
-        [    0,  9024,   765,  4886,  8086,   948,  8491,  4790,  2467,  2112,
-          1460,  8940,  8833,  8781,  5183,  1118,  3231,  8576,  9070, 12932,
-           579,     0,     1,     1,     1,     1,     1,     1,     1,     1,
-             1,     1,     1,     1,     1,     1]])
-
- -
- -
-
- -
-
-
-

What does embedding do?

-
-
-
-
-
- -
-
-
x.shape,model.emb(x).shape
-
- -
-
-
- -
-
- -
- - - -
-
(torch.Size([16, 36]), torch.Size([16, 36, 100]))
-
- -
- -
-
- -
-
-
-

What does LSTM return?

-
-
-
-
-
-

For what is LSTM, read this awesome blog, from which I stole the following visualization from

- -
-
-
-
-
-

In short version

RNN, it's about sharing model weights throughout temporal sequence, as convolusion share weights in spatial point of view -https://colah.github.io/posts/2015-08-Understanding-LSTMs/img/RNN-unrolled.png

-
    -
  • The above green "A" areas are shared linear layer
  • -
  • GRU & LSTM are advanced version of RNN, with gate control
  • -
  • The black arrows above in GRU & LSTM are controlled by gates
  • -
  • Gates, are just linear layer with sigmoid activation $\sigma(x)$, its outputs are between (0,1), hence the name gate, the following illustration is one of the gates in a lstm cell, called input gate -https://colah.github.io/posts/2015-08-Understanding-LSTMs/img/LSTM3-focus-f.png
  • -
  • Other gates control other things like should we forget the early part of then sentence, should we output this .etc
  • -
- -
-
-
-
-
-

In terms of code

-
-
-
-
-
- -
-
-
%time 
-output,(hidden_state, cell_state) = model.rnn(model.emb(x))
-for t in (output,hidden_state, cell_state):
-    print(t.shape)
-
- -
-
-
- -
-
- -
- -
-
CPU times: user 3 µs, sys: 0 ns, total: 3 µs
-Wall time: 7.15 µs
-torch.Size([16, 34, 100])
-torch.Size([1, 16, 100])
-torch.Size([1, 16, 100])
-
-
-
- -
-
- -
-
-
-

Disect the iteration through the sentence

- -
-
-
-
-
- -
-
-
%time
-init_hidden = torch.zeros((1,16,100))
-init_cell = torch.zeros((1,16,100))
-last_h,last_c = init_hidden,init_cell
-outputs = []
-x_vec = model.emb(x)
-for row in range(x.shape[1]):
-    last_o, (last_h,last_c) = model.rnn(x_vec[:,row:row+1,:],(last_h,last_c))
-    outputs.append(last_o)
-
- -
-
-
- -
-
- -
- -
-
CPU times: user 2 µs, sys: 1e+03 ns, total: 3 µs
-Wall time: 6.44 µs
-
-
-
- -
-
- -
-
-
- -
-
-
manual_iteration_result = torch.cat(outputs,dim=1)
-
- -
-
-
- -
-
-
- -
-
-
manual_iteration_result.shape
-
- -
-
-
- -
-
- -
- - - -
-
torch.Size([16, 34, 100])
-
- -
- -
-
- -
-
-
-

The 2 results are the same, of course, I thought manual python iteration is slower,but they are really close by the above test

- -
-
-
-
-
- -
-
-
(manual_iteration_result==output).float().mean()
-
- -
-
-
- -
-
- -
- - - -
-
tensor(1.)
-
- -
- -
-
- -
-
-
-

Training

-
-
-
-
-
- -
-
-
lossf = nn.BCEWithLogitsLoss()
-
- -
-
-
- -
-
-
- -
-
-
from forgebox.ftorch.train import Trainer
-from forgebox.ftorch.callbacks import stat
-from forgebox.ftorch.metrics import metric4_bi
-
- -
-
-
- -
-
-
- -
-
-
model = model.cuda()
-
- -
-
-
- -
-
-
- -
-
-
t = Trainer(train_ds, val_dataset=val_ds,batch_size=16,callbacks=[stat], val_callbacks=[stat] ,shuffle=True,)
-
- -
-
-
- -
-
- -
- -
-
============================================================
-Notice, The Trainer was not initiated with optimizer
-            Use the following syntax to initialize optimizer
-            t.opt["adm1"] = torch.optim.Adam(m1.parameters())
-            t.opt["adg1"] = torch.optim.Adagrad(m2.parameters())
-============================================================
-            
-
-
-
- -
-
- -
-
-
- -
-
-
t.opt["adm1"] = torch.optim.Adam(model.parameters())
-
- -
-
-
- -
-
-
-

Combined collate function

- -
-
-
-
-
- -
-
-
t.train_data.collate_fn = combine_collate(pad_collate,default_collate)
-t.val_data.collate_fn = combine_collate(pad_collate,default_collate)
-
- -
-
-
- -
-
-
- -
-
-
@t.step_train
-def train_step(self):
-    self.opt.zero_all()
-    x,y = self.data
-    y_= model(x)
-    loss = lossf(y_,y.float())
-    loss.backward()
-    self.opt.step_all()
-    acc,rec,prec,f1 = metric4_bi(torch.sigmoid(y_),y)
-    return dict((k,v.item()) for k,v in zip(["loss","acc","rec","prec","f1"],(loss,acc,rec,prec,f1)))
-                
-@t.step_val
-def val_step(self):
-    x,y = self.data
-    y_= model(x)
-    loss = lossf(y_,y.float())
-    acc,rec,prec,f1 = metric4_bi(torch.sigmoid(y_),y)
-    return dict((k,v.item()) for k,v in zip(["loss","acc","rec","prec","f1"],(loss,acc,rec,prec,f1)))
-
- -
-
-
- -
-
-
- -
-
-
t.train(10)
-
- -
-
-
- -
-
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.1915030.9436050.0183550.252630.0663620.0174.50.012922
min0.1335930.4987240.0000000.000000.0392160.00.00.000000
max0.7176840.9630100.4523811.000000.2105260.0349.04.522615
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.1661950.9498200.0140630.4552850.0529170.020.00.016862
min0.1336250.9336730.0000000.0000000.0425530.00.00.000000
max0.2083610.9604590.0625001.0000000.1142860.040.00.691359
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.1609530.9497780.0403620.5036840.0968321.0174.50.013533
min0.1137500.9362240.0000000.0000000.0384621.00.00.000000
max0.2048530.9668370.2285711.0000000.3636361.0349.04.736667
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.1596490.9497880.0567230.4728220.1137871.020.00.013886
min0.1262140.9413260.0000000.0000000.0454551.00.00.000000
max0.1838200.9591840.1621621.0000000.2727271.040.00.569323
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.1502870.9510050.0944980.6192610.16442.0174.50.013062
min0.1074970.9362240.0000000.0000000.04002.00.00.000000
max0.2119890.9668370.2564101.0000000.40002.0349.04.571776
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.1582330.9501000.0808530.4990420.1519392.020.00.013032
min0.1003520.9387750.0000000.0000000.0416672.00.00.000000
max0.1995640.9630100.2000001.0000000.3333332.040.00.534303
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.1390500.9528260.1555670.6474840.2470373.0174.50.013327
min0.1024040.9362240.0000000.0000000.0384623.00.00.000000
max0.1893700.9706630.3823531.0000000.5106383.0349.04.664611
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.1598430.9496330.1051940.4602750.1730603.020.00.012334
min0.1208510.9375000.0000000.0000000.0408163.00.00.000000
max0.2086860.9642860.2812500.9090910.3921573.040.00.505692
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.1256110.9558640.2359540.6935940.3472174.0174.50.012675
min0.0781760.9387750.0652170.3333330.1132084.00.00.000000
max0.1867810.9770410.5161291.0000000.6400004.0349.04.436386
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.1650550.9477040.1372150.4537380.2065934.020.00.012974
min0.1030900.9323980.0434780.1428570.0701754.00.00.000000
max0.2302520.9591840.2432431.0000000.3600004.040.00.531945
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.1106110.9597100.3334780.722260.4509375.0174.50.013399
min0.0729560.9387750.1000000.400000.1600005.00.00.000000
max0.1828410.9770410.6250001.000000.6779665.0349.04.689789
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.1758970.9464290.1524440.3911540.2216505.020.00.012744
min0.1218430.9349490.0000000.0000000.0392165.00.00.000000
max0.2248490.9604590.3428570.7500000.4210535.040.00.522507
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.0963000.9639710.4302030.7565480.5434976.0174.50.012643
min0.0604330.9413260.1707320.4736840.2641516.00.00.000000
max0.1810050.9808670.7272731.0000000.7804886.0349.04.425211
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.1855050.9465840.1858380.4306420.2561446.020.00.012818
min0.1169730.9272960.0540540.1250000.0754726.00.00.000000
max0.2595560.9642860.3939390.6923080.4864866.040.00.525531
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.0830810.9677270.5079440.7805870.6111337.0174.50.014348
min0.0525580.9426020.2380950.4848480.3278697.00.00.000000
max0.1404120.9846940.7777781.0000000.8235297.0349.05.021668
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.2045990.9451530.1965500.4180750.2638337.020.00.012317
min0.1322900.9247450.0212770.0714290.0327877.00.00.000000
max0.3910810.9642860.3333331.0000000.4400007.040.00.504995
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.0723080.9719040.5822420.8115310.6743358.0174.50.013954
min0.0444030.9515310.3428570.5454550.4210538.00.00.000000
max0.1131980.9897960.8750001.0000000.8974368.0349.04.884068
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.2194910.9416690.1858540.3450280.2442438.020.00.015648
min0.1380230.9272960.0000000.0000000.0833338.00.00.000000
max0.3261870.9591840.3414630.6000000.4137938.040.00.641576
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.0621070.9758990.6560510.8350320.7311279.0174.50.013415
min0.0314620.9579080.3902440.6296300.5000009.00.00.000000
max0.1034140.9923470.9333331.0000000.9142869.0349.04.695169
-
-
- -
- -
- -
-
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
lossaccrecprecf1epochitertimestamp
mean0.2329480.9424150.1912210.3429910.2494189.020.00.014030
min0.1394470.9260200.0000000.0000000.0769239.00.00.000000
max0.3202010.9693880.4117650.6190480.4642869.040.00.575232
-
-
- -
- -
-
- -
-
-
-

Search similar

-
-
-
-
-
- -
-
-
model = model.eval()
-dl = DataLoader(train_seq, batch_size=32, collate_fn=pad_collate)
-
- -
-
-
- -
-
-
- -
-
-
text_gen = iter(dl)
-result = []
-for i in range(len(dl)):
-    x=next(text_gen)
-    x = x.cuda()
-    x_vec = model.encoder(x)
-    result.append(x_vec.cpu())
-
- -
-
-
- -
-
-
-

A vector representing each of the sentence

- -
-
-
-
-
- -
-
-
result_vec = torch.cat(result,dim=0).detach().numpy()
-result_vec.shape
-
- -
-
-
- -
-
- -
- - - -
-
(5590, 200)
-
- -
- -
-
- -
-
-
- -
-
-
def to_idx(line):
-    words = train_seq.vocab.tokenize(line)
-    words = ["<eos>",]+words+["<eos>"]
-    return train_seq.to_i(np.array(words))[None,:]
-
- -
-
-
- -
-
-
- -
-
-
to_idx("this"), to_idx("to be or not to be")
-
- -
-
-
- -
-
- -
- - - -
-
(array([[  0, 913,   0]]),
- array([[   0, 2153, 5056, 1442, 1438, 2153, 5056,    0]]))
-
- -
- -
-
- -
-
-
- -
-
-
def to_vec(line):
-    vec = torch.LongTensor(to_idx(line)).cuda()
-    return model.encoder(vec).cpu().detach().numpy()
-
- -
-
-
- -
-
-
- -
-
-
to_vec("this"), to_vec("to be or not to be")
-
- -
-
-
- -
-
- -
- - - -
-
(array([[-0.2864027 , -0.1188629 , -0.02617935, -0.24850701, -0.20578709,
-          0.06889898,  0.05878495, -0.22658055,  0.15024377, -0.31303164,
-          0.4958601 , -0.00204021,  0.17621423, -0.2538225 , -0.3451157 ,
-         -0.23131247, -0.06265341, -0.17155428, -0.00899762, -0.2577241 ,
-         -0.02896317, -0.4555603 ,  0.6856887 , -0.70418745,  0.11082602,
-         -0.23981036, -0.21201135, -0.43933266, -0.40148616, -0.48364577,
-          0.42605698,  0.41181046, -0.14798354,  0.05320957, -0.4300459 ,
-         -0.06580015,  0.01534137,  0.02928652, -0.53414524, -0.02051809,
-         -0.47986796, -0.12036817, -0.00229292,  0.2772647 ,  0.1102341 ,
-         -0.40527657, -0.11229473, -0.42787483,  0.40304342,  0.3992268 ,
-          0.1696693 , -0.6523132 , -0.3679182 ,  0.0087082 , -0.01391423,
-         -0.21790238, -0.3263417 , -0.29073295,  0.45376575, -0.02547877,
-         -0.08805989, -0.04059793,  0.32122698, -0.10253229,  0.29216015,
-         -0.29081804,  0.7000031 , -0.07116397, -0.03899158,  0.00963022,
-         -0.00503215, -0.18202703, -0.06382827,  0.04819749, -0.39615613,
-         -0.06416079,  0.11534453,  0.05590353,  0.18084338,  0.12755607,
-         -0.40813434, -0.08283492, -0.48865405, -0.0570746 , -0.20188878,
-         -0.49008507, -0.27526015, -0.3434001 , -0.24542893,  0.01706186,
-          0.3014823 , -0.00861376,  0.43119976,  0.11287364,  0.10990695,
-         -0.05565942,  0.3471237 ,  0.39106023,  0.12372674, -0.1318522 ,
-         -0.2864027 , -0.1188629 , -0.02617935, -0.24850701, -0.20578709,
-          0.06889898,  0.05878495, -0.22658055,  0.15024377, -0.31303164,
-          0.4958601 , -0.00204021,  0.17621423, -0.2538225 , -0.3451157 ,
-         -0.23131247, -0.06265341, -0.17155428, -0.00899762, -0.2577241 ,
-         -0.02896317, -0.4555603 ,  0.6856887 , -0.70418745,  0.11082602,
-         -0.23981036, -0.21201135, -0.43933266, -0.40148616, -0.48364577,
-          0.42605698,  0.41181046, -0.14798354,  0.05320957, -0.4300459 ,
-         -0.06580015,  0.01534137,  0.02928652, -0.53414524, -0.02051809,
-         -0.47986796, -0.12036817, -0.00229292,  0.2772647 ,  0.1102341 ,
-         -0.40527657, -0.11229473, -0.42787483,  0.40304342,  0.3992268 ,
-          0.1696693 , -0.6523132 , -0.3679182 ,  0.0087082 , -0.01391423,
-         -0.21790238, -0.3263417 , -0.29073295,  0.45376575, -0.02547877,
-         -0.08805989, -0.04059793,  0.32122698, -0.10253229,  0.29216015,
-         -0.29081804,  0.7000031 , -0.07116397, -0.03899158,  0.00963022,
-         -0.00503215, -0.18202703, -0.06382827,  0.04819749, -0.39615613,
-         -0.06416079,  0.11534453,  0.05590353,  0.18084338,  0.12755607,
-         -0.40813434, -0.08283492, -0.48865405, -0.0570746 , -0.20188878,
-         -0.49008507, -0.27526015, -0.3434001 , -0.24542893,  0.01706186,
-          0.3014823 , -0.00861376,  0.43119976,  0.11287364,  0.10990695,
-         -0.05565942,  0.3471237 ,  0.39106023,  0.12372674, -0.1318522 ]],
-       dtype=float32),
- array([[-4.67454530e-02, -9.31215361e-02,  1.03428781e-01,
-         -7.04722330e-02, -1.75118193e-01,  2.06147537e-01,
-         -1.80195719e-01, -2.96070606e-01, -6.63760230e-02,
-         -1.17778860e-01,  4.16386664e-01, -2.82360259e-02,
-         -9.79896635e-02, -1.64554998e-01, -4.22353059e-01,
-         -2.57056504e-01,  9.54333842e-02, -4.04358506e-01,
-         -2.89067421e-02,  2.24286512e-01, -2.91498333e-01,
-         -5.15985727e-01,  6.25436842e-01, -3.82335573e-01,
-          9.66877778e-05, -5.79554796e-01,  2.49115989e-01,
-         -1.89282358e-01, -5.12709558e-01, -3.26256692e-01,
-         -4.69405144e-01, -7.64686316e-02,  1.47889346e-01,
-          4.15703245e-02, -2.66019195e-01, -2.08178125e-02,
-          2.30910387e-02,  4.07335609e-01, -3.15426886e-01,
-         -2.41327912e-01, -4.37703043e-01,  1.69361576e-01,
-         -5.28552115e-01,  3.17790836e-01, -2.26195082e-01,
-          1.98947728e-01, -5.99721745e-02, -1.17049702e-01,
-          3.48403037e-01,  1.16154104e-01, -9.79769006e-02,
-         -5.31215489e-01, -3.45111728e-01, -1.51543558e-01,
-         -4.74260300e-02, -3.10880184e-01, -2.34046459e-01,
-         -4.89330530e-01,  1.92080900e-01,  8.46387047e-05,
-          5.20091116e-01,  1.19925300e-02, -2.24701278e-02,
-          3.68952841e-01,  3.63212615e-01, -1.76386997e-01,
-          8.03452671e-01, -1.92376554e-01,  2.48082243e-02,
-          4.32565331e-01, -3.37531790e-02, -4.21101004e-02,
-         -2.10536309e-02,  1.79137215e-02, -5.51163614e-01,
-          1.79473273e-02, -2.56144851e-01,  1.43536568e-01,
-          1.14509970e-01, -4.08435524e-01, -6.10258477e-03,
-         -1.82999484e-02, -3.36512983e-01, -4.28514257e-02,
-         -5.26481271e-01, -4.67332840e-01, -5.00806391e-01,
-         -1.97101533e-01, -3.14959913e-01,  2.88293674e-03,
-         -7.90096354e-03, -1.98622406e-01,  3.48969668e-01,
-         -2.70279735e-01, -1.35412514e-01, -1.51752485e-02,
-         -6.74099028e-02, -9.12430584e-02,  6.52649999e-02,
-         -4.96096015e-02, -8.09527710e-02, -1.94839135e-01,
-          7.93975685e-03,  2.51075149e-01, -1.21566914e-01,
-          1.87434196e-01, -4.09827203e-01, -1.85767949e-01,
-         -4.50579636e-02, -8.25710967e-03,  4.34691131e-01,
-         -1.74075253e-02, -2.26057798e-01, -9.93655398e-02,
-         -4.55289811e-01, -1.77727148e-01,  1.51167855e-01,
-         -3.92441899e-01, -3.76366675e-02,  1.91804245e-01,
-         -2.46650815e-01, -2.66600817e-01,  5.98052680e-01,
-         -5.53917885e-01, -5.27672432e-02, -4.28468704e-01,
-          3.21030438e-01, -5.24240211e-02, -5.80894887e-01,
-         -2.62316704e-01, -5.54102123e-01, -2.63558865e-01,
-          7.92699903e-02,  3.08560506e-02, -6.34330451e-01,
-         -2.22378112e-02,  1.90087445e-02,  3.06508392e-01,
-         -4.17445600e-01, -1.65813014e-01, -3.87870014e-01,
-          2.00837955e-01, -5.82205415e-01,  2.10029915e-01,
-         -1.73551142e-01,  2.62706548e-01, -4.51332517e-02,
-         -2.98126251e-01,  1.22165889e-01,  2.69887537e-01,
-         -9.97079089e-02, -4.44641918e-01, -1.94629923e-01,
-         -9.44814011e-02, -5.58075830e-02, -3.08131754e-01,
-         -1.35656327e-01, -4.49017793e-01,  1.57232210e-01,
-          6.85075764e-03,  1.95502162e-01, -3.58620263e-03,
-         -7.33885169e-02,  2.54277617e-01,  3.10389578e-01,
-         -2.30608821e-01,  7.85782695e-01, -1.99842900e-01,
-          2.65866872e-02,  4.02122647e-01, -4.90787327e-02,
-          2.89043874e-01,  7.39292949e-02,  2.30548643e-02,
-         -5.23956776e-01,  8.47117510e-03, -2.22430736e-01,
-          2.78976131e-02,  1.98936775e-01, -3.27527881e-01,
-         -3.42491508e-01,  9.65497643e-03, -3.23785730e-02,
-         -6.30644411e-02, -4.23567891e-01, -4.62936759e-01,
-         -5.00409305e-01, -2.56481886e-01, -2.42299706e-01,
-          6.78150402e-03, -1.47003448e-03, -8.91473442e-02,
-          3.01649749e-01, -2.08600447e-01, -2.30947211e-01,
-          1.51244365e-02,  9.57912132e-02, -7.86154643e-02,
-          9.30957273e-02, -1.24067500e-01]], dtype=float32))
-
- -
- -
-
- -
-
-
- -
-
-
def l2norm(x):
-    """
-    L2 Norm
-    """
-    return np.linalg.norm(x,2,1).reshape(-1,1)
-
- -
-
-
- -
-
-
- -
-
-
pd.set_option("max_colwidth",150)
-
-def search(line):
-    vec = to_vec(line)
-    sim = ((vec* result_vec)/l2norm(result_vec)).sum(-1)
-    return pd.DataFrame({"text":train_seq.lines,"sim":sim})\
-        .sort_values(by="sim",ascending=False)
-
- -
-
-
- -
-
-
- -
-
-
search("Experience our planet's natural beauty").head(10)
-
- -
-
-
- -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
textsim
4699The year is 2041 and a dispute between a man and his wife has set the human race back. In this battle of the sexes, the primitive life isn't so si...2.796010
1184Ya-nuo's been raised as a boy. Now at age 25, she's caught the eye of a triad leader's sister. But what happens when she reveals her true gender?2.747936
47Scouted by a famous Spanish club, Valt Aoi heads to Spain. With their sights on the World League, he and his teammates face the European League fi...2.684218
1116Led by seventh-grader C.J., three students who have been warned about the dangers of high school decide to make the best of their middle-school ye...2.633265
5380Love is in the air as Zoe and friends go on a quest to find a fabled Maid's Stone. But when rivalry blinds them to danger, it's Raven to the rescue!2.550404
4741The whole huggable gang is back, bringing tales of caring and sharing to a new generation. And now the Care Bear Cousins are here to join the fun!2.546750
4609Captain Atomic – once a superhero, now a sock puppet – can only activate his powers with the help of Joey, his new partner and biggest fan.2.545124
3574Sometimes being shady is the only way to survive, a fact these sneaky animal "hustlers" – including orcas, owls and otters – use to their advantage.2.517003
2686Comedian Maria Bamford stars in a series inspired by her own life. It's the sometimes surreal story of a woman who loses – and then finds – her s**t.2.510907
1039Thom tells her grandson about his grandfather, a sailor who left 61 years ago to seek his fortune, and asks him to find out what happened to her s...2.499740
-
-
- -
- -
-
- -
-
-
- -
-
-
search("love story,marriage, girl").head(10)
-
- -
-
-
- -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
textsim
1588To her Indian parents' dismay, London-born Jasmeet "Jazz" Malhotra longs for everything Western, including her British boyfriend. On a family trip...2.468083
4285Quick to throw punches in the name of justice, a young man must find a calmer way to win over the pacifist father of the girl he wishes to marry.2.414226
504When Parisian Elsa gets hung up on her ex, her best friends secretly hire a male escort to help her move on. But their plan works a little too well.2.391777
2595Motu and Patlu want to help a circus lion get back to the jungle. On the way, the three become caught up in an exciting adventure in the forest.2.369020
652Hoping to find a magical root, a monster has captured farmers in the land of Vyom. It’s up to Bheem and the gang to foil his plan and save the kin...2.363151
2042Tired of her passionless marriage, Marianne wants a separation from her husband, Gustav, who, in response, decides to make a big change of his own.2.361425
1668In 1962 Brooklyn, a Puerto Rican teen who joins a gang is seduced by violence and heroin. But can his mother's love and faith in God save him?2.344456
2478Maya finally hooks up with her online dream girl, only to discover she’s deeply involved with an older sugar daddy – a man Maya knows all too well.2.337689
1324After an argument with her dad, a young woman from a family of macho truck drivers is kicked out of the home and must make her own success as a tr...2.334984
177Little Singham is in London to meet the queen, but when the famed Kohinoor Diamond gets stolen, the kid cop goes on a wild, citywide hunt for the ...2.310921
-
-
- -
- -
-
- -
-
-
-

Well, usually it should be more accurate if we have more data

- -
-
-
- {% endraw %} - - - - - diff --git a/docs/category.html b/docs/category.html deleted file mode 100644 index 292135e..0000000 --- a/docs/category.html +++ /dev/null @@ -1,968 +0,0 @@ ---- - -title: Categorical Transformation for DL - - -keywords: fastai -sidebar: home_sidebar - -summary: "a list of things to categoryical transformation" -description: "a list of things to categoryical transformation" -nb_path: "nbs/53_category.ipynb" ---- - - -
- - {% raw %} - -
- -
- {% endraw %} - -
-
-

Imports

-
-
-
- {% raw %} - -
- -
-
- -
- - -
-

class C2I[source]

C2I(arr:Iterable[T_co], pad_mst:bool=False)

-
-

Category to indices

-

c2i = C2I( - ["class 1", "class 2", ..., "class n"], - pad_mst=True, - ) -c2i[["class 2", "class 5"]] -[0] array([2,3])

-
-
-
-

If the indices you put in the slicing is a np.ndarray - a verctorized function will be used

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

class Category[source]

Category(arr:Iterable[T_co], pad_mst:bool=False)

-
-

Manage categorical translations -c = Category( - ["class 1", "class 2", ..., "class n"], - pad_mst=True,)

-

c.c2i[["class 3","class 6"]] -c.i2c[[3, 2, 1]]

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

class TreeCategory[source]

TreeCategory(parent_map:Dict[str, str], pad_mst:bool=False) :: Category

-
-

Manage categorical translations -c = Category( - ["class 1", "class 2", ..., "class n"], - pad_mst=True,)

-

c.c2i[["class 3","class 6"]] -c.i2c[[3, 2, 1]]

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - -
-
-

Indexing forward and backward

-
-
-
- {% raw %} - -
-
- -
-
-
cates = Category(list(map(lambda x:f"Cate_{x+1}",range(50))))
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
cates
-
- -
-
-
- -
-
- -
- - - -
-
Category Manager with 50
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
cates.i2c[:5]
-
- -
-
-
- -
-
- -
- - - -
-
array(['Cate_1', 'Cate_2', 'Cate_3', 'Cate_4', 'Cate_5'], dtype='<U7')
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
test_c = np.random.randint(1,50,1000)
-
- -
-
-
- -
- {% endraw %} - -
-
-

Indices to categories

-
-
-
- {% raw %} - -
-
- -
-
-
labels = cates.i2c[test_c]
-labels[:20]
-
- -
-
-
- -
-
- -
- - - -
-
array(['Cate_3', 'Cate_21', 'Cate_41', 'Cate_29', 'Cate_3', 'Cate_5',
-       'Cate_5', 'Cate_40', 'Cate_3', 'Cate_24', 'Cate_10', 'Cate_19',
-       'Cate_37', 'Cate_45', 'Cate_35', 'Cate_36', 'Cate_28', 'Cate_8',
-       'Cate_13', 'Cate_23'], dtype='<U7')
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Category to indices

-
-
-
- {% raw %} - -
-
- -
-
-
cates.c2i[labels[:20]]
-
- -
-
-
- -
-
- -
- - - -
-
array([ 2, 20, 40, 28,  2,  4,  4, 39,  2, 23,  9, 18, 36, 44, 34, 35, 27,
-        7, 12, 22])
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Using vectorized function

- -
-
-
- {% raw %} - -
-
- -
-
-
%%time
-for i in range(200):
-    indices_generated = cates.c2i[labels]
-
- -
-
-
- -
-
- -
- -
-
CPU times: user 59.8 ms, sys: 2.67 ms, total: 62.4 ms
-Wall time: 62.4 ms
-
-
-
- -
-
- -
- {% endraw %} - -
-
-

Using the original python function

- -
-
-
- {% raw %} - -
-
- -
-
-
%%time
-for i in range(200):
-    indices_generated2 = list(cates.c2i.get_int(l) for l in labels)
-
- -
-
-
- -
-
- -
- -
-
CPU times: user 102 ms, sys: 2.31 ms, total: 104 ms
-Wall time: 104 ms
-
-
-
- -
-
- -
- {% endraw %} - -
-
-

Transform forward and backward and check fidelity

- -
-
-
- {% raw %} - -
-
- -
-
-
(cates.c2i[labels]==test_c).mean()
-
- -
-
-
- -
-
- -
- - - -
-
1.0
-
- -
- -
-
- -
- {% endraw %} - -
-
-

With missing tokens

-
-
-
-
-
-

We can set pad_mst to True to manage missing token

- -
-
-
- {% raw %} - -
-
- -
-
-
nt = Category("ATCG", pad_mst=True)
-
- -
-
-
- -
- {% endraw %} - -
-
-

Categories to indices

-
-
-
- {% raw %} - -
-
- -
-
-
nt.c2i[list("AAACCTTATTGCAGCOAAT")]
-
- -
-
-
- -
-
- -
- - - -
-
array([1, 1, 1, 3, 3, 2, 2, 1, 2, 2, 4, 3, 1, 4, 3, 0, 1, 1, 2])
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Indices to categories

-
-
-
- {% raw %} - -
-
- -
-
-
nt.i2c[[1, 1, 1, 3, 3, 2, 2, 2, 2, 4, 3, 1, 4, 3, 0, 1, 1, 2]]
-
- -
-
-
- -
-
- -
- - - -
-
array(['A', 'A', 'A', 'C', 'C', 'T', 'T', 'T', 'T', 'G', 'C', 'A', 'G',
-       'C', '[MST]', 'A', 'A', 'T'], dtype='<U5')
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Data save and load

-
-
-
-
-
-

Save categories

-
-
-
- {% raw %} - -
-
- -
-
-
nt.save("atcg.json")
-
- -
-
-
- -
- {% endraw %} - -
-
-

Load categories

-
-
-
- {% raw %} - -
-
- -
-
-
cm = Category.load("atcg.json")
-cm
-
- -
-
-
- -
-
- -
- - - -
-
Category Manager with 5
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Tree data

-
-
-
-
-
-

Sometime the target should be treated like a tree structure multi-hotting, not one-hot encoding, the benifit of such operation is explained in this colab notebook

- -
-
-
- {% raw %} - -
-
- -
-
-
import requests
-
-tree_str = requests.get("http://oncotree.mskcc.org/api/tumorTypes/tree?&version=oncotree_latest_stable").text
-tree = json.loads(tree_str)
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
parent_map = dict()
-def get_pairs(node):
-    if "name" in node:
-        parent_map.update({node.get("code"):node.get("parent")})
-    if "children" in node:
-        for c,child in node["children"].items():
-            get_pairs(child)
-
-get_pairs(tree['TISSUE'])
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
tree_category = TreeCategory(parent_map)
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
tree_category
-
- -
-
-
- -
-
- -
- - - -
-
Tree Category(869):
-	self.tree_hot("name")	self.ancestor_map	self.depth_map_array
-
- -
- -
-
- -
- {% endraw %} - -
-
-

You can transform the category data into the following multihot hierachical encoding vector.

-

The rest is good old BCELoss

- -
-
-
- {% raw %} - -
-
- -
-
-
tree_category.tree_hot("NCCRCC")
-
- -
-
-
- -
-
- -
- - - -
-
array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
tree_category.depth_map_array
-
- -
-
-
- -
-
- -
- - - -
-
array([1, 2, 3, 4, 4, 4, 3, 4, 4, 5, 5, 4, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4,
-       4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 2, 3,
-       4, 5, 5, 5, 5, 5, 5, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 4, 5, 6,
-       6, 7, 7, 6, 6, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7,
-       7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 6, 6, 6, 6, 7, 6,
-       7, 7, 6, 6, 7, 7, 7, 6, 7, 7, 5, 6, 6, 6, 6, 7, 7, 7, 6, 6, 6, 6,
-       6, 6, 6, 6, 6, 6, 6, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 5, 5,
-       6, 6, 6, 6, 4, 5, 5, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3,
-       3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-       3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 4, 3, 4, 3, 4, 4, 4, 4, 4, 2, 3,
-       3, 3, 4, 4, 3, 3, 3, 3, 2, 3, 4, 4, 4, 2, 3, 3, 3, 3, 4, 3, 3, 3,
-       4, 4, 4, 4, 4, 3, 2, 3, 4, 4, 4, 3, 3, 4, 4, 4, 3, 2, 3, 3, 4, 3,
-       3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 4, 3, 3, 4, 5, 5, 5, 4, 3,
-       3, 4, 5, 5, 5, 4, 5, 5, 5, 2, 3, 3, 3, 4, 3, 4, 4, 4, 4, 4, 4, 3,
-       4, 5, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-       3, 2, 3, 4, 4, 3, 3, 4, 4, 2, 3, 4, 4, 4, 2, 3, 4, 4, 3, 2, 3, 3,
-       3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 4, 4, 4, 4, 3, 3, 2,
-       3, 3, 3, 4, 4, 5, 5, 4, 3, 2, 3, 4, 4, 4, 4, 3, 3, 3, 4, 3, 3, 3,
-       3, 4, 4, 4, 4, 3, 3, 3, 4, 4, 4, 4, 4, 2, 3, 3, 4, 4, 3, 4, 4, 4,
-       4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 2, 3, 3, 3, 3, 3, 3,
-       3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3,
-       2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, 4, 2, 3, 4, 4,
-       4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4,
-       5, 5, 5, 4, 4, 4, 4, 4, 3, 4, 4, 4, 3, 4, 4, 3, 4, 4, 4, 4, 4, 4,
-       4, 4, 3, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4,
-       4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4,
-       4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 2, 3, 3, 3, 2, 3, 3, 3, 3,
-       3, 2, 3, 4, 4, 4, 4, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5, 5,
-       5, 5, 4, 4, 3, 3, 3, 3, 3, 2, 3, 4, 4, 4, 2, 3, 4, 4, 5, 5, 5, 5,
-       5, 4, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3,
-       4, 5, 5, 5, 4, 4, 4, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2,
-       3, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2,
-       3, 3, 2, 3, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 5, 6, 6,
-       5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 5, 5, 5, 5, 5, 5,
-       5, 5, 5, 5, 4, 4, 5, 5, 5, 5, 5, 4, 5, 5, 5, 6, 6, 6, 5, 5, 4, 5,
-       5, 6, 5, 6, 5, 6, 6, 5, 5, 5, 6, 4, 4, 5, 5, 5, 5, 4, 5, 6, 6, 5,
-       6, 6, 5, 5, 5, 5, 5, 4, 5, 5, 6, 6, 6, 6, 6, 5, 3, 2, 3, 3, 4, 4,
-       4, 4, 4, 4, 4, 3, 3, 3, 3, 2, 3, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-       5, 5, 5, 4, 5, 3, 3, 3, 3, 2, 3, 4, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4,
-       5, 5, 4, 3, 3, 3, 4, 4, 4, 3, 3])
-
- -
- -
-
- -
- {% endraw %} - -
-
-

With the above array, you can achieve many tasks.

-

eg. you can calc accuracy, loss, f1 for each level

-
crit = nn.BCEWithLogitLoss()
-def accuracy(y,y_): return (y==(y_>.5)).float().mean()
-loss = crit(y,y_)
-acc = accuracy(y,y_)
-
-level_map = torch.LongTensor(tree_category.depth_map_array).cuda()
-
-# calc metrics for level2, level3, level4
-loss_l = dict()
-acc_l = dict()
-for level in [2,3,4]:
-    y_level = y[level_map==level]
-    y_hat_level = y_[level_map==level]
-    loss_l[level] = crit(y_level, y_hat_level)
-    acc_l[level] = accuracy(y_level, y_hat_level)
-
-

Or assign different weights to different level of loss, etc.

-

Visualize level for first 100 categories

- -
-
-
- {% raw %} - -
-
- -
-
-
from matplotlib import pyplot as plt
-plt.figure(figsize=(20,10))
-plt.imshow(
-    np.stack(list(tree_category.depth_map_array==i
-                  for i in range(1,tree_category.depth_map_array.max()+1)))[:,:100])
-
- -
-
-
- -
-
- -
- - - -
-
<matplotlib.image.AxesImage at 0x1c375535d0>
-
- -
- -
- - - -
- -
- -
- -
-
- -
- {% endraw %} - -
- - diff --git a/docs/config.html b/docs/config.html deleted file mode 100644 index 9cebb7f..0000000 --- a/docs/config.html +++ /dev/null @@ -1,460 +0,0 @@ ---- - -title: Config - -keywords: fastai -sidebar: home_sidebar - - - ---- - - -
- - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

class Config[source]

Config() :: dict

-
-

dict() -> new empty dictionary -dict(mapping) -> new dictionary initialized from a mapping object's - (key, value) pairs -dict(iterable) -> new dictionary initialized as if via: - d = {} - for k, v in iterable: - d[k] = v -dict(**kwargs) -> new dictionary initialized with the name=value pairs - in the keyword argument list. For example: dict(one=1, two=2)

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

first[source]

first(d, key)

-
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

getall[source]

getall(d, key)

-
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
dict.items
-
- -
-
-
- -
-
- -
- - - -
-
<method 'items' of 'dict' objects>
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
config = Config(a = 1,z=3,b=2,c=[dict(d=5,e=6,z=5),dict(g=7,h=dict(i=8,z=6))])
-config.pretty_print()
-
- -
-
-
- -
-
- -
- -
-
{
-    "a": 1,
-    "z": 3,
-    "b": 2,
-    "c": [
-        {
-            "d": 5,
-            "e": 6,
-            "z": 5
-        },
-        {
-            "g": 7,
-            "h": {
-                "i": 8,
-                "z": 6
-            }
-        }
-    ]
-}
-
-
-
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
config.first("z")
-
- -
-
-
- -
-
- -
- - - -
-
3
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
config.getall("z")
-
- -
-
-
- -
-
- -
- - - -
-
[3, 5, 6]
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Pretty print config

-
-
-
- {% raw %} - -
-
- -
-
-
Config(a=1,b=2).pretty_print()
-
- -
-
-
- -
-
- -
- -
-
{
-    "a": 1,
-    "b": 2
-}
-
-
-
- -
-
- -
- {% endraw %} - -
-
-

Multiple ways of setting config

-
-
-
- {% raw %} - -
-
- -
-
-
config = Config(a=1,b=2)(c=5)(d=6)
-config.e=12
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
config
-
- -
-
-
- -
-
- -
- - - -
-
{'a': 1, 'b': 2, 'c': 5, 'd': 6, 'e': 12}
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Save and load json

-
-
-
- {% raw %} - -
-
- -
-
-
config.save("test.json")
-!cat test.json
-
- -
-
-
- -
-
- -
- -
-
{"a": 1, "b": 2, "c": 5, "d": 6, "e": 12}
-
-
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
Config.load("test.json")
-
- -
-
-
- -
-
- -
- - - -
-
{'a': 1, 'b': 2, 'c': 5, 'd': 6, 'e': 12}
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
!rm test.json
-
- -
-
-
- -
- {% endraw %} - -
- - diff --git a/docs/cosine_search.html b/docs/cosine_search.html deleted file mode 100644 index 17b183c..0000000 --- a/docs/cosine_search.html +++ /dev/null @@ -1,268 +0,0 @@ ---- - -title: Cosine - - -keywords: fastai -sidebar: home_sidebar - - - -nb_path: "nbs/55_cosine_search.ipynb" ---- - - -
- - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - -
-
-

Cosine Similarity

-
-
-
- {% raw %} - -
- -
-
- -
- - -
-

class CosineSearch[source]

CosineSearch(base)

-
-

Build a index search on cosine distance

-

cos = CosineSearch(base_array) -idx_order = cos(vec)

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

class CosineSearchWithCategory[source]

CosineSearchWithCategory(base:ndarray, category:ndarray) :: CosineSearch

-
-

Combine with the category manager -The class can return a dataframe with category information

-

search_dataframe

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - -
-
- -
-
-
- {% raw %} - -
-
- -
-
-
base = np.random.rand(50000,100)-.2
-vec = base[200]
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
cosine = CosineSearch(base)
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
cosine(vec)
-
- -
-
-
- -
-
- -
- - - -
-
array([  200, 42154,  2439, ..., 45360, 13398,  9083])
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
cosine.search(vec, return_similarity=True)
-
- -
-
-
- -
-
- -
- - - -
-
(array([  200, 42154,  2439, ..., 45360, 13398,  9083]),
- array([0.22396417, 0.16316632, 0.16174796, ..., 0.06436053, 0.06367614,
-        0.0608117 ]))
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
 
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
%%time
-for i in range(100):
-    cosine(vec)
-
- -
-
-
- -
-
- -
- -
-
CPU times: user 1.21 s, sys: 147 ms, total: 1.36 s
-Wall time: 1.37 s
-
-
-
- -
-
- -
- {% endraw %} - -
- - diff --git a/docs/create_different.html b/docs/create_different.html deleted file mode 100644 index 3617f1b..0000000 --- a/docs/create_different.html +++ /dev/null @@ -1,29 +0,0 @@ ---- - -title: create different file - -keywords: fastai -sidebar: home_sidebar - -summary: "different file" ---- - - -
- {% raw %} - -
- -
- {% endraw %} -
- - diff --git a/docs/cross_entropy_weighter.html b/docs/cross_entropy_weighter.html deleted file mode 100644 index 2756f81..0000000 --- a/docs/cross_entropy_weighter.html +++ /dev/null @@ -1,1287 +0,0 @@ ---- - -title: Create multi-task adjustment for cross-entropy - - -keywords: fastai -sidebar: home_sidebar - -summary: "A weighter for multi-task learning with different softmax+cross-entropy" -description: "A weighter for multi-task learning with different softmax+cross-entropy" -nb_path: "nbs/cross_entropy_weighter.ipynb" ---- - - -
- - {% raw %} - -
- -
- {% endraw %} - -
-
-

Tools and imports

-
-
-
- {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
from matplotlib import pyplot as plt
-
- -
-
-
- -
- {% endraw %} - -
-
-

Enters softmax

-
-
-
- {% raw %} - -
-
- -
-
-
softmax = nn.Softmax(-1)
-crit = nn.CrossEntropyLoss()
-
- -
-
-
- -
- {% endraw %} - -
-
-

Experience the problem

-
-
-
- {% raw %} - -
-
- -
-
-
def test_loss(model,iters:300,get_xy):
-    losses=[]
-    with torch.no_grad():
-        for i in range(iters):
-            x,y_true = get_xy(model.nb_output)
-            y_vec = model(x)
-            loss = model.crit(y_vec,y_true)
-            losses.append(loss)
-    return torch.stack(losses).mean()
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
def create_softmax_pipeline(
-        nb_layers:int,
-        nb_output:int,
-        hs:int=500,
-        crit:nn.Module=nn.CrossEntropyLoss(),
-    )->nn.Module:
-    modules = (nb_layers-1)*[nn.Linear(hs,hs),nn.Dropout(.3)]
-    modules+=[nn.Linear(hs,nb_output),]
-    model = nn.Sequential(*modules)
-    model.hs = hs
-    model.nb_output = nb_output
-    model.__class__.crit = crit
-    model.__class__.test_loss = test_loss
-    return model
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
def random_input(nb_output):
-    return torch.rand(2,500),torch.randint(low=0,high=nb_output,size = (2,))
-
-def inbalanced_input(
-        bias:float
-    ) -> Callable:
-    def inbalanced_input_(nb_output:int):
-        return torch.rand(2,500),torch.randint(
-            low=0,
-            high=max(1,int(nb_output*bias)),
-            size = (2,)
-        )
-    return inbalanced_input_
-
- -
-
-
- -
- {% endraw %} - -
-
-
    -
  • For models with different branches of output, some output 2 category, some output more, like 200,500
  • -
  • Their loss will end up in different scale
  • -
  • That makes mixing them up fairly hard and unfair to lesser category tasks
  • -
- -
-
-
- {% raw %} - -
-
- -
-
-
import random
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
result = []
-
-for i in tqdm(range(50)):
-    c = random.randint(2,3000)
-    b = 1-random.random()
-    loss = create_softmax_pipeline(1,c).test_loss(300,inbalanced_input(b))
-    result.append(dict(classes=c,loss=loss.item(),inbl_bias=b))
-
- -
-
-
- -
-
- -
- -
-
-
-
-
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
df = pd.DataFrame(result)
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
df
-
- -
-
-
- -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
classeslossinbl_bias
022447.7840150.719190
124477.8491580.002960
27066.6254160.297956
32725.7390010.154829
428607.9948820.179631
523767.8230360.554090
64746.2306430.497769
714767.3176500.790722
87296.6523120.671657
911837.1610010.422553
1017927.5710340.375524
1126017.9283470.937953
1219887.6534010.448365
136176.4717110.669720
1412577.1966650.180724
1512087.1422720.603882
1615717.4319090.307233
1718157.5657630.271957
1823707.8402560.130841
1924217.8353620.470347
2026087.9338520.362477
2118337.5664140.551423
2217697.5360470.630381
2319507.6157930.795910
2419107.5857390.343632
2523017.7984650.829628
2623777.8692110.016988
2714967.3931780.119690
2811797.1470580.568997
2914757.3567400.693435
3024097.8359540.455461
315426.3284030.733283
326996.6098920.674927
3329668.0627700.268944
3428318.0060010.822981
3516577.4594730.323996
3614697.3166780.062805
376746.5796550.812632
386546.5500600.601652
391945.3505550.238536
402505.5670150.270642
4123687.8191310.117133
4215737.4296060.003537
4329948.0539260.764925
4421557.7413450.941843
4526427.9191260.612718
464866.2425270.701243
4719487.6443660.970036
4826267.9323630.657842
4916607.4668120.855916
-
-
- -
- -
-
- -
- {% endraw %} - -
-
-

The pattern

-
-
-
-
-
-

There are $n$ tasks $T$ with a set of numbers of classes $C$ where $c_{i}$ is the number of the classes of task $T_{i}$

-

The number of classes $c_{i}$ has certain correlation of the average loss $L_{i}$

-

Where $log_{10}(c_{i})$ has a clear linear relationship with $L$

-

$L_{i} = a.log_{10}(c_{i})$, where a is a fixed constant

- -
-
-
- {% raw %} - -
-
- -
-
-
plt.scatter(np.log10(df.classes),df.loss,)
-
- -
-
-
- -
-
- -
- - - -
-
<matplotlib.collections.PathCollection at 0x132a9c210>
-
- -
- -
- - - -
- -
- -
- -
-
- -
- {% endraw %} - -
-
-

The solution

Assume we have certain function, will produce a weight that will bring each cross entropy loss to the same constant scale ${a}$.

-

$L_{i}.f(c_{i})=a$

-

$f(c_{i})a.log_{10}(c_{i})=a$

-

Here we can get how to calculate $f(c_{i})$

-

$f(c_{i})=\frac{1}{log_{10}(c_{i})}$

- -
-
-
- {% raw %} - -
-
- -
-
-
def adjust(nb_class):
-    return 1/np.log10(nb_class)
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
df["lambda_weighted"] = df.apply(
-    lambda row:row['loss']*adjust(row['classes']),
-    axis=1)
-
- -
-
-
- -
- {% endraw %} - -
-
-

For now it's a about the same scale of loss

- -
-
-
- {% raw %} - -
-
- -
-
-
plt.scatter(df.classes,df.lambda_weighted)
-
- -
-
-
- -
-
- -
- - - -
-
<matplotlib.collections.PathCollection at 0x132a9c150>
-
- -
- -
- - - -
- -
- -
- -
-
- -
- {% endraw %} - -
-
-

Adjusted CrossEntropy

-
-
-
- {% raw %} - -
- -
-
- -
- - -
-

class MultiTaskCELoss[source]

MultiTaskCELoss() :: Module

-
-

A cross entropy loss function which will cancel out - the effect of different class numbers

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - -
-
-

Let's make this adjustment into the loss function, an upgraded version of CrossEntropy

- -
-
-
- {% raw %} - -
-
- -
-
-
result = []
-
-for i in tqdm(range(50)):
-    c = random.randint(2,3000)
-    b = 1-random.random()
-    # here we change the loss function to MultiTaskCELoss
-    loss = create_softmax_pipeline(1,c,crit=MultiTaskCELoss())\
-        .test_loss(300,inbalanced_input(b))
-    result.append(dict(classes=c,loss=loss.item(),inbl_bias=b))
-
- -
-
-
- -
-
- -
- -
-
-
-
-
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
df_adjusted = pd.DataFrame(result)
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
df_adjusted
-
- -
-
-
- -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
classeslossinbl_bias
05332.3192480.208584
122642.3263460.022896
22542.3207350.922445
310272.3282910.643444
424282.3261360.883795
57722.3170710.062716
621662.3157540.364122
78122.3219720.852977
826322.3217080.639467
925762.3132690.968200
1013262.3215150.508901
111692.3215260.870789
128152.3091630.262275
137922.3217710.608608
147392.3162150.198933
1524602.3185230.880343
1624202.3205170.781538
1716882.3166570.954598
1829292.3230090.750869
19782.1927230.089868
2016702.3256080.188055
2128682.3245250.058037
229052.3192830.126673
2316752.3095650.307769
2414302.3270990.451335
254242.3158440.512538
2615112.3163250.613963
279592.3303170.987407
281472.3254590.931882
292782.3172730.401440
308852.3253970.087088
3114592.3079710.857782
321822.3447160.443465
3324682.3268250.572978
349542.3227500.815261
3512972.3199340.887149
3617872.3261610.113759
374622.3252760.969307
386862.3242620.305557
394282.3239130.342770
4029002.3193490.609161
4127652.3233730.296973
427522.3201890.302571
435022.3258970.419716
4421622.3204490.202672
4524602.3179620.430931
4625372.3121160.693554
478062.3187460.539312
482512.3228450.181191
4928452.3260070.667570
-
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
plt.scatter(
-    df_adjusted.classes,
-    df_adjusted.loss,
-)
-
- -
-
-
- -
-
- -
- - - -
-
<matplotlib.collections.PathCollection at 0x131d00bd0>
-
- -
- -
- - - -
- -
- -
- -
-
- -
- {% endraw %} - -
- - diff --git a/docs/css/bootstrap.min.css b/docs/css/bootstrap.min.css deleted file mode 100755 index 783f60d..0000000 --- a/docs/css/bootstrap.min.css +++ /dev/null @@ -1,7535 +0,0 @@ -/*! - * Bootstrap v3.3.2 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - - -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ - -html { - font-family: sans-serif; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100% -} - -body { - margin: 0 -} - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block -} - -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline -} - -audio:not([controls]) { - display: none; - height: 0 -} - -[hidden], -template { - display: none -} - -a { - background-color: transparent -} - -a:active, -a:hover { - outline: 0 -} - -abbr[title] { - border-bottom: 1px dotted -} - -b, -strong { - font-weight: 700 -} - -dfn { - font-style: italic -} - -h1 { - margin: .67em 0; - font-size: 2em -} - -mark { - color: #000; - background: #ff0 -} - -small { - font-size: 80% -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline -} - -sup { - top: -.5em -} - -sub { - bottom: -.25em -} - -img { - border: 0 -} - -svg:not(:root) { - overflow: hidden -} - -figure { - margin: 1em 40px -} - -hr { - height: 0; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box -} - -pre { - overflow: auto -} - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em -} - -button, -input, -optgroup, -select, -textarea { - margin: 0; - font: inherit; - color: inherit -} - -button { - overflow: visible -} - -button, -select { - text-transform: none -} - -button, -html input[type=button], -input[type=reset], -input[type=submit] { - -webkit-appearance: button; - cursor: pointer -} - -button[disabled], -html input[disabled] { - cursor: default -} - -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0 -} - -input { - line-height: normal -} - -input[type=checkbox], -input[type=radio] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0 -} - -input[type=number]::-webkit-inner-spin-button, -input[type=number]::-webkit-outer-spin-button { - height: auto -} - -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-cancel-button, -input[type=search]::-webkit-search-decoration { - -webkit-appearance: none -} - -fieldset { - padding: .35em .625em .75em; - margin: 0 2px; - border: 1px solid silver -} - -legend { - padding: 0; - border: 0 -} - -textarea { - overflow: auto -} - -optgroup { - font-weight: 700 -} - -table { - border-spacing: 0; - border-collapse: collapse -} - -td, -th { - padding: 0 -} - - -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ - -@media print { - *, - :after, - :before { - /*color:#000!important;*/ - /*background:0 0!important*/ - ; - } - a, - a:visited { - text-decoration: underline - } - a[href]:after { - content: " (" attr(href) ")" - } - abbr[title]:after { - content: " (" attr(title) ")" - } - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: "" - } - blockquote, - pre { - border: 1px solid #999; - page-break-inside: avoid - } - thead { - display: table-header-group - } - img, - tr { - page-break-inside: avoid - } - img { - max-width: 100%!important - } - h2, - h3, - p { - orphans: 3; - widows: 3 - } - h2, - h3 { - page-break-after: avoid - } - select { - background: #fff!important - } - .navbar { - display: none - } - .btn>.caret, - .dropup>.btn>.caret { - border-top-color: #000!important - } - .label { - border: 1px solid #000 - } - .table { - border-collapse: collapse!important - } - .table td, - .table th { - background-color: #fff!important - } - .table-bordered td, - .table-bordered th { - border: 1px solid #ddd!important - } -} - -@font-face { - font-family: 'Glyphicons Halflings'; - src: url(../fonts/glyphicons-halflings-regular.eot); - src: url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'), url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'), url(../fonts/glyphicons-halflings-regular.woff) format('woff'), url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'), url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg') -} - -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: 400; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale -} - -.glyphicon-asterisk:before { - content: "\2a" -} - -.glyphicon-plus:before { - content: "\2b" -} - -.glyphicon-eur:before, -.glyphicon-euro:before { - content: "\20ac" -} - -.glyphicon-minus:before { - content: "\2212" -} - -.glyphicon-cloud:before { - content: "\2601" -} - -.glyphicon-envelope:before { - content: "\2709" -} - -.glyphicon-pencil:before { - content: "\270f" -} - -.glyphicon-glass:before { - content: "\e001" -} - -.glyphicon-music:before { - content: "\e002" -} - -.glyphicon-search:before { - content: "\e003" -} - -.glyphicon-heart:before { - content: "\e005" -} - -.glyphicon-star:before { - content: "\e006" -} - -.glyphicon-star-empty:before { - content: "\e007" -} - -.glyphicon-user:before { - content: "\e008" -} - -.glyphicon-film:before { - content: "\e009" -} - -.glyphicon-th-large:before { - content: "\e010" -} - -.glyphicon-th:before { - content: "\e011" -} - -.glyphicon-th-list:before { - content: "\e012" -} - -.glyphicon-ok:before { - content: "\e013" -} - -.glyphicon-remove:before { - content: "\e014" -} - -.glyphicon-zoom-in:before { - content: "\e015" -} - -.glyphicon-zoom-out:before { - content: "\e016" -} - -.glyphicon-off:before { - content: "\e017" -} - -.glyphicon-signal:before { - content: "\e018" -} - -.glyphicon-cog:before { - content: "\e019" -} - -.glyphicon-trash:before { - content: "\e020" -} - -.glyphicon-home:before { - content: "\e021" -} - -.glyphicon-file:before { - content: "\e022" -} - -.glyphicon-time:before { - content: "\e023" -} - -.glyphicon-road:before { - content: "\e024" -} - -.glyphicon-download-alt:before { - content: "\e025" -} - -.glyphicon-download:before { - content: "\e026" -} - -.glyphicon-upload:before { - content: "\e027" -} - -.glyphicon-inbox:before { - content: "\e028" -} - -.glyphicon-play-circle:before { - content: "\e029" -} - -.glyphicon-repeat:before { - content: "\e030" -} - -.glyphicon-refresh:before { - content: "\e031" -} - -.glyphicon-list-alt:before { - content: "\e032" -} - -.glyphicon-lock:before { - content: "\e033" -} - -.glyphicon-flag:before { - content: "\e034" -} - -.glyphicon-headphones:before { - content: "\e035" -} - -.glyphicon-volume-off:before { - content: "\e036" -} - -.glyphicon-volume-down:before { - content: "\e037" -} - -.glyphicon-volume-up:before { - content: "\e038" -} - -.glyphicon-qrcode:before { - content: "\e039" -} - -.glyphicon-barcode:before { - content: "\e040" -} - -.glyphicon-tag:before { - content: "\e041" -} - -.glyphicon-tags:before { - content: "\e042" -} - -.glyphicon-book:before { - content: "\e043" -} - -.glyphicon-bookmark:before { - content: "\e044" -} - -.glyphicon-print:before { - content: "\e045" -} - -.glyphicon-camera:before { - content: "\e046" -} - -.glyphicon-font:before { - content: "\e047" -} - -.glyphicon-bold:before { - content: "\e048" -} - -.glyphicon-italic:before { - content: "\e049" -} - -.glyphicon-text-height:before { - content: "\e050" -} - -.glyphicon-text-width:before { - content: "\e051" -} - -.glyphicon-align-left:before { - content: "\e052" -} - -.glyphicon-align-center:before { - content: "\e053" -} - -.glyphicon-align-right:before { - content: "\e054" -} - -.glyphicon-align-justify:before { - content: "\e055" -} - -.glyphicon-list:before { - content: "\e056" -} - -.glyphicon-indent-left:before { - content: "\e057" -} - -.glyphicon-indent-right:before { - content: "\e058" -} - -.glyphicon-facetime-video:before { - content: "\e059" -} - -.glyphicon-picture:before { - content: "\e060" -} - -.glyphicon-map-marker:before { - content: "\e062" -} - -.glyphicon-adjust:before { - content: "\e063" -} - -.glyphicon-tint:before { - content: "\e064" -} - -.glyphicon-edit:before { - content: "\e065" -} - -.glyphicon-share:before { - content: "\e066" -} - -.glyphicon-check:before { - content: "\e067" -} - -.glyphicon-move:before { - content: "\e068" -} - -.glyphicon-step-backward:before { - content: "\e069" -} - -.glyphicon-fast-backward:before { - content: "\e070" -} - -.glyphicon-backward:before { - content: "\e071" -} - -.glyphicon-play:before { - content: "\e072" -} - -.glyphicon-pause:before { - content: "\e073" -} - -.glyphicon-stop:before { - content: "\e074" -} - -.glyphicon-forward:before { - content: "\e075" -} - -.glyphicon-fast-forward:before { - content: "\e076" -} - -.glyphicon-step-forward:before { - content: "\e077" -} - -.glyphicon-eject:before { - content: "\e078" -} - -.glyphicon-chevron-left:before { - content: "\e079" -} - -.glyphicon-chevron-right:before { - content: "\e080" -} - -.glyphicon-plus-sign:before { - content: "\e081" -} - -.glyphicon-minus-sign:before { - content: "\e082" -} - -.glyphicon-remove-sign:before { - content: "\e083" -} - -.glyphicon-ok-sign:before { - content: "\e084" -} - -.glyphicon-question-sign:before { - content: "\e085" -} - -.glyphicon-info-sign:before { - content: "\e086" -} - -.glyphicon-screenshot:before { - content: "\e087" -} - -.glyphicon-remove-circle:before { - content: "\e088" -} - -.glyphicon-ok-circle:before { - content: "\e089" -} - -.glyphicon-ban-circle:before { - content: "\e090" -} - -.glyphicon-arrow-left:before { - content: "\e091" -} - -.glyphicon-arrow-right:before { - content: "\e092" -} - -.glyphicon-arrow-up:before { - content: "\e093" -} - -.glyphicon-arrow-down:before { - content: "\e094" -} - -.glyphicon-share-alt:before { - content: "\e095" -} - -.glyphicon-resize-full:before { - content: "\e096" -} - -.glyphicon-resize-small:before { - content: "\e097" -} - -.glyphicon-exclamation-sign:before { - content: "\e101" -} - -.glyphicon-gift:before { - content: "\e102" -} - -.glyphicon-leaf:before { - content: "\e103" -} - -.glyphicon-fire:before { - content: "\e104" -} - -.glyphicon-eye-open:before { - content: "\e105" -} - -.glyphicon-eye-close:before { - content: "\e106" -} - -.glyphicon-warning-sign:before { - content: "\e107" -} - -.glyphicon-plane:before { - content: "\e108" -} - -.glyphicon-calendar:before { - content: "\e109" -} - -.glyphicon-random:before { - content: "\e110" -} - -.glyphicon-comment:before { - content: "\e111" -} - -.glyphicon-magnet:before { - content: "\e112" -} - -.glyphicon-chevron-up:before { - content: "\e113" -} - -.glyphicon-chevron-down:before { - content: "\e114" -} - -.glyphicon-retweet:before { - content: "\e115" -} - -.glyphicon-shopping-cart:before { - content: "\e116" -} - -.glyphicon-folder-close:before { - content: "\e117" -} - -.glyphicon-folder-open:before { - content: "\e118" -} - -.glyphicon-resize-vertical:before { - content: "\e119" -} - -.glyphicon-resize-horizontal:before { - content: "\e120" -} - -.glyphicon-hdd:before { - content: "\e121" -} - -.glyphicon-bullhorn:before { - content: "\e122" -} - -.glyphicon-bell:before { - content: "\e123" -} - -.glyphicon-certificate:before { - content: "\e124" -} - -.glyphicon-thumbs-up:before { - content: "\e125" -} - -.glyphicon-thumbs-down:before { - content: "\e126" -} - -.glyphicon-hand-right:before { - content: "\e127" -} - -.glyphicon-hand-left:before { - content: "\e128" -} - -.glyphicon-hand-up:before { - content: "\e129" -} - -.glyphicon-hand-down:before { - content: "\e130" -} - -.glyphicon-circle-arrow-right:before { - content: "\e131" -} - -.glyphicon-circle-arrow-left:before { - content: "\e132" -} - -.glyphicon-circle-arrow-up:before { - content: "\e133" -} - -.glyphicon-circle-arrow-down:before { - content: "\e134" -} - -.glyphicon-globe:before { - content: "\e135" -} - -.glyphicon-wrench:before { - content: "\e136" -} - -.glyphicon-tasks:before { - content: "\e137" -} - -.glyphicon-filter:before { - content: "\e138" -} - -.glyphicon-briefcase:before { - content: "\e139" -} - -.glyphicon-fullscreen:before { - content: "\e140" -} - -.glyphicon-dashboard:before { - content: "\e141" -} - -.glyphicon-paperclip:before { - content: "\e142" -} - -.glyphicon-heart-empty:before { - content: "\e143" -} - -.glyphicon-link:before { - content: "\e144" -} - -.glyphicon-phone:before { - content: "\e145" -} - -.glyphicon-pushpin:before { - content: "\e146" -} - -.glyphicon-usd:before { - content: "\e148" -} - -.glyphicon-gbp:before { - content: "\e149" -} - -.glyphicon-sort:before { - content: "\e150" -} - -.glyphicon-sort-by-alphabet:before { - content: "\e151" -} - -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152" -} - -.glyphicon-sort-by-order:before { - content: "\e153" -} - -.glyphicon-sort-by-order-alt:before { - content: "\e154" -} - -.glyphicon-sort-by-attributes:before { - content: "\e155" -} - -.glyphicon-sort-by-attributes-alt:before { - content: "\e156" -} - -.glyphicon-unchecked:before { - content: "\e157" -} - -.glyphicon-expand:before { - content: "\e158" -} - -.glyphicon-collapse-down:before { - content: "\e159" -} - -.glyphicon-collapse-up:before { - content: "\e160" -} - -.glyphicon-log-in:before { - content: "\e161" -} - -.glyphicon-flash:before { - content: "\e162" -} - -.glyphicon-log-out:before { - content: "\e163" -} - -.glyphicon-new-window:before { - content: "\e164" -} - -.glyphicon-record:before { - content: "\e165" -} - -.glyphicon-save:before { - content: "\e166" -} - -.glyphicon-open:before { - content: "\e167" -} - -.glyphicon-saved:before { - content: "\e168" -} - -.glyphicon-import:before { - content: "\e169" -} - -.glyphicon-export:before { - content: "\e170" -} - -.glyphicon-send:before { - content: "\e171" -} - -.glyphicon-floppy-disk:before { - content: "\e172" -} - -.glyphicon-floppy-saved:before { - content: "\e173" -} - -.glyphicon-floppy-remove:before { - content: "\e174" -} - -.glyphicon-floppy-save:before { - content: "\e175" -} - -.glyphicon-floppy-open:before { - content: "\e176" -} - -.glyphicon-credit-card:before { - content: "\e177" -} - -.glyphicon-transfer:before { - content: "\e178" -} - -.glyphicon-cutlery:before { - content: "\e179" -} - -.glyphicon-header:before { - content: "\e180" -} - -.glyphicon-compressed:before { - content: "\e181" -} - -.glyphicon-earphone:before { - content: "\e182" -} - -.glyphicon-phone-alt:before { - content: "\e183" -} - -.glyphicon-tower:before { - content: "\e184" -} - -.glyphicon-stats:before { - content: "\e185" -} - -.glyphicon-sd-video:before { - content: "\e186" -} - -.glyphicon-hd-video:before { - content: "\e187" -} - -.glyphicon-subtitles:before { - content: "\e188" -} - -.glyphicon-sound-stereo:before { - content: "\e189" -} - -.glyphicon-sound-dolby:before { - content: "\e190" -} - -.glyphicon-sound-5-1:before { - content: "\e191" -} - -.glyphicon-sound-6-1:before { - content: "\e192" -} - -.glyphicon-sound-7-1:before { - content: "\e193" -} - -.glyphicon-copyright-mark:before { - content: "\e194" -} - -.glyphicon-registration-mark:before { - content: "\e195" -} - -.glyphicon-cloud-download:before { - content: "\e197" -} - -.glyphicon-cloud-upload:before { - content: "\e198" -} - -.glyphicon-tree-conifer:before { - content: "\e199" -} - -.glyphicon-tree-deciduous:before { - content: "\e200" -} - -.glyphicon-cd:before { - content: "\e201" -} - -.glyphicon-save-file:before { - content: "\e202" -} - -.glyphicon-open-file:before { - content: "\e203" -} - -.glyphicon-level-up:before { - content: "\e204" -} - -.glyphicon-copy:before { - content: "\e205" -} - -.glyphicon-paste:before { - content: "\e206" -} - -.glyphicon-alert:before { - content: "\e209" -} - -.glyphicon-equalizer:before { - content: "\e210" -} - -.glyphicon-king:before { - content: "\e211" -} - -.glyphicon-queen:before { - content: "\e212" -} - -.glyphicon-pawn:before { - content: "\e213" -} - -.glyphicon-bishop:before { - content: "\e214" -} - -.glyphicon-knight:before { - content: "\e215" -} - -.glyphicon-baby-formula:before { - content: "\e216" -} - -.glyphicon-tent:before { - content: "\26fa" -} - -.glyphicon-blackboard:before { - content: "\e218" -} - -.glyphicon-bed:before { - content: "\e219" -} - -.glyphicon-apple:before { - content: "\f8ff" -} - -.glyphicon-erase:before { - content: "\e221" -} - -.glyphicon-hourglass:before { - content: "\231b" -} - -.glyphicon-lamp:before { - content: "\e223" -} - -.glyphicon-duplicate:before { - content: "\e224" -} - -.glyphicon-piggy-bank:before { - content: "\e225" -} - -.glyphicon-scissors:before { - content: "\e226" -} - -.glyphicon-bitcoin:before { - content: "\e227" -} - -.glyphicon-yen:before { - content: "\00a5" -} - -.glyphicon-ruble:before { - content: "\20bd" -} - -.glyphicon-scale:before { - content: "\e230" -} - -.glyphicon-ice-lolly:before { - content: "\e231" -} - -.glyphicon-ice-lolly-tasted:before { - content: "\e232" -} - -.glyphicon-education:before { - content: "\e233" -} - -.glyphicon-option-horizontal:before { - content: "\e234" -} - -.glyphicon-option-vertical:before { - content: "\e235" -} - -.glyphicon-menu-hamburger:before { - content: "\e236" -} - -.glyphicon-modal-window:before { - content: "\e237" -} - -.glyphicon-oil:before { - content: "\e238" -} - -.glyphicon-grain:before { - content: "\e239" -} - -.glyphicon-sunglasses:before { - content: "\e240" -} - -.glyphicon-text-size:before { - content: "\e241" -} - -.glyphicon-text-color:before { - content: "\e242" -} - -.glyphicon-text-background:before { - content: "\e243" -} - -.glyphicon-object-align-top:before { - content: "\e244" -} - -.glyphicon-object-align-bottom:before { - content: "\e245" -} - -.glyphicon-object-align-horizontal:before { - content: "\e246" -} - -.glyphicon-object-align-left:before { - content: "\e247" -} - -.glyphicon-object-align-vertical:before { - content: "\e248" -} - -.glyphicon-object-align-right:before { - content: "\e249" -} - -.glyphicon-triangle-right:before { - content: "\e250" -} - -.glyphicon-triangle-left:before { - content: "\e251" -} - -.glyphicon-triangle-bottom:before { - content: "\e252" -} - -.glyphicon-triangle-top:before { - content: "\e253" -} - -.glyphicon-console:before { - content: "\e254" -} - -.glyphicon-superscript:before { - content: "\e255" -} - -.glyphicon-subscript:before { - content: "\e256" -} - -.glyphicon-menu-left:before { - content: "\e257" -} - -.glyphicon-menu-right:before { - content: "\e258" -} - -.glyphicon-menu-down:before { - content: "\e259" -} - -.glyphicon-menu-up:before { - content: "\e260" -} - -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box -} - -:after, -:before { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box -} - -html { - font-size: 10px; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0) -} - -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.42857143; - color: #333; - background-color: #fff -} - -button, -input, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit -} - -a { - color: #337ab7; - text-decoration: none -} - -a:focus, -a:hover { - color: #23527c; - text-decoration: underline -} - -a:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px -} - -figure { - margin: 0 -} - -img { - vertical-align: middle -} - -.carousel-inner>.item>a>img, -.carousel-inner>.item>img, -.img-responsive, -.thumbnail a>img, -.thumbnail>img { - display: block; - max-width: 100%; - height: auto -} - -.img-rounded { - border-radius: 6px -} - -.img-thumbnail { - display: inline-block; - max-width: 100%; - height: auto; - padding: 4px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: all .2s ease-in-out; - -o-transition: all .2s ease-in-out; - transition: all .2s ease-in-out -} - -.img-circle { - border-radius: 50% -} - -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eee -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0 -} - -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto -} - -.h1, -.h2, -.h3, -.h4, -.h5, -.h6, -h1, -h2, -h3, -h4, -h5, -h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit -} - -.h1 .small, -.h1 small, -.h2 .small, -.h2 small, -.h3 .small, -.h3 small, -.h4 .small, -.h4 small, -.h5 .small, -.h5 small, -.h6 .small, -.h6 small, -h1 .small, -h1 small, -h2 .small, -h2 small, -h3 .small, -h3 small, -h4 .small, -h4 small, -h5 .small, -h5 small, -h6 .small, -h6 small { - font-weight: 400; - line-height: 1; - color: #777 -} - -.h1, -.h2, -.h3, -h1, -h2, -h3 { - margin-top: 20px; - margin-bottom: 10px -} - -.h1 .small, -.h1 small, -.h2 .small, -.h2 small, -.h3 .small, -.h3 small, -h1 .small, -h1 small, -h2 .small, -h2 small, -h3 .small, -h3 small { - font-size: 65% -} - -.h4, -.h5, -.h6, -h4, -h5, -h6 { - margin-top: 10px; - margin-bottom: 10px -} - -.h4 .small, -.h4 small, -.h5 .small, -.h5 small, -.h6 .small, -.h6 small, -h4 .small, -h4 small, -h5 .small, -h5 small, -h6 .small, -h6 small { - font-size: 75% -} - -.h1, -h1 { - font-size: 36px -} - -.h2, -h2 { - font-size: 30px -} - -.h3, -h3 { - font-size: 24px -} - -.h4, -h4 { - font-size: 18px -} - -.h5, -h5 { - font-size: 14px -} - -.h6, -h6 { - font-size: 12px -} - -p { - margin: 0 0 10px -} - -.lead { - margin-bottom: 20px; - font-size: 16px; - font-weight: 300; - line-height: 1.4 -} - -@media (min-width:768px) { - .lead { - font-size: 21px - } -} - -.small, -small { - font-size: 85% -} - -.mark, -mark { - padding: .2em; - background-color: #fcf8e3 -} - -.text-left { - text-align: left -} - -.text-right { - text-align: right -} - -.text-center { - text-align: center -} - -.text-justify { - text-align: justify -} - -.text-nowrap { - white-space: nowrap -} - -.text-lowercase { - text-transform: lowercase -} - -.text-uppercase { - text-transform: uppercase -} - -.text-capitalize { - text-transform: capitalize -} - -.text-muted { - color: #777 -} - -.text-primary { - color: #337ab7 -} - -a.text-primary:hover { - color: #286090 -} - -.text-success { - color: #3c763d -} - -a.text-success:hover { - color: #2b542c -} - -.text-info { - color: #31708f -} - -a.text-info:hover { - color: #245269 -} - -.text-warning { - color: #8a6d3b -} - -a.text-warning:hover { - color: #66512c -} - -.text-danger { - color: #a94442 -} - -a.text-danger:hover { - color: #843534 -} - -.bg-primary { - color: #fff; - background-color: #337ab7 -} - -a.bg-primary:hover { - background-color: #286090 -} - -.bg-success { - background-color: #dff0d8 -} - -a.bg-success:hover { - background-color: #c1e2b3 -} - -.bg-info { - background-color: #d9edf7 -} - -a.bg-info:hover { - background-color: #afd9ee -} - -.bg-warning { - background-color: #fcf8e3 -} - -a.bg-warning:hover { - background-color: #f7ecb5 -} - -.bg-danger { - background-color: #f2dede -} - -a.bg-danger:hover { - background-color: #e4b9b9 -} - -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eee -} - -ol, -ul { - margin-top: 0; - margin-bottom: 10px -} - -ol ol, -ol ul, -ul ol, -ul ul { - margin-bottom: 0 -} - -.list-unstyled { - padding-left: 0; - list-style: none -} - -.list-inline { - padding-left: 0; - margin-left: -5px; - list-style: none -} - -.list-inline>li { - display: inline-block; - padding-right: 5px; - padding-left: 5px -} - -dl { - margin-top: 0; - margin-bottom: 20px -} - -dd, -dt { - line-height: 1.42857143 -} - -dt { - font-weight: 700 -} - -dd { - margin-left: 0 -} - -@media (min-width:768px) { - .dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap - } - .dl-horizontal dd { - margin-left: 180px - } -} - -abbr[data-original-title], -abbr[title] { - cursor: help; - border-bottom: 1px dotted #777 -} - -.initialism { - font-size: 90%; - text-transform: uppercase -} - -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - font-size: 17.5px; - border-left: 5px solid #eee -} - -blockquote ol:last-child, -blockquote p:last-child, -blockquote ul:last-child { - margin-bottom: 0 -} - -blockquote .small, -blockquote footer, -blockquote small { - display: block; - font-size: 80%; - line-height: 1.42857143; - color: #777 -} - -blockquote .small:before, -blockquote footer:before, -blockquote small:before { - content: '\2014 \00A0' -} - -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - text-align: right; - border-right: 5px solid #eee; - border-left: 0 -} - -.blockquote-reverse .small:before, -.blockquote-reverse footer:before, -.blockquote-reverse small:before, -blockquote.pull-right .small:before, -blockquote.pull-right footer:before, -blockquote.pull-right small:before { - content: '' -} - -.blockquote-reverse .small:after, -.blockquote-reverse footer:after, -.blockquote-reverse small:after, -blockquote.pull-right .small:after, -blockquote.pull-right footer:after, -blockquote.pull-right small:after { - content: '\00A0 \2014' -} - -address { - margin-bottom: 20px; - font-style: normal; - line-height: 1.42857143 -} - -code, -kbd, -pre, -samp, -ouput_html{ - font-family: Menlo, Monaco, Consolas, "Courier New", monospace -} - -code, -ouput_html{ - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - background-color: #f9f2f4; - border-radius: 4px -} - -kbd { - padding: 2px 4px; - font-size: 90%; - color: #fff; - background-color: #333; - border-radius: 3px; -} - -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: 700; -} - -pre, -output_html{ - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.42857143; - color: #333; - word-break: break-all; - word-wrap: break-word; - background-color: #f5f5f5; - border: 1px solid #ccc; - border-radius: 4px -} - - -pre, -code, -output_html{ - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0 -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll -} - -.container { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto -} - -@media (min-width:768px) { - .container { - width: 750px - } -} - -@media (min-width:992px) { - .container { - width: 970px - } -} - -@media (min-width:1200px) { - .container { - width: 1170px - } -} - -.container-fluid { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto -} - -.row { - margin-right: -15px; - margin-left: -15px -} - -.col-lg-1, -.col-lg-10, -.col-lg-11, -.col-lg-12, -.col-lg-2, -.col-lg-3, -.col-lg-4, -.col-lg-5, -.col-lg-6, -.col-lg-7, -.col-lg-8, -.col-lg-9, -.col-md-1, -.col-md-10, -.col-md-11, -.col-md-12, -.col-md-2, -.col-md-3, -.col-md-4, -.col-md-5, -.col-md-6, -.col-md-7, -.col-md-8, -.col-md-9, -.col-sm-1, -.col-sm-10, -.col-sm-11, -.col-sm-12, -.col-sm-2, -.col-sm-3, -.col-sm-4, -.col-sm-5, -.col-sm-6, -.col-sm-7, -.col-sm-8, -.col-sm-9, -.col-xs-1, -.col-xs-10, -.col-xs-11, -.col-xs-12, -.col-xs-2, -.col-xs-3, -.col-xs-4, -.col-xs-5, -.col-xs-6, -.col-xs-7, -.col-xs-8, -.col-xs-9 { - position: relative; - min-height: 1px; - padding-right: 15px; - padding-left: 15px -} - -.col-xs-1, -.col-xs-10, -.col-xs-11, -.col-xs-12, -.col-xs-2, -.col-xs-3, -.col-xs-4, -.col-xs-5, -.col-xs-6, -.col-xs-7, -.col-xs-8, -.col-xs-9 { - float: left -} - -.col-xs-12 { - width: 100% -} - -.col-xs-11 { - width: 91.66666667% -} - -.col-xs-10 { - width: 83.33333333% -} - -.col-xs-9 { - width: 75% -} - -.col-xs-8 { - width: 66.66666667% -} - -.col-xs-7 { - width: 58.33333333% -} - -.col-xs-6 { - width: 50% -} - -.col-xs-5 { - width: 41.66666667% -} - -.col-xs-4 { - width: 33.33333333% -} - -.col-xs-3 { - width: 25% -} - -.col-xs-2 { - width: 16.66666667% -} - -.col-xs-1 { - width: 8.33333333% -} - -.col-xs-pull-12 { - right: 100% -} - -.col-xs-pull-11 { - right: 91.66666667% -} - -.col-xs-pull-10 { - right: 83.33333333% -} - -.col-xs-pull-9 { - right: 75% -} - -.col-xs-pull-8 { - right: 66.66666667% -} - -.col-xs-pull-7 { - right: 58.33333333% -} - -.col-xs-pull-6 { - right: 50% -} - -.col-xs-pull-5 { - right: 41.66666667% -} - -.col-xs-pull-4 { - right: 33.33333333% -} - -.col-xs-pull-3 { - right: 25% -} - -.col-xs-pull-2 { - right: 16.66666667% -} - -.col-xs-pull-1 { - right: 8.33333333% -} - -.col-xs-pull-0 { - right: auto -} - -.col-xs-push-12 { - left: 100% -} - -.col-xs-push-11 { - left: 91.66666667% -} - -.col-xs-push-10 { - left: 83.33333333% -} - -.col-xs-push-9 { - left: 75% -} - -.col-xs-push-8 { - left: 66.66666667% -} - -.col-xs-push-7 { - left: 58.33333333% -} - -.col-xs-push-6 { - left: 50% -} - -.col-xs-push-5 { - left: 41.66666667% -} - -.col-xs-push-4 { - left: 33.33333333% -} - -.col-xs-push-3 { - left: 25% -} - -.col-xs-push-2 { - left: 16.66666667% -} - -.col-xs-push-1 { - left: 8.33333333% -} - -.col-xs-push-0 { - left: auto -} - -.col-xs-offset-12 { - margin-left: 100% -} - -.col-xs-offset-11 { - margin-left: 91.66666667% -} - -.col-xs-offset-10 { - margin-left: 83.33333333% -} - -.col-xs-offset-9 { - margin-left: 75% -} - -.col-xs-offset-8 { - margin-left: 66.66666667% -} - -.col-xs-offset-7 { - margin-left: 58.33333333% -} - -.col-xs-offset-6 { - margin-left: 50% -} - -.col-xs-offset-5 { - margin-left: 41.66666667% -} - -.col-xs-offset-4 { - margin-left: 33.33333333% -} - -.col-xs-offset-3 { - margin-left: 25% -} - -.col-xs-offset-2 { - margin-left: 16.66666667% -} - -.col-xs-offset-1 { - margin-left: 8.33333333% -} - -.col-xs-offset-0 { - margin-left: 0 -} - -@media (min-width:768px) { - .col-sm-1, - .col-sm-10, - .col-sm-11, - .col-sm-12, - .col-sm-2, - .col-sm-3, - .col-sm-4, - .col-sm-5, - .col-sm-6, - .col-sm-7, - .col-sm-8, - .col-sm-9 { - float: left - } - .col-sm-12 { - width: 100% - } - .col-sm-11 { - width: 91.66666667% - } - .col-sm-10 { - width: 83.33333333% - } - .col-sm-9 { - width: 75% - } - .col-sm-8 { - width: 66.66666667% - } - .col-sm-7 { - width: 58.33333333% - } - .col-sm-6 { - width: 50% - } - .col-sm-5 { - width: 41.66666667% - } - .col-sm-4 { - width: 33.33333333% - } - .col-sm-3 { - width: 25% - } - .col-sm-2 { - width: 16.66666667% - } - .col-sm-1 { - width: 8.33333333% - } - .col-sm-pull-12 { - right: 100% - } - .col-sm-pull-11 { - right: 91.66666667% - } - .col-sm-pull-10 { - right: 83.33333333% - } - .col-sm-pull-9 { - right: 75% - } - .col-sm-pull-8 { - right: 66.66666667% - } - .col-sm-pull-7 { - right: 58.33333333% - } - .col-sm-pull-6 { - right: 50% - } - .col-sm-pull-5 { - right: 41.66666667% - } - .col-sm-pull-4 { - right: 33.33333333% - } - .col-sm-pull-3 { - right: 25% - } - .col-sm-pull-2 { - right: 16.66666667% - } - .col-sm-pull-1 { - right: 8.33333333% - } - .col-sm-pull-0 { - right: auto - } - .col-sm-push-12 { - left: 100% - } - .col-sm-push-11 { - left: 91.66666667% - } - .col-sm-push-10 { - left: 83.33333333% - } - .col-sm-push-9 { - left: 75% - } - .col-sm-push-8 { - left: 66.66666667% - } - .col-sm-push-7 { - left: 58.33333333% - } - .col-sm-push-6 { - left: 50% - } - .col-sm-push-5 { - left: 41.66666667% - } - .col-sm-push-4 { - left: 33.33333333% - } - .col-sm-push-3 { - left: 25% - } - .col-sm-push-2 { - left: 16.66666667% - } - .col-sm-push-1 { - left: 8.33333333% - } - .col-sm-push-0 { - left: auto - } - .col-sm-offset-12 { - margin-left: 100% - } - .col-sm-offset-11 { - margin-left: 91.66666667% - } - .col-sm-offset-10 { - margin-left: 83.33333333% - } - .col-sm-offset-9 { - margin-left: 75% - } - .col-sm-offset-8 { - margin-left: 66.66666667% - } - .col-sm-offset-7 { - margin-left: 58.33333333% - } - .col-sm-offset-6 { - margin-left: 50% - } - .col-sm-offset-5 { - margin-left: 41.66666667% - } - .col-sm-offset-4 { - margin-left: 33.33333333% - } - .col-sm-offset-3 { - margin-left: 25% - } - .col-sm-offset-2 { - margin-left: 16.66666667% - } - .col-sm-offset-1 { - margin-left: 8.33333333% - } - .col-sm-offset-0 { - margin-left: 0 - } -} - -@media (min-width:992px) { - .col-md-1, - .col-md-10, - .col-md-11, - .col-md-12, - .col-md-2, - .col-md-3, - .col-md-4, - .col-md-5, - .col-md-6, - .col-md-7, - .col-md-8, - .col-md-9 { - float: left - } - .col-md-12 { - width: 100% - } - .col-md-11 { - width: 91.66666667% - } - .col-md-10 { - width: 83.33333333% - } - .col-md-9 { - width: 75% - } - .col-md-8 { - width: 66.66666667% - } - .col-md-7 { - width: 58.33333333% - } - .col-md-6 { - width: 50% - } - .col-md-5 { - width: 41.66666667% - } - .col-md-4 { - width: 33.33333333% - } - .col-md-3 { - width: 25% - } - .col-md-2 { - width: 16.66666667% - } - .col-md-1 { - width: 8.33333333% - } - .col-md-pull-12 { - right: 100% - } - .col-md-pull-11 { - right: 91.66666667% - } - .col-md-pull-10 { - right: 83.33333333% - } - .col-md-pull-9 { - right: 75% - } - .col-md-pull-8 { - right: 66.66666667% - } - .col-md-pull-7 { - right: 58.33333333% - } - .col-md-pull-6 { - right: 50% - } - .col-md-pull-5 { - right: 41.66666667% - } - .col-md-pull-4 { - right: 33.33333333% - } - .col-md-pull-3 { - right: 25% - } - .col-md-pull-2 { - right: 16.66666667% - } - .col-md-pull-1 { - right: 8.33333333% - } - .col-md-pull-0 { - right: auto - } - .col-md-push-12 { - left: 100% - } - .col-md-push-11 { - left: 91.66666667% - } - .col-md-push-10 { - left: 83.33333333% - } - .col-md-push-9 { - left: 75% - } - .col-md-push-8 { - left: 66.66666667% - } - .col-md-push-7 { - left: 58.33333333% - } - .col-md-push-6 { - left: 50% - } - .col-md-push-5 { - left: 41.66666667% - } - .col-md-push-4 { - left: 33.33333333% - } - .col-md-push-3 { - left: 25% - } - .col-md-push-2 { - left: 16.66666667% - } - .col-md-push-1 { - left: 8.33333333% - } - .col-md-push-0 { - left: auto - } - .col-md-offset-12 { - margin-left: 100% - } - .col-md-offset-11 { - margin-left: 91.66666667% - } - .col-md-offset-10 { - margin-left: 83.33333333% - } - .col-md-offset-9 { - margin-left: 75% - } - .col-md-offset-8 { - margin-left: 66.66666667% - } - .col-md-offset-7 { - margin-left: 58.33333333% - } - .col-md-offset-6 { - margin-left: 50% - } - .col-md-offset-5 { - margin-left: 41.66666667% - } - .col-md-offset-4 { - margin-left: 33.33333333% - } - .col-md-offset-3 { - margin-left: 25% - } - .col-md-offset-2 { - margin-left: 16.66666667% - } - .col-md-offset-1 { - margin-left: 8.33333333% - } - .col-md-offset-0 { - margin-left: 0 - } -} - -@media (min-width:1200px) { - .col-lg-1, - .col-lg-10, - .col-lg-11, - .col-lg-12, - .col-lg-2, - .col-lg-3, - .col-lg-4, - .col-lg-5, - .col-lg-6, - .col-lg-7, - .col-lg-8, - .col-lg-9 { - float: left - } - .col-lg-12 { - width: 100% - } - .col-lg-11 { - width: 91.66666667% - } - .col-lg-10 { - width: 83.33333333% - } - .col-lg-9 { - width: 75% - } - .col-lg-8 { - width: 66.66666667% - } - .col-lg-7 { - width: 58.33333333% - } - .col-lg-6 { - width: 50% - } - .col-lg-5 { - width: 41.66666667% - } - .col-lg-4 { - width: 33.33333333% - } - .col-lg-3 { - width: 25% - } - .col-lg-2 { - width: 16.66666667% - } - .col-lg-1 { - width: 8.33333333% - } - .col-lg-pull-12 { - right: 100% - } - .col-lg-pull-11 { - right: 91.66666667% - } - .col-lg-pull-10 { - right: 83.33333333% - } - .col-lg-pull-9 { - right: 75% - } - .col-lg-pull-8 { - right: 66.66666667% - } - .col-lg-pull-7 { - right: 58.33333333% - } - .col-lg-pull-6 { - right: 50% - } - .col-lg-pull-5 { - right: 41.66666667% - } - .col-lg-pull-4 { - right: 33.33333333% - } - .col-lg-pull-3 { - right: 25% - } - .col-lg-pull-2 { - right: 16.66666667% - } - .col-lg-pull-1 { - right: 8.33333333% - } - .col-lg-pull-0 { - right: auto - } - .col-lg-push-12 { - left: 100% - } - .col-lg-push-11 { - left: 91.66666667% - } - .col-lg-push-10 { - left: 83.33333333% - } - .col-lg-push-9 { - left: 75% - } - .col-lg-push-8 { - left: 66.66666667% - } - .col-lg-push-7 { - left: 58.33333333% - } - .col-lg-push-6 { - left: 50% - } - .col-lg-push-5 { - left: 41.66666667% - } - .col-lg-push-4 { - left: 33.33333333% - } - .col-lg-push-3 { - left: 25% - } - .col-lg-push-2 { - left: 16.66666667% - } - .col-lg-push-1 { - left: 8.33333333% - } - .col-lg-push-0 { - left: auto - } - .col-lg-offset-12 { - margin-left: 100% - } - .col-lg-offset-11 { - margin-left: 91.66666667% - } - .col-lg-offset-10 { - margin-left: 83.33333333% - } - .col-lg-offset-9 { - margin-left: 75% - } - .col-lg-offset-8 { - margin-left: 66.66666667% - } - .col-lg-offset-7 { - margin-left: 58.33333333% - } - .col-lg-offset-6 { - margin-left: 50% - } - .col-lg-offset-5 { - margin-left: 41.66666667% - } - .col-lg-offset-4 { - margin-left: 33.33333333% - } - .col-lg-offset-3 { - margin-left: 25% - } - .col-lg-offset-2 { - margin-left: 16.66666667% - } - .col-lg-offset-1 { - margin-left: 8.33333333% - } - .col-lg-offset-0 { - margin-left: 0 - } -} - -table { - background-color: transparent -} - -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #777; - text-align: left -} - -th { - text-align: left -} - -.table { - width: 100%; - max-width: 100%; - margin-bottom: 20px -} - -.table>tbody>tr>td, -.table>tbody>tr>th, -.table>tfoot>tr>td, -.table>tfoot>tr>th, -.table>thead>tr>td, -.table>thead>tr>th { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #ddd -} - -.table>thead>tr>th { - vertical-align: bottom; - border-bottom: 2px solid #ddd -} - -.table>caption+thead>tr:first-child>td, -.table>caption+thead>tr:first-child>th, -.table>colgroup+thead>tr:first-child>td, -.table>colgroup+thead>tr:first-child>th, -.table>thead:first-child>tr:first-child>td, -.table>thead:first-child>tr:first-child>th { - border-top: 0 -} - -.table>tbody+tbody { - border-top: 2px solid #ddd -} - -.table .table { - background-color: #fff -} - -.table-condensed>tbody>tr>td, -.table-condensed>tbody>tr>th, -.table-condensed>tfoot>tr>td, -.table-condensed>tfoot>tr>th, -.table-condensed>thead>tr>td, -.table-condensed>thead>tr>th { - padding: 5px -} - -.table-bordered { - border: 1px solid #ddd -} - -.table-bordered>tbody>tr>td, -.table-bordered>tbody>tr>th, -.table-bordered>tfoot>tr>td, -.table-bordered>tfoot>tr>th, -.table-bordered>thead>tr>td, -.table-bordered>thead>tr>th { - border: 1px solid #ddd -} - -.table-bordered>thead>tr>td, -.table-bordered>thead>tr>th { - border-bottom-width: 2px -} - -.table-striped>tbody>tr:nth-of-type(odd) { - background-color: #f9f9f9 -} - -.table-hover>tbody>tr:hover { - background-color: #f5f5f5 -} - -table col[class*=col-] { - position: static; - display: table-column; - float: none -} - -table td[class*=col-], -table th[class*=col-] { - position: static; - display: table-cell; - float: none -} - -.table>tbody>tr.active>td, -.table>tbody>tr.active>th, -.table>tbody>tr>td.active, -.table>tbody>tr>th.active, -.table>tfoot>tr.active>td, -.table>tfoot>tr.active>th, -.table>tfoot>tr>td.active, -.table>tfoot>tr>th.active, -.table>thead>tr.active>td, -.table>thead>tr.active>th, -.table>thead>tr>td.active, -.table>thead>tr>th.active { - background-color: #f5f5f5 -} - -.table-hover>tbody>tr.active:hover>td, -.table-hover>tbody>tr.active:hover>th, -.table-hover>tbody>tr:hover>.active, -.table-hover>tbody>tr>td.active:hover, -.table-hover>tbody>tr>th.active:hover { - background-color: #e8e8e8 -} - -.table>tbody>tr.success>td, -.table>tbody>tr.success>th, -.table>tbody>tr>td.success, -.table>tbody>tr>th.success, -.table>tfoot>tr.success>td, -.table>tfoot>tr.success>th, -.table>tfoot>tr>td.success, -.table>tfoot>tr>th.success, -.table>thead>tr.success>td, -.table>thead>tr.success>th, -.table>thead>tr>td.success, -.table>thead>tr>th.success { - background-color: #dff0d8 -} - -.table-hover>tbody>tr.success:hover>td, -.table-hover>tbody>tr.success:hover>th, -.table-hover>tbody>tr:hover>.success, -.table-hover>tbody>tr>td.success:hover, -.table-hover>tbody>tr>th.success:hover { - background-color: #d0e9c6 -} - -.table>tbody>tr.info>td, -.table>tbody>tr.info>th, -.table>tbody>tr>td.info, -.table>tbody>tr>th.info, -.table>tfoot>tr.info>td, -.table>tfoot>tr.info>th, -.table>tfoot>tr>td.info, -.table>tfoot>tr>th.info, -.table>thead>tr.info>td, -.table>thead>tr.info>th, -.table>thead>tr>td.info, -.table>thead>tr>th.info { - background-color: #d9edf7 -} - -.table-hover>tbody>tr.info:hover>td, -.table-hover>tbody>tr.info:hover>th, -.table-hover>tbody>tr:hover>.info, -.table-hover>tbody>tr>td.info:hover, -.table-hover>tbody>tr>th.info:hover { - background-color: #c4e3f3 -} - -.table>tbody>tr.warning>td, -.table>tbody>tr.warning>th, -.table>tbody>tr>td.warning, -.table>tbody>tr>th.warning, -.table>tfoot>tr.warning>td, -.table>tfoot>tr.warning>th, -.table>tfoot>tr>td.warning, -.table>tfoot>tr>th.warning, -.table>thead>tr.warning>td, -.table>thead>tr.warning>th, -.table>thead>tr>td.warning, -.table>thead>tr>th.warning { - background-color: #fcf8e3 -} - -.table-hover>tbody>tr.warning:hover>td, -.table-hover>tbody>tr.warning:hover>th, -.table-hover>tbody>tr:hover>.warning, -.table-hover>tbody>tr>td.warning:hover, -.table-hover>tbody>tr>th.warning:hover { - background-color: #faf2cc -} - -.table>tbody>tr.danger>td, -.table>tbody>tr.danger>th, -.table>tbody>tr>td.danger, -.table>tbody>tr>th.danger, -.table>tfoot>tr.danger>td, -.table>tfoot>tr.danger>th, -.table>tfoot>tr>td.danger, -.table>tfoot>tr>th.danger, -.table>thead>tr.danger>td, -.table>thead>tr.danger>th, -.table>thead>tr>td.danger, -.table>thead>tr>th.danger { - background-color: #f2dede -} - -.table-hover>tbody>tr.danger:hover>td, -.table-hover>tbody>tr.danger:hover>th, -.table-hover>tbody>tr:hover>.danger, -.table-hover>tbody>tr>td.danger:hover, -.table-hover>tbody>tr>th.danger:hover { - background-color: #ebcccc -} - -.table-responsive { - min-height: .01%; - overflow-x: auto -} - -@media screen and (max-width:767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #ddd - } - .table-responsive>.table { - margin-bottom: 0 - } - .table-responsive>.table>tbody>tr>td, - .table-responsive>.table>tbody>tr>th, - .table-responsive>.table>tfoot>tr>td, - .table-responsive>.table>tfoot>tr>th, - .table-responsive>.table>thead>tr>td, - .table-responsive>.table>thead>tr>th { - white-space: nowrap - } - .table-responsive>.table-bordered { - border: 0 - } - .table-responsive>.table-bordered>tbody>tr>td:first-child, - .table-responsive>.table-bordered>tbody>tr>th:first-child, - .table-responsive>.table-bordered>tfoot>tr>td:first-child, - .table-responsive>.table-bordered>tfoot>tr>th:first-child, - .table-responsive>.table-bordered>thead>tr>td:first-child, - .table-responsive>.table-bordered>thead>tr>th:first-child { - border-left: 0 - } - .table-responsive>.table-bordered>tbody>tr>td:last-child, - .table-responsive>.table-bordered>tbody>tr>th:last-child, - .table-responsive>.table-bordered>tfoot>tr>td:last-child, - .table-responsive>.table-bordered>tfoot>tr>th:last-child, - .table-responsive>.table-bordered>thead>tr>td:last-child, - .table-responsive>.table-bordered>thead>tr>th:last-child { - border-right: 0 - } - .table-responsive>.table-bordered>tbody>tr:last-child>td, - .table-responsive>.table-bordered>tbody>tr:last-child>th, - .table-responsive>.table-bordered>tfoot>tr:last-child>td, - .table-responsive>.table-bordered>tfoot>tr:last-child>th { - border-bottom: 0 - } -} - -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0 -} - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333; - border: 0; - border-bottom: 1px solid #e5e5e5 -} - -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: 700 -} - -input[type=search] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box -} - -input[type=checkbox], -input[type=radio] { - margin: 4px 0 0; - margin-top: 1px \9; - line-height: normal -} - -input[type=file] { - display: block -} - -input[type=range] { - display: block; - width: 100% -} - -select[multiple], -select[size] { - height: auto -} - -input[type=file]:focus, -input[type=checkbox]:focus, -input[type=radio]:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px -} - -output { - display: block; - padding-top: 7px; - font-size: 14px; - line-height: 1.42857143; - color: #555 -} - -.form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; -} - -.form-control:focus { - border-color: #66afe9; - outline: 0; -} - -.form-control::-moz-placeholder { - color: #999; - opacity: 1 -} - -.form-control:-ms-input-placeholder { - color: #999 -} - -.form-control::-webkit-input-placeholder { - color: #999 -} - -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - cursor: not-allowed; - background-color: #eee; - opacity: 1 -} - -textarea.form-control { - height: auto -} - -input[type=search] { - -webkit-appearance: none -} - -@media screen and (-webkit-min-device-pixel-ratio:0) { - input[type=date], - input[type=time], - input[type=datetime-local], - input[type=month] { - line-height: 34px - } - .input-group-sm input[type=date], - .input-group-sm input[type=time], - .input-group-sm input[type=datetime-local], - .input-group-sm input[type=month], - input[type=date].input-sm, - input[type=time].input-sm, - input[type=datetime-local].input-sm, - input[type=month].input-sm { - line-height: 30px - } - .input-group-lg input[type=date], - .input-group-lg input[type=time], - .input-group-lg input[type=datetime-local], - .input-group-lg input[type=month], - input[type=date].input-lg, - input[type=time].input-lg, - input[type=datetime-local].input-lg, - input[type=month].input-lg { - line-height: 46px - } -} - -.form-group { - margin-bottom: 15px -} - -.checkbox, -.radio { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px -} - -.checkbox label, -.radio label { - min-height: 20px; - padding-left: 20px; - margin-bottom: 0; - font-weight: 400; - cursor: pointer -} - -.checkbox input[type=checkbox], -.checkbox-inline input[type=checkbox], -.radio input[type=radio], -.radio-inline input[type=radio] { - position: absolute; - margin-top: 4px \9; - margin-left: -20px -} - -.checkbox+.checkbox, -.radio+.radio { - margin-top: -5px -} - -.checkbox-inline, -.radio-inline { - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - font-weight: 400; - vertical-align: middle; - cursor: pointer -} - -.checkbox-inline+.checkbox-inline, -.radio-inline+.radio-inline { - margin-top: 0; - margin-left: 10px -} - -fieldset[disabled] input[type=checkbox], -fieldset[disabled] input[type=radio], -input[type=checkbox].disabled, -input[type=checkbox][disabled], -input[type=radio].disabled, -input[type=radio][disabled] { - cursor: not-allowed -} - -.checkbox-inline.disabled, -.radio-inline.disabled, -fieldset[disabled] .checkbox-inline, -fieldset[disabled] .radio-inline { - cursor: not-allowed -} - -.checkbox.disabled label, -.radio.disabled label, -fieldset[disabled] .checkbox label, -fieldset[disabled] .radio label { - cursor: not-allowed -} - -.form-control-static { - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0 -} - -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-right: 0; - padding-left: 0 -} - -.input-sm { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px -} - -select.input-sm { - height: 30px; - line-height: 30px -} - -select[multiple].input-sm, -textarea.input-sm { - height: auto -} - -.form-group-sm .form-control { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px -} - -select.form-group-sm .form-control { - height: 30px; - line-height: 30px -} - -select[multiple].form-group-sm .form-control, -textarea.form-group-sm .form-control { - height: auto -} - -.form-group-sm .form-control-static { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5 -} - -.input-lg { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px -} - -select.input-lg { - height: 46px; - line-height: 46px -} - -select[multiple].input-lg, -textarea.input-lg { - height: auto -} - -.form-group-lg .form-control { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px -} - -select.form-group-lg .form-control { - height: 46px; - line-height: 46px -} - -select[multiple].form-group-lg .form-control, -textarea.form-group-lg .form-control { - height: auto -} - -.form-group-lg .form-control-static { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333 -} - -.has-feedback { - position: relative -} - -.has-feedback .form-control { - padding-right: 42.5px -} - -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 34px; - height: 34px; - line-height: 34px; - text-align: center; -} - -.input-lg+.form-control-feedback { - width: 46px; - height: 46px; - line-height: 46px -} - -.input-sm+.form-control-feedback { - width: 30px; - height: 30px; - line-height: 30px -} - -.has-success .checkbox, -.has-success .checkbox-inline, -.has-success .control-label, -.has-success .help-block, -.has-success .radio, -.has-success .radio-inline, -.has-success.checkbox label, -.has-success.checkbox-inline label, -.has-success.radio label, -.has-success.radio-inline label { - color: #3c763d -} - -.has-success .form-control { - border-color: #3c763d; -} - -.has-success .form-control:focus { - border-color: #2b542c; -} - -.has-success .input-group-addon { - color: #3c763d; - background-color: #dff0d8; - border-color: #3c763d -} - -.has-success .form-control-feedback { - color: #3c763d -} - -.has-warning .checkbox, -.has-warning .checkbox-inline, -.has-warning .control-label, -.has-warning .help-block, -.has-warning .radio, -.has-warning .radio-inline, -.has-warning.checkbox label, -.has-warning.checkbox-inline label, -.has-warning.radio label, -.has-warning.radio-inline label { - color: #8a6d3b -} - -.has-warning .form-control { - border-color: #8a6d3b; -} - -.has-warning .form-control:focus { - border-color: #66512c; -} - -.has-warning .input-group-addon { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #8a6d3b -} - -.has-warning .form-control-feedback { - color: #8a6d3b -} - -.has-error .checkbox, -.has-error .checkbox-inline, -.has-error .control-label, -.has-error .help-block, -.has-error .radio, -.has-error .radio-inline, -.has-error.checkbox label, -.has-error.checkbox-inline label, -.has-error.radio label, -.has-error.radio-inline label { - color: #a94442 -} - -.has-error .form-control { - border-color: #a94442; -} - -.has-error .form-control:focus { - border-color: #843534; -} - -.has-error .input-group-addon { - color: #a94442; - background-color: #f2dede; - border-color: #a94442 -} - -.has-error .form-control-feedback { - color: #a94442 -} - -.has-feedback label~.form-control-feedback { - top: 25px -} - -.has-feedback label.sr-only~.form-control-feedback { - top: 0 -} - -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373 -} - -@media (min-width:768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle - } - .form-inline .form-control-static { - display: inline-block - } - .form-inline .input-group { - display: inline-table; - vertical-align: middle - } - .form-inline .input-group .form-control, - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn { - width: auto - } - .form-inline .input-group>.form-control { - width: 100% - } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle - } - .form-inline .checkbox, - .form-inline .radio { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle - } - .form-inline .checkbox label, - .form-inline .radio label { - padding-left: 0 - } - .form-inline .checkbox input[type=checkbox], - .form-inline .radio input[type=radio] { - position: relative; - margin-left: 0 - } - .form-inline .has-feedback .form-control-feedback { - top: 0 - } -} - -.form-horizontal .checkbox, -.form-horizontal .checkbox-inline, -.form-horizontal .radio, -.form-horizontal .radio-inline { - padding-top: 7px; - margin-top: 0; - margin-bottom: 0 -} - -.form-horizontal .checkbox, -.form-horizontal .radio { - min-height: 27px -} - -.form-horizontal .form-group { - margin-right: -15px; - margin-left: -15px -} - -@media (min-width:768px) { - .form-horizontal .control-label { - padding-top: 7px; - margin-bottom: 0; - text-align: right - } -} - -.form-horizontal .has-feedback .form-control-feedback { - right: 15px -} - -@media (min-width:768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 14.33px - } -} - -@media (min-width:768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px - } -} - -.btn { - display: inline-block; - padding: 6px 12px; - margin-bottom: 0; - font-size: 14px; - font-weight: 400; - line-height: 1.42857143; - text-align: center; - white-space: nowrap; - vertical-align: middle; - -ms-touch-action: manipulation; - touch-action: manipulation; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-image: none; - border: 1px solid transparent; - border-radius: 4px -} - -.btn.active.focus, -.btn.active:focus, -.btn.focus, -.btn:active.focus, -.btn:active:focus, -.btn:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px -} - -.btn.focus, -.btn:focus, -.btn:hover { - color: #333; - text-decoration: none -} - -.btn.active, -.btn:active { - background-image: none; - outline: 0; -} - -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - cursor: not-allowed; - filter: alpha(opacity=65); - opacity: .65 -} - -.btn-default { - color: #333; - background-color: #fff; - border-color: #ccc -} - -.btn-default.active, -.btn-default.focus, -.btn-default:active, -.btn-default:focus, -.btn-default:hover, -.open>.dropdown-toggle.btn-default { - color: #333; - background-color: #e6e6e6; - border-color: #adadad -} - -.btn-default.active, -.btn-default:active, -.open>.dropdown-toggle.btn-default { - background-image: none -} - -.btn-default.disabled, -.btn-default.disabled.active, -.btn-default.disabled.focus, -.btn-default.disabled:active, -.btn-default.disabled:focus, -.btn-default.disabled:hover, -.btn-default[disabled], -.btn-default[disabled].active, -.btn-default[disabled].focus, -.btn-default[disabled]:active, -.btn-default[disabled]:focus, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default, -fieldset[disabled] .btn-default.active, -fieldset[disabled] .btn-default.focus, -fieldset[disabled] .btn-default:active, -fieldset[disabled] .btn-default:focus, -fieldset[disabled] .btn-default:hover { - background-color: #fff; - border-color: #ccc -} - -.btn-default .badge { - color: #fff; - background-color: #333 -} - -.btn-primary { - color: #fff; - background-color: #337ab7; - border-color: #2e6da4 -} - -.btn-primary.active, -.btn-primary.focus, -.btn-primary:active, -.btn-primary:focus, -.btn-primary:hover, -.open>.dropdown-toggle.btn-primary { - color: #fff; - background-color: #286090; - border-color: #204d74 -} - -.btn-primary.active, -.btn-primary:active, -.open>.dropdown-toggle.btn-primary { - background-image: none -} - -.btn-primary.disabled, -.btn-primary.disabled.active, -.btn-primary.disabled.focus, -.btn-primary.disabled:active, -.btn-primary.disabled:focus, -.btn-primary.disabled:hover, -.btn-primary[disabled], -.btn-primary[disabled].active, -.btn-primary[disabled].focus, -.btn-primary[disabled]:active, -.btn-primary[disabled]:focus, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary, -fieldset[disabled] .btn-primary.active, -fieldset[disabled] .btn-primary.focus, -fieldset[disabled] .btn-primary:active, -fieldset[disabled] .btn-primary:focus, -fieldset[disabled] .btn-primary:hover { - background-color: #337ab7; - border-color: #2e6da4 -} - -.btn-primary .badge { - color: #337ab7; - background-color: #fff -} - -.btn-success { - color: #fff; - background-color: #5cb85c; - border-color: #4cae4c -} - -.btn-success.active, -.btn-success.focus, -.btn-success:active, -.btn-success:focus, -.btn-success:hover, -.open>.dropdown-toggle.btn-success { - color: #fff; - background-color: #449d44; - border-color: #398439 -} - -.btn-success.active, -.btn-success:active, -.open>.dropdown-toggle.btn-success { - background-image: none -} - -.btn-success.disabled, -.btn-success.disabled.active, -.btn-success.disabled.focus, -.btn-success.disabled:active, -.btn-success.disabled:focus, -.btn-success.disabled:hover, -.btn-success[disabled], -.btn-success[disabled].active, -.btn-success[disabled].focus, -.btn-success[disabled]:active, -.btn-success[disabled]:focus, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success, -fieldset[disabled] .btn-success.active, -fieldset[disabled] .btn-success.focus, -fieldset[disabled] .btn-success:active, -fieldset[disabled] .btn-success:focus, -fieldset[disabled] .btn-success:hover { - background-color: #5cb85c; - border-color: #4cae4c -} - -.btn-success .badge { - color: #5cb85c; - background-color: #fff -} - -.btn-info { - color: #fff; - background-color: #5bc0de; - border-color: #46b8da -} - -.btn-info.active, -.btn-info.focus, -.btn-info:active, -.btn-info:focus, -.btn-info:hover, -.open>.dropdown-toggle.btn-info { - color: #fff; - background-color: #31b0d5; - border-color: #269abc -} - -.btn-info.active, -.btn-info:active, -.open>.dropdown-toggle.btn-info { - background-image: none -} - -.btn-info.disabled, -.btn-info.disabled.active, -.btn-info.disabled.focus, -.btn-info.disabled:active, -.btn-info.disabled:focus, -.btn-info.disabled:hover, -.btn-info[disabled], -.btn-info[disabled].active, -.btn-info[disabled].focus, -.btn-info[disabled]:active, -.btn-info[disabled]:focus, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info, -fieldset[disabled] .btn-info.active, -fieldset[disabled] .btn-info.focus, -fieldset[disabled] .btn-info:active, -fieldset[disabled] .btn-info:focus, -fieldset[disabled] .btn-info:hover { - background-color: #5bc0de; - border-color: #46b8da -} - -.btn-info .badge { - color: #5bc0de; - background-color: #fff -} - -.btn-warning { - color: #fff; - background-color: #f0ad4e; - border-color: #eea236 -} - -.btn-warning.active, -.btn-warning.focus, -.btn-warning:active, -.btn-warning:focus, -.btn-warning:hover, -.open>.dropdown-toggle.btn-warning { - color: #fff; - background-color: #ec971f; - border-color: #d58512 -} - -.btn-warning.active, -.btn-warning:active, -.open>.dropdown-toggle.btn-warning { - background-image: none -} - -.btn-warning.disabled, -.btn-warning.disabled.active, -.btn-warning.disabled.focus, -.btn-warning.disabled:active, -.btn-warning.disabled:focus, -.btn-warning.disabled:hover, -.btn-warning[disabled], -.btn-warning[disabled].active, -.btn-warning[disabled].focus, -.btn-warning[disabled]:active, -.btn-warning[disabled]:focus, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning, -fieldset[disabled] .btn-warning.active, -fieldset[disabled] .btn-warning.focus, -fieldset[disabled] .btn-warning:active, -fieldset[disabled] .btn-warning:focus, -fieldset[disabled] .btn-warning:hover { - background-color: #f0ad4e; - border-color: #eea236 -} - -.btn-warning .badge { - color: #f0ad4e; - background-color: #fff -} - -.btn-danger { - color: #fff; - background-color: #d9534f; - border-color: #d43f3a -} - -.btn-danger.active, -.btn-danger.focus, -.btn-danger:active, -.btn-danger:focus, -.btn-danger:hover, -.open>.dropdown-toggle.btn-danger { - color: #fff; - background-color: #c9302c; - border-color: #ac2925 -} - -.btn-danger.active, -.btn-danger:active, -.open>.dropdown-toggle.btn-danger { - background-image: none -} - -.btn-danger.disabled, -.btn-danger.disabled.active, -.btn-danger.disabled.focus, -.btn-danger.disabled:active, -.btn-danger.disabled:focus, -.btn-danger.disabled:hover, -.btn-danger[disabled], -.btn-danger[disabled].active, -.btn-danger[disabled].focus, -.btn-danger[disabled]:active, -.btn-danger[disabled]:focus, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger, -fieldset[disabled] .btn-danger.active, -fieldset[disabled] .btn-danger.focus, -fieldset[disabled] .btn-danger:active, -fieldset[disabled] .btn-danger:focus, -fieldset[disabled] .btn-danger:hover { - background-color: #d9534f; - border-color: #d43f3a -} - -.btn-danger .badge { - color: #d9534f; - background-color: #fff -} - -.btn-link { - font-weight: 400; - color: #337ab7; - border-radius: 0 -} - -.btn-link, -.btn-link.active, -.btn-link:active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; -} - -.btn-link, -.btn-link:active, -.btn-link:focus, -.btn-link:hover { - border-color: transparent -} - -.btn-link:focus, -.btn-link:hover { - color: #23527c; - text-decoration: underline; - background-color: transparent -} - -.btn-link[disabled]:focus, -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:focus, -fieldset[disabled] .btn-link:hover { - color: #777; - text-decoration: none -} - -.btn-group-lg>.btn, -.btn-lg { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px -} - -.btn-group-sm>.btn, -.btn-sm { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px -} - -.btn-group-xs>.btn, -.btn-xs { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px -} - -.btn-block { - display: block; - width: 100% -} - -.btn-block+.btn-block { - margin-top: 5px -} - -input[type=button].btn-block, -input[type=reset].btn-block, -input[type=submit].btn-block { - width: 100% -} - -.fade { - opacity: 0; - -webkit-transition: opacity .15s linear; - -o-transition: opacity .15s linear; - transition: opacity .15s linear -} - -.fade.in { - opacity: 1 -} - -.collapse { - display: none; - visibility: hidden -} - -.collapse.in { - display: block; - visibility: visible -} - -tr.collapse.in { - display: table-row -} - -tbody.collapse.in { - display: table-row-group -} - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-timing-function: ease; - -o-transition-timing-function: ease; - transition-timing-function: ease; - -webkit-transition-duration: .35s; - -o-transition-duration: .35s; - transition-duration: .35s; - -webkit-transition-property: height, visibility; - -o-transition-property: height, visibility; - transition-property: height, visibility -} - -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px solid; - border-right: 4px solid transparent; - border-left: 4px solid transparent -} - -.dropdown, -.dropup { - position: relative -} - -.dropdown-toggle:focus { - outline: 0 -} - -.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; - font-size: 14px; - text-align: left; - list-style: none; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .15); - border-radius: 4px; -} - -.dropdown-menu.pull-right { - right: 0; - left: auto -} - -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5 -} - -.dropdown-menu>li>a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: 400; - line-height: 1.42857143; - color: #333; - white-space: nowrap -} - -.dropdown-menu>li>a:focus, -.dropdown-menu>li>a:hover { - color: #262626; - text-decoration: none; - background-color: #f5f5f5 -} - -.dropdown-menu>.active>a, -.dropdown-menu>.active>a:focus, -.dropdown-menu>.active>a:hover { - color: #fff; - text-decoration: none; - background-color: #337ab7; - outline: 0 -} - -.dropdown-menu>.disabled>a, -.dropdown-menu>.disabled>a:focus, -.dropdown-menu>.disabled>a:hover { - color: #777 -} - -.dropdown-menu>.disabled>a:focus, -.dropdown-menu>.disabled>a:hover { - text-decoration: none; - cursor: not-allowed; - background-color: transparent; - background-image: none; - filter: progid: DXImageTransform.Microsoft.gradient(enabled=false) -} - -.open>.dropdown-menu { - display: block -} - -.open>a { - outline: 0 -} - -.dropdown-menu-right { - right: 0; - left: auto -} - -.dropdown-menu-left { - right: auto; - left: 0 -} - -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.42857143; - color: #777; - white-space: nowrap -} - -.dropdown-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 990 -} - -.pull-right>.dropdown-menu { - right: 0; - left: auto -} - -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - content: ""; - border-top: 0; - border-bottom: 4px solid -} - -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px -} - -@media (min-width:768px) { - .navbar-right .dropdown-menu { - right: 0; - left: auto - } - .navbar-right .dropdown-menu-left { - right: auto; - left: 0 - } -} - -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle -} - -.btn-group-vertical>.btn, -.btn-group>.btn { - position: relative; - float: left -} - -.btn-group-vertical>.btn.active, -.btn-group-vertical>.btn:active, -.btn-group-vertical>.btn:focus, -.btn-group-vertical>.btn:hover, -.btn-group>.btn.active, -.btn-group>.btn:active, -.btn-group>.btn:focus, -.btn-group>.btn:hover { - z-index: 2 -} - -.btn-group .btn+.btn, -.btn-group .btn+.btn-group, -.btn-group .btn-group+.btn, -.btn-group .btn-group+.btn-group { - margin-left: -1px -} - -.btn-toolbar { - margin-left: -5px -} - -.btn-toolbar .btn-group, -.btn-toolbar .input-group { - float: left -} - -.btn-toolbar>.btn, -.btn-toolbar>.btn-group, -.btn-toolbar>.input-group { - margin-left: 5px -} - -.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0 -} - -.btn-group>.btn:first-child { - margin-left: 0 -} - -.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.btn-group>.btn:last-child:not(:first-child), -.btn-group>.dropdown-toggle:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.btn-group>.btn-group { - float: left -} - -.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn { - border-radius: 0 -} - -.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child, -.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0 -} - -.btn-group>.btn+.dropdown-toggle { - padding-right: 8px; - padding-left: 8px -} - -.btn-group>.btn-lg+.dropdown-toggle { - padding-right: 12px; - padding-left: 12px -} - -.btn-group.open .dropdown-toggle { -} - -.btn-group.open .dropdown-toggle.btn-link { -} - -.btn .caret { - margin-left: 0 -} - -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0 -} - -.dropup .btn-lg .caret { - border-width: 0 5px 5px -} - -.btn-group-vertical>.btn, -.btn-group-vertical>.btn-group, -.btn-group-vertical>.btn-group>.btn { - display: block; - float: none; - width: 100%; - max-width: 100% -} - -.btn-group-vertical>.btn-group>.btn { - float: none -} - -.btn-group-vertical>.btn+.btn, -.btn-group-vertical>.btn+.btn-group, -.btn-group-vertical>.btn-group+.btn, -.btn-group-vertical>.btn-group+.btn-group { - margin-top: -1px; - margin-left: 0 -} - -.btn-group-vertical>.btn:not(:first-child):not(:last-child) { - border-radius: 0 -} - -.btn-group-vertical>.btn:first-child:not(:last-child) { - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0 -} - -.btn-group-vertical>.btn:last-child:not(:first-child) { - border-top-left-radius: 0; - border-top-right-radius: 0; - border-bottom-left-radius: 4px -} - -.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn { - border-radius: 0 -} - -.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child, -.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0 -} - -.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate -} - -.btn-group-justified>.btn, -.btn-group-justified>.btn-group { - display: table-cell; - float: none; - width: 1% -} - -.btn-group-justified>.btn-group .btn { - width: 100% -} - -.btn-group-justified>.btn-group .dropdown-menu { - left: auto -} - -[data-toggle=buttons]>.btn input[type=checkbox], -[data-toggle=buttons]>.btn input[type=radio], -[data-toggle=buttons]>.btn-group>.btn input[type=checkbox], -[data-toggle=buttons]>.btn-group>.btn input[type=radio] { - position: absolute; - clip: rect(0, 0, 0, 0); -} - -.input-group { - position: relative; - display: table; - border-collapse: separate -} - -.input-group[class*=col-] { - float: none; - padding-right: 0; - padding-left: 0 -} - -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0 -} - -.input-group-lg>.form-control, -.input-group-lg>.input-group-addon, -.input-group-lg>.input-group-btn>.btn { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px -} - -select.input-group-lg>.form-control, -select.input-group-lg>.input-group-addon, -select.input-group-lg>.input-group-btn>.btn { - height: 46px; - line-height: 46px -} - -select[multiple].input-group-lg>.form-control, -select[multiple].input-group-lg>.input-group-addon, -select[multiple].input-group-lg>.input-group-btn>.btn, -textarea.input-group-lg>.form-control, -textarea.input-group-lg>.input-group-addon, -textarea.input-group-lg>.input-group-btn>.btn { - height: auto -} - -.input-group-sm>.form-control, -.input-group-sm>.input-group-addon, -.input-group-sm>.input-group-btn>.btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px -} - -select.input-group-sm>.form-control, -select.input-group-sm>.input-group-addon, -select.input-group-sm>.input-group-btn>.btn { - height: 30px; - line-height: 30px -} - -select[multiple].input-group-sm>.form-control, -select[multiple].input-group-sm>.input-group-addon, -select[multiple].input-group-sm>.input-group-btn>.btn, -textarea.input-group-sm>.form-control, -textarea.input-group-sm>.input-group-addon, -textarea.input-group-sm>.input-group-btn>.btn { - height: auto -} - -.input-group .form-control, -.input-group-addon, -.input-group-btn { - display: table-cell -} - -.input-group .form-control:not(:first-child):not(:last-child), -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child) { - border-radius: 0 -} - -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle -} - -.input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: 400; - line-height: 1; - color: #555; - text-align: center; - background-color: #eee; - border: 1px solid #ccc; - border-radius: 4px -} - -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px -} - -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px -} - -.input-group-addon input[type=checkbox], -.input-group-addon input[type=radio] { - margin-top: 0 -} - -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child>.btn, -.input-group-btn:first-child>.btn-group>.btn, -.input-group-btn:first-child>.dropdown-toggle, -.input-group-btn:last-child>.btn-group:not(:last-child)>.btn, -.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.input-group-addon:first-child { - border-right: 0 -} - -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:first-child>.btn-group:not(:first-child)>.btn, -.input-group-btn:first-child>.btn:not(:first-child), -.input-group-btn:last-child>.btn, -.input-group-btn:last-child>.btn-group>.btn, -.input-group-btn:last-child>.dropdown-toggle { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.input-group-addon:last-child { - border-left: 0 -} - -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap -} - -.input-group-btn>.btn { - position: relative -} - -.input-group-btn>.btn+.btn { - margin-left: -1px -} - -.input-group-btn>.btn:active, -.input-group-btn>.btn:focus, -.input-group-btn>.btn:hover { - z-index: 2 -} - -.input-group-btn:first-child>.btn, -.input-group-btn:first-child>.btn-group { - margin-right: -1px -} - -.input-group-btn:last-child>.btn, -.input-group-btn:last-child>.btn-group { - margin-left: -1px -} - -.nav { - padding-left: 0; - margin-bottom: 0; - list-style: none -} - -.nav>li { - position: relative; - display: block -} - -.nav>li>a { - position: relative; - display: block; - padding: 10px 15px -} - -.nav>li>a:focus, -.nav>li>a:hover { - text-decoration: none; - background-color: #eee -} - -.nav>li.disabled>a { - color: #777 -} - -.nav>li.disabled>a:focus, -.nav>li.disabled>a:hover { - color: #777; - text-decoration: none; - cursor: not-allowed; - background-color: transparent -} - -.nav .open>a, -.nav .open>a:focus, -.nav .open>a:hover { - background-color: #eee; - border-color: #337ab7 -} - -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5 -} - -.nav>li>a>img { - max-width: none -} - -.nav-tabs { - border-bottom: 1px solid #ddd -} - -.nav-tabs>li { - float: left; - margin-bottom: -1px -} - -.nav-tabs>li>a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0 -} - -.nav-tabs>li>a:hover { - border-color: #eee #eee #ddd -} - -.nav-tabs>li.active>a, -.nav-tabs>li.active>a:focus, -.nav-tabs>li.active>a:hover { - color: #555; - cursor: default; - background-color: #fff; - border: 1px solid #ddd; - border-bottom-color: transparent -} - -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0 -} - -.nav-tabs.nav-justified>li { - float: none -} - -.nav-tabs.nav-justified>li>a { - margin-bottom: 5px; - text-align: center -} - -.nav-tabs.nav-justified>.dropdown .dropdown-menu { - top: auto; - left: auto -} - -@media (min-width:768px) { - .nav-tabs.nav-justified>li { - display: table-cell; - width: 1% - } - .nav-tabs.nav-justified>li>a { - margin-bottom: 0 - } -} - -.nav-tabs.nav-justified>li>a { - margin-right: 0; - border-radius: 4px -} - -.nav-tabs.nav-justified>.active>a, -.nav-tabs.nav-justified>.active>a:focus, -.nav-tabs.nav-justified>.active>a:hover { - border: 1px solid #ddd -} - -@media (min-width:768px) { - .nav-tabs.nav-justified>li>a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0 - } - .nav-tabs.nav-justified>.active>a, - .nav-tabs.nav-justified>.active>a:focus, - .nav-tabs.nav-justified>.active>a:hover { - border-bottom-color: #fff - } -} - -.nav-pills>li { - float: left -} - -.nav-pills>li>a { - border-radius: 4px -} - -.nav-pills>li+li { - margin-left: 2px -} - -.nav-pills>li.active>a, -.nav-pills>li.active>a:focus, -.nav-pills>li.active>a:hover { - color: #fff; - background-color: #337ab7 -} - -.nav-stacked>li { - float: none -} - -.nav-stacked>li+li { - margin-top: 2px; - margin-left: 0 -} - -.nav-justified { - width: 100% -} - -.nav-justified>li { - float: none -} - -.nav-justified>li>a { - margin-bottom: 5px; - text-align: center -} - -.nav-justified>.dropdown .dropdown-menu { - top: auto; - left: auto -} - -@media (min-width:768px) { - .nav-justified>li { - display: table-cell; - width: 1% - } - .nav-justified>li>a { - margin-bottom: 0 - } -} - -.nav-tabs-justified { - border-bottom: 0 -} - -.nav-tabs-justified>li>a { - margin-right: 0; - border-radius: 4px -} - -.nav-tabs-justified>.active>a, -.nav-tabs-justified>.active>a:focus, -.nav-tabs-justified>.active>a:hover { - border: 1px solid #ddd -} - -@media (min-width:768px) { - .nav-tabs-justified>li>a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0 - } - .nav-tabs-justified>.active>a, - .nav-tabs-justified>.active>a:focus, - .nav-tabs-justified>.active>a:hover { - border-bottom-color: #fff - } -} - -.tab-content>.tab-pane { - display: none; - visibility: hidden -} - -.tab-content>.active { - display: block; - visibility: visible -} - -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.navbar { - position: relative; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent -} - -@media (min-width:768px) { - .navbar { - border-radius: 4px - } -} - -@media (min-width:768px) { - .navbar-header { - float: left - } -} - -.navbar-collapse { - padding-right: 15px; - padding-left: 15px; - overflow-x: visible; - -webkit-overflow-scrolling: touch; - border-top: 1px solid transparent; -} - -.navbar-collapse.in { - overflow-y: auto -} - -@media (min-width:768px) { - .navbar-collapse { - width: auto; - border-top: 0; - } - .navbar-collapse.collapse { - display: block!important; - height: auto!important; - padding-bottom: 0; - overflow: visible!important; - visibility: visible!important - } - .navbar-collapse.in { - overflow-y: visible - } - .navbar-fixed-bottom .navbar-collapse, - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse { - padding-right: 0; - padding-left: 0 - } -} - -.navbar-fixed-bottom .navbar-collapse, -.navbar-fixed-top .navbar-collapse { - max-height: 340px -} - -@media (max-device-width:480px) and (orientation:landscape) { - .navbar-fixed-bottom .navbar-collapse, - .navbar-fixed-top .navbar-collapse { - max-height: 200px - } -} - -.container-fluid>.navbar-collapse, -.container-fluid>.navbar-header, -.container>.navbar-collapse, -.container>.navbar-header { - margin-right: -15px; - margin-left: -15px -} - -@media (min-width:768px) { - .container-fluid>.navbar-collapse, - .container-fluid>.navbar-header, - .container>.navbar-collapse, - .container>.navbar-header { - margin-right: 0; - margin-left: 0 - } -} - -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px -} - -@media (min-width:768px) { - .navbar-static-top { - border-radius: 0 - } -} - -.navbar-fixed-bottom, -.navbar-fixed-top { - position: fixed; - right: 0; - left: 0; - z-index: 1030 -} - -@media (min-width:768px) { - .navbar-fixed-bottom, - .navbar-fixed-top { - border-radius: 0 - } -} - -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px -} - -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0 -} - -.navbar-brand { - float: left; - height: 50px; - padding: 15px 15px; - font-size: 18px; - line-height: 20px -} - -.navbar-brand:focus, -.navbar-brand:hover { - text-decoration: none -} - -.navbar-brand>img { - display: block -} - -@media (min-width:768px) { - .navbar>.container .navbar-brand, - .navbar>.container-fluid .navbar-brand { - margin-left: -15px - } -} - -.navbar-toggle { - position: relative; - float: right; - padding: 9px 10px; - margin-top: 8px; - margin-right: 15px; - margin-bottom: 8px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px -} - -.navbar-toggle:focus { - outline: 0 -} - -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px -} - -.navbar-toggle .icon-bar+.icon-bar { - margin-top: 4px -} - -@media (min-width:768px) { - .navbar-toggle { - display: none - } -} - -.navbar-nav { - margin: 7.5px -15px -} - -.navbar-nav>li>a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px -} - -@media (max-width:767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - } - .navbar-nav .open .dropdown-menu .dropdown-header, - .navbar-nav .open .dropdown-menu>li>a { - padding: 5px 15px 5px 25px - } - .navbar-nav .open .dropdown-menu>li>a { - line-height: 20px - } - .navbar-nav .open .dropdown-menu>li>a:focus, - .navbar-nav .open .dropdown-menu>li>a:hover { - background-image: none - } -} - -@media (min-width:768px) { - .navbar-nav { - float: left; - margin: 0 - } - .navbar-nav>li { - float: left - } - .navbar-nav>li>a { - padding-top: 15px; - padding-bottom: 15px - } -} - -.navbar-form { - padding: 10px 15px; - margin-top: 8px; - margin-right: -15px; - margin-bottom: 8px; - margin-left: -15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; -} - -@media (min-width:768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle - } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle - } - .navbar-form .form-control-static { - display: inline-block - } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle - } - .navbar-form .input-group .form-control, - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .input-group-btn { - width: auto - } - .navbar-form .input-group>.form-control { - width: 100% - } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle - } - .navbar-form .checkbox, - .navbar-form .radio { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle - } - .navbar-form .checkbox label, - .navbar-form .radio label { - padding-left: 0 - } - .navbar-form .checkbox input[type=checkbox], - .navbar-form .radio input[type=radio] { - position: relative; - margin-left: 0 - } - .navbar-form .has-feedback .form-control-feedback { - top: 0 - } -} - -@media (max-width:767px) { - .navbar-form .form-group { - margin-bottom: 5px - } - .navbar-form .form-group:last-child { - margin-bottom: 0 - } -} - -@media (min-width:768px) { - .navbar-form { - width: auto; - padding-top: 0; - padding-bottom: 0; - margin-right: 0; - margin-left: 0; - border: 0; - } -} - -.navbar-nav>li>.dropdown-menu { - margin-top: 0; - border-top-left-radius: 0; - border-top-right-radius: 0 -} - -.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu { - margin-bottom: 0; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0 -} - -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px -} - -.navbar-btn.btn-sm { - margin-top: 10px; - margin-bottom: 10px -} - -.navbar-btn.btn-xs { - margin-top: 14px; - margin-bottom: 14px -} - -.navbar-text { - margin-top: 15px; - margin-bottom: 15px -} - -@media (min-width:768px) { - .navbar-text { - float: left; - margin-right: 15px; - margin-left: 15px - } -} - -@media (min-width:768px) { - .navbar-left { - float: left!important - } - .navbar-right { - float: right!important; - margin-right: -15px - } - .navbar-right~.navbar-right { - margin-right: 0 - } -} - -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7 -} - -.navbar-default .navbar-brand { - color: #777 -} - -.navbar-default .navbar-brand:focus, -.navbar-default .navbar-brand:hover { - color: #5e5e5e; - background-color: transparent -} - -.navbar-default .navbar-text { - color: #777 -} - -.navbar-default .navbar-nav>li>a { - color: #777 -} - -.navbar-default .navbar-nav>li>a:focus, -.navbar-default .navbar-nav>li>a:hover { - color: #333; - background-color: transparent -} - -.navbar-default .navbar-nav>.active>a, -.navbar-default .navbar-nav>.active>a:focus, -.navbar-default .navbar-nav>.active>a:hover { - color: #555; - background-color: #e7e7e7 -} - -.navbar-default .navbar-nav>.disabled>a, -.navbar-default .navbar-nav>.disabled>a:focus, -.navbar-default .navbar-nav>.disabled>a:hover { - color: #ccc; - background-color: transparent -} - -.navbar-default .navbar-toggle { - border-color: #ddd -} - -.navbar-default .navbar-toggle:focus, -.navbar-default .navbar-toggle:hover { - background-color: #ddd -} - -.navbar-default .navbar-toggle .icon-bar { - background-color: #888 -} - -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e7e7e7 -} - -.navbar-default .navbar-nav>.open>a, -.navbar-default .navbar-nav>.open>a:focus, -.navbar-default .navbar-nav>.open>a:hover { - color: #555; - background-color: #e7e7e7 -} - -@media (max-width:767px) { - .navbar-default .navbar-nav .open .dropdown-menu>li>a { - color: #777 - } - .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus, - .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover { - color: #333; - background-color: transparent - } - .navbar-default .navbar-nav .open .dropdown-menu>.active>a, - .navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus, - .navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover { - color: #555; - background-color: #e7e7e7 - } - .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a, - .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus, - .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover { - color: #ccc; - background-color: transparent - } -} - -.navbar-default .navbar-link { - color: #777 -} - -.navbar-default .navbar-link:hover { - color: #333 -} - -.navbar-default .btn-link { - color: #777 -} - -.navbar-default .btn-link:focus, -.navbar-default .btn-link:hover { - color: #333 -} - -.navbar-default .btn-link[disabled]:focus, -.navbar-default .btn-link[disabled]:hover, -fieldset[disabled] .navbar-default .btn-link:focus, -fieldset[disabled] .navbar-default .btn-link:hover { - color: #ccc -} - -.navbar-inverse { - background-color: #222; - border-color: #080808 -} - -.navbar-inverse .navbar-brand { - color: #9d9d9d -} - -.navbar-inverse .navbar-brand:focus, -.navbar-inverse .navbar-brand:hover { - color: #fff; - background-color: transparent -} - -.navbar-inverse .navbar-text { - color: #9d9d9d -} - -.navbar-inverse .navbar-nav>li>a { - color: #9d9d9d -} - -.navbar-inverse .navbar-nav>li>a:focus, -.navbar-inverse .navbar-nav>li>a:hover { - color: #fff; - background-color: transparent -} - -.navbar-inverse .navbar-nav>.active>a, -.navbar-inverse .navbar-nav>.active>a:focus, -.navbar-inverse .navbar-nav>.active>a:hover { - color: #fff; - background-color: #080808 -} - -.navbar-inverse .navbar-nav>.disabled>a, -.navbar-inverse .navbar-nav>.disabled>a:focus, -.navbar-inverse .navbar-nav>.disabled>a:hover { - color: #444; - background-color: transparent -} - -.navbar-inverse .navbar-toggle { - border-color: #333 -} - -.navbar-inverse .navbar-toggle:focus, -.navbar-inverse .navbar-toggle:hover { - background-color: #333 -} - -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #fff -} - -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010 -} - -.navbar-inverse .navbar-nav>.open>a, -.navbar-inverse .navbar-nav>.open>a:focus, -.navbar-inverse .navbar-nav>.open>a:hover { - color: #fff; - background-color: #080808 -} - -@media (max-width:767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header { - border-color: #080808 - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #080808 - } - .navbar-inverse .navbar-nav .open .dropdown-menu>li>a { - color: #9d9d9d - } - .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus, - .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover { - color: #fff; - background-color: transparent - } - .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a, - .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus, - .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover { - color: #fff; - background-color: #080808 - } - .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a, - .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus, - .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover { - color: #444; - background-color: transparent - } -} - -.navbar-inverse .navbar-link { - color: #9d9d9d -} - -.navbar-inverse .navbar-link:hover { - color: #fff -} - -.navbar-inverse .btn-link { - color: #9d9d9d -} - -.navbar-inverse .btn-link:focus, -.navbar-inverse .btn-link:hover { - color: #fff -} - -.navbar-inverse .btn-link[disabled]:focus, -.navbar-inverse .btn-link[disabled]:hover, -fieldset[disabled] .navbar-inverse .btn-link:focus, -fieldset[disabled] .navbar-inverse .btn-link:hover { - color: #444 -} - -.breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px -} - -.breadcrumb>li { - display: inline-block -} - -.breadcrumb>li+li:before { - padding: 0 5px; - color: #ccc; - content: "/\00a0" -} - -.breadcrumb>.active { - color: #777 -} - -.pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px -} - -.pagination>li { - display: inline -} - -.pagination>li>a, -.pagination>li>span { - position: relative; - float: left; - padding: 6px 12px; - margin-left: -1px; - line-height: 1.42857143; - color: #337ab7; - text-decoration: none; - background-color: #fff; - border: 1px solid #ddd -} - -.pagination>li:first-child>a, -.pagination>li:first-child>span { - margin-left: 0; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px -} - -.pagination>li:last-child>a, -.pagination>li:last-child>span { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px -} - -.pagination>li>a:focus, -.pagination>li>a:hover, -.pagination>li>span:focus, -.pagination>li>span:hover { - color: #23527c; - background-color: #eee; - border-color: #ddd -} - -.pagination>.active>a, -.pagination>.active>a:focus, -.pagination>.active>a:hover, -.pagination>.active>span, -.pagination>.active>span:focus, -.pagination>.active>span:hover { - z-index: 2; - color: #fff; - cursor: default; - background-color: #337ab7; - border-color: #337ab7 -} - -.pagination>.disabled>a, -.pagination>.disabled>a:focus, -.pagination>.disabled>a:hover, -.pagination>.disabled>span, -.pagination>.disabled>span:focus, -.pagination>.disabled>span:hover { - color: #777; - cursor: not-allowed; - background-color: #fff; - border-color: #ddd -} - -.pagination-lg>li>a, -.pagination-lg>li>span { - padding: 10px 16px; - font-size: 18px -} - -.pagination-lg>li:first-child>a, -.pagination-lg>li:first-child>span { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px -} - -.pagination-lg>li:last-child>a, -.pagination-lg>li:last-child>span { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px -} - -.pagination-sm>li>a, -.pagination-sm>li>span { - padding: 5px 10px; - font-size: 12px -} - -.pagination-sm>li:first-child>a, -.pagination-sm>li:first-child>span { - border-top-left-radius: 3px; - border-bottom-left-radius: 3px -} - -.pagination-sm>li:last-child>a, -.pagination-sm>li:last-child>span { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px -} - -.pager { - padding-left: 0; - margin: 20px 0; - text-align: center; - list-style: none -} - -.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 -} - -.pager li>a:focus, -.pager li>a:hover { - text-decoration: none; - background-color: #eee -} - -.pager .next>a, -.pager .next>span { - float: right -} - -.pager .previous>a, -.pager .previous>span { - float: left -} - -.pager .disabled>a, -.pager .disabled>a:focus, -.pager .disabled>a:hover, -.pager .disabled>span { - color: #777; - cursor: not-allowed; - background-color: #fff -} - -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: 700; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em -} - -a.label:focus, -a.label:hover { - color: #fff; - text-decoration: none; - cursor: pointer -} - -.label:empty { - display: none -} - -.btn .label { - position: relative; - top: -1px -} - -.label-default { - background-color: #777 -} - -.label-default[href]:focus, -.label-default[href]:hover { - background-color: #5e5e5e -} - -.label-primary { - background-color: #337ab7 -} - -.label-primary[href]:focus, -.label-primary[href]:hover { - background-color: #286090 -} - -.label-success { - background-color: #5cb85c -} - -.label-success[href]:focus, -.label-success[href]:hover { - background-color: #449d44 -} - -.label-info { - background-color: #5bc0de -} - -.label-info[href]:focus, -.label-info[href]:hover { - background-color: #31b0d5 -} - -.label-warning { - background-color: #f0ad4e -} - -.label-warning[href]:focus, -.label-warning[href]:hover { - background-color: #ec971f -} - -.label-danger { - background-color: #d9534f -} - -.label-danger[href]:focus, -.label-danger[href]:hover { - background-color: #c9302c -} - -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: 700; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - background-color: #777; - border-radius: 10px -} - -.badge:empty { - display: none -} - -.btn .badge { - position: relative; - top: -1px -} - -.btn-xs .badge { - top: 0; - padding: 1px 5px -} - -a.badge:focus, -a.badge:hover { - color: #fff; - text-decoration: none; - cursor: pointer -} - -.list-group-item.active>.badge, -.nav-pills>.active>a>.badge { - color: #337ab7; - background-color: #fff -} - -.list-group-item>.badge { - float: right -} - -.list-group-item>.badge+.badge { - margin-right: 5px -} - -.nav-pills>li>a>.badge { - margin-left: 3px -} - -.jumbotron { - padding: 30px 15px; - margin-bottom: 30px; - color: inherit; - background-color: #eee -} - -.jumbotron .h1, -.jumbotron h1 { - color: inherit -} - -.jumbotron p { - margin-bottom: 15px; - font-size: 21px; - font-weight: 200 -} - -.jumbotron>hr { - border-top-color: #d5d5d5 -} - -.container .jumbotron, -.container-fluid .jumbotron { - border-radius: 6px -} - -.jumbotron .container { - max-width: 100% -} - -@media screen and (min-width:768px) { - .jumbotron { - padding: 48px 0 - } - .container .jumbotron, - .container-fluid .jumbotron { - padding-right: 60px; - padding-left: 60px - } - .jumbotron .h1, - .jumbotron h1 { - font-size: 63px - } -} - -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 20px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: border .2s ease-in-out; - -o-transition: border .2s ease-in-out; - transition: border .2s ease-in-out -} - -.thumbnail a>img, -.thumbnail>img { - margin-right: auto; - margin-left: auto -} - -a.thumbnail.active, -a.thumbnail:focus, -a.thumbnail:hover { - border-color: #337ab7 -} - -.thumbnail .caption { - padding: 9px; - color: #333 -} - -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px -} - -.alert h4 { - margin-top: 0; - color: inherit -} - -.alert .alert-link { - font-weight: 700 -} - -.alert>p, -.alert>ul { - margin-bottom: 0 -} - -.alert>p+p { - margin-top: 5px -} - -.alert-dismissable, -.alert-dismissible { - padding-right: 35px -} - -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit -} - -.alert-success { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6 -} - -.alert-success hr { - border-top-color: #c9e2b3 -} - -.alert-success .alert-link { - color: #2b542c -} - -.alert-info { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1 -} - -.alert-info hr { - border-top-color: #a6e1ec -} - -.alert-info .alert-link { - color: #245269 -} - -.alert-warning { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc -} - -.alert-warning hr { - border-top-color: #f7e1b5 -} - -.alert-warning .alert-link { - color: #66512c -} - -.alert-danger { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1 -} - -.alert-danger hr { - border-top-color: #e4b9c0 -} - -.alert-danger .alert-link { - color: #843534 -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0 - } - to { - background-position: 0 0 - } -} - -@-o-keyframes progress-bar-stripes { - from { - background-position: 40px 0 - } - to { - background-position: 0 0 - } -} - -@keyframes progress-bar-stripes { - from { - background-position: 40px 0 - } - to { - background-position: 0 0 - } -} - -.progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f5f5f5; - border-radius: 4px; -} - -.progress-bar { - float: left; - width: 0; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #fff; - text-align: center; - background-color: #337ab7; - -webkit-transition: width .6s ease; - -o-transition: width .6s ease; - transition: width .6s ease -} - -.progress-bar-striped, -.progress-striped .progress-bar { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - background-size: 40px 40px -} - -.progress-bar.active, -.progress.active .progress-bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite -} - -.progress-bar-success { - background-color: #5cb85c -} - -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent) -} - -.progress-bar-info { - background-color: #5bc0de -} - -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent) -} - -.progress-bar-warning { - background-color: #f0ad4e -} - -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent) -} - -.progress-bar-danger { - background-color: #d9534f -} - -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent) -} - -.media { - margin-top: 15px -} - -.media:first-child { - margin-top: 0 -} - -.media, -.media-body { - overflow: hidden; - zoom: 1 -} - -.media-body { - width: 10000px -} - -.media-object { - display: block -} - -.media-right, -.media>.pull-right { - padding-left: 10px -} - -.media-left, -.media>.pull-left { - padding-right: 10px -} - -.media-body, -.media-left, -.media-right { - display: table-cell; - vertical-align: top -} - -.media-middle { - vertical-align: middle -} - -.media-bottom { - vertical-align: bottom -} - -.media-heading { - margin-top: 0; - margin-bottom: 5px -} - -.media-list { - padding-left: 0; - list-style: none -} - -.list-group { - padding-left: 0; - margin-bottom: 20px -} - -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid #ddd -} - -.list-group-item:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px -} - -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px -} - -a.list-group-item { - color: #555 -} - -a.list-group-item .list-group-item-heading { - color: #333 -} - -a.list-group-item:focus, -a.list-group-item:hover { - color: #555; - text-decoration: none; - background-color: #f5f5f5 -} - -.list-group-item.disabled, -.list-group-item.disabled:focus, -.list-group-item.disabled:hover { - color: #777; - cursor: not-allowed; - background-color: #eee -} - -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading { - color: inherit -} - -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text { - color: #777 -} - -.list-group-item.active, -.list-group-item.active:focus, -.list-group-item.active:hover { - z-index: 2; - color: #fff; - background-color: #337ab7; - border-color: #337ab7 -} - -.list-group-item.active .list-group-item-heading, -.list-group-item.active .list-group-item-heading>.small, -.list-group-item.active .list-group-item-heading>small, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading>.small, -.list-group-item.active:focus .list-group-item-heading>small, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading>.small, -.list-group-item.active:hover .list-group-item-heading>small { - color: inherit -} - -.list-group-item.active .list-group-item-text, -.list-group-item.active:focus .list-group-item-text, -.list-group-item.active:hover .list-group-item-text { - color: #c7ddef -} - -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8 -} - -a.list-group-item-success { - color: #3c763d -} - -a.list-group-item-success .list-group-item-heading { - color: inherit -} - -a.list-group-item-success:focus, -a.list-group-item-success:hover { - color: #3c763d; - background-color: #d0e9c6 -} - -a.list-group-item-success.active, -a.list-group-item-success.active:focus, -a.list-group-item-success.active:hover { - color: #fff; - background-color: #3c763d; - border-color: #3c763d -} - -.list-group-item-info { - color: #31708f; - background-color: #d9edf7 -} - -a.list-group-item-info { - color: #31708f -} - -a.list-group-item-info .list-group-item-heading { - color: inherit -} - -a.list-group-item-info:focus, -a.list-group-item-info:hover { - color: #31708f; - background-color: #c4e3f3 -} - -a.list-group-item-info.active, -a.list-group-item-info.active:focus, -a.list-group-item-info.active:hover { - color: #fff; - background-color: #31708f; - border-color: #31708f -} - -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3 -} - -a.list-group-item-warning { - color: #8a6d3b -} - -a.list-group-item-warning .list-group-item-heading { - color: inherit -} - -a.list-group-item-warning:focus, -a.list-group-item-warning:hover { - color: #8a6d3b; - background-color: #faf2cc -} - -a.list-group-item-warning.active, -a.list-group-item-warning.active:focus, -a.list-group-item-warning.active:hover { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b -} - -.list-group-item-danger { - color: #a94442; - background-color: #f2dede -} - -a.list-group-item-danger { - color: #a94442 -} - -a.list-group-item-danger .list-group-item-heading { - color: inherit -} - -a.list-group-item-danger:focus, -a.list-group-item-danger:hover { - color: #a94442; - background-color: #ebcccc -} - -a.list-group-item-danger.active, -a.list-group-item-danger.active:focus, -a.list-group-item-danger.active:hover { - color: #fff; - background-color: #a94442; - border-color: #a94442 -} - -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px -} - -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3 -} - -.panel { - margin-bottom: 20px; - background-color: #fff; - border: 1px solid transparent; - border-radius: 4px; -} - -.panel-body { - padding: 15px -} - -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-left-radius: 3px; - border-top-right-radius: 3px -} - -.panel-heading>.dropdown .dropdown-toggle { - color: inherit -} - -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit -} - -.panel-title>.small, -.panel-title>.small>a, -.panel-title>a, -.panel-title>small, -.panel-title>small>a { - color: inherit -} - -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px -} - -.panel>.list-group, -.panel>.panel-collapse>.list-group { - margin-bottom: 0 -} - -.panel>.list-group .list-group-item, -.panel>.panel-collapse>.list-group .list-group-item { - border-width: 1px 0; - border-radius: 0 -} - -.panel>.list-group:first-child .list-group-item:first-child, -.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-left-radius: 3px; - border-top-right-radius: 3px -} - -.panel>.list-group:last-child .list-group-item:last-child, -.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px -} - -.panel-heading+.list-group .list-group-item:first-child { - border-top-width: 0 -} - -.list-group+.panel-footer { - border-top-width: 0 -} - -.panel>.panel-collapse>.table, -.panel>.table, -.panel>.table-responsive>.table { - margin-bottom: 0 -} - -.panel>.panel-collapse>.table caption, -.panel>.table caption, -.panel>.table-responsive>.table caption { - padding-right: 15px; - padding-left: 15px -} - -.panel>.table-responsive:first-child>.table:first-child, -.panel>.table:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px -} - -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child, -.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child, -.panel>.table:first-child>tbody:first-child>tr:first-child, -.panel>.table:first-child>thead:first-child>tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px -} - -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child, -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child, -.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child, -.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child, -.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child, -.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child, -.panel>.table:first-child>thead:first-child>tr:first-child td:first-child, -.panel>.table:first-child>thead:first-child>tr:first-child th:first-child { - border-top-left-radius: 3px -} - -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child, -.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child, -.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child, -.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child, -.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child, -.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child, -.panel>.table:first-child>thead:first-child>tr:first-child td:last-child, -.panel>.table:first-child>thead:first-child>tr:first-child th:last-child { - border-top-right-radius: 3px -} - -.panel>.table-responsive:last-child>.table:last-child, -.panel>.table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px -} - -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child, -.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child, -.panel>.table:last-child>tbody:last-child>tr:last-child, -.panel>.table:last-child>tfoot:last-child>tr:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px -} - -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child, -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child, -.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child, -.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child, -.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child, -.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child, -.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child, -.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child { - border-bottom-left-radius: 3px -} - -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child, -.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child, -.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child, -.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child, -.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child, -.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child, -.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child, -.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child { - border-bottom-right-radius: 3px -} - -.panel>.panel-body+.table, -.panel>.panel-body+.table-responsive, -.panel>.table+.panel-body, -.panel>.table-responsive+.panel-body { - border-top: 1px solid #ddd -} - -.panel>.table>tbody:first-child>tr:first-child td, -.panel>.table>tbody:first-child>tr:first-child th { - border-top: 0 -} - -.panel>.table-bordered, -.panel>.table-responsive>.table-bordered { - border: 0 -} - -.panel>.table-bordered>tbody>tr>td:first-child, -.panel>.table-bordered>tbody>tr>th:first-child, -.panel>.table-bordered>tfoot>tr>td:first-child, -.panel>.table-bordered>tfoot>tr>th:first-child, -.panel>.table-bordered>thead>tr>td:first-child, -.panel>.table-bordered>thead>tr>th:first-child, -.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child, -.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child, -.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child, -.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child, -.panel>.table-responsive>.table-bordered>thead>tr>td:first-child, -.panel>.table-responsive>.table-bordered>thead>tr>th:first-child { - border-left: 0 -} - -.panel>.table-bordered>tbody>tr>td:last-child, -.panel>.table-bordered>tbody>tr>th:last-child, -.panel>.table-bordered>tfoot>tr>td:last-child, -.panel>.table-bordered>tfoot>tr>th:last-child, -.panel>.table-bordered>thead>tr>td:last-child, -.panel>.table-bordered>thead>tr>th:last-child, -.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child, -.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child, -.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child, -.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child, -.panel>.table-responsive>.table-bordered>thead>tr>td:last-child, -.panel>.table-responsive>.table-bordered>thead>tr>th:last-child { - border-right: 0 -} - -.panel>.table-bordered>tbody>tr:first-child>td, -.panel>.table-bordered>tbody>tr:first-child>th, -.panel>.table-bordered>thead>tr:first-child>td, -.panel>.table-bordered>thead>tr:first-child>th, -.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td, -.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th, -.panel>.table-responsive>.table-bordered>thead>tr:first-child>td, -.panel>.table-responsive>.table-bordered>thead>tr:first-child>th { - border-bottom: 0 -} - -.panel>.table-bordered>tbody>tr:last-child>td, -.panel>.table-bordered>tbody>tr:last-child>th, -.panel>.table-bordered>tfoot>tr:last-child>td, -.panel>.table-bordered>tfoot>tr:last-child>th, -.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td, -.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th, -.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td, -.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th { - border-bottom: 0 -} - -.panel>.table-responsive { - margin-bottom: 0; - border: 0 -} - -.panel-group { - margin-bottom: 20px -} - -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px -} - -.panel-group .panel+.panel { - margin-top: 5px -} - -.panel-group .panel-heading { - border-bottom: 0 -} - -.panel-group .panel-heading+.panel-collapse>.list-group, -.panel-group .panel-heading+.panel-collapse>.panel-body { - border-top: 1px solid #ddd -} - -.panel-group .panel-footer { - border-top: 0 -} - -.panel-group .panel-footer+.panel-collapse .panel-body { - border-bottom: 1px solid #ddd -} - -.panel-default { - border-color: #ddd -} - -.panel-default>.panel-heading { - color: #333; - background-color: #f5f5f5; - border-color: #ddd -} - -.panel-default>.panel-heading+.panel-collapse>.panel-body { - border-top-color: #ddd -} - -.panel-default>.panel-heading .badge { - color: #f5f5f5; - background-color: #333 -} - -.panel-default>.panel-footer+.panel-collapse>.panel-body { - border-bottom-color: #ddd -} - -.panel-primary { - border-color: #337ab7 -} - -.panel-primary>.panel-heading { - color: #fff; - background-color: #337ab7; - border-color: #337ab7 -} - -.panel-primary>.panel-heading+.panel-collapse>.panel-body { - border-top-color: #337ab7 -} - -.panel-primary>.panel-heading .badge { - color: #337ab7; - background-color: #fff -} - -.panel-primary>.panel-footer+.panel-collapse>.panel-body { - border-bottom-color: #337ab7 -} - -.panel-success { - border-color: #d6e9c6 -} - -.panel-success>.panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6 -} - -.panel-success>.panel-heading+.panel-collapse>.panel-body { - border-top-color: #d6e9c6 -} - -.panel-success>.panel-heading .badge { - color: #dff0d8; - background-color: #3c763d -} - -.panel-success>.panel-footer+.panel-collapse>.panel-body { - border-bottom-color: #d6e9c6 -} - -.panel-info { - border-color: #bce8f1 -} - -.panel-info>.panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1 -} - -.panel-info>.panel-heading+.panel-collapse>.panel-body { - border-top-color: #bce8f1 -} - -.panel-info>.panel-heading .badge { - color: #d9edf7; - background-color: #31708f -} - -.panel-info>.panel-footer+.panel-collapse>.panel-body { - border-bottom-color: #bce8f1 -} - -.panel-warning { - border-color: #faebcc -} - -.panel-warning>.panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc -} - -.panel-warning>.panel-heading+.panel-collapse>.panel-body { - border-top-color: #faebcc -} - -.panel-warning>.panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b -} - -.panel-warning>.panel-footer+.panel-collapse>.panel-body { - border-bottom-color: #faebcc -} - -.panel-danger { - border-color: #ebccd1 -} - -.panel-danger>.panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1 -} - -.panel-danger>.panel-heading+.panel-collapse>.panel-body { - border-top-color: #ebccd1 -} - -.panel-danger>.panel-heading .badge { - color: #f2dede; - background-color: #a94442 -} - -.panel-danger>.panel-footer+.panel-collapse>.panel-body { - border-bottom-color: #ebccd1 -} - -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden -} - -.embed-responsive .embed-responsive-item, -.embed-responsive embed, -.embed-responsive iframe, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0 -} - -.embed-responsive.embed-responsive-16by9 { - padding-bottom: 56.25% -} - -.embed-responsive.embed-responsive-4by3 { - padding-bottom: 75% -} - -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; -} - -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, .15) -} - -.well-lg { - padding: 24px; - border-radius: 6px -} - -.well-sm { - padding: 9px; - border-radius: 3px -} - -.close { - float: right; - font-size: 21px; - font-weight: 700; - line-height: 1; - color: #000; - filter: alpha(opacity=20); - opacity: .2 -} - -.close:focus, -.close:hover { - color: #000; - text-decoration: none; - cursor: pointer; - filter: alpha(opacity=50); - opacity: .5 -} - -button.close { - -webkit-appearance: none; - padding: 0; - cursor: pointer; - background: 0 0; - border: 0 -} - -.modal-open { - overflow: hidden -} - -.modal { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - display: none; - overflow: hidden; - -webkit-overflow-scrolling: touch; - outline: 0 -} - -.modal.fade .modal-dialog { - -webkit-transition: -webkit-transform .3s ease-out; - -o-transition: -o-transform .3s ease-out; - transition: transform .3s ease-out; - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%) -} - -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0) -} - -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto -} - -.modal-dialog { - position: relative; - width: auto; - margin: 10px -} - -.modal-content { - position: relative; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - outline: 0; -} - -.modal-backdrop { - position: absolute; - top: 0; - right: 0; - left: 0; - background-color: #000 -} - -.modal-backdrop.fade { - filter: alpha(opacity=0); - opacity: 0 -} - -.modal-backdrop.in { - filter: alpha(opacity=50); - opacity: .5 -} - -.modal-header { - min-height: 16.43px; - padding: 15px; - border-bottom: 1px solid #e5e5e5 -} - -.modal-header .close { - margin-top: -2px -} - -.modal-title { - margin: 0; - line-height: 1.42857143 -} - -.modal-body { - position: relative; - padding: 15px -} - -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5 -} - -.modal-footer .btn+.btn { - margin-bottom: 0; - margin-left: 5px -} - -.modal-footer .btn-group .btn+.btn { - margin-left: -1px -} - -.modal-footer .btn-block+.btn-block { - margin-left: 0 -} - -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll -} - -@media (min-width:768px) { - .modal-dialog { - width: 600px; - margin: 30px auto - } - .modal-content { - } - .modal-sm { - width: 300px - } -} - -@media (min-width:992px) { - .modal-lg { - width: 900px - } -} - -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 12px; - font-weight: 400; - line-height: 1.4; - visibility: visible; - filter: alpha(opacity=0); - opacity: 0 -} - -.tooltip.in { - filter: alpha(opacity=90); - opacity: .9 -} - -.tooltip.top { - padding: 5px 0; - margin-top: -3px -} - -.tooltip.right { - padding: 0 5px; - margin-left: 3px -} - -.tooltip.bottom { - padding: 5px 0; - margin-top: 3px -} - -.tooltip.left { - padding: 0 5px; - margin-left: -3px -} - -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #fff; - text-align: center; - text-decoration: none; - background-color: #000; - 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.top-left .tooltip-arrow { - right: 5px; - bottom: 0; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000 -} - -.tooltip.top-right .tooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -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 -} - -.tooltip.bottom-left .tooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000 -} - -.tooltip.bottom-right .tooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000 -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - font-weight: 400; - line-height: 1.42857143; - text-align: left; - white-space: normal; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; -} - -.popover.top { - margin-top: -10px -} - -.popover.right { - margin-left: 10px -} - -.popover.bottom { - margin-top: 10px -} - -.popover.left { - margin-left: -10px -} - -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0 -} - -.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 { - content: ""; - border-width: 10px -} - -.popover.top>.arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, .25); - border-bottom-width: 0 -} - -.popover.top>.arrow:after { - bottom: 1px; - margin-left: -10px; - content: " "; - border-top-color: #fff; - border-bottom-width: 0 -} - -.popover.right>.arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, .25); - border-left-width: 0 -} - -.popover.right>.arrow:after { - bottom: -10px; - left: 1px; - content: " "; - border-right-color: #fff; - border-left-width: 0 -} - -.popover.bottom>.arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, .25) -} - -.popover.bottom>.arrow:after { - top: 1px; - margin-left: -10px; - content: " "; - 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, .25) -} - -.popover.left>.arrow:after { - right: 1px; - bottom: -10px; - content: " "; - border-right-width: 0; - border-left-color: #fff -} - - -@media screen and (min-width:768px) { - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next, - .carousel-control .icon-prev { - width: 30px; - height: 30px; - margin-top: -15px; - font-size: 30px - } - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -15px - } - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -15px - } - .carousel-caption { - right: 20%; - left: 20%; - padding-bottom: 30px - } - .carousel-indicators { - bottom: 20px - } -} - -.btn-group-vertical>.btn-group:after, -.btn-group-vertical>.btn-group:before, -.btn-toolbar:after, -.btn-toolbar:before, -.clearfix:after, -.clearfix:before, -.container-fluid:after, -.container-fluid:before, -.container:after, -.container:before, -.dl-horizontal dd:after, -.dl-horizontal dd:before, -.form-horizontal .form-group:after, -.form-horizontal .form-group:before, -.modal-footer:after, -.modal-footer:before, -.nav:after, -.nav:before, -.navbar-collapse:after, -.navbar-collapse:before, -.navbar-header:after, -.navbar-header:before, -.navbar:after, -.navbar:before, -.pager:after, -.pager:before, -.panel-body:after, -.panel-body:before, -.row:after, -.row:before { - display: table; - content: " " -} - -.btn-group-vertical>.btn-group:after, -.btn-toolbar:after, -.clearfix:after, -.container-fluid:after, -.container:after, -.dl-horizontal dd:after, -.form-horizontal .form-group:after, -.modal-footer:after, -.nav:after, -.navbar-collapse:after, -.navbar-header:after, -.navbar:after, -.pager:after, -.panel-body:after, -.row:after { - clear: both -} - -.center-block { - display: block; - margin-right: auto; - margin-left: auto -} - -.pull-right { - float: right!important -} - -.pull-left { - float: left!important -} - -.hide { - display: none!important -} - -.show { - display: block!important -} - -.invisible { - visibility: hidden -} - -.text-hide { - font: 0/0 a; - color: transparent; - background-color: transparent; - border: 0 -} - -.hidden { - display: none!important; - visibility: hidden!important -} - -.affix { - position: fixed -} - -@-ms-viewport { - width: device-width -} - -.visible-lg, -.visible-md, -.visible-sm, -.visible-xs { - display: none!important -} - -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block { - display: none!important -} - -@media (max-width:767px) { - .visible-xs { - display: block!important - } - table.visible-xs { - display: table - } - tr.visible-xs { - display: table-row!important - } - td.visible-xs, - th.visible-xs { - display: table-cell!important - } -} - -@media (max-width:767px) { - .visible-xs-block { - display: block!important - } -} - -@media (max-width:767px) { - .visible-xs-inline { - display: inline!important - } -} - -@media (max-width:767px) { - .visible-xs-inline-block { - display: inline-block!important - } -} - -@media (min-width:768px) and (max-width:991px) { - .visible-sm { - display: block!important - } - table.visible-sm { - display: table - } - tr.visible-sm { - display: table-row!important - } - td.visible-sm, - th.visible-sm { - display: table-cell!important - } -} - -@media (min-width:768px) and (max-width:991px) { - .visible-sm-block { - display: block!important - } -} - -@media (min-width:768px) and (max-width:991px) { - .visible-sm-inline { - display: inline!important - } -} - -@media (min-width:768px) and (max-width:991px) { - .visible-sm-inline-block { - display: inline-block!important - } -} - -@media (min-width:992px) and (max-width:1199px) { - .visible-md { - display: block!important - } - table.visible-md { - display: table - } - tr.visible-md { - display: table-row!important - } - td.visible-md, - th.visible-md { - display: table-cell!important - } -} - -@media (min-width:992px) and (max-width:1199px) { - .visible-md-block { - display: block!important - } -} - -@media (min-width:992px) and (max-width:1199px) { - .visible-md-inline { - display: inline!important - } -} - -@media (min-width:992px) and (max-width:1199px) { - .visible-md-inline-block { - display: inline-block!important - } -} - -@media (min-width:1200px) { - .visible-lg { - display: block!important - } - table.visible-lg { - display: table - } - tr.visible-lg { - display: table-row!important - } - td.visible-lg, - th.visible-lg { - display: table-cell!important - } -} - -@media (min-width:1200px) { - .visible-lg-block { - display: block!important - } -} - -@media (min-width:1200px) { - .visible-lg-inline { - display: inline!important - } -} - -@media (min-width:1200px) { - .visible-lg-inline-block { - display: inline-block!important - } -} - -@media (max-width:767px) { - .hidden-xs { - display: none!important - } -} - -@media (min-width:768px) and (max-width:991px) { - .hidden-sm { - display: none!important - } -} - -@media (min-width:992px) and (max-width:1199px) { - .hidden-md { - display: none!important - } -} - -@media (min-width:1200px) { - .hidden-lg { - display: none!important - } -} - -.visible-print { - display: none!important -} - -@media print { - .visible-print { - display: block!important - } - table.visible-print { - display: table - } - tr.visible-print { - display: table-row!important - } - td.visible-print, - th.visible-print { - display: table-cell!important - } -} - -.visible-print-block { - display: none!important -} - -@media print { - .visible-print-block { - display: block!important - } -} - -.visible-print-inline { - display: none!important -} - -@media print { - .visible-print-inline { - display: inline!important - } -} - -.visible-print-inline-block { - display: none!important -} - -@media print { - .visible-print-inline-block { - display: inline-block!important - } -} - -@media print { - .hidden-print { - display: none!important - } -} diff --git a/docs/css/boxshadowproperties.css b/docs/css/boxshadowproperties.css deleted file mode 100644 index 0f2e1e6..0000000 --- a/docs/css/boxshadowproperties.css +++ /dev/null @@ -1,24 +0,0 @@ -/* box-shadow fonts return errors with prince, so extracting here to put in web output only */ - -#search-demo-container ul#results-container { - box-shadow: 2px 3px 2px #dedede; -} - - -hr.shaded { - box-shadow: inset 0 6px 6px -6px rgba(0,0,0,0.5); -} - -.videoThumbs img { - box-shadow: 2px 2px 1px #f0f0f0; -} - -.box { - box-shadow: 2px 2px 4px #dedede; -} - -@media (max-width: 1200px) { - .navbar-collapse { - box-shadow: inset 0 1px 0 rgba(255,255,255,0.1); - } -} diff --git a/docs/css/customstyles.css b/docs/css/customstyles.css deleted file mode 100644 index e3f1532..0000000 --- a/docs/css/customstyles.css +++ /dev/null @@ -1,1306 +0,0 @@ -.anchor-link { - display: none; -} - -body { - font-size:15px; -} - -.bs-callout { - padding: 20px; - margin: 20px 0; - border: 1px solid #eee; - border-left-width: 5px; - border-radius: 3px; -} -.bs-callout h4 { - margin-top: 0; - margin-bottom: 5px; -} -.bs-callout p:last-child { - margin-bottom: 0; -} -.bs-callout code { - border-radius: 3px; -} -.bs-callout+.bs-callout { - margin-top: -5px; -} -.bs-callout-default { - border-left-color: #777; -} -.bs-callout-default h4 { - color: #777; -} -.bs-callout-primary { - border-left-color: #428bca; -} -.bs-callout-primary h4 { - color: #428bca; -} -.bs-callout-success { - border-left-color: #5cb85c; -} -.bs-callout-success h4 { - color: #5cb85c; -} -.bs-callout-danger { - border-left-color: #d9534f; -} -.bs-callout-danger h4 { - color: #d9534f; -} -.bs-callout-warning { - border-left-color: #f0ad4e; -} -.bs-callout-warning h4 { - color: #f0ad4e; -} -.bs-callout-info { - border-left-color: #5bc0de; -} -.bs-callout-info h4 { - color: #5bc0de; -} - - -.gi-2x{font-size: 2em;} -.gi-3x{font-size: 3em;} -.gi-4x{font-size: 4em;} -.gi-5x{font-size: 5em;} - - -.breadcrumb > .active {color: #777 !important;} - -/* make room for the nav bar */ -h1[id] -/*,h2[id], -h3[id], -h4[id], -h5[id], -h6[id], -dt[id]*/ -{ -padding-top: 60px; -margin-top: -40px -} - -.output_html a{ - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - margin: 25px 0px; - display: block; - padding: 9.5px; - font-size: 13px; - line-height: 1.42857143; - color: #333; - word-break: break-all; - word-wrap: break-word; - background-color: #F5F5F5; - border: 1px solid #FFA500; - border-radius: 4px; - white-space: pre-wrap; - box-sizing: border-box; - overflow: auto; -} - -.col-md-1, .col-md-10, .col-md-11, .col-md-12, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9 { - float: left; -} - -.col-md-9 { - width: 75%; -} - -/* From: https://www.w3schools.com/howto/tryit.asp?filename=tryhow_css_download_button' */ -.cstm_btn a{ - background-color: DodgerBlue; - border: none; - color: white; - padding: 12px 30px; - cursor: pointer; - font-size: 20px; - box-sizing: 15px; - position: absolute; -} - -/* Darker background on mouse-over */ -.cstm_btn a:hover { - background-color: RoyalBlue; -} - -.container #notebook-container{ - width: 100%; - box-sizing: border-box; - } - -.post-content img { - margin: 12px 0px 3px 0px; - width: auto; - height: auto; - max-width: 100%; - max-height: 100%; -} - -.post-content ol li, .post-content ul li { - margin: 10px 0px; -} - -.pageSummary { - font-size:13px; - display:block; - margin-bottom:15px; - padding-left:20px; -} - -.post-summary { - margin-bottom:12px; -} - -.bs-example{ - margin: 20px; -} - -.breadcrumb li { - color: gray; -} - -table { - background-color: transparent; -} -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #777; - text-align: left; -} -th { - text-align: left; -} -table { - max-width: 90%; - margin-bottom: 20px; - border: 1px solid #dedede; -} - -table > thead > tr > th, -table > tbody > tr > th, -table > tfoot > tr > th, -table > thead > tr > td, -table > tbody > tr > td, -table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #ddd; -} -table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #ddd; - text-transform: none; - background-color: #777; - color: white; - text-align: left; -} -table > caption + thead > tr:first-child > th, -table > colgroup + thead > tr:first-child > th, -table > thead:first-child > tr:first-child > th, -table > caption + thead > tr:first-child > td, -table > colgroup + thead > tr:first-child > td, -table > thead:first-child > tr:first-child > td { - border-top: 0; -} - -table > tbody > tr:nth-of-type(odd) { - background-color: #f9f9f9; -} - -table col[class*="col-"] { - position: static; - display: table-column; - float: none; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - display: table-cell; - float: none; -} - -table tr td { - hyphens: auto; -} - - -p.external a { - text-align:right; - font-size:12px; - color: #0088cc; - display:inline; -} - -#definition-box-container div a.active { - font-weight: bold; -} -p.post-meta {font-size: 80%; color: #777;} - -.entry-date{font-size:14px;font-size:0.875rem;line-height:1.71429;margin-bottom:0;text-transform:uppercase;} - -/* search area */ -#search-demo-container ul#results-container { - list-style: none; - font-size: 12px; - background-color: white; - position: absolute; - top: 40px; /* if you change anything about the nav, you'll prob. need to reset the top and left values here.*/ - left: 20px; - z-index: -1; - width:223px; - border-left: 1px solid #dedede; -} - - -ul#results-container a { - background-color: transparent; -} - -ul#results-container a:hover { - color: black; -} - - -#search-demo-container a:hover { - color: black; -} -#search-input { - padding: .5em; - margin-left:20px; - width:20em; - font-size: 0.8em; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - margin-top:10px; -} -/* end search */ - -.filter-options { - margin-bottom: 20px; -} -.filter-options button { - margin: 3px; -} - -a.source_link { - float:right; - font-size:15px; - font-weight:normal; -} - -div#toc ul { - font-size: 90%; - background-color: whitesmoke; - padding: 5px; - border-radius: 5px; - max-width: 450px; - color: gray; - list-style-type: none; -} - -/* when using relative fonts like 0.9em or 90%, remember to then set the nested items to 1em or 100%, otherwise each level will get smaller and smaller and less readable */ -div#toc ul li { - margin: 8px 0px 8px 22px; - font-size: 100%; - list-style-type: none; -} - -div#toc ul li ul { - font-size: 100%; - padding-left:30px; - padding-top: 0px; - padding-bottom: 0px; - list-style-type: none; -} - -div#toc ul li ul li.hide_content::before { - content: none; -} - -div#toc >ul::before { - content: "Table of Contents"; - font-weight: 500; - color: #555; - text-align:center; - margin-left:auto; - margin-right:auto; - width:70px; - padding-top:150px; - padding-bottom:40px; - padding-left:10px; -} - -li.dropdownActive a { - font-weight: bold; -} - - -.post-content a.fa-rss { - color: orange; -} - - -.navbar-inverse .navbar-nav > li > a { - background-color: transparent; - margin-top:10px; -} - -.post-content .rssfeedLink { - color: #248EC2; -} - -footer { - font-size: smaller; -} - -/* FAQ page */ -#accordion .panel-heading { - font-size: 12px; -} - -a.accordion-toggle, a.accordion-collapsed { - font-size: 14px; - text-decoration: none; -} - -/* navgoco sidebar styles (customized) */ -.nav, .nav ul, .nav li { - list-style: none; -} - -.nav ul { - padding: 0; - /*margin: 0 0 0 18px;*/ - margin:0px; -} - -.nav { - /* padding: 4px;*/ - padding:0px; - margin: 0px; -} - -.nav > li { - margin: 1px 0; -} - -.nav > li li { - margin: 2px 0; -} - -.nav a { - color: #333; - display: block; - outline: none; - /*-webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px;*/ - text-decoration: none; -} - -.nav li > a > span { - float: right; - font-size: 19px; - font-weight: bolder; -} - - -.nav li > a > span:after { - content: '\25be'; -} -.nav li.active > a > span:after { - content: '\25b4'; -} - -.nav a:hover, .nav li.active > a { - background-color: #8D8D8D; - color: #f5f5f5; -} - -.nav > li.active > a { -background-color: #347DBE; -} - -.nav li a { - font-size: 12px; - line-height: 18px; - padding: 2px 10px; - background-color: #f1f1f1; -} - -.nav > li > a { - font-size: 14px; - line-height: 20px; - padding: 4px 10px; -} - -ul#mysidebar { - border-radius:0px; -} - -.nav ul li ul li a { - padding-left:40px; -} - -.nav li.thirdlevel > a { - color: #248EC2; - font-weight:bold; - padding-left:20px; - background-color: whitesmoke !important; -} - - -.nav ul li a { - background-color: #FAFAFA; -} - -.nav li a { - padding-right:10px; -} - -.nav li a:hover { - background-color: #8D8D8D; -} - -.nav ul li a { - border-top:1px solid whitesmoke; - padding-left:10px; -} -/* end sidebar */ - -.navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { - border-radius:5px; -} - -.navbar-inverse .navbar-nav>.open>a, .navbar-inverse .navbar-nav>.open>a:focus, .navbar-inverse .navbar-nav>.open>a:hover { - border-radius: 5px; -} - -span.projectTitle { - font-family: Helvetica; - font-weight: bold; -} - -.footer { - text-align: right; -} - -.footerMeta { - background-color: whitesmoke; - padding: 10px; - max-width: 250px; - border-radius: 5px; - margin-top: 50px; - font-style:italic; - font-size:12px; -} - -img.screenshotSmall { - max-width: 300px; -} - - -dl dt p { - margin-left:20px; -} - - -dl dd { - margin-top:10px; - margin-bottom:10px; -} - -dl.dl-horizontal dd { - padding-top: 20px; -} - -figcaption { - - padding-bottom:12px; - padding-top:6px; - max-width: 90%; - margin-bottom:20px; - font-style: italic; - color: gray; - -} - -.testing { - color: orange; -} - -.preference { - color: red; -} - - -table.dataTable thead { - background-color: #444; -} -table td { - hyphens: auto; -} - -section table tr.success { - background-color: #dff0d8 !important; -} - -table tr.info { - background-color: #d9edf7 !important; -} - -section table tr.warning, table tr.testing, table tr.testing > td.sorting_1 { - background-color: #fcf8e3 !important; -} -section table tr.danger, table tr.preference, table tr.preference > td.sorting_1 { - background-color: #f2dede !important; -} - -.orange { - color: orange; -} - -table.profile thead tr th { - background-color: #248ec2; -} - -table.request thead tr th { - background-color: #ED1951; -} - -.audienceLabel { - margin: 10px; - float: right; - border:1px solid #dedede; - padding:7px; -} - -.prefaceAudienceLabel { - color: gray; - text-align: center; - margin:5px; -} -span.myLabel { - padding-left:10px; - padding-right:10px; -} - -button.cursorNorm { - cursor: default; -} - -a.dropdown-toggle, .navbar-inverse .navbar-nav > li > a { - margin-left: 10px; -} - -hr.faded { - border: 0; - height: 1px; - background-image: -webkit-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0)); - background-image: -moz-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0)); - background-image: -ms-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0)); - background-image: -o-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0)); -} - -hr.shaded { - height: 12px; - border: 0; - margin-top: 70px; - background: white; - width: 100%; - margin-bottom: 10px; -} - -.fa-6x{font-size:900%;} -.fa-7x{font-size:1100%;} -.fa-8x{font-size:1300%;} -.fa-9x{font-size:1500%;} -.fa-10x{font-size:1700%;} - -i.border { - padding: 10px 20px; - background-color: whitesmoke; -} - -a[data-toggle] { - color: #248EC2; -} - -.summary { - font-size:120%; - color: #808080; - margin:20px 0px 20px 0px; - border-left: 5px solid #ED1951; - padding-left: 10px; - -} - -a.fa.fa-envelope-o.mailto { - font-weight: 600; -} - -h3 {color: #ED1951; font-weight:normal; font-size:130%;} -h4 {color: #000000; font-weight:normal; font-size:120%; font-weight:bold;} - -.alert, .callout { - overflow: hidden; -} - -.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { - background-color: #248ec2; - color: white; -} - -ol li ol li {list-style-type: lower-alpha;} -ol li ul li {list-style-type: disc;} - -li img {clear:both; } - -div#toc ul li ul li { - list-style-type: none; - margin: 5px 0px 0px 0px; -} - -.tab-content { - padding: 15px; - background-color: #FAFAFA; -} - -span.tagTitle {font-weight: 500;} - -li.activeSeries { - font-weight: bold; -} - -.seriesContext .dropdown-menu li.active { - font-weight: bold; - margin-left: 43px; - font-size:18px; -} - -.alert-warning { - color: #444; -} - -div.alert code, h2 code { - background-color: transparent !important; -} -/* without this, the links in these notes aren't visible.*/ -.alert a { - text-decoration: underline; -} - -div.tags {padding: 10px 5px;} - -.tabLabel { - font-weight: normal; -} - -hr { - background: #999; - margin: 30px 0px; - width: 90%; - margin-left: auto; - margin-right: auto; -} - -button.cursorNorm { - cursor: pointer; -} - -h2 { - font-size:24px; - line-height:29px; - border-top: 3px solid blue; - padding-top: 5px; -} - -span.otherProgrammingLanguages { - font-style: normal; -} - -a[data-toggle="tooltip"] { - color: #649345; - font-style: italic; - cursor: default; -} - -.seriesNext, .seriesContext { - margin-top: 15px; - margin-bottom: 15px; -} - -.seriescontext ol li { - list-style-type: upper-roman; -} - -ol.series li { - list-style-type: decimal; - margin-left: 40px; - padding-left: 0px; -} - -.siteTagline { - font-size: 200%; - font-weight: bold; - color: silver; - font-family: monospace; - text-align: center; - line-height: 10px; - margin: 20px 0px; - display: block; -} - -.versionTagline { - text-align: center; - margin-bottom: 20px; - font-family: courier; - color: silver; - color: #444; - display:block; -} - -/* not sure if using this ...*/ -.navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { - border-color: #248ec2 !important; -} - -#mysidebar .nav ul { - background-color: #FAFAFA; -} -.nav ul.series li { - list-style: decimal; - font-size:12px; -} - -.nav ul.series li a:hover { - background-color: gray; -} -.nav ul.series { - padding-left: 30px; -} - -.nav ul.series { - background-color: #FAFAFA; -} - -/* -a.dropdown-toggle.otherProgLangs { - color: #f7e68f !important; -} -*/ - -span.muted {color: #666;} - -table code {background-color: transparent;} - -.highlight .err { - color: #a61717; - background-color: transparent !important; -} - -table p { - margin-top: 12px; - margin-bottom: 12px; -} - -pre, table code { - white-space: pre-wrap; /* css-3 */ - white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - word-wrap: break-word; /* Internet Explorer 5.5+ */ -} - -pre { - margin: 25px 0px; -} - -#json-box-container pre { - margin: 0px; -} - -.video-js { - margin: 30px 0px; -} - -video { - display: block; - margin: 30px 0px; - border: 1px solid #c0c0c0; -} - - -p.required, p.dataType {display: block; color: #c0c0c0; font-size: 80%; margin-left:4px;} - -dd {margin-left:20px;} - -.post-content img.inline { - margin:0px; - margin-bottom:6px; -} -.panel-heading { - font-weight: bold; -} - -.note code, .alert code, .warning code, div#toc code, h2 code, h3 code, h4 code { - color: inherit; - padding: 0px; -} - -.alert { - margin-bottom:10px; - margin-top:10px; -} - -a.accordion-toggle { - font-style: normal; -} - -span.red { - color: red; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; -} - -h3.codeExplanation { - font-size:18px; - font-style:normal; - color: black; - line-height: 24px; -} - -span.soft { - color: #c0c0c0; -} - -.githubEditButton { - margin-bottom:7px; -} - -.endpoint { - padding: 15px; - background-color: #f0f0f0; - font-family: courier; - font-size: 110%; - margin: 20px 0px; - color: #444; -} - -.parameter { - font-family: courier; - color: red !important; -} - -.formBoundary { - border: 1px solid gray; - padding: 15px; - margin: 15px 0px; - background-color: whitesmoke; -} - -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #444; - } -} - -@media (max-width: 990px) { - #mysidebar { - position: relative; - } - .col-md-9 { - width: 95%; - } -} - - -@media (min-width: 1000px) { - - ul#mysidebar { - width: 225px; - } -} - -@media (max-width: 900px) { - - ul#mysidebar { - max-width: 100%; - } -} - -.col-md-9 img { - max-width: 100%; - max-height: 100%; -} - - -.post-content img { - margin: 12px 0px 3px 0px; - width: auto; - height: auto; - max-width: 100%; - max-height: 100%; -} -.col-md-9 img { - max-width: 100%; - max-height: 100%; -} - - -.post-content img { - margin: 12px 0px 3px 0px; - width: auto; - height: auto; - max-width: 100%; - max-height: 100%; -} - -.videoThumbs img { - float: left; - margin:15px 15px 15px 0px; - border: 1px solid #dedede; -} - - -@media only screen and (min-width: 900px), only screen and (min-device-width: 900px) { - .col-md-9 img { - max-width: 990px; - max-height: 700px; - } -} - -*:hover > .anchorjs-link { - transition: color .25s linear; - text-decoration: none; -} - -.kbCaption { - color: white; - background-color: #444; - padding:10px; -} - -/* Strip the outbound icon when this class is present */ -a[href].noCrossRef::after, -a.no_icon:after - { - content:"" !important; - padding-left: 0; -} - -.btn-default { - margin-bottom: 10px; -} - -/* algolia search */ - -.search { - text-align: left; -} -.search input { - font-size: 20px; - width: 300px; -} -.results { - margin: auto; - text-align: left; -} -.results ul { - list-style-type: none; - padding: 0; -} - -/* algolia */ - -div.results { - position: absolute; - background-color: white; - width: 100%; -} - -.post-meta { - font-size: 14px; - color: #828282; -} - -.post-link { - font-size: 22px; -} - -.post-list p { - margin: 10px 0px; -} - -time { - margin-right: 10px; -} - -p.post-meta time { - margin-right: 0px; -} - -span.label.label-default { - background-color: gray; -} - -span.label.label-primary { - background-color: #f0ad4e; -} -.col-lg-12 .nav li a {background-color: white} - - -.nav li.active > a.subfoldersTitle { - background-color: whitesmoke; - font-weight: bold; - color: black; - } - -code { - color: #1d1f5b; - background-color: #f3f3f3; -} - -a code { - color: #0082C2; -} - -table th code { - color: white; -} - -ol li ul li ol li { - list-style: decimal; -} - -ol li ul li ol li ul li{ - list-style: disc; -} - -.post-content table th { - vertical-align: top; -} - -table thead th code.highlighter-rouge { - background-color: transparent; -} - - -.box { - padding: 10px; - border: 1px solid #888; - width: 100px; - height: 80px; - background-color: #f5f5f5; - font-family: Arial; - font-size: 12px; - hyphens: auto; - float: left; - font-size: 12px; -} - -.box:hover { - background-color: #f0f0f0; -} - -#userMap { - overflow-x: auto; - overflow-y: auto; - padding: 20px; - min-width: 770px; -} - -#userMap .active { - background-color: #d6f5d6; - border:1px solid #555; - font-weight: bold; -} - -h2.userMapTitle { - font-family: Arial; -} - -#userMap a:hover { - text-decoration: none; - } - -div.arrow { - max-width: 50px; - margin-left: 15px; - margin-right: 15px; - font-size: 20px; -} - -div.content { - max-width: 110px -} - -#userMap div.arrow, #userMap div.content { - float: left; -} - -.clearfix { - clear: both; -} - - -#userMap div.arrow { - position: relative; - top: 30px; -} - -.box1 { - margin-left:0px; -} - -button.btn.btn-default.btn-lg.modalButton1 { - margin-left: -20px; -} - -div.box.box1 { - margin-left: -20px; -} - -#userMap .btn-lg { - width: 100px; - height: 80px; - -} - -#userMap .complexArrow { - font-size: 22px; - margin: 0px 10px; -} - - -#userMap .btn-lg .active { - background-color: #d6f5d6; -} - -#userMap .btn-lg { - white-space: pre-wrap; /* css-3 */ - white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - word-wrap: break-word; /* Internet Explorer 5.5+ */ - font-size: 14px; - } - -/* - * Let's target IE to respect aspect ratios and sizes for img tags containing SVG files - * - * [1] IE9 - * [2] IE10+ - */ -/* 1 */ -.ie9 img[src$=".svg"] { - width: 100%; -} -/* 2 */ -@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { - img[src$=".svg"] { - width: 100%; - } -} - -h4.panel-title { - padding-top: 0px; - margin-top: 0px; -} - -/*set navbar breakpoint so that it converts to hamburger earlier */ - -@media (max-width: 1200px) { - .navbar-header { - float: none; - } - .navbar-left,.navbar-right { - float: none !important; - } - .navbar-toggle { - display: block; - } - .navbar-collapse { - border-top: 1px solid transparent; - } - .navbar-fixed-top { - top: 0; - border-width: 0 0 1px; - } - .navbar-collapse.collapse { - display: none!important; - } - .navbar-nav { - float: none!important; - margin-top: 7.5px; - } - .navbar-nav>li { - float: none; - } - .navbar-nav>li>a { - padding-top: 10px; - padding-bottom: 10px; - } - .collapse.in{ - display:block !important; - } -} - -.input_area pre { - padding-bottom: 3; - margin-top: 10px; - background-color: #f5f1e0; - border: 0px; -} -.output_area pre { - padding-top: 3; - margin-top: -25px; - margin-bottom: 10px; - border: 0px; - padding-left: 2em; -} -.pytest_card { - padding: 10px 1em 4px 1em; - background-color: #eef2ff; - border-radius: 5px; - margin-bottom: 20px; -} -.pytest_card .close { - color: #000 -} -blockquote { - font-family: Menlo,Monaco,Consolas,"Courier New",monospace; -} -blockquote code { - background-color: white; -} -h4 code { - background-color: white; -} - -/* Google Custom Search styling */ - -#gcs-search-container { - width: 340px !important; /* ToDo: define width without using absolute px value */ - display: inline-block !important; -} - -.gsc-search-box.gsc-search-box-tools table { - margin-bottom: 0px !important; -} -.gsc-input, .gsc-search-button { - padding: 0; -} -.gsc-control-cse { - padding: 6px !important; -} -input.gsc-input { - font-size: 12px !important; -} diff --git a/docs/css/font-awesome.min.css b/docs/css/font-awesome.min.css deleted file mode 100644 index 0e0645d..0000000 --- a/docs/css/font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('fonts/fontawesome-webfont.eot?v=4.7.0');src:url('fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/docs/css/fonts/FontAwesome.otf b/docs/css/fonts/FontAwesome.otf deleted file mode 100644 index 401ec0f36e4f73b8efa40bd6f604fe80d286db70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134808 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 diff --git a/docs/css/fonts/fontawesome-webfont.eot b/docs/css/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca953f93e35eab4108bd414bc02ddcf3928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165742 zcmd443w)Ht)jvM-T=tf|Uz5#kH`z;W1W0z103j^*Tev7F2#5hiQ9w~aka}5_DkxP1 zRJ3Y?7YePlysh?CD|XvjdsAv#YOS?>W2@EHO9NV8h3u2x_sp}KECIB>@9+Qn{FBV{ zJTr4<=FH5QnRCvZnOu5{#2&j@Vw_3r#2?PKa|-F4dtx{Ptp0P(#$Rn88poKQO<|X@ zOW8U$o^4<&*p=|D!J9EVI}`7V*m|~_En`<8B*M-{$Q6LOSfmND1Z!lia3ffVHQ_mu zwE*t)c_Na~v9UCh+1x2p=FeL7+|;L;bTeUAHg(eEDN-*};9m=WXwJOhO^lgVEPBX5Gh_bo8QSSFY{vM^4hsD-mzHX!X?>-tpg$&tfe27?V1mUAbb} z1dVewCjIN7C5$=lXROG% zX4%HIa)VTc_%^_YE?u@}#b58a4S8RL@|2s`UUucWZ{P9NJxp5Fi!#@Xx+(mZ+kdt3 zobw#*|6)Z(BxCGw^Gi+ncRvs|a|3xz=tRA9@HDV~1eqD)`^`KTPEg`UdXhq18})-@}JTHp30^)`L{?* z;c)alkYAc@67|W!7RDPu6Tsy@xJCK8{2T9-fJw6?@=A(w^}KCVjwlOd=JTO=3Zr+< zIdd?1zo-M^76}Jf!cpLfH`+2q=}d5id5XLcPw#xVocH5RVG7;@@%R>Sxpy8{(H9JH zY1V)?J1-AIeIxKhoG1%;AWq7C50ok3DSe?!Gatbry_zpS*VoS6`$~lK9E?(!mcrm1 z^cLZ1fmx5Ds`-ethCvMtDTz zMd=G1)gR$jic|1SaTLaL-{ePJOFkUs%j634IMp}dnR5yGMtsXmA$+JDyxRuSq*)bk zt3tSN2(J<@ooh3|!(R%VsE#5%U{m-mB7fcy&h(8kC(#>yA(JCmQ6|O1<=_U=0+$AY zC)@~M`UboR6Xm2?$e8Z$r#u8)TEP0~`viw@@+){#874R?kHRP|IU4&!?+9Cy52v^I zPV4Xd{9yc;)#l?0VS#6g@ z`#y))03Laq@^6Z#Z*uvzpl{$JzFJgn&xHlNBS|Eb!E@}~Z$^m!a9k34KX zT|VETZ;B_E$Ai8J#t5#kATCAUlqbr&P~-s)k^FfWyz}iK@`B$FI6L0u1uz5fgfqgU zRBmB>F8s_qp1HWm1!aXOEbpf`U?X|>{F`8Md500U3i;Mh9Kvbd(CeuC>077ww4g^h zKgM(A48W`XEDE~N*Th^NqP#S7&^w2Vpq+df2#@A*&4u~I+>t)9&GYcop9OtUo=;2d zGSq?IMBAYZffMC1v^|Z|AWdQ38UdJS4(H(nFI<|%=>0iAn3lvcSjIR(^7r7QuQI0a zm+@Z9QXmf!efG1**%Ryq_G-AQs-mi^*WO#v+tE9_cWLjXz1Q{L-uqzh z-Vb`UBlaT|M;ecG9GQJ&>5)s1TzBO5BM%;V{K#`h4juXPkq?e&N9{)|j&>ZKeRS#3 zOOIZ6^!B3<9)0}ib4L#y{qxZe{ss8}C5PC)Atkb2XK%PS)jPMht9Na0x_5hTckhAT zOz+FRJ-xk0*b(QE(2)^GQb*<<={mCZNczb3Bi%<19LXGc`AE-^-lOcO^Jw^J>ge2~ zT}Rg*O&{HUwEO6RqnV>GAMK$M`~TX%q<>-my#5LOBmex)pWgq|V@{jX>a;k`PLtE< zG&ohK;*_0|<6n-C93MK4I*vGc9shKE;CSEhp5tA|KOBE|yyJM=@i)g?jyD~Db^OKg zhNH*vXUCr$uRH$ec+K$#$E%LtJ6>`8&T-iBTicKH)SNMZS zB8UG!{1{Y=QL&oLMgLzR(}0Y>sN0TqgG|kLqv_VcVSLD)aJ?AC^D!bLa6K5Ut1)YA zghRXq;YBrYhrzOK23vXorq6v~v*CBb?*bYw$l-3J@cY5H}8Gr;t8{e8!J}L*5e>!hOQnM3g=8eoXDiYZBlmBW?=(Qvo;ib;hP4-|5>J zo6*MD%*UW90?aI=ncV;fJZB$fY|a73<^rd=!0(I%TsLE9TH#hRHV<&~b~82~@n<2= z1-*oTQL{zWh}4H zGjX>}SbW{R;(k^VBouiebp<&Q9S1P`GIlM(uLaz7TNt~37h`FJ-B1j-jj@}iF}B$Yhy1^cv|oM`3X|20-GXwq z0QapK#%@FUZ9ik|D}cWpad#li_7EK6?wrrq4l5kOc5H@2*p5ENc6Pxb%`OEl1=q{i zU1`Sdjxcu562^8fWbEEDi1(A=o?`5)DC_=i#vVX^45ZpSrpE35`g>WA+_QYDo!1%Byk?;4A*Y^%H_McC{^)mJp(mf6Mr$1rr8Klp< z@9$&m+0Bd{OfmMH!q^XxU*>tneq@E)#@LU6-}5Nz`DYpXi4*QA#$MRP*w045^)U8x zl=XAu_Y36n%QPIqUi^r$mjH7JWgdEmv0oiv>}BNj>jtO;GSSiGr=LO--M;f3$4%-kcdA5=kp1;?w1)iU%_3WyqWQmjf@AcVZ3xc<7I~# zFHgbYU4b-}3LN4>NEZft6=17@TlH$jBZ!NjjQC2%Yu;hJu9NWwZ@DynQp=tBj8Wjw$e9<5A{>pD{iW zZqogXPX_!HxT$LypN98z;4>ox_a@^r4>R7`&G@Wh#%HG(p9^;e{AczsK5r7^^FxfE z1>DZ=f&=UVl(8@Y2be_)+!n?cUjPUAC8+bcuQI+Aab3F@Uxu=lJpt$oQq38DE=X{7U3=m6P!eKVy6&>UK5q-?WYKFCon} zcwbuv_Xy+HBi;48;XYwJy_)eGknfFvzbOHS_{~WFRt)zJ zijpU?=0x zkwe%IkXL3J<39wBKYX6?A1iQgGX8uw<3E|t_zN{~?=k)}E8{7uHGX6%I@xLJ5o5hU3g}A@9GyXR4dV3$^??m7ZGyeD0jQ;~={sZ6d0>}3fa8JQ~ z#Q6Kj>z^jLM;Px_;9g|>2lp6?Oy32JW8UD|ZH#LugXW9=mzl&9Ov2uUBsVZgS;-{zFeKKwOfnbOFe$i&Nu~HMe}YLB^Wk1(Qs^2cg^_pF zV@!&4GARo9*fb`^0bBDClWMmysSaUvuQREB7n2(BZbV*M)y$0@8CXG!nX&m5FyO}f|^_bYrq)EtQ3jEW$ z;E;a$iwt`}|2xOlf`@fNIFLzjYz@1@vMcQB;TbKpR_b1>hK{W@uw#sVI6JqW86H;C ztQ;P%k-Nf8ey^cATop^SG>2V0mP~Z;=5SL5H#}UQ-NIABSS;9=rYBEjx70^!0%|%? z6H%vBBRb1si5UK{xwWyrI#6mdl~NhlB{DFSQ4f#HYnQ4Tr9_9++!S!BCwdbtt-PhV z2|9^MD=%7f(aK494ZCcz4t6dY`X;_62ywrIPovV+sT0pH?+{mwxjh%^> zh_?T`uiv2^KX}>z4HVY!Y%V1QDcBvi>!sD@MEbj99(bg@lcBxTD9~gYzfIm>7jFFl;^hEgOD8Clhu+6jw>0z&OhJ=2DoJ42R3QaA zWOOLCseE6;o!xG!?ra~f^>o~D+1yBE?qxT0^k{Eo?@YU;MW)Dk7u-Ja^-t=jry`Nm z^!iU;|I=I9eR|&CLf`eUDtM5Q2iZ}-MO8dOpsgMv)7Ge`r77T1(I!FduCuw%>+xyh zv~lQApLDjitE7#8{D!C9^9KL8O}^S6)E?BVMw_qP`rdoia-YG@KjOf%Qh4Bnt8Mcoi9h#JRYY3kEvn*UVbReO50BrmV+ z;MZw4c4)uX7XS38vL%mZ(`R5ww4GL|?R_+gqd5vmpyBRdmy(bdo1(0=sB8@yxdn)~lxbJjigu9=)pPhNBHJ@OCr@Hfy7 zMKpelG=3bck_~6$*c^5qw$ra?cd)OqZ$smlOvLJWm7$z_{bM*t_;dW+m52!n&yhSI z0)LYKbKpO(yrBb!r(;1ei=F17uvjq5XquDp?1L{4s1~Hu@I46id3j>UeJTcx0fQ!$ z&o9RBJJn}4D52n3P@|_Z2y%SzQ!WJ22E$LC;WNiX*{T?@;Pj!}DC|#~nZ>-HpIS<2 za>P22_kUiz%sLYqOLTT7B=H>lmeZ$;kr+*xoe54)>BRz1U!muO7@@$$G=552gn*!9 zJ(lYeq-%(OX#D?e|IqRz)>flsYTDXrc#58b-%`5Jmp#FEV%&+o&w?z>k%vUF^x&@! zd}aqf<-yN_(1OoX0~BNi5+XV}sW1Mo_rky5sw&#MPqeg*Iv+ow^-qi|g!>=1)d@|( zIJ=tJ4Yw%YfhiFbenxIIR1N1mmKeveFq!eFI?k+2%4<3`YlV3hM zS45R<;g^uVtW5iZbSGet@1^}8sBUEktA@_c>)?i}IE-EQTR@N-j%b9$Syc1{S3U?8e~d3B1?Lij0H27USiF&gR}A>wG-vBGIPuh*4ry;{Khxekv}wCTm%_>vhFZSJ)Pw2iv6Q4YVoQ`J2w?yCkiavVTWeVa)j|q=T9@J0pTtcQX!VHnIM6Al- z^*7Og!1y$xN4)5fYK&2X5x-Om4A;1k20|=O+$wl^1T}IRHkcq<^P$a{C0fAii(ypB z{ef1n(U1a&g|>5}zY?N{!tOqN_uYr3yPejjJ>KeR7IW!#ztw(g!*Hj~SpH|bkC%t5kd^Q2w*f{D8tJPwQ z++kT&2yEHVY_jXXBg!P7SUbSC;y1@rj$sqoMWF2=y$%ua1S%Nn_dvGwR*;O^!Fd?1 z8#WkKL1{>+GcdW?sX2^RC#k8D;~{~1M4#fpPxGDbOWPf?oRS^(Y!}arFj}-9Ta5B$ zZhP0#34P$Fx`;w}a*AU%t?#oPQ+U$umO}+(WIxS!wnBcQuM;%yiYhbKnNwXa7LiRjmf+(2(ZG}wiz%sgWJi>jgGIsPnZ=KfX?8mJ2^L!4-hBx#UR zZa((80+3k2t!n9h@La(dm&Qrs_teRTeB}Y= zShqm6zJdPGS+juA6^_Mu3_1sz1Hvx#*|M6pnqz`jk<&F@Wt;g%i&gunm7lM5)wE@q zvbn6Q=6IU;C_@UMWs|fmylAcBqr(MowarQT7@9BsXzyH534G z1e0`Rlnqb_RAIW{M7dQoxdg$ z;&VZRA?1jrgF9nN0lg?)7VU>c#YI}iVKVtMV&I^SUL2sA9Xn2<8mY@_)qZF;^OV!$ z;QVMjZTMUtC^eDXuo)DkX75sJ*#d6g{w?U1!Fbwid(nlSiF_z zStRqVrV`8MJBg{|ZM^Kzrps2`fI(Eq&qUZ%VCjWLQn)GthGkFz0LcT(tUy)_i~PWb ze1obC@Hu0-n}r4LO@8%lp3+uoAMDWnx#|WFhG&pQo@eXSCzjp(&Xl4$kfY60LiIx^ zs+SA=sm(K<-^V>WxOdf!NXC0qN&86q?xh#r;L)>)B|KXvOuO+4*98HO?4jfcxpk`^ zU^8+npM|PWn*7Nj9O_U%@pt)^gcu2m|17^}h}J6KWCJ>t zv@Qsc2z0711@V0%PDVqW?i)a)=GC>nC+Kx~*FeS}p5iNes=&dpY_lv9^<|K`GOJMG zE5^7&yqgjFK*qz6I-su3QFo4`PbRSbk|gNIa3+>jPUVH}5I6C)+!U&5lUe4HyYIe4 z>&a$lqL(n;XP)9F?USc6ZA6!;oE+i8ksYGTfe8;xbPFg9e&VVdrRpkO9Zch#cxJH7 z%@Bt~=_%2;shO9|R5K-|zrSznwM%ZBp3!<;&S0$4H~PJ&S3PrGtf}StbLZKDF_le= z9k)|^Do10}k~3$n&#EP*_H_-3h8^ZuQ2JXaU@zY|dW@$oQAY%Z@s0V8+F~YQ=#aqp z=je#~nV5}oI1J`wLIQ^&`Mj01oDZ;O`V>BvWCRJd%56g!((T@-{aY6fa;a0Vs+v@O z0IK2dXum&DKB?-ese^F~xB8#t6TFirdTy3(-MedKc;2cI&D}ztv4^I%ThCj* ziyQ90UpuyI`FYm%sUlWqP(!Qcg-7n%dk-&uY15{cw0HD+gbuz}CQP*u8*(+KCYFiz80m1pT=kmx0(q(xrCPMsUH1k{mefDSp) zD5G^q?m1N%Jbl&_iz65-uBs{~7YjNpQ%+H^=H7i%nHnwimHSGDPZ(Z;cWG1wcZw|v z%*juq&!(bo!`O7T>Wkon^QZ-rLvkd_^z#)5Hg zxufObryg!`lzZc#{xRRv6592P5fce0Hl-xEm^*nBcP$v z0`KR64y6=xK{a*oNxW9jv+9)$I9SxN-Oig_c%UK7hZDj_WEb$BDlO#*M?@b>eU7 zxN!%UE+w#Wg$bqFfc# zeDOpwnoY)%(93rx(=q9nQKg6?XKJZrRP#oo(u>h_l6NOMld)_IF( zs6M+iRmTC+ALc}C7V>JEuRjk9o)*YO8Y}oKQNl2t?D;qFLv4U`StSyoFzFYuq>i@C zEa1!N?B0BK0gjTwsL04McVmu=$6B!!-4bi1u_j7ZpCQm-l2u7AlYMmx zH!4a*@eEhENs{b-gUMy{c*AjMjcwAWGv@lW4YQtoQvvf*jQ2wL8+EGF4rQjAc;uiEzG%4uf z9wX{X3(U5*s$>6M z)n+q=_&#l6nEa|4ez8YOb9q{(?8h1|AYN<53x+g()8?U_N+)sEV;tdoV{pJ^DTD)ZvO|;^t&(V6L2z~TSiWu zI&#bLG#NGMHVY^mJXXH_jBGA?Np1q;)EYzS3U=1VKn3aXyU}xGihu`L8($R|e#HpJ zzo`QozgXO&25>bM*l>oHk|GV&2I+U-2>)u7C$^yP7gAuth~}8}eO^2>X_8+G@2GX0 zUG8;wZgm*=I4#ww{Ufg2!~-Uu*`{`!$+eE)in1}WPMJ%i|32CjmFLR8);bg^+jrF* zW0A!Zuas6whwVl!G+Vp(ysAHq9%glv8)6>Sr8w=pzPe1s`fRb9oO^yGOQW^-OZ=5? zNNaJk+iSAxa}{PtjC&tu_+{8J_cw=JiFhMqFC!}FHB@j}@Q$b&*h-^U)Y&U$fDWad zC!K&D&RZgww6M(~`@DA92;#vDM1_`->Ss*g8*57^PdIP-=;>u#;wD4g#4|T7ZytTY zx(Q8lO+5Ris0v-@GZXC@|&A*DPrZ51ZeSyziwc>%X>dNyCAL zOSDTJAwK7d2@UOGmtsjCPM9{#I9Gbb7#z25{*;Tyl-Zho(Oh~-u(5CLQl;2ot%#Nl z_cf{VEA=LuSylKv$-{%A=U+QBv0&8bP;vDOcU|zc3n!Nu{9=5j6^6DL&6tm-J4|~) z9#1w(@m3N|G3n9Xf)O<|NO+P)+F(TgqN3E#F8`eIrDZn0=@MQ%cDBb8e*D_eBUXH+ zOtn|s5j9y2W~uaQm*j{3fV=j|wxar?@^xjmPHKMYy0eTPkG*<=QA$Wf)g`tfRlZ0v ztEyRwH(8<%&+zbQ+pg>z^Ucf8Jj>x$N*h{buawh;61^S+&ZX>H^j?#nw!}!~35^Z# zqU|=INy-tBD+E^RCJdtvC_M2+Bx*2%C6nTfGS!1b*MJvhKZZPkBfkjIFf@kLBCdo) zszai4sxmBgklbZ>Iqddc=N%2_4$qxi==t>5E!Ll+-y(NJc+^l)uMgMZH+KM<|+cUS^t~AUy&z{UpW?AA~QO;;xntfuA^Rj7SU%j)& zVs~)K>u%=e(ooP|$In{9cdb}2l?KYZinZ8o+i;N-baM#CG$-JMDcX1$y9-L(TsuaT zfPY9MCb3xN8WGxNDB@4sjvZ10JTUS1Snvy5l9QPbZJ1#AG@_xCVXxndg&0Cz99x`Z zKvV%^1YbB2L)tU+ww(e6EZYzc6gI5g;!?*}TsL=hotb0Mow8kxW*HVdXfdVep4yL` zdfTcM*7nwv5)3M-)^@ASp~`(sR`IsMgXV>xPx0&5!lR8(L&vn@?_Oi2EXy)sj?Q8S$Mm zP{=PsbQ)rJtxy*+R9EqNek1fupF(7d1z|uHBZdEQMm`l!QnDTsJ_DX2E=_R?o*D5) z4}Rh2eEvVeTQ^UXfsDXgAf@6dtaXG>!t?(&-a~B^KF@z*dl$BLVOt|yVElz!`rm5n z&%<$O{7{?+>7|f%3ctTlD}Sc0Zs_hY;YO-&eOIT+Kh%FJdM|_@8b7qIL;aj#^MhF1 z(>x4_KPKYTl+AOj0Q$t3La4&;o`HP%m8bgb`*0vs83ZT@J#{j%7e8dKm;){k%rMw* zG9eKbw_mh1PHLUB$7VNcJ=oL;nV~#W;r|rv;ISD5+Q-FH5g~=&gD`RrnNm>lGJ1GE zw`K+PW!P*uxsEyAzhLvBOEUkj>)1sV6q-RhP*nGS(JD%Z$|wijTm)a5S+oj03MzBz zPjp$XjyM!3`cFtv`8wrA`EpL(8Soof9J(X7wr2l^Y-+>){TrmrhW&h}yVPonlai>; zrF!_zz4@5^8y@95z(7+GLY@+~o<>}!RDp|@N4vi4Y-r@AF@6Q7ET8d9j~&O$3l#Yuo`voKB12v8pK*p3sJO+k{- zak5sNppfOFju-S9tC#^&UI}&^S-3TB^fmi<0$e%==MK3AqBrn!K@ZCzuah-}pRZc{ z?&7p`mEU5_{>6x=RAFr4-F+FYOMN%GSL@mvX-UT3jRI;_TJH7}l*La_ztFn+GQ3;r zNk;eb?nh&>e?Z$I<$LDON!e1tJ26yLILq`~hFYrCA|rj2uGJHxzz@8b<} z&bETBnbLPG9E*iz!<03Ld4q;C140%fzRO5j*Ql#XY*C-ELCtp24zs*#$X0ZhlF~Qj zq$4Nq9U@=qSTzHghxD(IcI0@hO0e}l7_PKLX|J5jQe+67(8W~90a!?QdAYyLs6f^$ zgAUsZ6%aIOhqZ;;;WG@EpL1!Mxhc_XD!cTY%MEAnbR^8{!>s|QGte5Y=ivx6=T9Ei zP_M&x-e`XKwm+O(fpg~P{^7QV&DZPW)$j@GX#kClVjXN6u+n=I$K0{Y-O4?f;0vgV zY+%5cgK;dNK1}{#_x-Zyaw9sN`r9jST(^5&m&8IY?IBml#h0G3e?uSWfByzKHLe8) z9oCU{cfd~u97`w2ATe{wQPagk*)FX|S+YdySpplm-DSKB*|c>@nSp$=zj{v3WyAgw zqtk_K3c5J|0pC zSpww86>3JZSitYm_b*{%7cv?=elhCFy1v6m)^n?211803vG_;TRU3WPV`g7=>ywvsW6B76c-kXXYuS7~J+@Lc zSf%7^`HIJ4D|VX9{BlBG~IV;M->JId%#U?}jR@kQ&o5A3HyYDx}6Nc^pMjj0Jeun)M=&7-NLZ9@2 z)j60}@#z8oft^qhO`qgPG;Gf4Q@Zbq!Fx_DP1GkX<}_%EF`!5fg*xCsir}$yMH#85 zT3Y4bdV)bucC=X;w24>D>XjaA@K`En^++$6E!jmvauA$rc9F%b=P&f^I7M+{{--HM z0JXFl21+}*Oz8zr@T8JQp9Td0TZ7rr0+&rWePPKdaG}l-^)$@O*ON;2pkAjf4ZSg# zy{PLo>hhTUUK_q5L{o!vKb^7AIkbXB zm3BG{rbFE>fKfZsL4iKVYubQMO_AvYWH<3F_@;7*b}ss*4!r5a-5Mr{qoVbpXW1cja+YCd!nQ3xt*CEBq_FNhDc93rhj=>>F59=AN5 zoRmKmL))oDox0VF;gltwNSdcF9cb*OX3{Gx?X{Q-krC~b9}_3yG8Bn{`W6m}6YD#q zAkEzk)zB|ZA2Ao`dW^gC77j#kXk7>zOYg~2Y0NyG9@9L)X=yRL!=`tj7; z^S=K3l)dWTz%eniebMP!Z)q@7d(l_cR;2OvPv7I~Va{X>R@4XXh- zOMOMef=}m)U?`>^E`qUO(+Ng$xKwZ1|FQ|>X41&zvAf`(9 zj3GGCzGHqa8_lMGV+Q3A(d5seacFHJ92meB0vj+?SfQ~dL#3UE!1{}wjz|HPWCEHI zW{zYTeA(UwAEq6F%|@%!oD5ebM$D`kG45gkQ6COfjjk-==^@y6=Tp0-#~0px=I@H# z7Z|LQii;EBSfjse{lo}m?iuTG`$i6*F?L9m*kGMV_JUqsuT##HNJkrNL~cklwZK&3 zgesq4oycISoHuCg>Jo;0K(3&I(n-j7+uaf)NPK7+@p8+z!=r!xa45cmV`Mna1hT=i zAkgv-=xDHofR+dHn7FZvghtoxVqmi^U=Tk5i*(?UbiEGt9|mBN4tXfwT0b zIQSzTbod84Y<){2C!IJja=k65vqPM|!xFS?-HOK!3%&6=!T(Z$<>g6+rTpioPBf57 z$!8fVo=}&Z?KB-UB4$>vfxffiJ*^StPHhnl@7Fw@3-N|6BAyp|HhmV#(r=Ll2Y3af zNJ44J*!nZfs0Z5o%Qy|_7UzOtMt~9CA*sTy5=4c0Q9mP-JJ+p-7G&*PyD$6sj+4b>6a~%2eXf~A?KRzL4v_GQ!SRxsdZi`B(7Jx*fGf@DK z&P<|o9z*F!kX>I*;y78= z>JB#p1zld#NFeK3{?&UgU*1uzsxF7qYP34!>yr;jKktE5CNZ3N_W+965o=}3S?jx3 zv`#Wqn;l-4If#|AeD6_oY2Y||U?Fss}Sa>HvkP$9_KPcb_jB*Jc;M0XIE+qhbP$U2d z&;h?{>;H=Sp?W2>Uc{rF29ML>EiCy?fyim_mQtrgMA~^uv?&@WN@gUOPn(379I}U4Vg~Qo)jwJb7e_Pg^`Gmp+s5vF{tNzJVhBQ z$VB8M@`XJsXC!-){6wetDsTY94 G*yFsbY~cLNXLP73aA74Mq6M9f^&YV`isWW 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

5q!RY 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 - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/css/fonts/fontawesome-webfont.ttf b/docs/css/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2fa1196aad98c2adf4378a7611dd713aa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165548 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 z 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 d0mRO}xo^G_%I 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 SdSQM28?+M|D(2r_;{O0|uQ74} diff --git a/docs/css/fonts/fontawesome-webfont.woff2 b/docs/css/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc60404b91e398a37200c4a77b645cfd9586..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77160 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 diff --git a/docs/css/modern-business.css b/docs/css/modern-business.css deleted file mode 100755 index b0323c5..0000000 --- a/docs/css/modern-business.css +++ /dev/null @@ -1,89 +0,0 @@ -/*! - * Start Bootstrap - Modern Business HTML Template (http://startbootstrap.com) - * Code licensed under the Apache License v2.0. - * For details, see http://www.apache.org/licenses/LICENSE-2.0. - */ - -/* Global Styles */ - -html, -body { - height: 100%; -} - -.img-portfolio { - margin-bottom: 30px; -} - -.img-hover:hover { - opacity: 0.8; -} - -/* Home Page Carousel */ - -header.carousel { - height: 50%; -} - -header.carousel .item, -header.carousel .item.active, -header.carousel .carousel-inner { - height: 100%; -} - -header.carousel .fill { - width: 100%; - height: 100%; - background-position: center; - background-size: cover; -} - -/* 404 Page Styles */ - -.error-404 { - font-size: 100px; -} - -/* Pricing Page Styles */ - -.price { - display: block; - font-size: 50px; - line-height: 50px; -} - -.price sup { - top: -20px; - left: 2px; - font-size: 20px; -} - -.period { - display: block; - font-style: italic; -} - -/* Footer Styles */ - -footer { - margin: 50px 0; -} - -/* Responsive Styles */ - -@media(max-width:991px) { - .client-img, - .img-related { - margin-bottom: 30px; - } -} - -@media(max-width:767px) { - .img-portfolio { - margin-bottom: 15px; - } - - header.carousel .carousel { - height: 70%; - } -} diff --git a/docs/css/printstyles.css b/docs/css/printstyles.css deleted file mode 100644 index 64d0f63..0000000 --- a/docs/css/printstyles.css +++ /dev/null @@ -1,159 +0,0 @@ - -/*body.print .container {max-width: 650px;}*/ - -body { - font-size:14px; -} -.nav ul li a {border-top:0px; background-color:transparent; color: #808080; } -#navig a[href] {color: #595959 !important;} -table .table {max-width:650px;} - -#navig li.sectionHead {font-weight: bold; font-size: 18px; color: #595959 !important; } -#navig li {font-weight: normal; } - -#navig a[href]::after { content: leader(".") target-counter(attr(href), page); } - -a[href]::after { - content: " (page " target-counter(attr(href), page) ")" -} - -a[href^="http:"]::after, a[href^="https:"]::after { - content: ""; -} - -a[href] { - color: blue !important; -} -a[href*="mailto"]::after, a[data-toggle="tooltip"]::after, a[href].noCrossRef::after { - content: ""; -} - - -@page { - margin: 60pt 90pt 60pt 90pt; - font-family: sans-serif; - font-style:none; - color: gray; - -} - -.printTitle { - line-height:30pt; - font-size:27pt; - font-weight: bold; - letter-spacing: -.5px; - margin-bottom:25px; -} - -.printSubtitle { - font-size: 19pt; - color: #cccccc !important; - font-family: "Grotesque MT Light"; - line-height: 22pt; - letter-spacing: -.5px; - margin-bottom:20px; -} -.printTitleArea hr { - color: #999999 !important; - height: 2px; - width: 100%; -} - -.printTitleImage { - max-width:300px; - margin-bottom:200px; -} - - -.printTitleImage { - max-width: 250px; -} - -#navig { - /*page-break-before: always;*/ -} - -.copyrightBoilerplate { - page-break-before:always; - font-size:14px; -} - -.lastGeneratedDate { - font-style: italic; - font-size:14px; - color: gray; -} - -.alert a { - text-decoration: none !important; -} - - -body.title { page: title } - -@page title { - @top-left { - content: " "; - } - @top-right { - content: " " - } - @bottom-right { - content: " "; - } - @bottom-left { - content: " "; - } -} - -body.frontmatter { page: frontmatter } -body.frontmatter {counter-reset: page 1} - - -@page frontmatter { - @top-left { - content: prince-script(guideName); - } - @top-right { - content: prince-script(datestamp); - } - @bottom-right { - content: counter(page, lower-roman); - } - @bottom-left { - content: "youremail@domain.com"; } -} - -body.first_page {counter-reset: page 1} - -h1 { string-set: doctitle content() } - -@page { - @top-left { - content: string(doctitle); - font-size: 11px; - font-style: italic; - } - @top-right { - content: prince-script(datestamp); - font-size: 11px; - } - - @bottom-right { - content: "Page " counter(page); - font-size: 11px; - } - @bottom-left { - content: prince-script(guideName); - font-size: 11px; - } -} -.alert { - background-color: #fafafa !important; - border-color: #dedede !important; - color: black; -} - -pre { - background-color: #fafafa; -} diff --git a/docs/css/syntax.css b/docs/css/syntax.css deleted file mode 100644 index 1e651cf..0000000 --- a/docs/css/syntax.css +++ /dev/null @@ -1,60 +0,0 @@ -.highlight { background: #ffffff; } -.highlight .c { color: #999988; font-style: italic } /* Comment */ -.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ -.highlight .k { font-weight: bold } /* Keyword */ -.highlight .o { font-weight: bold } /* Operator */ -.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */ -.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ -.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ -.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #aa0000 } /* Generic.Error */ -.highlight .gh { color: #999999 } /* Generic.Heading */ -.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ -.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */ -.highlight .go { color: #888888 } /* Generic.Output */ -.highlight .gp { color: #555555 } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #aaaaaa } /* Generic.Subheading */ -.highlight .gt { color: #aa0000 } /* Generic.Traceback */ -.highlight .kc { font-weight: bold } /* Keyword.Constant */ -.highlight .kd { font-weight: bold } /* Keyword.Declaration */ -.highlight .kp { font-weight: bold } /* Keyword.Pseudo */ -.highlight .kr { font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ -.highlight .m { color: #009999 } /* Literal.Number */ -.highlight .s { color: #d14 } /* Literal.String */ -.highlight .na { color: #008080 } /* Name.Attribute */ -.highlight .nb { color: #0086B3 } /* Name.Builtin */ -.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ -.highlight .no { color: #008080 } /* Name.Constant */ -.highlight .ni { color: #800080 } /* Name.Entity */ -.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ -.highlight .nn { color: #555555 } /* Name.Namespace */ -.highlight .nt { color: #000080 } /* Name.Tag */ -.highlight .nv { color: #008080 } /* Name.Variable */ -.highlight .ow { font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mf { color: #009999 } /* Literal.Number.Float */ -.highlight .mh { color: #009999 } /* Literal.Number.Hex */ -.highlight .mi { color: #009999 } /* Literal.Number.Integer */ -.highlight .mo { color: #009999 } /* Literal.Number.Oct */ -.highlight .sb { color: #d14 } /* Literal.String.Backtick */ -.highlight .sc { color: #d14 } /* Literal.String.Char */ -.highlight .sd { color: #d14 } /* Literal.String.Doc */ -.highlight .s2 { color: #d14 } /* Literal.String.Double */ -.highlight .se { color: #d14 } /* Literal.String.Escape */ -.highlight .sh { color: #d14 } /* Literal.String.Heredoc */ -.highlight .si { color: #d14 } /* Literal.String.Interpol */ -.highlight .sx { color: #d14 } /* Literal.String.Other */ -.highlight .sr { color: #009926 } /* Literal.String.Regex */ -.highlight .s1 { color: #d14 } /* Literal.String.Single */ -.highlight .ss { color: #990073 } /* Literal.String.Symbol */ -.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #008080 } /* Name.Variable.Class */ -.highlight .vg { color: #008080 } /* Name.Variable.Global */ -.highlight .vi { color: #008080 } /* Name.Variable.Instance */ -.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/docs/css/theme-blue.css b/docs/css/theme-blue.css deleted file mode 100644 index 8027c82..0000000 --- a/docs/css/theme-blue.css +++ /dev/null @@ -1,121 +0,0 @@ -.summary { - color: #808080; - border-left: 5px solid #ED1951; - font-size:16px; -} - - -h3 {color: #000000; } -h4 {color: #000000; } - -.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { - background-color: #248ec2; - color: white; -} - -.nav > li.active > a { - background-color: #347DBE; -} - -.nav > li > a:hover { - background-color: #248ec2; -} - -div.navbar-collapse .dropdown-menu > li > a:hover { - background-color: #347DBE; -} - -.nav li.thirdlevel > a { - background-color: #FAFAFA !important; - color: #248EC2; - font-weight: bold; -} - -a[data-toggle="tooltip"] { - color: #649345; - font-style: italic; - cursor: default; -} - -.navbar-inverse { - background-color: #347DBE; - border-color: #015CAE; -} -.navbar-inverse .navbar-nav>li>a, .navbar-inverse .navbar-brand { - color: white; -} - -.navbar-inverse .navbar-nav>li>a:hover, a.fa.fa-home.fa-lg.navbar-brand:hover { - color: #f0f0f0; -} - -a.navbar-brand:hover { - color: #f0f0f0; -} - -.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { - color: #015CAE; -} - -.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { - background-color: #015CAE; - color: #ffffff; -} - -.navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { - border-color: #248ec2 !important; -} - -.btn-primary { - color: #ffffff; - background-color: #347DBE; - border-color: #347DBE; -} - -.navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { - background-color: #347DBE; -} - -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.open .dropdown-toggle.btn-primary { - background-color: #248ec2; - border-color: #347DBE; -} - -.printTitle { - color: #015CAE !important; -} - -body.print h1 {color: #015CAE !important; font-size:28px !important;} -body.print h2 {color: #595959 !important; font-size:20px !important;} -body.print h3 {color: #E50E51 !important; font-size:14px !important;} -body.print h4 {color: #679DCE !important; font-size:14px; font-style: italic !important;} - -.anchorjs-link:hover { - color: #216f9b; -} - -div.sidebarTitle { - color: #015CAE; -} - -li.sidebarTitle { - margin-top:20px; - font-weight:normal; - font-size:130%; - color: #ED1951; - margin-bottom:10px; - margin-left: 5px; - -} - -.navbar-inverse .navbar-toggle:focus, .navbar-inverse .navbar-toggle:hover { - background-color: #015CAE; -} - -.navbar-inverse .navbar-toggle { - border-color: #015CAE; -} diff --git a/docs/css/theme-green.css b/docs/css/theme-green.css deleted file mode 100644 index 4991586..0000000 --- a/docs/css/theme-green.css +++ /dev/null @@ -1,110 +0,0 @@ -.summary { - color: #808080; - border-left: 5px solid #E50E51; - font-size:16px; -} - - -h3 {color: #E50E51; } -h4 {color: #808080; } - -.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { - background-color: #248ec2; - color: white; -} - -.nav > li.active > a { - background-color: #72ac4a; -} - -.nav > li > a:hover { - background-color: #72ac4a; -} - -div.navbar-collapse .dropdown-menu > li > a:hover { - background-color: #72ac4a; -} - -.navbar-inverse .navbar-nav>li>a, .navbar-inverse .navbar-brand { - color: white; -} - -.navbar-inverse .navbar-nav>li>a:hover, a.fa.fa-home.fa-lg.navbar-brand:hover { - color: #f0f0f0; -} - -.nav li.thirdlevel > a { - background-color: #FAFAFA !important; - color: #72ac4a; - font-weight: bold; -} - -a[data-toggle="tooltip"] { - color: #649345; - font-style: italic; - cursor: default; -} - -.navbar-inverse { - background-color: #72ac4a; - border-color: #5b893c; -} - -.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { - color: #5b893c; -} - -.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { - background-color: #5b893c; - color: #ffffff; -} - -/* not sure if using this ...*/ -.navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { - border-color: #72ac4a !important; -} - -.btn-primary { - color: #ffffff; - background-color: #5b893c; - border-color: #5b893c; -} - -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.open .dropdown-toggle.btn-primary { - background-color: #72ac4a; - border-color: #5b893c; -} - -.printTitle { - color: #5b893c !important; -} - -body.print h1 {color: #5b893c !important; font-size:28px;} -body.print h2 {color: #595959 !important; font-size:24px;} -body.print h3 {color: #E50E51 !important; font-size:14px;} -body.print h4 {color: #679DCE !important; font-size:14px; font-style: italic;} - -.anchorjs-link:hover { - color: #4f7233; -} - -div.sidebarTitle { - color: #E50E51; -} - -li.sidebarTitle { - margin-top:20px; - font-weight:normal; - font-size:130%; - color: #ED1951; - margin-bottom:10px; - margin-left: 5px; -} - -.navbar-inverse .navbar-toggle:focus, .navbar-inverse .navbar-toggle:hover { - background-color: #E50E51; -} diff --git a/docs/dataframe_pipeline.html b/docs/dataframe_pipeline.html deleted file mode 100644 index 5c6b5aa..0000000 --- a/docs/dataframe_pipeline.html +++ /dev/null @@ -1,1453 +0,0 @@ ---- - -title: DataFrame PipeLine - -keywords: fastai -sidebar: home_sidebar - -summary: "A pandas dataframe pipeline" ---- - - -

- {% raw %} - -
- -
-
-
-

Dependence

This tool works on pandas DataFrame

- -
-
-
-
- -
-
-
-

Basic Structure

-
-
-
-
-
-
    -
  • [`Node`](/forgebox/dataframe_pipeline#Node) is the basic root structure of pipeline, it's a status of data
  • -
  • Edge is the change between the nodes, usually a function
  • -
- -
-
-
-
-
-

Node

    -
  • Node, works on a DataFrame
  • -
  • chunkNode, when the entire DataFrame is intimidating to the memory, a chunkNode works on a generator
  • -
- -
-
-
-
- -
-
- -
-
- -
- - -
-

class Node[source]

Node(df, verbose=1)

-
- -
- -
- -
-
- -
-
- -
-
- -
- - -
-

class chunkNode[source]

chunkNode(df_chunk, verbose=1) :: Node

-
- -
- -
- -
-
- -
-
-
-

Edges

There are 2 types of edges

- -
-
-
-
- -
-
- -
-
- -
- - -
-

class frameEdge[source]

frameEdge(edge_name=None)

-
- -
- -
- -
-
- -
-
- -
-
- -
- - -
-

class colEdge[source]

colEdge(edge_name=None)

-
- -
- -
- -
-
- -
-
- -
-
- -
- - -
-

frameEdge.define..wraper[source]

frameEdge.define..wraper(df)

-
- -
- -
- -
-
- -
-
-
-
    -
  • A frameEdge defines what happens from a dataframe to dataframe.
  • -
- -
-
-
-
-
- -
-
-
grpby = frameEdge("groupby")
-
-@grpby.define
-def grpby_func(df):
-    return df.groupby("item_id").count()
-
- -
-
-
- -
-
-
-
    -
  • A colEdge defines what happens from a column (data series) to a edited version of this column
  • -
- -
-
-
-
-
- -
-
-
double_value = colEdge("value double")
-
-@double_value.define
-def double_value_func(col):
-    return col*2
-
- -
-
-
- -
-
-
-

Some examples on edge

-
-
-
-
- -
-
- -
-
- -
- - -
-

class fillNaEdge[source]

fillNaEdge(fill=0.0) :: colEdge

-
- -
- -
- -
-
- -
-
- -
-
- -
- - -
-

class engTokEdge[source]

engTokEdge(tokenizer=None, max_len=None) :: colEdge

-
- -
- -
- -
-
- -
-
- -
-
- -
- - -
-

class CNTok[source]

CNTok() :: colEdge

-
- -
- -
- -
-
- -
-
- -
-
- -
- - -
-

class capMinMaxEdge[source]

capMinMaxEdge(min_=None, max_=None) :: colEdge

-
- -
- -
- -
-
- -
-
- -
-
- -
- - -
-

class trackVocabEdge[source]

trackVocabEdge() :: colEdge

-
-

a colEdge -input column should contain python list -This edge will keep track a vocabulary pandas DataFrame -tck_vcb = TrackVocab() -tck_vcb.vocab is the accumulated vocabulary

- -
- -
- -
-
- -
-
- -
-
- -
- - -
-

class saveCSV[source]

saveCSV(csvpath, tocsv_conf={'sep': '\t', 'index': False}) :: frameEdge

-
-

DataFrame Edge -SaveCsv("/path/to/file.csv")

- -
- -
- -
-
- -
-
- -
-
- -
- - -
-

class saveSQL[source]

saveSQL(table_name, con, tosql_conf={'index': False, 'if_exists': 'append'}) :: frameEdge

-
-

DataFrame Edge -SaveSQL("table_name", con)

- -
- -
- -
-
- -
-
-
-

Pipe in simple look

Column edges

edge defines a method of processing data.

-
    -
  • colEdge and its sub-class process column
  • -
  • frameEdge and its cub_class process a dataframe (multiple columns)
  • -
-

Nodes/Edges relationship mapping

    -
  • node1 ==edge1==> node2 :
      -
    • node2 = node1 | edge1
      -
      -
    • -
    -
  • -
  • node1 ==edge1==>edge2==> node2 :
      -
    • node2 = node1 | edge1 | edge2
      -
      -
    • -
    • node3 = node2 | edge3
      -
      -
    • -
    -
  • -
-

Relationship mapping with columns specified

    -
  • Specifying 1 column
  • -
- -
-
-
-
-
- -
-
-
node2 = node1 | edge1%"column_1"
-
- -
-
-
- -
-
-
-
    -
  • Specifying multiple columns
  • -
- -
-
-
-
-
- -
-
-
node2 = node1 | edge1*["column_2","column_3","column_4"]
-
- -
-
-
- -
-
-
-

Tutorial

-
-
-
-
-
- -
-
-
import pandas as pd
-import numpy as np
-from pathlib import Path
-import os
-
- -
-
-
- -
-
-
-

Sample dataset: New York City Airbnb Open Data

- -
-
-
-
-
- -
-
-
HOME = Path(os.environ["HOME"])/"data"
-DATA = HOME/"AB_NYC_2019.csv"
-
- -
-
-
- -
-
-
-

A preview on data set

- -
-
-
-
-
- -
-
-
df = pd.read_csv(DATA)
-
-df.head()
-
- -
-
-
- -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
idnamehost_idhost_nameneighbourhood_groupneighbourhoodlatitudelongituderoom_typepriceminimum_nightsnumber_of_reviewslast_reviewreviews_per_monthcalculated_host_listings_countavailability_365
02539Clean & quiet apt home by the park2787JohnBrooklynKensington40.64749-73.97237Private room149192018-10-190.216365
12595Skylit Midtown Castle2845JenniferManhattanMidtown40.75362-73.98377Entire home/apt2251452019-05-210.382355
23647THE VILLAGE OF HARLEM....NEW YORK !4632ElisabethManhattanHarlem40.80902-73.94190Private room15030NaNNaN1365
33831Cozy Entire Floor of Brownstone4869LisaRoxanneBrooklynClinton Hill40.68514-73.95976Entire home/apt8912702019-07-054.641194
45022Entire Apt: Spacious Studio/Loft by central park7192LauraManhattanEast Harlem40.79851-73.94399Entire home/apt801092018-11-190.1010
-
-
- -
- -
-
- -
-
-
-

Start node, a pandas dataframe

- -
-
-
-
-
-

Real Data Example

-
-
-
-
-
- -
-
-
from forgebox.pipe import *
-
- -
-
-
- -
-
-
- -
-
-
start_node = Node(df)
-
- -
-
-
- -
-
-
- -
-
-
cap_minmax_edge = capMinMaxEdge(max_ = 100)
-fill_na_edge = fillNaEdge("")
-
- -
-
-
- -
-
-
-

Setting the node/edge pipeline

- -
-
-
-
-
- -
-
-
# clip minmax value on 1 column
-# fill na to "", on 2 columns
-# tokenize, on 2 columns
-end_node = start_node|cap_minmax_edge %"number_of_reviews"\
-                    |fill_na_edge *["name","room_type"]\
-                    |eng_twt_tk*["name","room_type"]   
-
- -
-
-
- -
-
-
-

Print out the pipeline layout

- -
-
-
-
-
- -
-
-
end_node
-
- -
-
-
- -
-
- -
- - - -
-
<forge pipeline node>
-	|cap min:None max:100
-	|fillna_
-	|En Tokenization
-
- -
- -
-
- -
-
-
-

Excute the processing

- -
-
-
-
-
- -
-
-
end_df = end_node.run()
-
- -
-
-
- -
-
- -
- -
-
[df edge]:cap min:None max:100
-[df edge]:fillna_
-[df edge]:En Tokenization
-
-
-
- -
-
- -
-
-
-

Checking the processed data

- -
-
-
-
-
- -
-
-
end_df.head()
-
- -
-
-
- -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
idnamehost_idhost_nameneighbourhood_groupneighbourhoodlatitudelongituderoom_typepriceminimum_nightsnumber_of_reviewslast_reviewreviews_per_monthcalculated_host_listings_countavailability_365
02539[Clean, &, quiet, apt, home, by, the, park]2787JohnBrooklynKensington40.64749-73.97237[Private, room]149192018-10-190.216365
12595[Skylit, Midtown, Castle]2845JenniferManhattanMidtown40.75362-73.98377[Entire, home, /, apt]2251452019-05-210.382355
23647[THE, VILLAGE, OF, HARLEM, ..., NEW, YORK, !]4632ElisabethManhattanHarlem40.80902-73.94190[Private, room]15030NaNNaN1365
33831[Cozy, Entire, Floor, of, Brownstone]4869LisaRoxanneBrooklynClinton Hill40.68514-73.95976[Entire, home, /, apt]8911002019-07-054.641194
45022[Entire, Apt, :, Spacious, Studio, /, Loft, by...7192LauraManhattanEast Harlem40.79851-73.94399[Entire, home, /, apt]801092018-11-190.1010
-
-
- -
- -
-
- -
-
-
-

Working with bigger data

There is often the cases when we have to deal with csv > 500m in size or a huge sql table.

-

In some cases we want to work/ save the data batch by batch

-

Gladely, pandas offer a chunksize solution, so we can process huge structured data in batch(defined by the chunk size)

- -
-
-
-
-
- -
-
-
from forgebox.pipe import chunkNode,saveCSV, saveSQL
-
- -
-
-
- -
-
-
-

[`saveCSV`](/forgebox/dataframe_pipeline#saveCSV) : saving file could be a part of the pipeline, we can follow that edge by [`saveSQL`](/forgebox/dataframe_pipeline#saveSQL) if we like

- -
-
-
-
-
- -
-
-
start_node = chunkNode(pd.read_csv(DATA, chunksize=5000), verbose = 1)
-
-end_node = start_node|cap_minmax_edge %"number_of_reviews"\
-                    |fill_na_edge *["name","room_type"]\
-                    |eng_twt_tk*["name","room_type"]\
-                    |saveCSV(HOME/"nyc_processed.csv")
-
- -
-
-
- -
-
-
-

Pipeline layout summary

- -
-
-
-
-
- -
-
-
end_node
-
- -
-
-
- -
-
- -
- - - -
-
<forge pipeline node>
-	|cap min:None max:100
-	|fillna_
-	|En Tokenization
-	|save to csv
-
- -
- -
-
- -
-
-
-

Notice

-
    -
  • run function that
      -
    • start with a chunkNode has no return,
    • -
    • start with a Node will ruturn the result dataframe.
    • -
    -
  • -
  • This feature is purposefully designed, assuming the result data could also be huge and not suitable to remain its entirety in RAM.
  • -
- -
-
-
-
-
-

Excute the processing, if you are annoyed by the verbosity, set verbose=0

- -
-
-
-
-
- -
-
-
end_node.run()
-
- -
-
-
- -
-
- -
- -
-
[df edge]:cap min:None max:100
-[df edge]:fillna_
-[df edge]:En Tokenization
-[df edge]:save to csv
-[df edge]:cap min:None max:100
-[df edge]:fillna_
-[df edge]:En Tokenization
-[df edge]:save to csv
-[df edge]:cap min:None max:100
-[df edge]:fillna_
-[df edge]:En Tokenization
-[df edge]:save to csv
-[df edge]:cap min:None max:100
-[df edge]:fillna_
-[df edge]:En Tokenization
-[df edge]:save to csv
-[df edge]:cap min:None max:100
-[df edge]:fillna_
-[df edge]:En Tokenization
-[df edge]:save to csv
-[df edge]:cap min:None max:100
-[df edge]:fillna_
-[df edge]:En Tokenization
-[df edge]:save to csv
-[df edge]:cap min:None max:100
-[df edge]:fillna_
-[df edge]:En Tokenization
-[df edge]:save to csv
-[df edge]:cap min:None max:100
-[df edge]:fillna_
-[df edge]:En Tokenization
-[df edge]:save to csv
-[df edge]:cap min:None max:100
-[df edge]:fillna_
-[df edge]:En Tokenization
-[df edge]:save to csv
-[df edge]:cap min:None max:100
-[df edge]:fillna_
-[df edge]:En Tokenization
-[df edge]:save to csv
-
-
-
- -
-
- -
-
-
- -
-
-
!head -n3 {HOME/"nyc_processed.csv"}
-
- -
-
-
- -
-
- -
- -
-
0	2539	['Clean', '&', 'quiet', 'apt', 'home', 'by', 'the', 'park']	2787	John	Brooklyn	Kensington	40.647490000000005	-73.97237	['Private', 'room']	149	1	9	2018-10-19	0.21	6	365
-1	2595	['Skylit', 'Midtown', 'Castle']	2845	Jennifer	Manhattan	Midtown	40.75362	-73.98376999999999	['Entire', 'home', '/', 'apt']	225	1	45	2019-05-21	0.38	2	355
-2	3647	['THE', 'VILLAGE', 'OF', 'HARLEM', '...', 'NEW', 'YORK', '!']	4632	Elisabeth	Manhattan	Harlem	40.809020000000004	-73.9419	['Private', 'room']	150	3	0			1	365
-
-
-
- -
-
- -
-
-
-

Define a new edge

Create a new edge

-

Define the processing function with the define decorator.

-
    -
  • col is a pandas data series, the concept of column in pandas
  • -
  • In this case we use the apply function of data series, any decorated function would work as long as it return another data series
  • -
- -
-
-
-
-
- -
-
-
lower_case = colEdge("lower case")
-
-
-def lowerList(x):
-    return list(str(i).lower() for i in x)
-
-@lower_case.define
-def lower(col):
-    return col.apply(lowerList)
-
- -
-
-
- -
-
-
- -
-
-
# The DIYed edge will work on columns "name" and "room_type" after tokenization
-df = pd.read_csv(DATA)
-start_node = Node(df)
-end_node = start_node|cap_minmax_edge %"number_of_reviews"\
-                    |fill_na_edge *["name","room_type"]\
-                    |eng_twt_tk*["name","room_type"]\
-                    |lower_case*["name","room_type"]
-
- -
-
-
- -
-
-
- -
-
-
end_node
-
- -
-
-
- -
-
- -
- - - -
-
<forge pipeline node>
-	|cap min:None max:100
-	|fillna_
-	|En Tokenization
-	|lower case
-
- -
- -
-
- -
-
-
- -
-
-
end_df = end_node.run()
-end_df.head()
-
- -
-
-
- -
-
- -
- -
-
[df edge]:cap min:None max:100
-[df edge]:fillna_
-[df edge]:En Tokenization
-[df edge]:lower case
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
idnamehost_idhost_nameneighbourhood_groupneighbourhoodlatitudelongituderoom_typepriceminimum_nightsnumber_of_reviewslast_reviewreviews_per_monthcalculated_host_listings_countavailability_365
02539[clean, &, quiet, apt, home, by, the, park]2787JohnBrooklynKensington40.64749-73.97237[private, room]149192018-10-190.216365
12595[skylit, midtown, castle]2845JenniferManhattanMidtown40.75362-73.98377[entire, home, /, apt]2251452019-05-210.382355
23647[the, village, of, harlem, ..., new, york, !]4632ElisabethManhattanHarlem40.80902-73.94190[private, room]15030NaNNaN1365
33831[cozy, entire, floor, of, brownstone]4869LisaRoxanneBrooklynClinton Hill40.68514-73.95976[entire, home, /, apt]8911002019-07-054.641194
45022[entire, apt, :, spacious, studio, /, loft, by...7192LauraManhattanEast Harlem40.79851-73.94399[entire, home, /, apt]801092018-11-190.1010
-
-
- -
- -
-
- -
- {% endraw %} -
- - diff --git a/docs/df.html b/docs/df.html deleted file mode 100644 index f9be1f8..0000000 --- a/docs/df.html +++ /dev/null @@ -1,289 +0,0 @@ ---- - -title: Tools on pandas dataframe - -keywords: fastai -sidebar: home_sidebar - -summary: "Shortcuts tools on pandas dataframe" ---- - - -
- {% raw %} - -
- -
-
- -
-
- -
-
- -
- - -
-

class PandasDisplay[source]

PandasDisplay(**kwargs)

-
-

Temporary pandas display config "with" hook -with PandasDisplay(max_colwidth = 0,max_rows=100): - display(df)

- -
- -
- -
-
- -
-
-
- -
-
-
# let's say we have a pretty long piece of text with in pandas dataframe
-df_example = pd.DataFrame({"text":["""To bait fish withal: if it will feed nothing else, it will feed my revenge. He hath disgraced me, and hindered me half a million; laughed at my losses, mocked at my gains, scorned my nation, thwarted my bargains, cooled my friends, heated mine enemies; and what's his reason? I am a Jew. Hath not a Jew eyes? hath not a Jew hands, organs, dimensions, senses, affections, passions? fed with the same food, hurt with the same weapons, subject to the same diseases, healed by the same means, warmed and cooled by the same winter and summer, as a Christian is? If you prick us, do we not bleed? if you tickle us, do we not laugh? if you poison us, do we not die? and if you wrong us, shall we not revenge? If we are like you in the rest, we will resemble you in that. If a Jew wrong a Christian, what is his humility? Revenge. If a Christian wrong a Jew, what should his sufferance be by Christian example? Why, revenge. The villany you teach me, I will execute, and it shall go hard but I will better the instruction.""",]*10})
-
-pd.set_option("display.max_colwidth",100)
-pd.set_option("display.max_rows",2)
-
- -
-
-
- -
-
-
-

Such long text usually won't display in full length at usual pandas config, and we can see some rows are concluded, too

- -
-
-
-
-
- -
-
-
# display the dataframe use the original config
-display(df_example)
-
-# display the dataframe use the temporary config
-print("=>use new config")
-with PandasDisplay(max_colwidth = 0,max_rows = 10):
-    display(df_example)
-
-# display the dataframe use the original config
-print("=>going back to original config")
-display(df_example)
-
- -
-
-
- -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - -
text
0To bait fish withal: if it will feed nothing else, it will feed my revenge. He hath disgraced me...
......
9To bait fish withal: if it will feed nothing else, it will feed my revenge. He hath disgraced me...
-

10 rows × 1 columns

-
-
- -
- -
- -
-
=>use new config
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
text
0To bait fish withal: if it will feed nothing else, it will feed my revenge. He hath disgraced me, and hindered me half a million; laughed at my losses, mocked at my gains, scorned my nation, thwarted my bargains, cooled my friends, heated mine enemies; and what's his reason? I am a Jew. Hath not a Jew eyes? hath not a Jew hands, organs, dimensions, senses, affections, passions? fed with the same food, hurt with the same weapons, subject to the same diseases, healed by the same means, warmed and cooled by the same winter and summer, as a Christian is? If you prick us, do we not bleed? if you tickle us, do we not laugh? if you poison us, do we not die? and if you wrong us, shall we not revenge? If we are like you in the rest, we will resemble you in that. If a Jew wrong a Christian, what is his humility? Revenge. If a Christian wrong a Jew, what should his sufferance be by Christian example? Why, revenge. The villany you teach me, I will execute, and it shall go hard but I will better the instruction.
1To bait fish withal: if it will feed nothing else, it will feed my revenge. He hath disgraced me, and hindered me half a million; laughed at my losses, mocked at my gains, scorned my nation, thwarted my bargains, cooled my friends, heated mine enemies; and what's his reason? I am a Jew. Hath not a Jew eyes? hath not a Jew hands, organs, dimensions, senses, affections, passions? fed with the same food, hurt with the same weapons, subject to the same diseases, healed by the same means, warmed and cooled by the same winter and summer, as a Christian is? If you prick us, do we not bleed? if you tickle us, do we not laugh? if you poison us, do we not die? and if you wrong us, shall we not revenge? If we are like you in the rest, we will resemble you in that. If a Jew wrong a Christian, what is his humility? Revenge. If a Christian wrong a Jew, what should his sufferance be by Christian example? Why, revenge. The villany you teach me, I will execute, and it shall go hard but I will better the instruction.
2To bait fish withal: if it will feed nothing else, it will feed my revenge. He hath disgraced me, and hindered me half a million; laughed at my losses, mocked at my gains, scorned my nation, thwarted my bargains, cooled my friends, heated mine enemies; and what's his reason? I am a Jew. Hath not a Jew eyes? hath not a Jew hands, organs, dimensions, senses, affections, passions? fed with the same food, hurt with the same weapons, subject to the same diseases, healed by the same means, warmed and cooled by the same winter and summer, as a Christian is? If you prick us, do we not bleed? if you tickle us, do we not laugh? if you poison us, do we not die? and if you wrong us, shall we not revenge? If we are like you in the rest, we will resemble you in that. If a Jew wrong a Christian, what is his humility? Revenge. If a Christian wrong a Jew, what should his sufferance be by Christian example? Why, revenge. The villany you teach me, I will execute, and it shall go hard but I will better the instruction.
3To bait fish withal: if it will feed nothing else, it will feed my revenge. He hath disgraced me, and hindered me half a million; laughed at my losses, mocked at my gains, scorned my nation, thwarted my bargains, cooled my friends, heated mine enemies; and what's his reason? I am a Jew. Hath not a Jew eyes? hath not a Jew hands, organs, dimensions, senses, affections, passions? fed with the same food, hurt with the same weapons, subject to the same diseases, healed by the same means, warmed and cooled by the same winter and summer, as a Christian is? If you prick us, do we not bleed? if you tickle us, do we not laugh? if you poison us, do we not die? and if you wrong us, shall we not revenge? If we are like you in the rest, we will resemble you in that. If a Jew wrong a Christian, what is his humility? Revenge. If a Christian wrong a Jew, what should his sufferance be by Christian example? Why, revenge. The villany you teach me, I will execute, and it shall go hard but I will better the instruction.
4To bait fish withal: if it will feed nothing else, it will feed my revenge. He hath disgraced me, and hindered me half a million; laughed at my losses, mocked at my gains, scorned my nation, thwarted my bargains, cooled my friends, heated mine enemies; and what's his reason? I am a Jew. Hath not a Jew eyes? hath not a Jew hands, organs, dimensions, senses, affections, passions? fed with the same food, hurt with the same weapons, subject to the same diseases, healed by the same means, warmed and cooled by the same winter and summer, as a Christian is? If you prick us, do we not bleed? if you tickle us, do we not laugh? if you poison us, do we not die? and if you wrong us, shall we not revenge? If we are like you in the rest, we will resemble you in that. If a Jew wrong a Christian, what is his humility? Revenge. If a Christian wrong a Jew, what should his sufferance be by Christian example? Why, revenge. The villany you teach me, I will execute, and it shall go hard but I will better the instruction.
5To bait fish withal: if it will feed nothing else, it will feed my revenge. He hath disgraced me, and hindered me half a million; laughed at my losses, mocked at my gains, scorned my nation, thwarted my bargains, cooled my friends, heated mine enemies; and what's his reason? I am a Jew. Hath not a Jew eyes? hath not a Jew hands, organs, dimensions, senses, affections, passions? fed with the same food, hurt with the same weapons, subject to the same diseases, healed by the same means, warmed and cooled by the same winter and summer, as a Christian is? If you prick us, do we not bleed? if you tickle us, do we not laugh? if you poison us, do we not die? and if you wrong us, shall we not revenge? If we are like you in the rest, we will resemble you in that. If a Jew wrong a Christian, what is his humility? Revenge. If a Christian wrong a Jew, what should his sufferance be by Christian example? Why, revenge. The villany you teach me, I will execute, and it shall go hard but I will better the instruction.
6To bait fish withal: if it will feed nothing else, it will feed my revenge. He hath disgraced me, and hindered me half a million; laughed at my losses, mocked at my gains, scorned my nation, thwarted my bargains, cooled my friends, heated mine enemies; and what's his reason? I am a Jew. Hath not a Jew eyes? hath not a Jew hands, organs, dimensions, senses, affections, passions? fed with the same food, hurt with the same weapons, subject to the same diseases, healed by the same means, warmed and cooled by the same winter and summer, as a Christian is? If you prick us, do we not bleed? if you tickle us, do we not laugh? if you poison us, do we not die? and if you wrong us, shall we not revenge? If we are like you in the rest, we will resemble you in that. If a Jew wrong a Christian, what is his humility? Revenge. If a Christian wrong a Jew, what should his sufferance be by Christian example? Why, revenge. The villany you teach me, I will execute, and it shall go hard but I will better the instruction.
7To bait fish withal: if it will feed nothing else, it will feed my revenge. He hath disgraced me, and hindered me half a million; laughed at my losses, mocked at my gains, scorned my nation, thwarted my bargains, cooled my friends, heated mine enemies; and what's his reason? I am a Jew. Hath not a Jew eyes? hath not a Jew hands, organs, dimensions, senses, affections, passions? fed with the same food, hurt with the same weapons, subject to the same diseases, healed by the same means, warmed and cooled by the same winter and summer, as a Christian is? If you prick us, do we not bleed? if you tickle us, do we not laugh? if you poison us, do we not die? and if you wrong us, shall we not revenge? If we are like you in the rest, we will resemble you in that. If a Jew wrong a Christian, what is his humility? Revenge. If a Christian wrong a Jew, what should his sufferance be by Christian example? Why, revenge. The villany you teach me, I will execute, and it shall go hard but I will better the instruction.
8To bait fish withal: if it will feed nothing else, it will feed my revenge. He hath disgraced me, and hindered me half a million; laughed at my losses, mocked at my gains, scorned my nation, thwarted my bargains, cooled my friends, heated mine enemies; and what's his reason? I am a Jew. Hath not a Jew eyes? hath not a Jew hands, organs, dimensions, senses, affections, passions? fed with the same food, hurt with the same weapons, subject to the same diseases, healed by the same means, warmed and cooled by the same winter and summer, as a Christian is? If you prick us, do we not bleed? if you tickle us, do we not laugh? if you poison us, do we not die? and if you wrong us, shall we not revenge? If we are like you in the rest, we will resemble you in that. If a Jew wrong a Christian, what is his humility? Revenge. If a Christian wrong a Jew, what should his sufferance be by Christian example? Why, revenge. The villany you teach me, I will execute, and it shall go hard but I will better the instruction.
9To bait fish withal: if it will feed nothing else, it will feed my revenge. He hath disgraced me, and hindered me half a million; laughed at my losses, mocked at my gains, scorned my nation, thwarted my bargains, cooled my friends, heated mine enemies; and what's his reason? I am a Jew. Hath not a Jew eyes? hath not a Jew hands, organs, dimensions, senses, affections, passions? fed with the same food, hurt with the same weapons, subject to the same diseases, healed by the same means, warmed and cooled by the same winter and summer, as a Christian is? If you prick us, do we not bleed? if you tickle us, do we not laugh? if you poison us, do we not die? and if you wrong us, shall we not revenge? If we are like you in the rest, we will resemble you in that. If a Jew wrong a Christian, what is his humility? Revenge. If a Christian wrong a Jew, what should his sufferance be by Christian example? Why, revenge. The villany you teach me, I will execute, and it shall go hard but I will better the instruction.
-
-
- -
- -
- -
-
=>going back to original config
-
-
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - -
text
0To bait fish withal: if it will feed nothing else, it will feed my revenge. He hath disgraced me...
......
9To bait fish withal: if it will feed nothing else, it will feed my revenge. He hath disgraced me...
-

10 rows × 1 columns

-
-
- -
- -
-
- -
- {% endraw %} -
- - diff --git a/docs/df_filter.html b/docs/df_filter.html deleted file mode 100644 index 9ac68c0..0000000 --- a/docs/df_filter.html +++ /dev/null @@ -1,1183 +0,0 @@ ---- - -title: Dataframe filter - - -keywords: fastai -sidebar: home_sidebar - -summary: "Simple dataframe filter, Interactivel y filter column by value, one by one" -description: "Simple dataframe filter, Interactivel y filter column by value, one by one" -nb_path: "nbs/31_df_filter.ipynb" ---- - - -
- - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
def get_cal_housing():
-    from sklearn.datasets import california_housing
-    data = california_housing.fetch_california_housing()
-    df = pd.DataFrame(data['data'], columns=data['feature_names'])
-    return df
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
df = get_cal_housing()
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
df
-
- -
-
-
- -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MedIncHouseAgeAveRoomsAveBedrmsPopulationAveOccupLatitudeLongitude
08.325241.06.9841271.023810322.02.55555637.88-122.23
18.301421.06.2381370.9718802401.02.10984237.86-122.22
27.257452.08.2881361.073446496.02.80226037.85-122.24
35.643152.05.8173521.073059558.02.54794537.85-122.25
43.846252.06.2818531.081081565.02.18146737.85-122.25
...........................
206351.560325.05.0454551.133333845.02.56060639.48-121.09
206362.556818.06.1140351.315789356.03.12280739.49-121.21
206371.700017.05.2055431.1200921007.02.32563539.43-121.22
206381.867218.05.3295131.171920741.02.12320939.43-121.32
206392.388616.05.2547171.1622641387.02.61698139.37-121.24
-

20640 rows × 8 columns

-
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
"32.8%">"35.2%", "32.8%">"15.2%"
-
- -
-
-
- -
-
- -
- - - -
-
(False, True)
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
df
-
- -
-
-
- -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MedIncHouseAgeAveRoomsAveBedrmsPopulationAveOccupLatitudeLongitudeTestPercent
08.325241.06.9841271.023810322.02.55555637.88-122.2388.91410755185981%
18.301421.06.2381370.9718802401.02.10984237.86-122.2293.83564895188734%
27.257452.08.2881361.073446496.02.80226037.85-122.2470.91076297605066%
35.643152.05.8173521.073059558.02.54794537.85-122.2521.56618642530764%
43.846252.06.2818531.081081565.02.18146737.85-122.2580.45282896672339%
..............................
206351.560325.05.0454551.133333845.02.56060639.48-121.0936.93266496322409%
206362.556818.06.1140351.315789356.03.12280739.49-121.2175.0362361985378%
206371.700017.05.2055431.1200921007.02.32563539.43-121.2278.31525111633049%
206381.867218.05.3295131.171920741.02.12320939.43-121.3246.47093977393043%
206392.388616.05.2547171.1622641387.02.61698139.37-121.2442.4080878652766%
-

20640 rows × 9 columns

-
-
- -
- -
-
- -
- {% endraw %} - -
-
-

A tool to filter data

-
-
-
- {% raw %} - -
- -
-
- -
- - -
-

pct_to_float[source]

pct_to_float(x)

-
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

ensure_pct[source]

ensure_pct(df)

-
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

detect_number_column[source]

detect_number_column(df)

-
-

Detect number columns in dataframe

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

class DataFilter[source]

DataFilter(df:DataFrame, fix_pct=True)

-
-

Single column number filter

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
df
-
- -
-
-
- -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MedIncHouseAgeAveRoomsAveBedrmsPopulationAveOccupLatitudeLongitudeTestPercent
08.325241.06.9841271.023810322.02.55555637.88-122.2388.91410755185981%
18.301421.06.2381370.9718802401.02.10984237.86-122.2293.83564895188734%
27.257452.08.2881361.073446496.02.80226037.85-122.2470.91076297605066%
35.643152.05.8173521.073059558.02.54794537.85-122.2521.56618642530764%
43.846252.06.2818531.081081565.02.18146737.85-122.2580.45282896672339%
..............................
206351.560325.05.0454551.133333845.02.56060639.48-121.0936.93266496322409%
206362.556818.06.1140351.315789356.03.12280739.49-121.2175.0362361985378%
206371.700017.05.2055431.1200921007.02.32563539.43-121.2278.31525111633049%
206381.867218.05.3295131.171920741.02.12320939.43-121.3246.47093977393043%
206392.388616.05.2547171.1622641387.02.61698139.37-121.2442.4080878652766%
-

20640 rows × 9 columns

-
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
data_filter = DataFilter(df)
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
data_filter(columns=["AveBedrms", "Latitude", "TestPercent"])
-
- -
-
-
- -
- {% endraw %} - -
-
-

Extract out the dataframe afterwards

-
-
-
- {% raw %} - -
-
- -
-
-
data_filter.df
-
- -
-
-
- -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MedIncHouseAgeAveRoomsAveBedrmsPopulationAveOccupLatitudeLongitude
08.325241.06.9841271.023810322.02.55555637.88-122.23
18.301421.06.2381370.9718802401.02.10984237.86-122.22
27.257452.08.2881361.073446496.02.80226037.85-122.24
35.643152.05.8173521.073059558.02.54794537.85-122.25
43.846252.06.2818531.081081565.02.18146737.85-122.25
...........................
206351.560325.05.0454551.133333845.02.56060639.48-121.09
206362.556818.06.1140351.315789356.03.12280739.49-121.21
206371.700017.05.2055431.1200921007.02.32563539.43-121.22
206381.867218.05.3295131.171920741.02.12320939.43-121.32
206392.388616.05.2547171.1622641387.02.61698139.37-121.24
-

20640 rows × 8 columns

-
-
- -
- -
-
- -
- {% endraw %} - -
-
-

RecursiveFilter

-
-
-
- {% raw %} - -
- -
-
- -
- - -
-

class LayerTorch[source]

LayerTorch(df, level=0, last_layer=None)

-
-

information passon from layer to layer

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

class RecursiveFilterCore[source]

RecursiveFilterCore() :: ABC

-
-

Helper class that provides a standard way to create an ABC using -inheritance.

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

class RecursiveFilter[source]

RecursiveFilter(data=None, index:Axes | None=None, columns:Axes | None=None, dtype:Dtype | None=None, copy:bool | None=None) :: DataFrame

-
-

Interactive Pandas DataFrame Filter -df = RecursiveFilter(df) -df.handpick()

- -
Hand pick the portion of the data frame you liked
-    from filtering the column by value.
-A function from enhanced pandas dataframe
-
-Inputs:
-- chunk_callbacks: List[Callable]=[],
-- show_top: bool, default True, do we should
-    the most frequent values of the current column
-- show_top_k: int, the number of rows we show for
-    the most frequent values, when show_top=True,
-    default 20
-- pick_value_top_k: int, number of the most frequent
-    values in pick drop down default 30
-- from_last_layer: LayerTorch, default None, this
-    column doesn't mean for user configuration
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
df = RecursiveFilter(df)
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
df.handpick()
-
- -
-
-
- -
-
- -
- -
-
/Users/xiaochen.zhang/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:15: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access
-  from ipykernel import kernelapp as app
-
-
-
- -
-
- -
- {% endraw %} - -
- - diff --git a/docs/etl.html b/docs/etl.html deleted file mode 100644 index cf220fe..0000000 --- a/docs/etl.html +++ /dev/null @@ -1,124 +0,0 @@ ---- - -title: ETL Helper - - -keywords: fastai -sidebar: home_sidebar - -summary: "A combined ETL tool sets" -description: "A combined ETL tool sets" -nb_path: "nbs/11_etl.ipynb" ---- - - -
- - {% raw %} - -
- -
- {% endraw %} - -
-
-

A list for each step

-
-
-
- {% raw %} - -
- -
-
- -
- - -
-

class NewFileScanner[source]

NewFileScanner(directory, new_file_filter:Callable=None, done_list_getter:Callable=None, stop_callback:Callable=None)

-
-

Keep scannning a directory for new file -if found any, callback processing the file

-

Designed for download and delete strategy

-

Example

new_file_scanner = NewFileScanner(".", new_file_filter=lambda x:x[-4:]==".txt") -new_file_scanner(lambda x:print(f"new file:{x} found"))s

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - -
-
-

Test new file scanner

-
-
-
- {% raw %} - -
-
- -
-
-
new_file_scanner = NewFileScanner(".", new_file_filter=lambda x:x[-4:]==".txt")
-new_file_scanner(lambda x:print(f"new file:{x} found"))
-
- -
-
-
- -
-
- -
- -
-
new file:untitled.txt found
-new file:bc.txt found
-new file:cde.txt found
-
-
-
- -
- -
-
ERROR:root:manually stoped
-
-
-
- -
-
- -
- {% endraw %} - -
- - diff --git a/docs/feed.xml b/docs/feed.xml deleted file mode 100644 index d8d6ac9..0000000 --- a/docs/feed.xml +++ /dev/null @@ -1,32 +0,0 @@ ---- -search: exclude -layout: none ---- - - - - - {{ site.title | xml_escape }} - {{ site.description | xml_escape }} - {{ site.url }}/ - - {{ site.time | date_to_rfc822 }} - {{ site.time | date_to_rfc822 }} - Jekyll v{{ jekyll.version }} - {% for post in site.posts limit:10 %} - - {{ post.title | xml_escape }} - {{ post.content | xml_escape }} - {{ post.date | date_to_rfc822 }} - {{ post.url | prepend: site.url }} - {{ post.url | prepend: site.url }} - {% for tag in post.tags %} - {{ tag | xml_escape }} - {% endfor %} - {% for tag in page.tags %} - {{ cat | xml_escape }} - {% endfor %} - - {% endfor %} - - diff --git a/docs/files.html b/docs/files.html deleted file mode 100644 index aa13777..0000000 --- a/docs/files.html +++ /dev/null @@ -1,241 +0,0 @@ ---- - -title: Hard drive files - - -keywords: fastai -sidebar: home_sidebar - -summary: "Extract information on files under a directory" -description: "Extract information on files under a directory" -nb_path: "nbs/33_files.ipynb" ---- - - -
- - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

get_files[source]

get_files(path:Path, skip:Union[str, List[str]]=None)

-
-

Get all file paths from a directory

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

file_detail[source]

file_detail(path:Path, skip:Union[str, List[str]]=None)

-
-

Get detailed file information from a directory

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
file_detail("../../../Downloads/apiGateway-js-sdk")
-
- -
-
-
- -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pathfile_typeparentdepth
0/Users/xiaochen.zhang/github/forgebox/nbs/../....DS_StoreapiGateway-js-sdk12
1/Users/xiaochen.zhang/github/forgebox/nbs/../....mdapiGateway-js-sdk12
2/Users/xiaochen.zhang/github/forgebox/nbs/../....jsapiGateway-js-sdk12
3/Users/xiaochen.zhang/github/forgebox/nbs/../....jscomponents15
4/Users/xiaochen.zhang/github/forgebox/nbs/../....jscomponents15
5/Users/xiaochen.zhang/github/forgebox/nbs/../....jsrollups15
6/Users/xiaochen.zhang/github/forgebox/nbs/../....jsrollups15
7/Users/xiaochen.zhang/github/forgebox/nbs/../....jsurl-template14
8/Users/xiaochen.zhang/github/forgebox/nbs/../....jsapiGatewayCore14
9/Users/xiaochen.zhang/github/forgebox/nbs/../....jsapiGatewayCore14
10/Users/xiaochen.zhang/github/forgebox/nbs/../....jsapiGatewayCore14
11/Users/xiaochen.zhang/github/forgebox/nbs/../....jsapiGatewayCore14
12/Users/xiaochen.zhang/github/forgebox/nbs/../....jsdist15
-
-
- -
- -
-
- -
- {% endraw %} - -
- - diff --git a/docs/flatten.html b/docs/flatten.html deleted file mode 100644 index 61bccf0..0000000 --- a/docs/flatten.html +++ /dev/null @@ -1,111 +0,0 @@ ---- - -title: Flatten - - -keywords: fastai -sidebar: home_sidebar - - - -nb_path: "nbs/06_flatten.ipynb" ---- - - -
- - {% raw %} - -
- -
- {% endraw %} - -
-
-

Flattening the tree structure

-
-
-
- {% raw %} - -
- -
-
- -
- - -
-

class Flatten[source]

Flatten(data, key_callback:Callable=None, key_connection:str='_')

-
-

Flatten a tree structure dictionary

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - -
-
-

Testing a tree structure

-
-
-
- {% raw %} - -
-
- -
-
-
Flatten({"a":[1,2,{"c":"d"}],"b":{"g":1}}, key_connection="=>")()
-
- -
-
-
- -
-
- -
- - - -
-
{'a': [1, 2, {'c': 'd'}], 'b=>g': 1}
-
- -
- -
-
- -
- {% endraw %} - -
- - diff --git a/docs/fonts/FontAwesome.otf b/docs/fonts/FontAwesome.otf deleted file mode 100644 index 81c9ad949b47f64afeca5642ee2494b6e3147f44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85908 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 uQr82 diff --git a/docs/fonts/fontawesome-webfont.eot b/docs/fonts/fontawesome-webfont.eot deleted file mode 100644 index 84677bc0c5f37f1fac9d87548c4554b5c91717cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56006 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�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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/fonts/fontawesome-webfont.ttf b/docs/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 96a3639cdde5e8ab459c6380e3b9524ee81641dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112160 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 zÄ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 V*eEM;|ho{trTA6=?tf diff --git a/docs/fonts/fontawesome-webfont.woff b/docs/fonts/fontawesome-webfont.woff deleted file mode 100644 index 628b6a52a87e62c6f22426e17c01f6a303aa194e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65452 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 q%u^)w#YX9ZIvhtu?9Cy6YRi6f6G zD~~R@n;AKJL$DHujr~=ot+T8)0eq$F!|!>G)QhEm(RjMI)=a z7X82H(rsWoUF%+PG#D2mheolG8khK1v7&t}64 z4}oLv8X_OFbn5>-(|9lAd{6^~9V+YfYt7g`caw6{FI(K0z#OD@<%veX1eKti6JA60 z=bmwIOn1oTZg)S3M|j}=Mx#l#jh;KPZMN-;5FLFyiLkwgtJk5v^ZQ%H2Oc7`gBOLtwkFu3& zm|{BfW33g9si&HuZqwl?^l8v2Fp4h7AA-&?LuOkB2xBGx$^!MLD36dYy)TEC?ZL_) zMMIKhBXq$xFOl8jB?NXphKRN$Tv})Hei69M3_W}~8jk5b+z~;)gqU7sHe%#di*tMI z*LCM+a?qt@^Z6X&xZaQ@IBd*mY$p5@y(+Lu*t@7|kR5$6cUO*8O(nD{51n#^SqCvL zIPNnJRpQSm)-61vE}$AhWQSiRcsI&tS~8QO&r+;m&euPS<9C-D*)%>+8oNa{CMB4{ z%y{)87QB#kX7Hvv?>XB@U%ce5+-#$B#oCfEL0fyTS+spshXZQRGs(N|aMDJ{Xn{p{ zL~pXNMTtYm=h4|O)qdQ5o}kN#q99di%|}BN>=DbhRwQGRERR@|wFAUrm*@i%iCr zKBKk9_H!7(x#s$sX4?$*i9bo(dN^;9JG0b#p8B+N{|hZU(fXOOoS*iyIMRLvI; zI>$P>4?nzd$EWaV={VnXgY z`Ar>JH;LY|fWBE1Ng<(J6P@|WG6Vp6u#Z{c+>sTp0M=5n09&<@K-~y0un==9#-}4$ z6rS?$OxC<-##H+BiKk0H57QM=7#=dua!%%UV?t*SQ17;8nzb1O);%q*&)w>`O4$Wp zac0AqJMXD)TIrxd@4ZKdwZ5>jBo~#vlHTPx{n);}w#+$H)r3lmI^T%g2?4WZ<)X^!fJ#k3l`YCAlf|9~vpE7*om z?J^nA;aPb)k=^$8jyG%IQp10J=h-vbulmtqL%jQM1SbI-vbv>%1^Fau+ZY90q-%q~ zj)N>WVOw6;UYW%4uR98CY}@eiTg1k(i8wo(7LV`xM+c@@O-hQU?H{d^H_j7^t;mbs z;i%6zoKu^^!4%cTdw24$i+qlfc{Kby&u0@4uFICN6fDXBOL}ZOO_Kxy3!c*o3chCI7SDx0hr*Ap zm+V96@pO&f8yfBrRr6*CEEV&+a8gI-dxDv8sEk`pestyIi}LUTqBi{tGe!&LWm}j- zyN6CU>+S9AST*`I`}~dcKmK~zk?eD>mzeq#nw!;#HAckF2c`hDN@ug}6SFOMb$pyc zO4J=36kNIK-Q;|yAGs&-f9HE%O=gPvC^zDLkOSNalOEt!F0fWkl3Hw5>>P0kL_=K{ zZGfdbF-3Iq_A4vexVPI52*hQkfsG7q!?=;SBJLHw`f9er&L_(J2T&4jg3BM?s&b}p zEJ1X6EbR7{?83i_IPfS6&Fd7!wK$de0h&_&p(3-ojz7Fd*(;V%uU*jzc)ony{?xw? zU8Tj|&zmpe=~aIJ2Z7(htF#bO*LhSX|05B{{0hesf947+U8=Wf%_@CLt_&jYui=el zn^g3K7-I)h%yc1ut7d+ec=({k4KLR2ELAJmF!iz>PVTFD)!d;PW}}qI6_m#y?mj<7 zTxjL8iVSfmmS2kf;Lh8l~gm17W!|SLVGvo0w>eIYCpTn$G!yb40>;^qxyjGSt}*3 zan6qTpBH0z*_rr9g%F-y;}w0cCU(<(-tt~HU*(^b^omgrWlJ`gu!L_4pHC_$tj5pK zaPweg0mV^ojwZJIVxyX_@e2d8@hvVQEVzsy6-D~1Ur0H;>|EB_M9ezoRpIE9&aZ$} zxdJ|YGlp9mK(gG(aeJ!A?1!JjeDYO_!i~C%7xyL}|rGL%s@r>03x?zP0*r zxA9LpqJ9@-Cok}$+6z22sj%HWqbBD}l_}49E>rdLjD~JX1=8d`K7d{c-^D_DsH=~; zuF&KU@N)OHFlqSX!6GM0^FBS5(h;3{Vg7>6bBoJI|7;XRwWF0`zMq3f<$ zJfTvi%04xR7cIGQqi0m|!mqc%m^w1KA@z^e***B>?lAK%$M)kHo-W(ohfbR%&fID@ zE@2J!v1xhk1 zr+SZgP4rnYZK>l^x^kd(GS5#XF$$Ec+nrhS`wY6#LSQA;yJKSX^=+ES_yL%rvwvk< zjVX8qgTlwNi64w}?@1w*&&AGLy*!SdYtrqKbvY3){m!(~`DK_Ixfmq4Ky-Pf_5`r+ReNlM?M_^PyqihZ$vZOM** zw9Y($rOh&J6LSHcH`D{}!xU=m58&p0n#zyE&lENH*(dP_Jw|--}2be z|B~}_zuG=lEnf+~4BY%Gd*Y?$f4df+-p@wlKy)ZQf5efpTz=nY z0|6ID2Av1&TXwbfuz5~<5F0ulWhc+52|Af6c5c6ateE6}=4|Utxfz6o3T-kz3!8}s z*qbMu>HAD2a!+n?OwBmBa>_jiGr#=g;=)_8a4*i~&eHZNLjrc%RpZ<|wzXEcej>~y z{0-M*&uVaD*ZJdMJ0AzB^0DRd78lN9MZ5D{c)>euhd-NO3hJf$Bucx5sECMn>9h1c z&YB=c&q6MvU4MkuEs+nztJ}&1r`wd=J1rD#*hP9{O20UJNI!TuezllI06*?|zoHnE z(Uk-sB?50T#(=~JqW=59vR^W`;SRu46M=dJ!F!cN2p% zPJD`CQd&c1%qHZ@Iy#SlA^CqtY^(g#;s=;#W+Y@mK66~SVFkB6l3f#Xw?I?HA((Rd ztPLjCW(#Iy=;_nw6(iDJFQ*tN8uv66&Sy~U24j*2OX9Fsj%)IOyUC-v?%1E!$+7|3 z1lRA6f4i>z5DV;44-@q6ZujC&Ay-t|M16Gd_K)Y_FBH&W~nFerCP z*>LsOhJY=;CNC}TP7@7&Aud4@qlw;6xeK4!;^zuY}1w-{+e*O@I3 z@rtz;6>MFB{lt^ey?yKM{xGe;dr3tVD2DQ&tp@2vcOPoD#kTd8gVg}{ZWi-4O}G0N zXo^bWB0rx5793ssaHW)q&LWdi9yd&O!@zLfoPYbni~cXvj@8Tj2&-xcfByWqj!pn6 zz;HaS9HSa>Q~Lb5^kAHJ8XF<}rQ?YZ>8NZzY^YrdEQV9Zf7**)f?UlKb+;J2rmf(y zm{_IzlUunkSd6aBsA0NTi$$6Fn0i*^lFOttQPMFpmG6?H<#>>DaGY6_H?zhCmB>{G z-p=EXT906*DATz%hiPGzf1bvVuPPJBmpW5!k&d!xF=Z}Y>63I?E)l7HQbuy{h*v@1 zV9ixaZBxGWA!2j+kHZp;YrqM=M}dQuYQdAYmgfHfLO{L0`qA`|R6PW_z;XP;bs$;W zxD@?x64fPyMpbk!Src7}EXr1E>7#S>r0LCjy4oh ztCQ+Emf985bR3b^lwMTPN@X852#?iwJgeuG%8+Gzt1e@$wNKKQ;pb>7pkDjS^wEvtTRD4*w?xe(5l(8zQ2#cf@;?BCy)RGbx9e9q0n}@vaqE{Zg`6&h6@4@HI&GBEZK}^1Ulh|idbwY;nFxU%w8TP z;i0Ik7DtI(S2mLtV}SBe1~AJ@M@e)x(2L9-5@q}@D)UI`;~vC9k&6i$gj~?BY$}>{ zWm)C0>(O@hAV9uSX~>}6bjA|d2Ef-dG%M7`UYQh|kW7dM&@rO#D9JGK@mQv0H&L<> zH)X;x%aBn>VBx6?TH2@w$vS7Ibqn?ckQNkCQy(WT%mA+wJsULr^mMxwwIqryviwZ}(-EIRsg-I)0T~TuY!R{905uANjz|Fm?~w(b zM})VKmNrooY`8%uSVRdrBw^la(b>cU7f1q+i9s)-W(5;7vLPZ#&^kuE5%B%4ssEL#eqeePVW*05o5E-L4;bJ!6XY-pA=TGV3e@n6(FHQ zXQ{Uf1Y=&0MT8t!a0$c=lXQswvq}a7vdFwslz0Tgt(OEr(3>Pts3#I8ybH^O*v$qTG3kkntuFcai3f;6 z>>`r%Hi8YjQIzOZVdS(5CcRMbH@M3??M$ zL{X<;7Xq+wA)6UM3d7LrJwz~4E3SgUfDwXm#Yhl&#M?w(ufu|#7xfAeErKMQbv9n- z6fsZ7NN`ze1fAY&)(gmDC8C>7tkuL@1rLm+fhs51p#nXOkQ?Bx23d6$WU|7TNqPwa z4LpK*H%cIL|dzaX{L}ypaNJ{SQG$?YeZPNMyw~i4LU;%33I(%V|DRT zt&V9IIL|o6TN&Ntq?&|fEMH&JXr=O>egJbOcEH&<_8kX@BsksLryMlY3V)`!g6eo~ zibnCV*u(e@ckA2tXv#DlyQbJ|>aV^oJb07dDwpmWeh0}TS5hrdd~E&0Xn$Qcg{=P}zn4G6es+ftR3cKt(O9|m7xn5P6b+|K}qAK(Q zN&?r!|Dv%@Rf=9_7>-lC==bQ|y2jY39Z5EGRCckIee0uY41&(G&8Cnu$ZYtJzoNv{ z`aZ{(zDq){vgwD#2hTv+A8_mX(4fY~LxX+m1TJ6X)PTlP8KPYqf+3)a8~MI=4$*JO&*J1Uk2T>_cdSEvf!D6^nNemikKe{5VXYCwzTqA6J2 zECsDwP&C;@j@by8xoO;VZU(oETf;czlt8g*+=MJON;b9!vt_4 zFD|9POP;*^j-^{}7W;Q}&g>KTv7d}K^ew*Qt~(a@8A_jw9?|UDkrgEgQxe>=^p4A) zTq5+%?A*~W-mD1_Vt~RWi_pbQ&F)Cu-9^hJpO+RAOg>MoFMVaY_{5?mHwoMBu8X*v zo6sf}S=RHqU)&y53YrO}2_>bW5 z)gJK0AW?1o*hIxQ-&=NI+4(NkaNDDean5 z@*^q#<`bt2uwCA}6{9I9A4jNj&fum)jki6E@=v@8d+45DWqj6?Xv%Z<_8i*O-|PPo z&>Pponlm%~^dPmE&Y&)FKiX$+I-TD%yB+-_S2j%*_2$%f z)c5fJR^M~vS6#4c*9D{o-B%Lqx^|Yj41KOXg6>nVjcD5rD#6F2kVP>ouIgw0|9%ga} z%A!7Mtpo~T7SNFdxnjsEF+=#^&eB?m#ymq;qSHPi`159)Y$-0fTE_!Uynfl92ku(2 z+9<7Gy63>MS$gx%oo4;4We4^wT`viZ&FAlZV9&Dk5~S2!jlXD-ZRWgRAimRUTM|pw zUb-Nry;_zeT4D<>U8}v2WiV(t&r2)<;7LCl#KW*-4(S2sv+!Orm@oeG3)qOYL(;2W z=Lm;vIY9Y#_wi_2+roR&%NH%bY2e=U@_Ms={(QZ;etG)dfzB&q=Pgg&yRdB<;``8U zos_eM!j64Sdy<`D`Y3iL_cVps0}pi=!wy}mm)HO;LjM`SxtzM>+Cd%Wc^mIl3psRn zAK|sT813As=Nh;Om!w~17;_g>Iw8y29!@!vlu%HQf(kuEN}sn(Whx$VsC+9_9Hw7W zK=gA8R4;#4S6=-oYA&+pw@{bLH2X0ZCqLJmd_^T61xnv-fXq;a`qlVP)t};jQ-7*{ z8g)^f9Qwrv#Ki|k{>kSxALDEDXZ8p;3pX<>%8s&C3eECGNyxpV^?(?&DOKfnj!Q4x z{P?yzFCF>EwQoG}`1SZgL$}RrC_Z`KWt$ER5MA%m-16Syi{6I1XbpPA&|@>6 zU;I@6=o>t@9lPqQYkqL-)w6a-$L_W?d%+*uGWJ+Id6T)TtY80rA}2fJ3lg> zxGcqJ${Jwy^3CD6+PO)>&$i0U?hds-;l1kHwo~~D0;}Dxv25sm%|P!^#Sk(1?f4M% zw<;^ebXcuSH}fByA6EPT?AljyH^X+oRzX%<9a5|ZXVVR0h&Lq~u zE{G{JH<>=$kasYhOi^r8lw#SWe9l3*<*Fr{`le5tUe|nuS2r!J*k;%^p@kPEyRdpl zZ0+l7t*dDXo$tA*WB#SHmd-}Igguf?_N|&) z=gaBZ4Ko|<2&WIPy56(^=bi}Llgm@hQ`|MR9i7SP%jPDQwPb6$)URt}X0a>ehD$DK zd@^p5BLlnCE7e;n5#z>{ROt|t@aD z>-*{KjUAD9(4$hLyDc(r@%+U%UAJWabgPcijh9*dRv|RCxuVQcU6K;+wkcwLnuo)V`*(W7YhbGkY8@KF=90mcC{~c3P;V&F*x^Z6=+? zd}W(I8kvF{7DRQ^BVnhj*4x!RYx(@TD!%9?^wvpy*Q z9=B*iW<>y6ZdcY_87!LKrMN~%E~b6+O@=`lZx^sFq9f+ouGF4}6-&4J+x-Z4<+>Cz zLKbmqsC(4~8&|eBx5;7IDOrK$RvMZwwczEi4(tG0e`;*LXeBy}=(KvH3;H)-b>Nw8 z+q=45Hn~PvVYiHaf?NnS$S7L9QrxJhcYgD#ftDE^(*wbl*8YL*iyuP^U#bb8y1hI% zc8)Vt#e$JaOh`W}1`zv<4Akz1#@2_9)_rnj}{Hq;TmUveZP62isJsOI zAw={Rx0Tui)n#0*wGB{+x1cHDkK!;3Ds~L$Mnp+_s;0w?{1B=?t6f5rz96Zgl=S;^ z>5~4an}}{|?||O!i1a4zN7robRP<9Fo4Rj&dE@rq+bJCo>HQFDpRpHR!zHyg+D4 z9s=09^?zpenu=}m{NMNeydPV)eRpPdcIH>V-=Bu+_kDe6%k#S$dUsyZ-gmoO?dB%P zEXL*~H@th-p8LOC*zDWB*j3ZEWqxP1*fV*zf|`+vM|~=YF9$F&kr+!D$OnbIDjpWpZ9|geF!nIht$($?AZMx{G?uCQZph-BtC0rdczCP3QKvl{7SzxGE}Kl{Mh(WHN#N zgXD<7&XyUSLa?JE+~Lzf;NpsPPO}Rdnr6@6Slhf{$-pa##NLI=&!>xR6*cNe@uEoi zqzb3n)!a9+dQNS5WkqQ)+!=0~9T5}w-h*(Iu+30z)LygDI5Yw29lb~zq%b%Jo>v)? zrHBm_v4DhOBt>-)(mT#4@u`Jsq=^|4f@$1rg4Ar73xISWCj=1_7A1YrNHhXJNGx5F zm@rlR?C{>d)dv<&+XD=4mnm$%?!~FCGygCE?%cm;+KlQ+ldBH~yX;YKYk#6_j;+dA z-n=;0uwiLjs|y+H_3gCY9qrpRH#T|mPI|*zZ>@jx&Gqmj|D^V=D_sy}k#G=+KmQ39`r7_Xsan!GExMXK{$kVtcyl!20?eGou+MX8M z1b>w!teya&)?c^0aq@=7VtV7oKmU2-yBRwx#(_{%MN|dRmI*Z~XNlp2CO;B~Q5Qo! z4D~2rkVZM2B4qN^j+ymvhJJF(bu-H}*!EgBbJw9=Gs~m}EbBjXJc-99CVA+yp#6Jd zmEkaGak3Yr_H_k};?T!e9JpZCtP2iE3$YAR_yUpq(uq7LQ80sNz#tuv(quDo2xbB* z215yA0waPZ1VYF}FCps!NC~xBJaMF2Q*=VQR^k$u5)ClO$uPk+NMT%q6d>^=f|L{> zU7Mhi5Tg)ia?HIM_ylbI$Ulfl6y8V3@--)6f+;Ao1XgGPFhR;JJqxG$WD6h6Ja=Rs zPccPBJS2uRfcYlJ${*-^NGApM%ybg=O4QsrnSe9n*ijnZ` z9HU#6AJtAH+c-F?+5S|}663TXc@BEqY2V$58)dGgsZ1G9^X}-;&&}s8+cCm%ey}rJ z7>g4&LJ}Vkh+%j#iqkUXkR&$vL*eWM&QX#xp`sr2Us^xq><9pnv!~SG52n_auj~{r zTc(^?-W;uBzD2^Zw#0F7bu6?Aq2@eLduzKa9rwjU>mgJcFTOmO`3w)FttH1f>zm;NkUE zz+>`}bWX5bd;+Wh>*m4k)$4w|nz>qha?XO*`6iY4BvOq)Cp4B#S=ai&YxLE_9{K}N z)46hG=d?4<7=AzfJmlB!m=tkF(r<&S!PgTe9B@ylbNzKBhJP)Q8}LZ#4+SyIKm=PR z@x+oDF-N&VFo+;ymQm-uB7Su1gW?NkazMUMsnc_vZ|>-OX8)Wy`=9As`Pk%r1>TF@ z8-Q@_t)S=?x=4Ip{OFbQuGy=!$@eRuaz!6H{WWyel(zi^-i?daY&!21RK}7MCfVQF zcQCG%X9O@VPK0&JaAGl=+1J95v}@Lq=|W){Mkru2_BAa-Qd`&%#@Ef_&Hg>Gf$;iX zA1psX?b4QLp^4Ema=M6isO-F5Q&J@M6)6;Em6LV`m3o8HATvU(7Aza@RB+=sr|tq& zIkx0&2t)%L0|9`&hvfi0OAC!Mbdp{fL>H*c3I(wyYS67z4s=sFy15CW$Dn78Jr$K| zoKtt5pvqBQLR1bbM2fq{?6BDTGd-WfofCM4SQy}Jc@h(Yxr+Ux&d5d$0zD`B#td0z zc_3j00hP4)c8$zY6Xw=5_2`XVH}5y&Bo=e);Es|NM7( za4?f$9Bi_gZ>+1EXB1pYZQmm=J@U!E&rbvC zaQwT|qdA;^&g*D=04FH=0yKtsBww}Uq=^fx=XVDe;;3OTB-L`rMy6)9r19(QX-EtIxN@?%La#OQz} zb%iOBsZ{ptakgq_q_WrIy{Q?ssk*#ul0q8)Y-({vF3KhbV1yn+tVXiLV%1WXb(i6Y zJ1}aKOlA@WLX5(*26mePQ_#zi+tJAzU%N3_8=SRzmZydG2pW~TdQn5iIpv&*Q5kp@ zW8%tpT(*O3@&>YbPDjI{YPCuufJ*8FnE#6_fM)1!4@gsG6=gU)`q}i+z8i1s!y-)0 ztXVa%Llx8r%5ZpElhQ9U7-W8B)3n0%a9Am5SokC`T-J5%U-v`!#!3iRVxg4D`JUvI z6-iKWq_%k^f0Jj7LCKTL7jGU(yh1!2G?HwwZ$eCB2FNtA_`(#b0|m;(w;+{wNY#}v zXw9UnayW1o2`mzYOGwh_?jnw@#Hm& zX=0rY*Py$(XVgx;V0LBY>C%y0=2~!Yq+MO zwzi@sY_$~E;(f8AnyoXcH{Y`Afz1;qZhnA_{}R5fo#g5eQ-0omCUI4gkP>|X_GK`i z6fZ%hX^ssF8ns&dl|lg$gpRTo6D|@Y%VUECNw`-+ssz2L7U;hcorhT+6Bvb3fSxQM zB{9F}U?;OUgoOVnO7f7)^Io#7zYmiTvZwI9vlOo#A~znwgqOXT@N$I`Wgh5?|OLVc8r+)mou`llbX(zZZ9E-UJmtInZ*be@2Vz^|56P zk>G9#3nLe+9Lb(JJvy4sExjjNlx1_rvCR~uh!arO1NS`vr)7Z;b|kGrgRF~;V|Z*}bODkr*X z%LLuht%r8e?_`2ra{292Tg=Q$dU2%w7>tbDk4aH7G^WHgM!pF2F5NLHUxC=oq_>CD zl}*wSB1zQbQah&9OAys}y%)60l!hiBP7Uz5jsp2nmj|!=nhZ*rJ^0>Tcvt-t)H<{j zn2~5%X%e>|{_w-YdyVfLAn+YdKa%2j@hoEDJjkOBzY}5(vIFlJ_mZ8Ln^v}OW5PAL0@p9!~6Ch7mQf5#}&GVQ@f9rc>zoi~{v3H*POD zgc-o{cd_LCY5Wz!^N4cNJu2cmo&#WfP3DqdcXfJ*VtZ91D_(PDqyY7VQP+DAnTc)L<0}0iiIk zaTeZ2%fq4UTH#(^%j_-cEjgaVcaf1ug%0tuVl}8&ALAJciv!0fx;N`s(+=i6peLyO zI?g!HVdRhXw>?Dtl6sZ;fcgqaP&(iOm7sYnH+FQ?HaluNFb)^?sg4K!AG`i^=Z~&0 zMjba~BT~oUK4I?aoS2r!1gG-rCkoc-lk7k7fAM^HlKmsgj4@hq-3SO5RmdCH zL4UP@ET@4lIx-@w8AMEDG4vyzoCfoMq<8<&-gg3P!e|`C>ryWyhYHG*%-k>AH$ei8 zl9+2J@xQH)o~B0)U&|!jc))faPm+E`r=)`R_U3}mr1i@D=L5(U;!qF?9f=%QI`&UD zQL9FJs0mbTR-6;a>&r1z__8z=rrg`C$-rQZaAF6E2RkPDuXEEdF}sN`g5>R5`ENML zQWEMnlGaH$fP~MVUB!HusjN?%d^dLCw?e``D0y)*COo9!Lhd(eW%`H&2JRknAG`{~ z*!`3BZsWMuL3;w-jl}c^vltu_HhzezM&Dwmlxcd}s{bIVkZ4ciR52|{i%BB=Fsb9I z!MwESMmxda__g`+ltN?{$Anmoe-J8POL>QU`0tw7+!P)^# zxY0kPhiMgVFgWB+x#iZRRgRWJV9>3=nqb1+;G?mem&nBE$WSjN-U%$`nmo}sY0psH z6Zar731fOsk1}XtNG1<|m~ew3H=S}Pa8AkzDmq!{dJ2}XrrEsjAUBC(DlmFLEVS$5V!FLX-sU16GytPcwh2qKP@pnoaWPC$?1J2Fe^9Of=lf7+n&zV5OMCiHFJ^zCj z2+lm&JHhv?MEBg9FXs+l~(k8iqXncnTXr2PJr`L3%*1AJpps zB_WkcNV{}z-oPyk&n3p{UNlSPV&)l1*0G?OJtyY`#%;AilYxYV@#9PjXlSXi@>qOp zi2-3qvM3MZ63{P?2xerY0uZ~2MT*!z+0!9uf<`c!DgnGkfTO4rNUEbq9no(JH^Cs7 zFr!waB~T6lns<-cQeTyWPX&1P1>W&Oa(t9*WAa;kE$DIhkXUzAi_6d+^{G z>RV>8fEf3g@$fJ*bGnBx4CU+70vkb=OgTq&R!Au{{s}ZS&?P3j2C$2t%w~!HLv60!@u6*gzLZ z;&Pwl0Fz25Mwb|n5}#y0Re)!kq7;;YvgJJQ6NzOyV`R-`Ri0$&AGMv$u>@bwZ)}=3 zuc;BTl3)GrJ$rk4_A+O+Eo*CAmWJyNu3L8y#wDn?1B5a1M$%u0&zU#xoO$BkBniC@ zU(}O+1z*%gFUA+G>m~UZ!=DhANpKPAy(42pR8nkdwpYqVBei7WJqtSD2u@sJq%q7y z1~?Um;<4o;1Fh+9CT;f1tL&8hV|1IzkaR&KuOmX(+YSEK~2GolY1{{GG=82qvL zSI%o!7>qiFPu3A%Gq`E*HYv=tELv=kzWhEVNgq$`wG@A z655tGB*lz6X-t7e3r0@M_`G2zl=Xy3c5-Y+C&pfwv^CFbw&5RmQ*QO?{b!fnJmtYD zH9xN)v}{)Lp8c2gds;4YL^j^F;o3W|+q?d*4H3s> zps#CQN5{O8KNp;HuSumc-FwcWJ<}_-+REvBfc(`9W)3v@6f&W-W%b1KU;E;4_o8iU zXV3GwyJxN4ws6ki$nVI4-$G`b!(YiMM_Y-338~)cMBd$uiD<`=G7Uj;ERlm+grAIN zX_B}xx3icVGla9oK&=Gshgz5b1%p_?6CGVJq^PoaHmAaJ5f8b=Ec+&UJXNyPF8+y+ zGKrF9HW1{GUrtk5Oh;U3Kvf)I>%-!^+np`Tj#H@qMedR9kdaK@7;Q|}X zj}7Ll@&IUzPWn+xgLr*(Qob_F2CKtvYDE05kt(A6R4rjHA}-S)fnaf>F(}>woM1HA zA*ByPw-)N15RLSFA@TWHffvLV0&=U}RwcJxdhew+`Ggv)sFY%7ByKG*eeDBZh{Inz zuof)=^Th)nk0x(_`P}QSI~Uym-KJ~RsxG@#Uj<$*Am>Vp__DS6+o0ij)OS06-OL2u zQ1b8N2n+nV{0DWDTWcm{YE@;kTjjW}V*Ed=Tf|nS&sIy0ZiA`{75~$^sYpIUIri#j z;|_5b`{7ke2JLC0U&5qa4E|>|k(_|w@&Bms8MzKEq%4f~A7&9@M#Xda^_0&W^2sDv z3{MT6;I%1Uo7D1B7D#p#CNh=DEW|h8OdWjhVCqfrO;GVBoqQ9d#$1C}*OBUEBD&rb z7m05slb{0J3otXfE@ub9W3dm(V2#ui692w|+Cl9hmewCpj}osvsuLOxP(9)W>!E^m zbPjrNXdTreaPo6byZ>bCY~i{gw;sjY0%1HG?E}#F>e2tCen^l0XSNthKa2!Kx>ujh z9VZJg{$_S5Qkm`i65VzHU+_JeR;Ne5CzzrbSriPAGrlhPO@BRRmpINwW&xx{=D#>d z&eP+Z+~Fkt!w;hIFO|U;m27ins*GBIrL$}-5N9A9Bm^%3jB*oZyn)$_K^$1hgYe6^|EH)Sq+wOkXkaZx#Dc-(pifCHJQr7ELZn zOde=hD}J*=$LsZOmv7;fcXbZ@dLS4%@2FYfa=F0YVc$}Bb^OBgeVcUwn?q}+H~Sh4 z$F;=Y_D@3tc4BW&vmu^kw)wOkXVIbtgIqM=fOn!`jYWig?8p@XQdCiDNVW}y?0zxeW_55D;}{psJY zHwtW>rbYtV|ER5?HKkwkbT4@LIr-VoY!d69 z+EzIvQ_w{+D<{ZQ3`75=A*zraH9+o}rSfOXz?c8ChQzicB$p6-fnQ?y9Az&s8%O8l z!p`vw2uh}s*A5fMCyhs~(($b(Vr4-#BJRVLC$8n@GGCDA*JpT3N1D^jMg^MDG5Hz> z7r-#u;}#RHAJ4j`gp6_qhY{yX$4+6ZUy#@Z+T)o$G$-q8yJg*RY@!9zVR!U zkA?p^Wx_Z^z?6mT!4<+-o&?0tsHHQ&7Ca8m8+DQiJpqZb1l30pw~I?d;#NVBX}smp zBAMJMqiwMK`ovpzj64V2a`Zm%+sPPlCL?>}!0$=o799CMv*CuFJL}X2Ah&}9cTbtE zIX>z<@mSHXj!3d9JaI&}iyfkrR0*m>C2D)xU}5Qy0tf`xHbD54Fq={glPMtyTwtAm zxf1~K);8ziM$pov2H%L+FJR3UgGFo=ThYSIE)cJC^OfM=9~z5`Odo=OSMsp^Sgo=N zv<)}A?ggvbKvcY4RC@yI&p%fOJeY^c9p^9&Q>j?r$;ES+#7PoUOyxoRJzflg2P8ZY z_S|&RP{JzBj&#cGQ}RZZ(&!z$j$?jwobo}|XNCz!MTrt7IYC>R#UI78IYgsL9bpVm z0FUJH%enPDnb-+QvCR`($5HRYb~_T}QVHj#lj!dVlgzp%h6hJ@D(JcYM*T&h_?9?w z(5Zhyf4v3X47#_#qw%dmfzJN-@DZNM@P9B8MloidoSwIv@S|eHajcQVKT`~d!Ar`- z%8qj;JoX{6n2lz305{Q6rT_3LNoB3AfI}UZCg)bvB9*kZBD09Cj!&FX7BY}cE4hSu ziY%s*-`?8AHu1v?gXJYHlkB#|wOCO{yXe~dx~Q|e47Na7)9lR7tiFzIcUsC$1(BY< zoLWz9N0Lb9EoV%PW}`(4f+ayM!2*Gi%_Sv-Fya^*6>zkF922>l>7KoQ4WAgjpy71Bs8AOkV+mquX(9QIYs1 z?=yj}dFdOz62HoT3;`bP6Ccjt2!UB9cvZn|(*Klh4Q@C=sjRsN0>uf6^aVf`k%A=U zA#(oUIT$<$%r^OW@k*SinQQta)J0$(|U=LiYmC} z-6I|*jS0QzLm4Kv%qA(8bA-1Wk7(M$y(G9j1DQ?cQxNApIAAqpMG}pb{D3A`Xi7z> zG>*1(rrom|YnC@pEcZ>-@M_In8dg3CCUo7oyBk=u7g*ucSWjb&!rv`DdWK6%cHf{qk;qbP zqm`t@fg=I5<={X-GUE(Or-IB{;!Khff+4jM{Wx=6C!-!B(2`CaqJx>-_QKmci$Dl( zhCmSrU~g;yxQFmT{KLr7=4z?V;tiD*)K} z)JyQQv`90xvzE-NZ7hw1wdVEqz})p`T~u+|tg7p2Y$$K?bV>b<#qnbFZd9kq zKcr6V$?HV_z&d@N78!bEow_!jb=jm4o%wAep>HiRHk=GLq^V%59<9@8okr^fZ;*+4rxy)V z6{TLZWYAKw@x4dJ&%Rv#vJZzxawadQg%S#OE(e>?k4tlB74U|H_!8x`Zms)ceXR&3L=9!M zKG0FwSvq_1((dxE>Uwi!h0h8Z2mxTIQI}>)QXh4WdRj&nW0Hg$FG9XQiZkU%*GZ6h zkiuUhv943@%sQS0++-GTo0+8e?z;qzF=Jx@)Vt!l*knM!Ceg|X>ZthLQ5<7SCz9`r zPh0m&0hD{KV9NW_5Fz1M611STBDMGE(Y+A=;s{zK%WNevt?hU=M>otBM**Zrc@8yt zK_SOfAjB17KbVaHAc4UH-5Q*R!K@c=IJ!3;>pf%R)1a+7K5smcSN+t6KS&HYS zuRXeV?cH$pnsu9`3Phn(ydk;wsL&h9RKz}_s+tZ_iLSKcTi_+S1FqrOxmak4i^(g+ zGNA8LFc`HgA<)cWvNH)Wv7_hjsrFU-w(W}Q)kSK3bl0|htJ$76o%U>YRCDX`w~$eb-ks1=i(Laj<@*!klB5w&^^bP-iWlpZLyQ8yG$XLh2a1GX1W7G4ZkhA* ztArfa(d&|q0cej93!%<}mLBv+dkD_A?Df0EM;_4>IqL3vNqpob@xSozP0a9`pEfp? z!Q*L`PSm+Q!&B&|@gJBnr?c~yBV%3gfI|i1v09{6Wik6@B;%yey+dEQRuIIOK|~PN zVlA#g5WsJRT6oDQOXijMD2Sl*Y6W~ngLE={`=mJY((}=yLm6Oxiy{MpU-*3ZGJ2eJ zJ9JwR5nm<+p(l@iJ}wn5npDh}(Ruia(>))=W7&)ri3&h5>iNu-1+@|Kl?0<307xw` zy0GBwv3U05v;k>;MYbVEzk|v#^^#t~Xmj!xq!C8HFt}r!Hb{{C5CiF9an!RgG>=bU zBhi512>}ny2AF>R@D){XwfVVcH4m9VKLgg)q%Y8kb!;-3{zdxN^aBs2Kl>;ey+ZtK zHCP4RkAt_4t-SM2(tp(_60-l!VCi`jQ1Eapy074gdw{@xDE@o+z4YWMptKnL7<}Au zd};&pbny68G`zhiegjls^|g200p^0zUuN1$&q>@R^9#OJX&kBoGSo_;F?hUAU@1_Q z3zSY%BE<#&FCg>NFWeCn~Z3GVVOVnL8sH zWT?;bZZLw0oFLq0Pver~r;DkPJ}gPEC(=qD@i*v}>CJ9RPi6j2<_D3We1SQW-vrJO ziP4{!{2x4xBLsdXLHC{kT0X?r!+E(&E7H48>&+oH6eO}I=`60;7!8pl`_tQ~_6E^rMuu@BIW!)c_+p&I8qZH){+=&CS5|=}*_PK&d2qx!1+J zUefSN1^x2qn8>`}&M}G!gbd|`q=@JeW7r}d!C_P`kK3)+8+2nB1kyL~(|C{&cp;EZ z1_ZeRz025%sO&}d1tQC#cd20WvjrZcB{OggwJjIQO2EYWWicC(qR^CnR(uw$hy7?k z#vCl^LulOY=VSEc!`lNJ0=w!42J3bP0`%o*V<+C&6=0ggXVVyS7GG71&&F5P;_Knn z!`lMrqQL=l-i83ZKY%Vm8#@CVMzo8h>yJ)L9w%N^3W}wZ<3^}TCWVm^sq_f$)T(hT z3a5$P!bZtqV&$PFM7w;@RT-|= zZO0MczC6t^eT*+j;lwJFT&^Be=s_Y?!W--$!MC7S?x61uU@Iwa)TLA~83?#Q(rgx! zZZel4IT$^I!o5w%+G{f5f|yp(;2{!X%#B05QYC(em_j!dQ+5M-q?ppG1~m!=O9|TH zJEplsbYGBk1p_dtN@OS)eZ|e4qJoUxr3@Q|6soI2?FRAQVXZDQE-8kUHtc#=%{8V{Kh8ctdLt-#2Kq z2H-P@$DvysN)OS=Wkp3d7IhUZgM%Xg!XCV_wzm%aOoK1cYValL1at%RZHhy%cNx0k z#-gHSy(jzbZ8(ND6I;p2Tv_I%IFJko<3?t?2~2+aGpQk<`2g=wYeJ*CeJ?;tM5weF zpGR5_ohPscSXNk)d^rL*A6k(ebc%sj%StAScq{}l=9siK272ua(2HKmpfgmmey#{?OIR5A%>r~m5& zg*5W_Ng$$hHe4}kO3rgOVN|Qi3?_&4(V%7+JyMKrCFWe-BBq2kK}=bALkUcl+?a{w z)X)Sjp|FYQw4DThN$xWqsG@G_BDWXb0nvw+i428=d8trNqz=Y&t1*f&f+L}uxJX$H^dSl1sGu^7 zw2BSQ1V@T##STXLH6N{3v5ZErI?xLcJ`?Y3U4a{@4bttnP%GQP8AEHAsT4B0oHlD1 zMrX7+T-sgF*MK+m3MFl29io+{!HYU1Ay^@=5_e8`@j~A3Dl+LAR-;k>?XcQ}>1t#w z%Q6tK?+cpE8lipyuic{M-vE>aJzsMeyJP{)&@@aAsMXpn_CSYPts7A3w(p}EbRmE& z$7S?!dKk4wYd&&zq$OWMa>33&oT7z!$0U~LY-+F}YssO9QImIQc|mi=3S83_-~RIH zLr6tfr_gAWY*}yR{60`klEq#HxAWRN(TluVyau0n2z9Xw1GoWfuQ1lx}e^@DTx#vVo9J$zv!JRA2+FId;zF zY)zO4JX4Jft0smIqTl%4VP1QwMrb>~tHZ_`bn7_1P60RX4g}_$?+kR+#zK{|s@h7! zHp8>G37Si_eEo*@CSGPx&ynl28rl+XSy;B>979=PdblcD*BhS{u!9vhy>EXAx5h(? zipq!;J?l~>gethoE?+RasK#4rG3j}qqoTCFaa!sA*PM@Gxa@~zUQd}`#v2dn0Ij5X zU$JFDhrJ@?@Cm%pQWb2OxG3|^cB6OJl9j==fHP-UlS5P}7a$zZ2{6H|9G*@0E(c}{ z_Rj3)wf9=yy#F5H*DB?v-{=+MD;UpXVDBAfaXzuB-B$mHYjDwM^8I~UWq1H-gJo;A z{DH@ekBB$xd0q`Ry`<1ws1X))^ICLZv!J;cpNm$T=kf%&5Q!Ruvz_wzGK2;hD3V-v zlSGahj5LkZSAndfaW#_dW~O|HGs@u72T`XWd5FL*E&nL~QZ85WzZR5l3jt**_e;6y zmjomfAUfZV;V4GgA=f#D=h1Nv|aF?Lh8q&`Qnm#Q* zU(l@6^5PR3LGpRAlHO5AbamYEF=tF+$#R`B|LNq`q*09#cK74Vt$wg6{k-@f_?{Rn zIYDzz)-9d&RYS+~^t$IS5EI}Iao2yJJvw*|?YJJ5eY=(~;9-(eY9#I0&}e%W>KTGh zFdHqkF(K};cp@Pm-hq@LX@{gE(xk`GK3ZbcrgNpukB4;jy?BHXOEX933=SOj&%-%~ zrvm`C`Na3!;Ev0ElfmIxcg{h3HhILi36A+&cX8IkR_@2I--DJa0~~w}*XJS6Rd{jc zVpgft@3XT@z`8Ry>n^nBkD@VSJ}5`(GlQAV9!w^aX{1Vv zZ=nse>qs)`M!htBqty!g(63er`-rS9S(d>fokndHZv=f-=~u1MiT7qs!1`_735xjy zwPS>uN^phDm;gr0a3){W8#4I}Ui2BokrZTz1bqe^lxV4mM$h*yaFJQtF6_R!tL$ces_?vPQ;l3NQ)*^xdNbjNX9_G!)TlDgwV zSyTs!*Ccn}67=0n#cgWw7%;g0$UJPLSvU<``RHx-D0*gzS=&)ql)C4~gPRz=&iJ)v zT;%k#`O;!ssdE+sU1)%9in(0&F>b z1CTz?zLM$l?KlcJK%D%*xx%eYxK}Gr=tIo181Ipms2di2S85Fw{)k@ z|Dd&h+Ljry1>@B@-m>G&?rOc9+srYV?F%hMSFc%r@EKUOWea$iv$A@%hHqH#bb1Rl zrtWbP0iCb=smHld)e}zD96zA$uNBtsH>YR_CR6$2_m5Zm;nCG(BjdJ578^2=vBNIQ zzI7>JW3=6m#Ylo?&P+JfWE{p{286ztxQz+yAckCp5^Ar>h{@3)hs{e=(C!EX9QNQ~ z&@K`mFL2v~%wSwchYbc@NYRkE*gwP2cI(2K=lkqIzs=fL-QnTw3I(SsG79!^XO%~% z0D{2NS~&wuv$hbg4Z0_EYj8$|S7tS8w@^9$_yox-b7ZgrpwM}$I>UCsSft_<3On!V zsP41c{6V|#{Fw`HZ8Oa9Uz})AgmeZ&n5MHWk^Y<12BbY6YF;#Ji`HnB1xjWHt}d zLh1_YcIpx8*M#2%N5f+)Sp>tU1(3jq{zX~zmvQ1nGUj^&n~4!Zr(p3BTNzBoEL#p5 z5J})`G4Pp;=2-R&<` zbH^dAc0_B7O~&H24%5Y6s|<)2B@)miDBH>}6F(QfxU6EL(r8ppEZ+x%`^wRJTC-$& zBsxp(=6tGYz+)<|jyOyvN2I#g^muzafvj$qsnFfQw}l3tPj9Qy59uH9Mk1d~78iqi zChrojDXA>d2Z2}orxog4z`E&Rt*NZk55Bmgq|Ee$qF8I@OM;HZiy9rlU{S-2i4i+c zn^bh&t&zyBwQ2gNb1NEIosMm+Sa{^&dF4%by{UX2-3Us4^Bc=D%ewgQ&)MBj91IpW zkcFcOY!UzF(nBlIi+>LAj!GaOX~RWd2O2N`hQ`Z$|5!?`qIOdIs9UIqh@Os-2+_M{ zkFii$&%rXocJrUw@+fUnxMiyEFv+n;J! ztg)l@#wX#&WPRAa_T1Ilsz6cy6!1h*U{ZUqs3_PzDNqDvFOAlOHS(o^<{eJp|3kYO zRGK@&;f_N+J?Y$KO!-c7Hc5RW_NY9dPiq=oBd2O^Qc z>?3FqbvP9Cuiuz7>5a+hg`aI}?2?&GvaZH~FY!8OG;(O2(TbbJe*oRI{p;q5-%oyM z4!Szn^-veSNw=tpw*;&auwT5!1I^`NrxZhp`GfyW2{^+a$RrIqF4Tmw3Ny9}o3ch3 z5CeE8oUi=W5&X(zRHgyAL#J%xL*W=Oaj9N%RC)DZm{Zsxjyz4JhHt4lFnAxUxXSSD4Gk}DV=Y#2F zke4e#;!tYi-4i=k%WXFK>duLGZydQvNqAMV6uY1JM=_hT3w_#*37A4$6zTowf83-{ zBc=OG@qW?FR)}V#Q(LYD3jhEM({sQAkr#i$hC#Pz5$^*F!KdO+M4oOIUlsofTE&kx zihm~D@_~)Lpa?U+i61fVh<_Dd16uK);y=V+fns`>_$%?BU;@Fpr`TO2?oO90jSole zvQc2*Or8)Xqx2XwfC~sL`U9K-av&gZG(DJZrXK^xuk(R(>A~T5U`ms2?S>D8((_+{ zXUt3=29JZQE)X}vwsWsP_tG1{4Pa@y-G|CEls*Le7fn1g5xnu_!6(62;*GmOA9y+a z34}JF#y!P&*($b>4(M4b6Pv2JXz32!=#^^YdNG^*soB2Vgl%yUE zZoc5*3odvVK1>$u2!5d9d-1-^|HAJQqFDj+j0+w%q5zS&XG91T^?UIw80!(EVzj3Z zD#7v5r~?PZSBBuD>6wF|dc0iUF7_h!M@UY`nTqYyI&5Q+g>cSJ41FwN{2ifB27NvP zlEnNhl0I=jGLpgsl2?FaGaAhctpJG;P9PIx1j8VJb~E@0=9`H7SsYVASIM_WL&Zfw ze`kD?_O~lrr_;=}%a)$^k#TB8wfMgHMR_>EJD0_qK6`5r>XESc=fq;;VIn- zqs=YjKY;NelT81(eLh=J?im(u{_dd8q+vOz@R{riy4YLickVn2&IhHpH0c4nyLE=! z(A{m|)s2P?TPljqowPJ5m){7_bNCeUs%lQ@wHNsmTyc?H?i=RqYuY=F6RK!~+~|$^ zdY{!RuDed=t)rj1N3=R?iwwJhjsbOXsiRg=^ZfY_PPJD$ojO&R4=fDNFt!j3Rq0*H z$tc=@bX~%p9VAr8u{cQ$Cu#2jZXYbwVxb;Mxv{WOeMPQLmHV|%FLmisD#?Iumw>-_B-9)C@piq+jA z_T8yw?YgSlzJJu~)Lp7Dln=Zk{$p=Xusp)Z&3+k>%XrQDM*;n~)#YL)fRYhjvYX4p zX5)I^5^HWdOTDbUdXdr94H`^#8EZ7kIGa(ha!6ojIa`|MLN=zqU#7mfZjK|oN|@LW ze-|~!J*^J4S7)5y?6~3uKU-_`s=ACtOEt!z38+BLsPP?89XOu~HLDl<+3-*vrjdjb zMg57O^Lb1jgVBjvkbbz!^6=umBLlNM_fFl?F~P_Jj`?peQ+!0@Zl5sg)h~Q40M;!# z=bQ%Ue%roq`KE=HEGI4+P9JmDMx6i_`p+eX+K|jA3&W_v6UBiN9O~sr(8AAZ0b_iO z11%Me{#u(7fD_bFIbdzkH66Rl7v8dJ(xu?e!uFf~q#0OBN-f~3UxUfYiUoZOY&CiNL! zC_r-*ohJ9pBFJa)<1G>p1xMi$j4Biy8u^TsT2g}yPZcdoW$r2Ydq*PAV@8@3F2bl% z!9A!cZr92StAH9P7w5hiwP%oI5N6aQEClm4XSS$+@O-kY*1zGM^iAc|4G_#vS z^DatOFI_OPdCr{3jn`khdEmjR>-)TwE7wlh(NkMH+c$B)_+hcLH5LoB)6=It3}`e% zPu#ilS-0EcMH}otKRS58>GXOh`V;Mup3N8hmN~C^`t;TquaaHAaYHGsrx|rFPM+X+ zb4W8FtjhrdVM59*;r;0a_)nG`-i|}2AfMje11sVGN}ma%=^evg?u6IVXAOT0ZzKGa z1hbXhMPe9>kc2lA=@t}K6C?8zlUcITEGBhs2?mlRCpKd>k|^yV;(NnMi#Tc>M~J#` zcmPhi=E#?k`7mnC;C;8n;x>b$ZnN2K89rXt)VQFjiJ6_KoZhscX@66BSreERPQagR zNDi+`Zk)oYHQdw{Z?2fiY1AAzgpW6sl{YcP7JMJ+|Eo=9Vt08{Q#traS(A`n8&3Qc zZ~ayJO@!gi;QIJ;+qXX#-=pDV>b+%Ud(|>dlfFKCRe570nnzWrExspw6*|fbIA8>R zPz|PluLw4Y57QylSY$yCRSE?0xWmct_}xM`fglo$Tj*ddHcEgHHb0<)SiU4PT`-n0 zQ{X`!jrwt@s&NbtQ(B!tL zg>a*0Zk%anCkt;-DHv8@moYk}RZfeyFbqr694BK841f?odVZWiVk{D86+k)7XZ0-f zs6s9sP$^8jMgz27o0(yZs*tWxCYPCQfg+`fM>2)MX4Y@ufuht#18 zX8^!xH5dUfE94=dVU=35(qXQO!!n1PRj626p*D6ZD(toxniTZ5GDFboahNp_%48}| zLl@1CnN4M88aRtJyk)i=0-4<8W}u8=8Go29VT|`G^t8(Q4q7EsKw3%DDjNIl_~}ee7uvB2h2g^ zSz0v%Yr8@dqy7H+Ni32PR>c?Vkf@CJYVjygDo7OM3^8vStE;HC6RIos2{I#5;8Cogh0My4Bzz?YmasXriFb$z$kG~Jnarv-t8^V&gFExd{|I$_{s|*s*zi<7*46r<6eG4WLGs3+iGvpq&?=ymR6d)>G}Xp=#Mw zs%cZyu87m2(&cgCl9ZNmBN;kO)leXh`;vul8 ztLEDM=LZ7}zwVq1_NUw+OuzTW?-rJBx^DO%XhMgxpZ;#f>^)m2oj0XP_Yr*%D2(mX zcTTbiP(k}=PVQ)mmOGW_jncvV_)3{+=EAFHst&Xqn7{x)+T!0~S6%9*$wA z{aUCVtb2s%Du8*JBQ=--HJhB(L61qg3F&PAoOzKIqn5muo;KPGsKOJ;hE;>KXE z4$jP6A8J@Mv%1e&RL1KLly{W)E9_PE0}u9gBsaAOr!8nYxWw%4ni!c=T~?j?x1NxHyTVzVtSzI#Uvp79p znVqy%!?;Z1pRk1&EaAN$>t?nvGMU*?;}QR%QOLy}bEi5!qnkcwMZ$bL(=wBp^=pgQ zYdroadO)vTSFGFJY(m$T6$cz&c8WX2-xcO6o zHo8oFd0@2JOd)n}bEaDTeq^hbcmO4vBY^_(*AO{-j`z zLy)D|A%fm0d3Hjy&m@>hY|sc&liIit_0buYGm=k@y z!)+;hQ1NZ$UyCCpb$UQ`t^>(+oq*Ddy?cJPXV1^TP)S`mn7>zCqvP#C@#}C~TNvnr zc3uZ=*(*L!URP3V1<4H?#H5w(#TV?6%F5uf21s;kM$q-0WGS^-4(E)j>#9q%Eo&ox zXnmjyCc6g2AyOJTAxivmy~6{fB(I4R@RB|t60AHh*flT!Ue1>zYxDBpnD!QI7Ra)} zK_pU{E&f8|4hwqphT^J{1$A6RSt>2SCPpv5r_pJ}_a0Nam5+(}U$Jw3xJ9(zo| zGJ4=g2Z8@Fg;((y@S}skpE(Fs`P-mHRLAy;ujrLZS;GHfAPTD^MCW=zs`FF6y16gu)MTW21`p_vtHeL-LZoa-lZ*( zFv4W1jGwqX6BS4dot`nV@niBu5(S79aBblijE)>5M`V~k>cH~b5mpr8Mc^!EBk2ZcTtuIRHw>$?l!dJzLzd783?ck|xCqit251L( zaB{w^H)tPfe@zhh82?+=m}px$AsJcI*{Ib$X)Lk|0&RGqL4wRUA_QxNBlL_TLTyku zGGrGgr;|Si%Adm}wZR8=ye`xVg76%xFLm27$eJS*(r8~b>G`PfuUiIj#e&j>(rv^) zLF(e4{~UebCr(g++sRC!E+KJvGD(lKL|hO_0}v^CtSpFTM;eX$79$~#z(yau2Ps(u zfd)w}c$UP!PP!)E!Vp9TqHf{7f^-@qK~=#PI)H6?NH0P12($!{4#VxV9I=+pQX5=` z1eO`DtU*eNyexQvvL=j1XIK41E3LE&I>0du@7p@%(B|b5F6KB}E!2;}uF4YB`y$Ny8gV(VulkjSeK=Bbi=i(8_slSxca)ia}C2lo^%4 z9jcMh-z7eFM_0Q_OH9qE5PO!ex}ej>utv4ov|v(|9I#g3q;j22#tJl3Ie z2xM34&8$p7@+L#8Of?&diklWy7qLL@Z|LhRY162^3TPHob_mq0!R2YFT^v-kc&l6r z$k@x5w)CB=)X_9R{~@bWNIbju%f4l&Q%W-GRZ;V)_0)yvi_Gc7ct$3xNCCBEu`^M# z2ExFPbUFMn#$)~f(tFX!h;vqXw22i$Ck_U~&TjPS66F#)K?Zy?hV)BGsSJ>PWLF3) zw~~que}rACvrJ~bW6n0YLZdC_3{I`{@yh?&v|&zF)$9G6Rv;~LP&{$)1M$yV#UKC& zKL7y`oOa+>Vp{xI{O`ARU!J@VES@&8l96e3GTG&S3|Ce{R;yIkFYDMg&nC#rEvR6| zMXlB{hP7Lp!2E@gkfJ7Lmlye4S{__jG(qhuI{%-;-pM+x-Q%6)cHE+Iu&hes(z2?a zwY`4t(<_!Qa}+<`)O+1zt>ue@(&DO)tM~M^wC{Lw<5s{V@4IAL;u@_QbpzPg+`3hx zRiPf$upX}HIlm4)9hITASA(8zEoC*cd(>cD}~Z{aDAOC@*u>Rmtqr3+0O~l!6j4 z*E->bMY^^V+dLtM361?g&!NH6U}kvc%mRe-wY7!A+*v^N_5z0oz_^ zEUwBZj-Y3t@mLG7`v9QND~8uuyw18nEE;B!=Fe!6nuCTYY#Y(yPg#an+4J0sdiqxN z%x=;fHj9T}6YO^32q<6cpW3r%<$}4MEze)NrPUU-bLJ@>E4mjXDrJ)|T)Ch*;xV&~ zTJD%qSE~(1I?rtKvoa$u=a7!1t%@yLaZv{hHP4zqZ$_iRV5yN=r+4kxb`|((*S2Oi zt##Uz%8$hFfjwvgZynY0a!tjwU3069zF9LW_6!0V(uU%?XKWr_$|F{`M=W-6XI zWogIA@RH3mUrcbij3z2*HyWgLE`t&0rk*14D}`g0)R}ZFb#VB%KOoPFL*KqDpWn`( z1Z_W)&R%vZ%>7K(I&hy7dOs68z8uNrCMt$AEQv^lC9=2$&#qJi3#Jw_8qpFUSDX-Y zVo!tMF?nznl|Y|Z+aSL7^IOGlZ+ZQG!+8e*_w=r}wnIn52}+|cF?=PKSOat~lxr8n z+Ispr0^lBTy&n9o#PAVV{?em=xdkY0eH@gv?1_DF@zdh>yWh8ONpe2$zQ;7TVNKC547l{6i@#HZd z>jSly8YZ;2)a$$2Iku|2sG{6btWePwmAcANKRI@HiC$2f+N%vJG+G$^ep6X<`8@BQ z9ew*odg|ys^Q$HrX`w7WznTlrs9ieC8A+wf1pu{zXyJM`O$v!X#Yl!^P1zMgjLIBj zlFx`oe>te--=<|sg~sw}cFAkePOw8~w}?A3i=%)cdtvIA;?ZY#EnL+GWJ-O~BA>E6 zw{{F`sE==Bjd<(a<=GX{rUAxZ;7HtjZniIj2yM!w0ZEm~4Qe^>+7Hav7A0m$agZp| zy;6=y?`gBQ$DB{@bgFFbOx~&-V{3*;q(qnG#fwS`br?w0!Z-#V4a*)P31vcH;%Jhz z;7nYPjPoKv7id8_pd&T3Pr$Ibz{x~dPY`ZA>-HoX8n}j;GaEQTlStlv7PGkQBK_j? zDl5-htiPyC7LCs7=r}%~{`TFk>IWP};*foDW$*Ih+iojf-Wy(I2X01NRnzGQ&krlM zfx$$g%44-bgVg|SR!>zT!I^1Yq{3ej(a~mZ*gxQRPPlG@_{U(`1gjNCZGzXp5O@to za55T?&D531d}kQzqnpGJN=E`C$7sd-Mk;@0)I+RaVf@rv7`(t#L=#pLtx z$EU!rw<6kHi^JnLRviX|h5@ z<5`G8m2BKs35F}9(5Ia)_lwbKH8s=ne^nsQmKF!;M6fuXHP9a{uJ9E+7NG4)yUuLT z8_YTsqJhj)b+OLMxzpg7M{nHZ9Wf$vZKl{S=3B6XgPB>S#X(=YC3Be->LeP(xv)}n z(!mE!?bM)5lGp~Ys5duIozzrnDMjhfO6Z3Kv63c2B)>}7AHiIhZYas^_r$!|jkaKd ziMR$0;3cmC2wbA7T(3KU%h8RHiqE;(qLx1I3M-Yr*0d{>_S6mDt9# z@So&o>y$d(Ya=(yH6mIi?^ts;|Ic(9mnoeKx?j2;$mUAp%?u+KX;E*k;zgeUX494> zbLsU{-hAj^WdpZ?1)$}NYp(f%KgRFnkKqs)4SGPuM^{|&5&t}YC;vPS!Q}1x2Xs@w z3Lw@6%I!Uh^Auf5v(S|Rq(B1XTAdPz`6qZWofu5*dum>9XIyU9*;Ed>mz{qqwN}LD zW-?t5KL0!Z@GN-eJ@d0+36W>pA%1;$yWB`LF-Gx0-;3B$bL;n}B-Pplk znC_?hlUeq&QhQbspfxEu_*Z7nI)gIGL@4kB3Wz8^DIj#5r&6fm3;zOKDE2Cs9Q4r%UT#qFg-L#^Sy~-&&%7Ynl7`Kk!HRKitn~ zVWlx*WIBxJ`WQKrT9H#MswypoQi-ZxC6U6?(rVdQ{!ycm=|$O0FFeV=Fk;mR^asix z<2b0!7xRe6eBFK1OmEW&Ki{sDp&uo9#6P0R|Hk?`;(Rga1%U5E&%f||lD%HgjR86= z?9llsh-D*)UDKK>={OD+VZb?hf}%1fE1?MT=O3O_8p^4w+VyO^Y;)SmFP zN%z3oRE10ipC18U1i`CRs>Pq7mQ{Rw{cB^D%E0u}%QQdWZ@Bn;lG!c7SRaLGtWv&6 zz6gtcl{9t%gM|llgjjZSA|U}0Ikb!OV1#3#3|1RP#GRka#fT}#YyhL`VHD8}oF+Sq!v_zMHTX$|B*-}(LqA1Zb zAyL%8|Eq8NN2T8J&D($`(`m>z?tP`Ps^zU0Ers3!Q@*?qLZ!EOQd#lDvMh}?GMPSD zwqs*gz*ROgfA;LIh|5+C8^={$-P5?dp)BF{j;QTOwoT|-x4gTztg-XT{4Q-)byhHs zd3JBtjj@`O{A7kYpGqsEF3~cZz#P&MI%1Fh$Aptguo4uhtE%2 z#>afRN?>A#9M1a#KAIs;<|(2-7>fWsVuG=t9aMq{dV^>ZL$f|XB+B$+G-V?3!XAS3 z>Ao7ln<9vsp{qKJOS-z3bb@_LI&qM$s*JEZw`}Bp_0YrouQqJi$rhGwpWI#j0~mK1 zV^e_%#!1Dk3m3MwECl?ED?r1?iLsNn^Plx35JadO}-WmO>DR5)J@Bt@b6h8c}nt{9X^ z`QI}ObDF}w3Y8^e+Fetp-Zjm(gWPEtJ>o#~07jdRr-9anRD}q1f}jSJ0oZ6-d8h(# z0R!&K7pbmJ>sisa!tS>nSl-pS+@{yrz|Q^n)Kk9Vw&kGnQl9dJt+IW|;&%Qcz0Iay zv#x8|(hh(K6T2?6Y#DgqQce@k_qTINb`ohf!GIDPEx-wAaLa}o z&9Sb*98+A#V*KT!$_E}fdJZ(AKEVrfohd$c!>Mr1#=9Qb*j)SMsd&Xk z+H{d(YhAKO1q>R{nVf*nsUjeMhHfjJB1&z~dR+(SqNsP^2^0iBT>O5eRMvS3_ZpgB zwo)glm#NpO_o%;7|DZmmKBKTUSCkG(jD#tIB8)%QG{La^v?K?73MMx6&ia5pyuBec+g~I9EgGd>=Rwlh`s$7PxkO zMS?$5xUdP_N_$Ge#SCX?ueS3edPUMax$cxxnnkY#5dTi03+h)-Z7iM_uW-bx)V@Ox zoZL4RGOUF4aT#)l#b8z#7CV5n_fQ&43(-%bIWN zmPqpK0FmocrWm{dQ=XPA$Dy2#zV&tH} zn3reo9tDD>r9l90nzP$dHPC z`k>i9zVjx3Mw?Ax9?`gJ(|y!%oG}MlC3~nfXg*LuB?t`KF30_`Dq!M7dXq6!Mbjok zJs?`oNpl4-9}H54X#5)max#EL9B~t-1qv699byec|S1uLpeAeqgkENz>>x<3||ttK|n|KA&%n&vD?^XXFRvzB$dljDvj#Zav_r%eB?_tQp<1 zTt4bPdiI*p&C8Tyo~n}_AY~i}`_OMjqQKBH6V7U}=GV$mM)Mq!aqGd1+9$@ymbZ;w z1K#L6=t$%n>U-9XZd{@s^I*07pv*VN@52S57T4H37uSe>9knOMs!+q$PHWZ|oZB~g z?c@e~ZXGEyCtaZ<@xW-=a>mrULN@yG+H`xlxxv1F|fu8v1lw{Ssl^474&FnvY+e0rQ$?F z84t0h0Pty8V4?$P+BE@IgFYdyf}r0B6eGD7vp;BX0S!?x2t)!Jvg;eyu%TR(Y0$uH zfJv{<&Ee{p+S*Pt9Td+J2OJOr)@m|qr3?`HWTgc&ptMFNu`mpzEq2-x zNys;{jN%QNllvVGt4YZK+NCe_>NN0~s;kcZ0FS4dnRjMAHsepT@=o#ju!28(ODwo` zPpNBE`shF|5n5G9Brd&5#<@8CxzJasKR6eI*v68xKUJlHMpaPUJdhjyMi6#0B zHVS9AO;JGxGULq0ZH}E1;D$0W)`yg`9LH!x8YrUGY7g`Ic-u|(J*9`a=7Pj*{K`;$%sEr#hh@rGxbmBqH4PA39#X;M$uQ(ZIQR-a}qRl zXrZqt!^>$5A|`q6x8I4rRshJvBtV20)Z|Nx<{S9Q#I|}6X9C+VHc(?xPgqS|P931` zq8_LEhjz_|oZYe)!?R=h0sF2pTxwsY`I-3t-{o}zh?+|SGV$JU5+B&prS<#g4fNGa zE)K%JV6Xk4J($WQpicks0I2_4es5o}IF)3QlWQ(`i@x2xYD9{fw|{bthzb@5Q8Rjj z=aNI00p(8xdFB7L0JsKF#lb$F!rsZTU4w{9%hRf;b~FbprZy7~i4Re~qTZlBK$O^d zpaM=%0IGgs_jJe!r10J~|7D#1FTdw6=^vMZ7X4rE_y1-4SfWI9PS76ezu;owe?KID zX~7EzNDcG5^oy?o)PG--i1J&{kUc{YI`YHdb-((#;L)Ffd;00%Ipq*Y4E!%H8&Lkg zs*UXRCeEvwezuozf0X1>Ls5=$|FUq%n_#rC&k)Z83h@URtB4-fkTPNNj6L=m(H)5Uy2tIK@dii8S zj22tCpqbC(Mj6;Sj&E3LY#;0krOkw~>l{GK{o^WHHk6}d>-uv3-chYB+v>>yT)7Hp zpKw>z7s~4fmXz{9!=9?E|d${uy z#Cw7U0b5dMOdItJjYn;V{mZ80L9eyn>Vz(U=rN$@lu}WVT$sUYxtyE4U(F24^0JYlz;B~L&7bgF{y^;W7+E0w1q`oU*)r5E)16Y3|yb?DeHmG-L>etyZ5>V&Xg$crf! zqUV;N_wJ|iv2S|dGPr1r;OeIlbr*&%H)4D!p+|Bqz0v0iMI#+hZJC6zw))2Ftup;xflq(_G|w4z|uD18GeBO z7wj5)#mcJtm#rx3UY4v+-ON0&f&cy7p664KC*u5TK>Wuyf$oa;cWNAq*M{yo_Doaj zb$_(iZkq5|SLU5-N3I`LYE6H`LHVHrjs9HpBn?Ds;gXe5M|Pg@z5?E4pgmDUrRvis z7L{?uq8Ct%Fa#4FGI`L@Loa2xMDY~A3v621ckTQ@^QhK`Z(lw2#M2v~w5}1{1omx7 z9=YYR*D9}+H5DzD@l5?ZP{lucu{4q2J@DD`rMF~9mXx$-Yxw7$=$Xtv^3KvZnJpuv z`t6V0zxDDXzj6n`qIJbJK-xOUXK{mg{sD|3Fyx(q?9rMA^#KEzDhI=mnBscM1IQdw zfW{S3XTpHJlqmn&m#@9{<C5Zu{CNEq@0)+9xZF7>7aj)JY&?ocQ`{&pq?z9#OXQKuc@FDRzm=o9GWVJ&LYB zdUW&C{CE7bTaF%FF%dj)b0Gu=o&sY2Tk0adQH-9amTFD=^}t)Fl)woJDkP}Uu?w4E z6@yHNFO>dH9F3peH)tm=yc5hAzPqe%>C!%4y`rmlvL%vVzQ$q>S9BTmUG#wPCGOW> zKV{C1QZRo1sZ;y+{vQ5Cq8nMs|55lr-(T~aUAtz?+(l>gEnU{$v6TPKoy$uL^?G!V z@-=1`3l|C>^M(-<*IYe&;MBhTr+&AWe+KwggSSvR-#25|uHRg<3!|!^A0zslJx?i6 zzsy5C@<@UXMRPtP#74}M(T2EXS_NpVaU6>W0JZ=Fh&!Wo_zeIN?F(SJiG#(`J5I@R zev}fYeQ~Tv$i@&wZ=~x~ke`UgzKl~z+^{Y8*!5LY3!OCcj0SRIPy5xPhN&{d!?zCO)BcwR3wYA5 zwC69AZqSYyTzK|$3YR%)+fOzQe;u;*r6Bn>9FO~Mb6z|Btx#|sZ3 z0PW&O;WNo=0$YU_Fz^(KB6=Vb@h7Lr^HE+rP#uGqhIj)AyNQeACmT8nzLK$0r*LFX z`>lKkNWB)m-{O@5K4kUlz@CrD@kM-0V)*-{&ToAY>_Nwmz@DCnU$e_^@pvr$T^c{i zy?*GB)aiJ1fuCPU4j19CwP+<&fe?!jQ{No`wKl5&arL_F#XP~w0IT-H}OXwezni! z%yP;yc070(J7?r%@YioKYUW-bd#KnJ zN%T)$3@bU==-K?c{H-E+^~a;PPm^)iE6vdS%oa8|csJ&g($2G2;X9@83VD9xZeGpF zWZbUj!Q+6=G&GdimFoPLI7rJlew4$QhyZxmGvP6?kdqB;pjFCOX7OK9X#Sw6t0fe( zf>I*tpa6}-a;lLUMNOloQ%eyiy$kWuH&gc^UiuXFh=xa)8`~h`)dodT7r_03qxGgi z2M}R>q13;t{k`(I!ssA?abnY+T52rj@r)1m#G8j?)wGRoHd4F@9-G zhzJ-1MKsRE%eM{-+f73;L~0v#ToH*uT{M=)bs!MigdoKU6p^jaYDE1iq!Oi42^10| z$d<_!VzpQSq%x62DU(RfeX7?(CDdr3a-7u)#S)WAA_mrz7K=;@4F)KcO*WaJTwyRM z}a6iM`YiAV{y@E;fqQcevKo2TZalXW_o7==(=ESrYX^g0w#h$V8c^Cgu^g}51| zQl(c-S1Q#;HIU1J+NgS4skLf>NF;|+iA>BXAv5dFl>`4)XzinWp9c<2v}EO-N4|tI zsZuFTefyfd-pB7OM{37S;?_3dXe z*=OI%*@15qif;xK&QHEmOStbo5lMI>T*z<#j+1G>0~@rmc0TtTu}t?3cuObC5``kAfuHd3bE!%x`yB8xrP9IcKb5J~vQNRMaNmV@cocrism-W4t@z22c#LLjOxysYZa_uVjFr7#0l%19=UR!U$bUgtF{ z6f&m)nB-as##WHWd0S+3xCv}gDNuU|+=(1)xO^WpvMpg-u>-C)uV^V$GR$_eH#mru z9kkc+S7gXRiTtdVp|FMISqgSq9bAzSafSf+gD!I!f0mO2MrsYt&XcGh9KGaF6WB#sqyiqyQ_vnllzPzHro+*neamy}j~q^NG-PPN(#gX| z>iM^NrX$W4#YOPCW!FI#FbraJr}zAVH%2Gtr{;r?^j5XlOuHq#4epyipKsP%4F)z- z0$r&OBu* z(f0GtoCz8x?QF@eZEvnB?BcJR2-wwYBF^GU=P!G}yHuuRSLYg=Zhq=*UxV>?znIPatJq9-F$w;3KKmQCK4E(ME#L}E-z{hmaFm_-G)1*I4Vg*tBPnZ9% zPnS&c6x=mmy!-v#V#D-gyU~4;_~B!c!+yZeJ#jLLX0YG!x7#e;3m0}!9}I&YJ%^lX#A6tQQymb{`HX4;-4h65kFEItr|3z_&v#Bl z-G~{v?9OeNnb~%y8XR-#wro+y^afTlV}^z`XrH#}$Bxy;{7@H(=%7yjOJ=5gu`zWT zyZO9}>~r6xN;Q}dgM)_+B8?_$SkFJV-Vjx*_Ub1MOwvJbR9~{UL?6{^exgr@f9W{A zl!j*q-x@(G4TpYy1tcD#d2*x|;Mby*@ZST8If!4v)8p6Wlm88Grd=IqX~J<}&V z`Ny;l0w>ICB1($5C@tcqEf`}$2Q)r59*_Xv;3l~Qm^7>pQ6?IF+Tk1KMFh70PjCW% zlz;5mXX!8sea#^b(qWyg;npY#Ek%`f6V-vXfb7}&$#kdt~p%anRwp@42v7IbHspc|3! z@0*6Obj1|A2KCDxp-+;XMvp585~<7(5Dd1t(4tI07=El>F^J{vV8iL1M~qmR)>`wp z1)pc)#XCQ}i&4?%8USSP{dCbp`H_`VT1SGwqjv)H?cnUIcW>A^TU{luZH>3KMsqu> ztD8EPRuRHQFkpAP2MNh^8Im>S= zz47F&{HM2z%={PYu9>cHQdZZ-qIKDIU0rqA*REcB%~Z8FSDvT|my8h7c3o_PBH*}U z%c?l>n|hJqh&PinVU#-%_ebIZk($axM|XhJX2yvBU)F>sV$P_CFaOy51NQUV?|ZK6 z-md4)efgZ-{#*~N0ULybm(%Wi=^4-U^gL%5Q9oh5q3ppIp-b@v_wn0P&yWP*|BG<3 z___Op+X=SR9L0W*QANN7#VoBit`Sif?;^7jiz@=ydYcN#!A$4lkL53QyL=5A&2nX9Mn>^XClYy1 zy-TBxZdkox$?Wb5jYdIdxNAZk&9mlgZQxVVcZ|!`~lK6 zaV|QB&<)US(4?6z7KnK%H987b>u2s#AaMHrh(2O)GKex;(77bRK`po5j_d_x4ujuKQT2{HL?_L`hF!WMZVSr{qMf z^PfuP$F7D?3rcXIB^F;(kxbJkZOirAvkGYDA z?K74vsq{;2?QN|SNz$a2+v>DmNTpwB z>uzg-{u(G7lYLKdcCqXJH&XZUvyQnU<@VVNm&~vi7rXo}lyOh?7#T!WqjeOw?DFBQ zg@-R`BMJ?d#c`AxQGg?;xzuv3nd#GGDR($Tr_aWCROA^nBQRhu4fuc|YcLB!Oh+&` z5{T)-WCihHT8E7a`2HbdIO@S^*!=^Zh{FbtV37j`1xc|>UDd++N%N=8@;0}&di{5{ zm4wR2tSZa(XDtoZwd9=cZL<{>wf0DT4Lc#+NrSTvH04V?lDYKNOt}}(YQ)KDoyGnH z|C_?bqELMioH1Oa_hC&{0_+<-sweE*n31t;OlXdZ*3?DKv~N~ktw(*bHlbvl=3KFA zQM=hL;iuZ-U|YV)RLHLhN!A*={sLEa>CMi9l{A3w_+n*#Gkn(@kNLdOSobBE!6K>- z%|j6HD7-o9JsX07 zyoNDj8uIvkBi1ddK3-eZIOUnEd%LEAnCMO#T}M|)YRamJjP^u&s;-Is&cUY1L9vNk_z68i(rER(^J*ImNDX(^fCd`CHx zHF}|)G2hd9)ro?EXY$6wsgvEV38|aLKk`B#Sl&CX3`}95=$V$7Cu_qq41fJLM!90_ z*wV6b7umIIv1OSAc$75f$!7u{pb7s7dAbCQ-ESBjuCvmHf)a0|Vn3+84F38e&3X@P z2^^kwRaxP*r43hFQ;+hk^p`)v@h>?~F~3INEQ8=t2>^5)#1cJXD<)urVrwdlKtS+^ z2(BsCL>9oS@WwL%*T#w>h(Mv6m$jFNE2H1%0h@tE!$xWF*VhFr8q`bsz`qaiU*D3b zHJDh|YY3N2J(_H3NgjO;ogz|&KTDdJbm&j3ZUG8L-?!9L+s^Oe%|;ir={J4-tH-vM z_l)#pcP!0E1O1yrO4f&JW)$hm(P`?kIr^Ypsat=|>OUQtcnGbF+Vr}Jk-*bRzi|v* zgT0}OoLB=Nk85B^Q(PG5)Wc!?R+E4TmUab1l!j676C48JJ$3>`ghemHONy$2QfyQJ zjq=3Ct4{3LQPfo)ay#{M5ZBU7>)3!-V$c|5YJkYEvL=0ZTnrgD@$cyJ&V)*=Oo+1{ z=Q1xFJ^BRzJO?lG~r(6 zM*hs9wq}}^G8(w~-B*C~9$>$H`^TxOm2Z!IY@u)0SHSVru3cXXG@a-?dNq!;k7&Zr z`e*@$D~k9DjLt@|Lqs3CMCU2irqsw3eA!o8r$VAL(Y@zR@hg2abc>QIv_gDq4xXhl z)MEAo|Bi{_TzW8x@eEAAO_>$c(fyJOcpT>u9ciU9FRB#`)|##p=m0AL!|P3b$^Su{ zp_J&1e9%YJ9#PW6zw+m^vp@$ug?C@5{g373Ot7LNqUfc;c5B%+- zc_>2W1Wb=$n@PgwhK*@6gtWCO-VRUCO9YOZd|dWoN5lfGgNR!9I{)FJ`}vm_azMOO zs#0@JZ>^s5^p%~RS3W&w+Ohhb*o`=!u=;}m$JY5kcl{w?e?4_}P!aJoQK+Ns{BJP+ z+wSdBi}*?jlunt0E`Jl$R?gP6o5rnc7${b#ZfBX_zC!i`(UC*Jqb|CsPtxZQ}Ni>6C z(H#N2G|+mJgHCgN!%GCvd&9`qL#B{ugb}_DYtS2XSls8rbCE6*$cH~&g4|cMC-;%O z+=p|`R(Ecx+692Zmzv~P0N_(6LP3kU;6#4Tz1b#XF3aL{FjA>uHMra$ zWf-Y}-*t^qDgqf!Yc9uSn;i~TDmASsq4Vf`TgV+Si=>R5;{7Votl>jJCi`e~bL6640LT?|6t1B;ifZOTXhkwq3gm$Z1j7UsEg zmG}(4kQbD$U3tx&YgT3Xyo9g7eTo|9YX)mW*HR7G$BQfK`;peOE2=YiqWJtH} z(NH<;UKI55eUP|COJfK24fLHpEuvDHr!OSZ$qQkaIDLAc5AU8111j_b6o*tYIe`9| zi*k5scr0Cv%z?sq@ew(_T9k?3A;xk)tZTLO+rJO`T4c7>}`e`M+Z5Ujo^C{MLjns;fIE zl`EtZBoe7r+9Q2WW|s9xr4pNDf+SO`B!D=*$_KS}E&4k!0T-2`VpgeyzA>bi=H9u$ zQYdAEqqewZ;DP+F>(C7ow;sQCunyqB*uvuzI$a&eO<#!aZ2O!XB_!o3a__!$Ra)(c z!TM2)(s&j4-7=IOe|g|zX&1a?TL{FkNwd!6513eAT*Sq7*udEoXLX!06c6Zpa4K*D z=R*Ew_Q(4|%)))MzNorv|L0NuFZ^GkpYOlC@{3vf9H9QH6)V46x#B8N58r(AP5xmf z`4bH9xyDz{(c@2pTKVfO8x9}d(DJ&RfBN)z`rIqqgZv*x1Og*Kc90@I2h)DN2kj%8 zh*uiC<8T{wlsbuLhe40y!Wv0m5(ht%?;BLo@__&2o$y=~VHpDWQOTec(7|XfDWVy2 z_zDE?o`Q?d3qhFp$>h{?c0YuE8$AEtTm_OTp5MxEP4Sv=$F4_#0#pL|v0WWu&4n_4 z8=tiKPhar=dci9!zwD<{_xNpFw%Gis|KbvGr9wIff|*i<08A2v71Rcl@gbLS}LO#Qp z;Xg5ivJgcx`Q2u2;2jKs1u`+9^k9hTPoex2St=k!&o!kIuzw)QrxyjZNKhsaKYhVj z{ovjuYO@{tyU}x4gNO+Lv_Sc_Rlp203p=a--&1sh0-6W~Q$WVf$*KDzW1aGei5gXO$j^bg`|(Lj|Fk5_^i zF^2uI{*-@G2a7117{PCgnL-X&$)XXj6|4y3bQEg>qw$E8vJ-7SZT1$3-R@0MfnU8BH8v@z1y?gcQ?oq2&jY^;SAK*=6 zo9ZT}rkLDD6}l4GMYP2_0efYjMKZO?Y2G)R|J$*pp3H*qQcw?|81N4+3l(H~mmLGP z+53DE8Djj3jpErMsl8E7p$l$PJBC=2dY9@LFI8eJS?2^iu)16&*y%j)Rl zZs^>-J9TahsDB3$%x(OW@4Uk=TgbHWZQv;WPlH54;CJSA{-4pg%mG>4XS&gRKiGC5mikSnFlkJjsC5~=^gxGFFXx-FrW$Le5f zhSn{~;ZMf?pjR5Cz|d+48FDlrP-EkauydAPGY*dN*m5SRq#kYR+1~{8(iW8%B4VT< z2xi__BhqP1e=Z?71%iAhd66B5jq)Ix75hU%Uyo3D8Ui62z33m)uVll}rO|U2K~uP* z48>y!e~MV0uoRC7rVIaw!1G7^qU2dh#=e5+xg{NEk{wF`g)cgfC_9=W*HJ@qdh$Pz zp!)@&Y9?{6-{tf(@17%iw@f05F3qMC+#d*TgcHqcoroq&k6MF1?naDC+9D{96#xl1 z9Kl4xAVoqt-p?lKI=6tKBf2D=(FgZz?Aka7wrt+Ic_ghpAZ`2f@1M3w4^Zc2@+l_4>@*+)Vw3 z5c=7#RY+UMjcb)EwEKZtJa>9-Wo7Putz5c&&z|j4IZ9MXZa#eYW(h9%P&B z;1zP>g%dq;c5(mSTF@Uqc>SPRA&ZVA>6MnqSt3zq(J?wtxElX~SICKfWq9l- z6H`fWL8=eW3t9aH_FUjK_&Z1%O`WB1IT1dhQPP6ux?_a44io*92)2RbXpvz3SqWJ+ zCvp)Z3k;@6x)4^ACd%oVlqM1|az8Esh_1bZWyXD0pBd+>pxYcBv3gzwocP}V@T)5_ zV_cKC+V{3IS8>2yE^ZQ+xhueB;Ar^q$N&5;zp5Nv(j-p!{@~1kAQu$`C+n7No-wJ? z$J89oaq^$CGPBcKJind){`Ol@`~`0~=#<6_T%g=l2oiwZ(l)V_|KZ53xlaB?Z#a-C zma_(LSZwrHjb4Z6_tof`cadk#r^<;fh69Q?vH^hiTYU~@&`SYvzyt+%O{fEiIDY`6 zNDy#SorBh5XBt2#7}Lh`>A{k)M`xD$a|{!wPcLOE19g{GUJ34z>0(a3eq>#EY%I6L z94yaP7dkj+UX?qmpc{OQXl4O+TSXAvz#&O|*r#9>;O~|yKY!l$~)b5vBl%dHO&+QSK$ zaoBg58Br^hgrcT^Cx)e*aT80UF~c!F;tWd{26R~GVTm;k2G1}Es?3}*Y{V+{f}kPh z1U|%8(&2d6XbN9Cy12)$R7PkaJ70<7=OId{T?BRbX} z0$@*}zdSIe-e_uGy!B>yby03netk>@`jgeh?;iBL#j0*hwnTm)-CT^0(CxcMBF&V> z*MLAw(LRxH9$&vYgNJZSY7^Y5wyl~xtI^~&I5J(b>)c??jCpkyx54NF7V%B7)UjS; zGyU8-ax<2U8THV+;V3O-rMy%T)lMy-wo?13+o==O+ti2D*B}F6-y4DyCguxAWBH87 z%?`#RWFwd4(4IKw32+`=*yO`t4W9TARc4A{*%x|cg4;fh2zAJ8A8-dEm^CMQdRUHT z3UeMTA3%&S>A86CC2Z1j9t@^Kk_0*r(QEpXXGx}xp5b&y|fvzVU4(Oy&m5H zH~&IGjFC?BsD8nh%MMI-5ij9P2i7 z8OBVBCTEmmft|~M5>_V`iw(LQD5j0^7rDi>)#9*A9JVR(Y){rz3JGF(ixFWPrj@2w zC3d4TXtNk>QoAuP+E8qLkx?-DKp!yK!v%=$K$VI88BM#CoJpf8rghQ?qcYuGoD-!@ z8BSl^=QOV0eQxh#*Kf`Z4x6ukZ11_I+-S|T266z+GC(h7a%D^rtr3ekT~;Fy z!2+?4lZf?!Mkb;uaL{U4z!k`I^_%9JGK@xLOgtstkR31uU}TnZ>j;-Y<110da~y6( znYbcSKYpp!-0n`_pA(V0(`G*m%~8&oB180jE`L^MDhx*3GG4||*o#)&y?^%X{dcce zBp_ceT71KmQ>I*b!{SAI80GLGLvSmEF(XB@F5b1Pp~h0vsCm>Y_iA|A7*3M!7~)VfTu@Na*xcXS!#!Pnpu3SMI2;28pbAhQVgY zFuSu#a?8E>KC#YjEHq{3HiQ$v=*udqs>;vt2ZPPCXEkRt-&Y^zU*PZI^*k?fS^WbK z%-cV2-hKeDYv>u@aLt=ftX{r+^%LOoj=3$B#Z#*#z||W6K^$*wjdMT5TjBR%m-RiH zQxTcDta%dus6RX&wEi=gtCwn(YJ)A;7Y}-})C!T@sJG zp>GEfMXf}9q#e=Ie#A|-QxmAyslQTZ01G6*3#!00iqeGxARh1-uq@tZikc8XVF-tO z!U+f`HXQJ2JW(|789V_Gp8Ir~uqh7oO2+N?pfnB<>Lx^J_zWHmz7hT(GAPra1;iAN zn!<5Jw#P$wAH@MscS`rP=R3!uv4=vvg%4ERVe z^y9eEdJ*S9Gr5O!4cwFv5wDT72wLt*q6zQl3~MGvk`p>GM&8R8kirdQ>W(=;+#njv z6A@WLI?n-U&EV@mb2UnJ`;`o#!s6uZL|2c`gVoLTw_kG&sF?nAa8!2|aAkLO=J223 zBY0(e?trmoa>?ZFmdh>mD|#2r8{G;I$~1O!z?>!7)X{yO0!&BO8w>eAzw^$)y?fcW zgub=d61TjoTdIc{QYkQ*5?P}qmSW4_+{ceuPMFS&2;OflN?o0k^OEtNHlZ7?2|FH% zoA?);#lJJveG&`tw}Y|q$SFga^FgtgftnKM-Q}q~v(cihHoHeu-&k16|I1>qYN`QZ zI!)U8#0^D=ulUoS4(#2_e^vv(pS5X|+g%iLM}k{ddp$)(p3lvRjT>DSUyjcb4Q^TG zEp6XBaou+7WtNd!c2sfMDyLi{vUxKmPF*;C89in}>azCsqIj%r(L3d?5y6ZK@Kr{+ ze?bBNA%MSgxk z!E~S;W0K1Otf(k01?zIrj}iS$otm5bD7YM#O!XMkKc%JoWo2dK6|<%@;<0A)Ia5#~ zac9KxT!!gD=KJw z0z^LLOi!srAqT9?=fH`2Mg(j4uU>hjynM%%Wf0I(O@_`Nd>egD>f}j0K4nAWQ;xV@ z>`kzmT1VYRJx6^7M8HU>5W*;8`*snF)ox58-%q4r?h#G3CFtQXzx+Nx%ae-H;WU4SaD~rt}As0YIp9tgh8OXK-k^ZCch0&_xSZ;(#l~NjC zb5T9Ss{kn})PudPUZ}-Ehfu>vHF08%$rvHyA$~Pl^=`OOKL?D=jLOrJ%E;AR`(BalaQTSSc%JSq4fZtc!Noo26pCN#u`~ zJ0pH`j>$&LxMCp3(A{|q*xYQ?utm8HYXdANl8F?o3itsVWMM_HLiMfmlPy}A2n|sM zt3bIN0}N0j8>-D(=$CSgSPX)=8YY^qB-?7C840%a7H5m{=ttrfu{5eygA%C*b^{>0 z>LSYF5v{#MB`M1C-I`HJk2|bGF)@nuIV$P#V6m8!aQq$#CmS(Bqe^;7I0WEl1w)#_?zTteu8Pl_S*9*&$kChFAK=B@&)N|_kL0vt%(Rcosx1nm(&}20=?~PG zR-2V3wbP@$OD1)0_Xt6b6m4A`3;gjY$hxQ z(jOj{+Qg$!;7MJmYg|R(lV`-m9mV1e&qTp(CQ-o)1beQlk(3?IeM{H*(*2^ zA;L`%tyi@LK_b|uss~Y}wht1qQHospAHwv%S4tq1>_g#!mhQDHyXhxLHFxio%7>!wxApW53u8b+GeUp-Q!-3;%rh(PCx)ZAA!oD1d5DqnU@c#)2OY0uMD6u+^Y~*s zrmo%e*hILgY~abj<=ueczy0I-XO@?8b;XscETyHodDa{eHL1R8T3T}S68v2fZJCysm!aoNcNh8R^koR)zl#Y**iqAM?=_zmQZb2O%+Fk zbRn!mtW7`w+~o-N*-u9>+l5uyTtmMC`z5GtG0_VG%pXTM>I{|F;kP?->a#L4ydC*@ z9bSjQ6fk>o9Cm+456SYlNhHrhisa>Ycr%Q~ATILbD@ZQ7WJyN?d*u**6CF#=QH{mX zkvhBEuJiZ6{}@SP@sZtTwi%5!i`AZCvFOxFBZ}M8i6{gT{UpU*I+2U9m|t)ium=(eaG`%O^#g^b0YIHef_|7l z!Lvz*8c0Ia=TiMcetG)I`lm)KAcfcz;<*gXW?`KR`=CMJozc=1bkE~Iy7_m)JoCG! zXm-tlBPr^4Xug4$rQTn#W^ndNQ8)7+&4ahm6q?vBYMXPgZFs4`BMc9-02x`>_zy1? zq`e#!P_Ip0jt0obd~ZK&!U6E+TD8Ui9#v|EXE@Eb8Z@NTU?HJQK%4gU#Zk;ysuxp` z80VQ0^pdepGu;2uKrez_3R<(EpmL2J@CfMSA_9Voxf_oInmB)e5Rj}~Ds@D>J}~0c zzOuP(Euj)eku0-p+?uZ52WP!~^CO+bwo$4Ku#G=|{kK<)-TmviW3QV%wzMp})Y`kV zbGg5&YwWn@Vj2C=;Gxy~K6aAIbW?Z&>PwY2SJF?3&ou<69x%Fzzq9Y7#%9h#k z*y%+EV5qrh4H!#w1F(K$ATqek<}o4?Iw0Vn=m}CVTJVfSFv8+@WHJbIetZb(nGA3) z{1dqT2S4$6gAxW7d1D%&*G&pYT_eIB8=!jXjErE&2D;0p)|*NKBifVQGmp=snMn^W zd~%XrR-V0V{PKfG<}6u}FZLL-yz%0e?D+@h4A&$BA3jhcRru^sA%ormmCD-?lV<3b zcW~<7aT#KjJ}Y&&<=ngHuQp66olsI2uw4Z| zx>#YKPRo)7%+>HE9;CfkDc6P7q&OFfYSn1+!p0S9)Jt3;2VjzEU0LBo6U|$G)9S0P zS`D_&dHTxV;WaHq4X$o94ngyU3kFX;{5Slo{5L(FSAx4Pp$mrDGg8F60A&V3?J(UM zzzmrV=pA6Fo>@b6Ge<9~5%B3-57G|1FKP^#_pvGoI$`TiGop&H^bCFHDy)z$Qsc1^ z2qW?yxHzMUAx;dieFO1ni0Oq)G=*eh|9J5LUOsWZK`EG5BW{+%X!HltAq-L%4#Bhh zOF@tMWOXC<60-c^+n>~yfTbXl&zwHjz_KT|msdQfk{VS8kM_YyCxIB0^Jn;L_%rSG z)%;qXPR-6!}nfIG2l=1!u%36kK^(eDe&mo7b!O_+HCB!y(kn8#>%xB1_=E%T%we^5r1D)X{ z4my^QjTwB&I%qc{s9s?Mtw0A~x-Mt}+VP?S8K973F*gFA+XOkn9hgrF)Y|8LU zmCVJU6%Tlr01`k^;-B84#3!!6t7hpWD`GrP()#Dz$FpYu#xQax9ZP~{DP^sSla&W5M?~l%cgBsG?KFDPyJz8gyb(S5s5~4~;T{ z$DEkN#aI*-K!@YoF$x2lugrqy`BpY9+PSM|$_n1othUCM_FPhC>hVn1&hf2)iJxJy zGXja5svDX!=F01`@yjrU{hj-_Ka^EckWE)kPM1wcoK1(Zol%%6DV$Y8kX29azz+r{ zfq7eBoH+D)-2w-<%2ERlXO(Vr0iSK>PuOzs2r=2)v+(nB*c`uj;kYdaA0Mltf+Gtb zAE(VR=F`7G#TKkyVNC#ri!6gRWK|{fKzTK!+eE=R9eisxA0w=?hutb_2IDY40N-o6 zpy1yJFay|8ztH}qm9e4qN&7zo5Fd0GszAX4FoSu*KLN0s4+RT;gAYPy1$M_;DOO_nWW69Gyf_J0a_lqBz2|K{%~ z-+T5qd%R{i*2QuU_yzq}wejjh$sW49UjE_xL~Z84etkN7V7pHKr@Qkxth?rvr?KhH z{oyJIm!7h;@rF`&;w*Qw?^|lXHko7AUr`(;`+_*CDYgg4m?2bo7 z6GzJBz&492-NgWi{HAt;&56r>HG~}B z#1Ut0ffZ`-mH}>CVEWfPdg&JvEBTG-NAniuav$>EApN((|5kikaBMXvB0qATfKTvu z4A?hbxWIm;{fTu4d4I0nl9%h+`>JbVk?$9($Gsins{S&yd)EDi?5KCzM?^18{qHfL zAK?{do&o#(2JIVm@nRfu@1ak#xMN5@wV%~)XYwOD5IN1EAUdf7-skzbovEvi{!8hj2!Z>V6WQI-AG1mewcB^&;yxddBkqXCvc*ayGqo z%iM7&d|qLF)7lx%ud#pI&&|9NcYx2>eji~bGpb1B?w!0raa#rg9WmDK#2I*e;@ z+^Od>fByjD18-~qc-o!9?N8DP003Y#H6=vz=qDi}zJ$mW4VBapN5m1R5i(AZj6?cK zz9K0Rhlq}l6p4tlGBYzWA|q7toX3igIM@8(oO7+Y=G@J(#+Y->4>!l$?RNjc?Rg*& z2=KpPAY6zQvJpj(l1I6sA<>j0IY)FcteDl9gIG$eJvI`@j|&`?9*xBFg#N+LP2A#n=MfIE_ar0OJlvLM-*{MT{9aa#&LrT+&KA{rq= zcupWr$N(f@1R|+LshU(@>Mjz6lpr@x3Qqb_1e6dpiCRO2)39mOG+Ekw+722()6lKx z1#~E#k#0!e!>}-)GKd+vj6g;NTY{Bg9oTRtCDWAY&)mu)XX&!S*`jPm_F;}8=kuxj zQ$d^#=g-CEa&y(W-|#d%h@Zx9=K*=lJbT_Ifl9FF$K`7ZQVN^}>qG)^koct#Tc|Dk zTEsXFoK}-!NGj4aDO3y=yNf@U@Jq}kYo#TnqouoK4mog!f989ct{hX|UcOinQ^7kc zK08Z=Q_HA2>i&;v8k|OESi` zHAge7S>3$S{C7)Pi>k%ba?na><+iT0MYn-%ja6$igDMI>L;@k*a`VW=xNua`x)X{&?dD7 zpL3tvr*KoA7q}N*dx~9Q-+Nj6a>Rjug@5&BS~cx{jeWh~q&d~jcW(%9#I6(<-{qfy z%y4ERv*J17-27bFZE$~)8`|BEK( z>Dya^FHx6NOA)`(|Mer{qdkBMjQputj$alnZ~f;V`Oc%gZ-WasvU3K% zqi8n_{y@dP#xeRB;1MBi(LtB06dG_bhDUTt6rfGNf`baG*ri&9I_|ktA}f-cN9)n* z>^37$$R5yJ$AkF#=+T~YcQ7J@%hOD^sSO z1x#mT@W>GftM14bF2%^coL%vx%}wXDh$dBi+Axvhn~M4+WQ{god!qM_Z!TYl!q;RU zGnRl>-&&$Fo@pp7^UBk{T30v+oM4%2Qs14+D@mpQN0vFESWO@umvP0jndq)6lfGaV zo~RsgLVE7|;&WJ|ibI}zIGFucznf-%r2qf`c-n1O1(f8*5uK`G+Pght9LLPK!#jr9 zXP?iEF~y`vnx2tvG?GrRaB&fcpe z{i~`cfeHEdpJj4Y7IKh>0u-SHWf*~Z ziPID3CeDKSFbWG`1y~VQf|X$vSQWkitHBpxb@&pj0c*lqur{m%>%w}lK5PIR!bY$$ zYyz9YX0SPI0b9ZtRGb72o8p?!Xa=d90rHO5um`=Km`qS=zxGO^uPcU zmOvjY7=R59xUe)alK4DP1`m7)AcP5+gejPYW$<-4621XP!8hS(I0lY|)?90 z0d9nw;9GDr+yb}4ZE!o>0e8Y(a5vlo_rkZ~KDZwqfCu3rco-gmN8vGe9G-yhz<1$$ z@FYA1Ps20tEIbF#!wc{tyaX@9EAT432Cu^#@O}6J{1AQwKZc*cPvK|qb9fWpg16xv zco%*Fzl8VTefR)AgkQn0;WzLRd<>t!r|=nk4!?!p!SCS@@JIL){2BfNe}%un-{Bwd zPxu%78~%d{1Vl_?3e%XuEaote1uS9-%Q%Aba6XRW0$c%C#FcPmTqUs%u8Lp4)$ohB zI(`Y)z%_9#TpQQHb#XmhA2+}aaUVY0eB!Dga_kS z@en)|55vRp2vqQEsG^p519j}6z%KUCKogf>A1xf9jSjlF6g~7Yzz`>J5~pw)m*Lm( zNc;vKh2O-Z@fbW7kHh2f1UwN>!jth7JQYvF)A0;E6VJl4@f$d z_(S{={uqCPKgFNn&+$!s3*W|f@Ll``{u1BA_wfV#5PyZg#^2ya_%VKhpWpXg}(4oUDF!m0zuO~1tvMif^fKET- ziGedAvdbK2pqO?}_D&cioo+Ydn>|~#lDgAN2cGI1DZ?3v9PK6))e2I9IS?t&Q9GrM zGih5S@N{lC$b>F;Y17u6siJGC(~53-x+O@bE7TzCiLNJnBgdx54J}9Sr@EHfE6`y& zuHo3iFHAUAI1mciQ;bDckdNii%`EkFrz5hOD*I%h_EPlUPicOgpEs_WPReYZLpGf*v4F9u>NPz+)AjG!RpNwX6e1^U*r6-#u3QY7la4un^X1|Baj zNAi-;56td#iqBFs?GCMraIq}cj&xOBu-B9cvm>0WYwAJhiHs|3-Lwh=)m7M5;bqhg zZ%7^{J4MF~(!Qa3BCQ*OJj54P_56!4H=;Y<$Kpr9QTA{BnF$x3Ij>Td`A}ME`zU<3OLqRSf z9FOv*-E|_EuX{q+zTpJr7#6W2PryhjXsSIFRnK!Kr5(jclvd;-IdtRik`dBH%p)?# zHWhS@Xq|Zm9!x#;jD&>=NyS+NBurL{3Z-(dahvEa;ZwixPRoHtn8V zo+f|VBB!gCusf=k@l?Cx46?d27|u(o4phJIXDFl6 zVe*=1imtBuqQK0J;w0VkoX}0NFVn=4u#?e*N*N-lhXGxsOI}f3$sf~A`RaryuzwVd zh}tK{IUex|Lkk^?GKOdNMPSf|JtH4dUh-&LK{jZXNE3NYozi@$_w#g(WDkY!$c!Z2 zKELNUJvz-y4k*r=NYfpP=>qv&1oEW0NTeW*1R2DUD1Ak7Ln++$Q@-O7)u@T$L`oDq z!^$R$%8+X*vfClT^oai*DoL6{cU+9=%qvSnYRig3IX)o127+>Hj=1g7-K&%lDd!a| zHbNmlKwma*?lp$jUYydk@BWVxuwhnHart1~hzG?6u>Q+*OUb3gT$hs z)Z&B0gVYpVbAD?0^q5)0&dhd*EcB?Rluj?bVe+Ck7L9wJI>>bCP22a9YKKxsrBxZx z%s>m-_3<@OCbYa_)XAxNmP3k`SE=%>ap=ze%DkFCYaE66Bt3JTNk2N#d7O@R?k zk(s8(wZ-pGyHwPi(DRpubYt`!AgVZ-E~RBlq`2V%9++;@5BX}F%`E@8F(*V)3wt=x zPfrR{bLfYIP5)>?t2!djt_%;)bM=)XlZG|difRsjYL0ZAVAcno8!t`JQ=DF<(k7Z2 zA1g~t-r%OmO^cgxZsgCl#g&C)`wHefA zP`jN{>SGe2u~g-z#!WriZHEdEn%uOw8Rv#Ul`(GkYlT4-236|ZG`L|zg%K4-RASq9 z9E*F#RT)=hT$OQE##I?tWn7hURn}BvO*KZ;7*S(HEjDjayy2os+{+aVt;H%AHR8S* z_q=(X_o%bhI%}=7*1G(_(0UBri4`|kaf7#QFsQ+x27?+5YA~q5paz@TWJHq@O-3{s z(Tq)9EWa_R*&=^; r%!@knqRzaiGcW4njA%2W%?Kt%z0HVr{l7^Jpz#0z00C3{v#kICSvE1` diff --git a/docs/fonts/glyphicons-halflings-regular.eot b/docs/fonts/glyphicons-halflings-regular.eot deleted file mode 100644 index b93a4953fff68df523aa7656497ee339d6026d64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20127 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/fonts/glyphicons-halflings-regular.ttf b/docs/fonts/glyphicons-halflings-regular.ttf deleted file mode 100644 index 1413fc609ab6f21774de0cb7e01360095584f65b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45404 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 G`u_lkUM?>H diff --git a/docs/fonts/glyphicons-halflings-regular.woff2 b/docs/fonts/glyphicons-halflings-regular.woff2 deleted file mode 100644 index 64539b54c3751a6d9adb44c8e3a45ba5a73b77f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18028 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 diff --git a/docs/forgebox_test.html b/docs/forgebox_test.html deleted file mode 100644 index 7f8d910..0000000 --- a/docs/forgebox_test.html +++ /dev/null @@ -1,1078 +0,0 @@ ---- - -title: Title - -keywords: fastai -sidebar: home_sidebar - -summary: "summary" ---- - - - - - diff --git a/docs/freemap.html b/docs/freemap.html deleted file mode 100644 index 1e82e3c..0000000 --- a/docs/freemap.html +++ /dev/null @@ -1,259 +0,0 @@ ---- - -title: FreeMap - -keywords: fastai -sidebar: home_sidebar - -summary: "```map``` function on free json like structure" ---- - - -
- {% raw %} - -
- -
-
- -
-
- -
-
- -
-
- -
- - -
-

class FreeMap[source]

FreeMap(func='<lambda>', filter_function='<lambda>', flatten=False)

-
- -
- -
- -
-
- -
-
-
-

Examples

-
-
-
-
-
- -
-
-
from math import floor
-
- -
-
-
- -
-
-
- -
-
-
examp = {"somekey":"somestring",
-         "somekey_with_heavy_value":[1,
-                                     "2",
-                                     "word",
-                                     {"function":floor},
-                                     {"are",
-                                      "is",
-                                      "is",
-                                      ("Lovely",
-                                       "example",)}],
-         "someanother_key":"hello this is a long string with verbosity"}
-
- -
-
-
- -
-
-
- -
-
-
capitalize = FreeMap(lambda x:x.upper(),lambda x:(type(x)==str))
-capitalize
-
- -
-
-
- -
-
- -
- - - -
-
<A map function for free structure>
-        Please put in one of the following type: 
-        dict, list, tuple, set, OrderedDict
-        
-        This operation will keep the original structure
-        ======
-        Mapped function
-        <function <lambda> at 0x10fc0fe60>
-        Value Filter function
-        <function <lambda> at 0x10fc0fef0>
-        
-
- -
- -
-
- -
-
-
- -
-
-
capitalize(examp)
-
- -
-
-
- -
-
- -
- - - -
-
{'somekey': 'SOMESTRING',
- 'somekey_with_heavy_value': [1,
-  '2',
-  'WORD',
-  {'function': <function math.floor(x, /)>},
-  {('LOVELY', 'EXAMPLE'), 'ARE', 'IS'}],
- 'someanother_key': 'HELLO THIS IS A LONG STRING WITH VERBOSITY'}
-
- -
- -
-
- -
-
-
-

Flatten and map

-
-
-
-
-
- -
-
-
FreeMap(lambda x:x.upper(),lambda x:(type(x)==str),flatten=True)(examp)
-
- -
-
-
- -
-
- -
- - - -
-
['SOMESTRING',
- '2',
- 'WORD',
- 'IS',
- 'LOVELY',
- 'EXAMPLE',
- 'ARE',
- 'HELLO THIS IS A LONG STRING WITH VERBOSITY']
-
- -
- -
-
- -
-
-
-

Just simple flatten, the default map function doesn't do anything

- -
-
-
-
-
- -
-
-
FreeMap(flatten=True)(examp)
-
- -
-
-
- -
-
- -
- - - -
-
['somestring',
- 1,
- '2',
- 'word',
- <function math.floor(x, /)>,
- 'is',
- 'Lovely',
- 'example',
- 'are',
- 'hello this is a long string with verbosity']
-
- -
- -
-
- -
- {% endraw %} -
- - diff --git a/docs/hf_transformer_data.html b/docs/hf_transformer_data.html deleted file mode 100644 index e1837ec..0000000 --- a/docs/hf_transformer_data.html +++ /dev/null @@ -1,437 +0,0 @@ ---- - -title: Data parts for hf transformers - - -keywords: fastai -sidebar: home_sidebar - - - -nb_path: "nbs/70_hf_transformer_data.ipynb" ---- - - -
- - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - -
-
-

Process IOBES files

-
-
-
- {% raw %} - -
- -
-
- -
- - -
-

convert_iob2_file_to_iobes[source]

convert_iob2_file_to_iobes(file_path, result_path)

-
-

Convert IOB2 file to IOBES

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

conbine_iobes_file[source]

conbine_iobes_file(file_paths:List[Path], new_file_path:Path)

-
-

Conbine from multiple IOBES files - into IOBES files

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - -
-
-

Dataset

-
-
-
- {% raw %} - -
- -
-
- -
- - -
-

class IOBES[source]

IOBES(*args, **kwds) :: Dataset

-
-

Load iobes file for NER training task

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
from transformers import AutoTokenizer
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
tokenizer = AutoTokenizer.from_pretrained("raynardj/roberta-pubmed", add_prefix_space=True)
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
dataset = IOBES("/Users/xiaochen.zhang/data/valid.iobes", tokenizer)
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
for w,l in zip(*dataset[2]):
-    print(f"{w}-{l}")
-
- -
-
-
- -
-
- -
- -
-
in-O
-blood-O
-;-O
-content-O
-of-O
-cAMP-O
-was-O
-also-O
-decreased-O
-in-O
-lymphocytes-O
-by-O
-33-O
-%-O
-.-O
-At-O
-the-O
-same-O
-time-O
-,-O
-total-O
-content-O
-of-O
-T-cell_type
-lymphocytes-cell_type
-was-O
-decreased-O
-1.5-fold-O
-in-O
-peripheric-O
-blood-O
-.-O
-Treatment-O
-with-O
-I-hydroxyvitamin-O
-D3-O
-(-O
-1-1.5-O
-mg-O
-daily-O
-,-O
-within-O
-4-O
-weeks-O
-)-O
-led-O
-to-O
-normalization-O
-of-O
-total-O
-and-O
-ionized-O
-form-O
-of-O
-Ca2+-O
-and-O
-of-O
-25-O
-(-O
-OH-O
-)-O
-D-O
-,-O
-but-O
-did-O
-not-O
-affect-O
-the-O
-PTH-O
-content-O
-in-O
-blood-O
-.-O
-Concentration-O
-of-O
-the-O
-receptors-protein
-to-O
-1.25-O
-(-O
-OH-O
-)-O
-2D3-O
-was-O
-elevated-O
-up-O
-to-O
-39.7-O
-fmole/mg-O
-after-O
-I-O
-week-O
-of-O
-the-O
-treatment-O
-,-O
-whereas-O
-it-O
-was-O
-decreased-O
-to-O
-the-O
-initial-O
-level-O
-24.8-O
-fmole/mg-O
-within-O
-4-O
-weeks-O
-;-O
-simultaneous-O
-alteration-O
-in-O
-
-
-
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
dataset.one_batch()
-
- -
-
-
- -
-
- -
- - - -
-
{'input_ids': tensor([[   19,  3741,  2603,  ...,  1417,  2617, 11576],
-        [ 4590,  2156,   255,  ...,   405,  1182,  6608],
-        [ 6214, 25683,  3809,  ...,    11,     5,  8151],
-        ...,
-        [13998, 25326,  2413,  ...,     5,  2199,    21],
-        [11299,   705, 24811,  ...,   134,  1589,  2032],
-        [ 5804,   924,    14,  ...,   366,  1168,     9]]), 'attention_mask': tensor([[1, 1, 1,  ..., 1, 1, 1],
-        [1, 1, 1,  ..., 1, 1, 1],
-        [1, 1, 1,  ..., 1, 1, 1],
-        ...,
-        [1, 1, 1,  ..., 1, 1, 1],
-        [1, 1, 1,  ..., 1, 1, 1],
-        [1, 1, 1,  ..., 1, 1, 1]]), 'offset_mapping': tensor([[[ 1,  4],
-         [ 1,  2],
-         [ 2,  5],
-         ...,
-         [ 3,  5],
-         [ 5,  8],
-         [ 1,  6]],
-
-        [[ 1,  5],
-         [ 1,  1],
-         [ 1,  1],
-         ...,
-         [ 5,  7],
-         [ 7,  9],
-         [ 9, 14]],
-
-        [[ 1,  5],
-         [ 5,  8],
-         [ 8, 10],
-         ...,
-         [ 1,  2],
-         [ 1,  3],
-         [ 1, 10]],
-
-        ...,
-
-        [[ 1,  5],
-         [ 5,  8],
-         [ 8, 10],
-         ...,
-         [ 1,  3],
-         [ 1,  7],
-         [ 1,  3]],
-
-        [[ 1,  5],
-         [ 5,  6],
-         [ 6, 10],
-         ...,
-         [ 2,  3],
-         [ 1,  1],
-         [ 1,  2]],
-
-        [[ 1,  7],
-         [ 1,  5],
-         [ 1,  4],
-         ...,
-         [ 3,  5],
-         [ 5,  7],
-         [ 1,  2]]]), 'labels': tensor([[0, 1, 1,  ..., 0, 0, 0],
-        [2, 0, 2,  ..., 0, 0, 0],
-        [0, 0, 0,  ..., 0, 0, 0],
-        ...,
-        [1, 1, 1,  ..., 0, 0, 0],
-        [0, 0, 0,  ..., 2, 0, 2],
-        [0, 0, 0,  ..., 0, 0, 0]])}
-
- -
- -
-
- -
- {% endraw %} - -
- - diff --git a/docs/html.html b/docs/html.html deleted file mode 100644 index f1e6765..0000000 --- a/docs/html.html +++ /dev/null @@ -1,791 +0,0 @@ ---- - -title: HTML operation - - -keywords: fastai -sidebar: home_sidebar - -summary: "HTML operation in jupyter notebook, easier life with visualization" -description: "HTML operation in jupyter notebook, easier life with visualization" -nb_path: "nbs/04_html.ipynb" ---- - - -
- - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

class DOM[source]

DOM(txt, tag, kwargs={})

-
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - -
-
-

Create HTML tag

-
-
-
- {% raw %} - -
-
- -
-
-
btn = DOM("Hello",tag="div",kwargs = {"class":"btn btn-sm btn-danger","id":"test_btn_001"})
-
-btn
-
- -
-
-
- -
-
- -
- - - -
-
<div class="btn btn-sm btn-danger" id="test_btn_001">Hello</div>
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Show HTML raw text

- -
-
-
- {% raw %} - -
-
- -
-
-
btn.text
-
- -
-
-
- -
-
- -
- - - -
-
'<div class="btn btn-sm btn-danger" id="test_btn_001">Hello</div>'
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Display in HTML

- -
-
-
- {% raw %} - -
-
- -
-
-
btn()
-
- -
-
-
- -
-
- -
- - -
-
Hello
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Extend tag

-
-
-
- {% raw %} - -
-
- -
-
-
DOM("a","div")*"span"
-
- -
-
-
- -
-
- -
- - - -
-
<span><div>a</div></span>
-
- -
- -
-
- -
- {% endraw %} - -
-
-

DOM operation

-
-
-
- {% raw %} - -
-
- -
-
-
ul = DOM("","ul")
-ul
-
- -
-
-
- -
-
- -
- - - -
-
<ul class="list-group"></ul>
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
ul.update({"class":"list-group"})
-
- -
-
-
- -
-
- -
- - - -
-
<ul class="list-group"></ul>
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
for i in range(5):
-    ul.append(DOM(f"List item{i}", "li",{"class":"list-group-item paint-red"}))
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
ul()
-
- -
-
-
- -
-
- -
- - -
-
  • List item0
  • List item1
  • List item2
  • List item3
  • List item4
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

image_to_base64[source]

image_to_base64(img:Image)

-
-

Transform PIL Image to base64 for API -Return:

- -
- base64 encoded image bytes
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

data_url[source]

data_url(img:Image)

-
-

Return:

- -
- data url string,
-    can be used as the src value of <img>
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

img_dom[source]

img_dom(img:Image)

-
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

deeper[source]

deeper(x)

-
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

list_group[source]

list_group(iterable)

-
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

col_sm[source]

col_sm(iterable, portions=None)

-
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
col_sm(["foo","bar","return"])()
-
- -
-
-
- -
-
- -
- - -
-
foo
bar
return
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
col_sm(["foo","bar","return"],[2,5,5])()
-
- -
-
-
- -
-
- -
- - -
-
foo
bar
return
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

list_group_kv[source]

list_group_kv(data)

-
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - -
-
-

Example: Running JavaScript

-
-
-
- {% raw %} - -
-
- -
-
-
DOM("alert(123)","script")
-
- -
-
-
- -
-
- -
- - - -
-
<script class="list-group">alert(123)</script>
-
- -
- -
-
- -
- {% endraw %} - -
-
-

execute js script

- -
-
-
- {% raw %} - -
-
- -
-
-
DOM("alert(123)","script")()
-
- -
-
-
- -
- {% endraw %} - -
-
-

Longer script

- -
-
-
- {% raw %} - -
-
- -
-
-
paint_red = """
-console.log(document.querySelectorAll(".paint-red"))
-document.querySelectorAll(".paint-red").forEach(dom=>{
-dom.className=dom.className+" text-danger"
-})
-"""
-
-DOM(paint_red,"script")()
-
- -
-
-
- -
-
- -
- - -
- -
- -
- -
-
- -
- {% endraw %} - -
-
-

A class designed for running javascript

-
-
-
- {% raw %} - -
- -
-
- -
- - -
-

JS[source]

JS(code)

-
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

JS_file[source]

JS_file(path)

-
-

load javascript file

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - -
- - diff --git a/docs/image_widgets.html b/docs/image_widgets.html deleted file mode 100644 index 7cbcd95..0000000 --- a/docs/image_widgets.html +++ /dev/null @@ -1,418 +0,0 @@ ---- - -title: Image Widgets - - -keywords: fastai -sidebar: home_sidebar - -summary: "Extra widgets for jupyter noteook" -description: "Extra widgets for jupyter noteook" -nb_path: "nbs/51_image_widgets.ipynb" ---- - - -
- - {% raw %} - -
- -
- {% endraw %} - -
-
-

Imports

-
-
-
- {% raw %} - -
- -
- {% endraw %} - -
-
-

Data url for img tag

-
-
-
-
-
-

Preview images in jupyter notebook

-
-
-
- {% raw %} - -
- -
-
- -
- - -
-

image_dom[source]

image_dom(img:PIL.Image, **kwargs)

-
-

Create tag with src='data:...' - with PIL.Image object -return forgebox.html.DOM

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

with_title_dom[source]

with_title_dom(img:PIL.Image, title:str, col:int)

-
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

view_images[source]

view_images(*images, num_per_row:int=4, titles:List[T]=None)

-
-

Create

wraping up images -view_images( - img1, img2, img3, - img4, img5, img6, - img7)()

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - -
-
-

Subplot

-
-
-
- {% raw %} - -
- -
-
- -
- - -
-

class Subplots[source]

Subplots(total:int, ncol:int=3, figsize=None)

-
-

Simplifying plt sublots -sub = Subplots(18)

- -
@sub.single
-def plotting(ax, data):
-    ax.plot(data)
-
-for data in data_list:
-    sub(data)
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - -
-
-

Test on image preview

-
-
-
- {% raw %} - -
-
- -
-
-
import os
-
- -
-
-
- -
- {% endraw %} - -
-
-

Original image

- -
-
-
- {% raw %} - -
-
- -
-
-
HOME = os.environ['HOME']
-img = Image.open(f"{HOME}/Pictures/img02.jpg").resize((200,50))
-img
-
- -
-
-
- -
-
- -
- - - -
- -
- -
- -
-
- -
- {% endraw %} - -
-
-

Data url of the image

- -
-
-
- {% raw %} - -
-
- -
-
-
data_url(img)[:100]
-
- -
-
-
- -
-
- -
- - - -
-
'data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHB'
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Visualize single image

- -
-
-
- {% raw %} - -
-
- -
-
-
image_dom(img)()
-
- -
-
-
- -
-
- -
- - -
-
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Visualize serveral images

- -
-
-
- {% raw %} - -
-
- -
-
-
view_images(img, img, img, img, img, img, titles=list(f"lake:{i}" for i in range(6)))()
-
- -
-
-
- -
-
- -
- - -
-
lake:0
lake:1
lake:2
lake:3
lake:4
lake:5
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Contains more images in a row

- -
-
-
- {% raw %} - -
-
- -
-
-
view_images(
-    img, img, img, img, img, img,
-    num_per_row=6)()
-
- -
-
-
- -
-
- -
- - -
-
-
- -
- -
-
- -
- {% endraw %} - -
- - diff --git a/docs/images/company_logo.png b/docs/images/company_logo.png deleted file mode 100644 index c3453e7cfaf1fbcecff656a927d604c829af2ea3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170761 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%0Ds_Q(}qv)+(slFqQb0MYR8Mw-i9E+r^-t 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 B-QEBI diff --git a/docs/images/company_logo_big.png b/docs/images/company_logo_big.png deleted file mode 100644 index 4cc1ab88d7d5ae8b95ea237a1372ee416d62f8ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1639 zcmV-t2AKJYP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00009 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%0AD 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 L6(vf=4Zi*tyH-s> diff --git a/docs/images/export_example.png b/docs/images/export_example.png deleted file mode 100644 index 1c2829c4c1f611e7286b9605316381cd7935add2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38947 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 diff --git a/docs/images/favicon.ico b/docs/images/favicon.ico deleted file mode 100644 index c35e9559b4e6acfa92f949143985c89b9c823784..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmb_cK}#D^5Pm{`Ku+F-9{W2)1TWHGptmA|2d@f+(t?NfAPAnpI_P$}7@g1A&@;w5 z8DlTVC`1tzC&w7&Cc2c#XFBj?7ne#`l`Jy)B68`k$eTYLb(Oojl)_wAGRUTuVI&uD zk_|k7-%wXN$C{7&@ZX!yxsA$&PL`6saJGZu`QLl+RXy9TLOYm5GB$<7fA3MN7A05c z0s^COj$jMNVObSvb?XYJxpm}E!Vaz-_okeYoToW{L7n=lR!h=syLJ=kL_|)HPa}Oe zOa3FQS_z!jvA6#QTf3tOZ4bjdjYzb5r)DXEJ1QpHX|blZoNXz zRPWQ8FXjZ4OGk)D-_ra_PJuf4hTT2~QD4lfSlGv9*+AheLjC-LriT$r1dupd$3bir zM&_rZ+pNW@SMC24X@q1xoAN_X_^_}vfSK7|eD?KY+S841YhyCcc{87eCF5d$^tc;_ zHixw4C;lKj-adHeUc&vU2jADmTl1a$5Z{m3f74ijnF(Nf$BkfU0-^8+Yy{sS`e#Y< P+wYSDYvUUKfyer5XUxis diff --git a/docs/images/workflowarrow.png b/docs/images/workflowarrow.png deleted file mode 100644 index 91a3e816183d8ec1c986cd042623e34845bef599..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3595 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 - -

- - diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 6cdd940..0000000 --- a/docs/index.html +++ /dev/null @@ -1,740 +0,0 @@ ---- - -title: ForgeBox - - -keywords: fastai -sidebar: home_sidebar - -summary: "Data science comprehensive toolbox 🛠⚔️📦" -description: "Data science comprehensive toolbox 🛠⚔️📦" -nb_path: "nbs/index.ipynb" ---- - - -
- - {% raw %} - -
- -
- {% endraw %} - -
-
-

forgebox logo

- -
-
-
-
-
-

Installation

Easy simple installation in 1 line

-
pip install forgebox
-
-

If not specified, you need anaconda3 for most of the tools, python shold be at least >=3.6

- -
-
-
-
-
-

Features 🚀 Briefing

This is a tool box with comprehensive utilies, to put it simply, I just hope most of my frequetyly used DIY tools in in place and can be easily installed and imported

-
- -
-
-
-
-
-

Lazy, fast imports 🤯

-
-
-
-
-
-

The following command will import many frequent tools for data science, like pd for pandas, np for numpy, os, json, PIL.Image for image processing

-
from frogebox.imports import *
-
-

No more🚫 following typings

-
import pandas as pd
-import numpy as np
-import os
-import json
-...
-
- -
-
-
-
-
-

Categorical converter

Mapping and converting categorical infomation

-
- -
-
-
- {% raw %} - -
-
- -
-
-
from forgebox.category import Category
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
az = list(map(chr,range(ord("A"), ord("z")+1)))
-print(az)
-
- -
-
-
- -
-
- -
- -
-
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
-
-
-
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
cate_az = Category(az)
-cate_az
-
- -
-
-
- -
-
- -
- - - -
-
Category Manager with 58
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
cate_az.c2i["R"], cate_az.i2c[17]
-
- -
-
-
- -
-
- -
- - - -
-
(17, 'R')
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
cate_az.c2i[list("ForgeBox")]
-
- -
-
-
- -
-
- -
- - - -
-
array([ 5, 46, 49, 38, 36,  1, 46, 55])
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
cate_az.i2c[[ 5, 46, 49, 38, 36,  1, 46, 55]]
-
- -
-
-
- -
-
- -
- - - -
-
array(['F', 'o', 'r', 'g', 'e', 'B', 'o', 'x'], dtype='<U1')
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Padding missing token

- -
-
-
- {% raw %} - -
-
- -
-
-
cate_az = Category(az, pad_mst=True)
-cate_az.c2i[list("Forge⚡️Box")]
-
- -
-
-
- -
-
- -
- - - -
-
array([ 6, 47, 50, 39, 37,  0,  0,  2, 47, 56])
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Get a dataframe of file details under a directory

-
-
-
- {% raw %} - -
-
- -
-
-
from forgebox.files import file_detail
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
file_detail("/Users/xiaochen.zhang/.cache/").sample(5)
-
- -
-
-
- -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pathfile_typeparentdepth
36/Users/xiaochen.zhang/.cache/torch/transformer...jsontransformers7
13/Users/xiaochen.zhang/.cache/torch/transformer...jsontransformers7
51/Users/xiaochen.zhang/.cache/langhuan/task_NER...jsontask_NER_210121_1405137
32/Users/xiaochen.zhang/.cache/torch/transformer...locktransformers7
58/Users/xiaochen.zhang/.cache/langhuan/task_Cla...jsontask_Classify_210128_1647107
-
-
- -
- -
-
- -
- {% endraw %} - -
-
-

JS style async

-
-
-
- {% raw %} - -
-
- -
-
-
from forgebox.asyncing import Async
-from time import sleep
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
def something_time_costing_but_you_dont_want_to_wait(x):
-    sleep(x)
-    return f"slept for {x} seconds"
-
-def task2_you_will_perfrom_after_the_time_costing_one(x):
-    print(f"[result]:\t{x}")
-    return 1
-
-print("1111111111")
-
-Async(something_time_costing_but_you_dont_want_to_wait)(2)\
-.then(task2_you_will_perfrom_after_the_time_costing_one)\
-.catch(print)
-
-print("22222222222")
-
- -
-
-
- -
-
- -
- -
-
1111111111
-22222222222
-[result]:	slept for 2 seconds
-
-
-
- -
-
- -
- {% endraw %} - -
-
-

HTML in notebook

-
-
-
- {% raw %} - -
-
- -
-
-
from forgebox.html import DOM, list_group, list_group_kv
-
- -
-
-
- -
- {% endraw %} - -
-
-

This will map a clear HTML table view of wild tree type json structure/ list

- -
-
-
- {% raw %} - -
-
- -
-
-
bands = ["police", "headpin", {"ac":"dc"}]
-list_group(bands)()
-
- -
-
-
- -
-
- -
- - -
-
  • police
  • headpin
    • acdc
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
questions = {
-    "question":"answer",
-    "another":{
-        "deeper question": "answer again"},
-    "final":{
-        "questions": ["what","is","the","answer", "to",
-            ["life", "universe","everything"]]}
-}
-list_group_kv(questions)()
-
- -
-
-
- -
-
- -
- - -
-
  • questionanswer
  • another
    • deeper questionanswer again
  • final
    • questions
      • what
      • is
      • the
      • answer
      • to
        • life
        • universe
        • everything
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Coding html in python

-
-
-
- {% raw %} - -
-
- -
-
-
title = DOM("Title example","h5", kwargs={"style":"color:#3399EE"})
-ul = DOM("","ul");
-for i in range(5):
-    ul = ul.append(DOM(f"Line {i}", "li", kwargs={"style":"color:#EE33DD"}))
-
-title()
-ul()
-
- -
-
-
- -
-
- -
- - -
-
Title example
-
- -
- -
- - -
-
  • Line 0
  • Line 1
  • Line 2
  • Line 3
  • Line 4
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Free style mapping

-
-
-
-
-
-

Works on every value of a complicated dictionary structure (eg. list in dict in list in dict, etc,. 😳)

-
from forgebox.freemap import FreeMap
-
-# flatten decides if we want to flatten the strucuture
-freemap_tool = FreeMap(
-    <function/callable applying to every value>,
-    <function/callable that filters every value>,
-    flatten=True
-)
-
-data2 = freemap_tool(data1)
-
- -
-
-
-
-
-

Interactive Widgets

Interactive widgets work with in jupyter notebooks

-
- -
-
-
-
-
-

Search box 🔎 for dataframe

This will create an interactive text input box to search through the pandas dataframe, within the columns you set.

-

if manual is set to False, the search will respond to each of your key press, it's fast but will suffer terrible user experience if the dataframe is huge in size.

-
from forgebox.widgets import search_box
-
-search_box(data_df, columns=["col1","col2"], manual=False)
-
- -
-
-
-
-
-

paginate

You can browse through a pandas dataframe like fliping pages 📄.

-
from forgebox.widgets import paginate
-
-paginate(your_dataframe, page_len=10)
-
- -
-
-
-
-
-

Single button callback

a fully functional page with a single button, this single button is bonded to a function

-
-

This is as much code as you need, to build a fully functional interactive page shows sql table from jupyter, that you can: choose which table to visit choose how many lines you want to show, (with a slider)

-
    -
  • configure the where condition with a text box on front end
  • -
-
tablename_list = ["pubmed", "patient", "users", "drugs"]
-
-from forgebox.html import DOM
-def show_sql_table(sql_input:str) -> str:
-    with engine.connect() as conn:
-        df=pd.read_sql(sql_input, con=conn)
-    # display the table as html
-    DOM(df.to_html(),"div")()
-
-@SingleButton(callback=show_sql_table)
-def abc(
-    limit:{"typing":int, "default":10, "min":5, "max":20},
-    where_condition:{"typing":str, "default": "where 1=1", },
-    table:{"typing":list, "options":tablename_list}
-):
-    return f"SELECT * FROM {table} {where_condition} LIMIT {limit}"
-
- -
-
-
-
- - diff --git a/docs/inter_widgets.html b/docs/inter_widgets.html deleted file mode 100644 index a046324..0000000 --- a/docs/inter_widgets.html +++ /dev/null @@ -1,985 +0,0 @@ ---- - -title: Interactive tools - - -keywords: fastai -sidebar: home_sidebar - -summary: "Very helpful interactive tools" -description: "Very helpful interactive tools" -nb_path: "nbs/05_inter_widgets.ipynb" ---- - - -
- - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

display_df[source]

display_df(df)

-
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

search_box(df, columns, manual=False, max_rows=10, callback=display_df)

-
-

create a search box based on dataframe -df: pandas dataframe -columns: str, dataframe field name -manual: bool, search the dataframe on when click the button(manual=True), - or on keypress reaction to inputbox (manual=False), default False -max_rows:int, max rows of show result, default 10 -callback: python callable, discribe the action you want to put on - search result (a filtered dataframe), default is to display the dataframe

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - -
-
-

Search text within dataframe columns

We can have any dataframe we like:

- -
-
-
- {% raw %} - -
-
- -
-
-
df = pd.read_csv("~/Downloads/mesh_keywords_202004201804.csv").head(2000)
-
- -
-
-
- -
- {% endraw %} - -
-
-

Put the dataframe and target column names into the search_box()

- -
-
-
- {% raw %} - -
-
- -
-
-
search_box(df,columns=["keyword",])
-
- -
-
-
- -
- {% endraw %} - -
-
-

If your dataframe is slightly huge, and slow to respond, you can use manual=True to turn off the auto keypress response

- -
-
-
- {% raw %} - -
-
- -
-
-
search_box(df,columns=["keyword",],manual=True)
-
- -
-
-
- -
- {% endraw %} - -
-
-

Interactive pagination

-
-
-
- {% raw %} - -
- -
-
- -
- - -
-

paginate[source]

paginate(df, page_len=20)

-
-

Paginate dataframe in jupyter notebook interactively -Like you can flip through the page

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
paginate(df)
-
- -
-
-
- -
- {% endraw %} - -
-
-

SingleButton widget

-
-
-
-
-
-

A single button widget

-

It's like interactive_manual with callback

-

You can make an fully interactive featured widgets if there is only one button to get new page

-

Example

@SingleButton(callback=execute_sql, btn_text:"run command", btn_style="primary")
-def makeup_some_sql(
-    table={"typing":list, "options":["table_a", "table_b"]},
-    limit={"typing":int, "max":1000, "step":10, "default":100},
-):
-    return f"select * from {table} limit {limit}"
-
- -
-
-
- {% raw %} - -
- -
-
- -
- - -
-

make_hboxes[source]

make_hboxes(*widgets, sections:int=2)

-
-

Make a list of HBox, with each hbox - contans {sections} of widgets at most -widgets: widget from ipywidgets -sections: int

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

class SingleButton[source]

SingleButton(btn_text:str='Run', btn_style:str='danger', callback:Callable=<lambda>, sections:int=2)

-
-

A single button widget -It's like interactive_manual with callback

-

Example

@SingleButton(callback=execute_sql, btn_text:"run command", btn_style="primary")
-def makeup_some_sql(
-    table={"typing":list, "options":["table_a", "table_b"]},
-    limit={"typing":int, "max":1000, "step":10, "default":100},
-):
-    return f"select * from {table} limit {limit}"
-
- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - -
-
-

Example for SingleButton

-
-
-
-
-
-

This is a sample callback

- -
-
-
- {% raw %} - -
-
- -
-
-
from forgebox.html import DOM
-def sql_callback(x):
-    DOM(x,"h3")()
-    # and we execute more code like,
-    #    eg. run this line in sql
-    return x
-
- -
-
-
- -
- {% endraw %} - -
-
-

Now we can have an interactive single button page, with multipule input widgets

- -
-
-
- {% raw %} - -
-
- -
-
-
@SingleButton(callback=sql_callback)
-def abc(
-    limit:{"typing":int, "default":10, "min":5, "max":20},
-    where_condition:{"typing":str, "default": "where 1=1", },
-    table:{"typing":list, "options":["image_urls","patient_data"]},
-):
-    return f"sql > SELECT * FROM {table} {where_condition} LIMIT {limit}"
-
- -
-
-
- -
- {% endraw %} - -
-
-

Dataframe labeler

-
-
-
- {% raw %} - -
- -
-
- -
- - -
-

class Labeler[source]

Labeler(df:DataFrame, options_col:str, result_col:str='label', show_callback:Callable=None, auto_fill_in:bool=True)

-
-

An interactive tool labeling pandas dataframe - row by row

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
df = df.loc[1:].reset_index(drop=True)
-df.head()
-
- -
-
-
- -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
keyword
0Appetite Regulation
1Hymecromone
2Round Ligament of Uterus
3Sugar Acids
4Nogalamycin
-
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Design a dataframe with a column assigned with options

-
-
-
- {% raw %} - -
-
- -
-
-
df.loc[:,"length"] = df.keyword.apply(len)
-df["options"] = pd.Series([["A","B"]]*len(df))
-df
-
- -
-
-
- -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
keywordlengthoptions
0Appetite Regulation19[A, B]
1Hymecromone11[A, B]
2Round Ligament of Uterus24[A, B]
3Sugar Acids11[A, B]
4Nogalamycin11[A, B]
............
1994Alcoholics Anonymous20[A, B]
1995Lymphocyte Cooperation22[A, B]
1996Anthocerotophyta16[A, B]
1997Traction8[A, B]
1998H(+)-K(+)-Exchanging ATPase27[A, B]
-

1999 rows × 3 columns

-
-
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
def show_keyword(idx: int, row: Dict[str, str]):
-    kw = row["keyword"]
-    length = row["length"]
-    return f"""
-    <div>Keyword
-    <strong class='text-danger'>{kw}</strong>
-    (with length:{length})
-    </div>"""
-
-lbl = Labeler(df, options_col="options", show_callback=show_keyword)
-
- -
-
-
- -
- {% endraw %} - -
-
-

Start labeling

-
-
-
- {% raw %} - -
-
- -
-
-
lbl()
-
- -
-
-
- -
- {% endraw %} - -
-
-

{% include image.html alt="image.png" file="data:image/png;base64,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" %}

- -
-
-
-
-
-

Review the label result

-
-
-
- {% raw %} - -
-
- -
-
-
lbl.df.head()
-
- -
-
-
- -
-
- -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
keywordlengthoptionslabel
0Appetite Regulation19[A, B]A
1Hymecromone11[A, B]B
2Round Ligament of Uterus24[A, B]A
3Sugar Acids11[A, B]B
4Nogalamycin11[A, B]B
-
-
- -
- -
-
- -
- {% endraw %} - -
-
-

Editable list and editable dict

-
-
-
- {% raw %} - -
- -
-
- -
- - -
-

class EditableList[source]

EditableList(*args, **kwargs) :: VBox

-
-

Interactive list -You can add item to the list -Each added item has a remove button to remove such item

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

class EditableDict[source]

EditableDict(*args, **kwargs) :: VBox

-
-

Interactive dictionary -You can add item to the dictionary -Each added item has a remove button to remove such item

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - -
-
-

Step by step

-
-
-
- {% raw %} - -
- -
-
- -
- - -
-

class LivingStep[source]

LivingStep(func:Callable, top_block:HTML=None)

-
-

A step interactive for StepByStep

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
-
- -
- - -
-

class StepByStep[source]

StepByStep(funcs:Dict[str, Callable], top_board:HTML=None, kwargs:Dict[str, Any]={})

-
-

A tool to manage progress step by step

- -
- -
- -
-
- -
- {% endraw %} - - {% raw %} - -
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
def test_step(**kwargs):
-    @interact
-    def show_step_(how_much=[1,2,4,8,16], charactor = ['🍺', '🏺', '🍶','🍷']):
-        return pd.DataFrame({"stuff":[charactor*how_much,]*how_much})
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
sbs = StepByStep(
-    {"step1":test_step,"some_step":test_step, "another_step":test_step},
-    HTML("""
-    <h1>Detail Steps</h1>
-    """)
-)
-
- -
-
-
- -
- {% endraw %} - - {% raw %} - -
-
- -
-
-
sbs()
-
- -
-
-
- -
- {% endraw %} - -
- - - - diff --git a/docs/js/customscripts.js b/docs/js/customscripts.js deleted file mode 100644 index 27701a3..0000000 --- a/docs/js/customscripts.js +++ /dev/null @@ -1,54 +0,0 @@ -$('#mysidebar').height($(".nav").height()); - - -$( document ).ready(function() { - - //this script says, if the height of the viewport is greater than 800px, then insert affix class, which makes the nav bar float in a fixed - // position as your scroll. if you have a lot of nav items, this height may not work for you. - var h = $(window).height(); - //console.log (h); - if (h > 800) { - $( "#mysidebar" ).attr("class", "nav affix"); - } - // activate tooltips. although this is a bootstrap js function, it must be activated this way in your theme. - $('[data-toggle="tooltip"]').tooltip({ - placement : 'top' - }); - - /** - * AnchorJS - */ - anchors.add('h2,h3,h4,h5'); - -}); - -// needed for nav tabs on pages. See Formatting > Nav tabs for more details. -// script from http://stackoverflow.com/questions/10523433/how-do-i-keep-the-current-tab-active-with-twitter-bootstrap-after-a-page-reload -$(function() { - var json, tabsState; - $('a[data-toggle="pill"], a[data-toggle="tab"]').on('shown.bs.tab', function(e) { - var href, json, parentId, tabsState; - - tabsState = localStorage.getItem("tabs-state"); - json = JSON.parse(tabsState || "{}"); - parentId = $(e.target).parents("ul.nav.nav-pills, ul.nav.nav-tabs").attr("id"); - href = $(e.target).attr('href'); - json[parentId] = href; - - return localStorage.setItem("tabs-state", JSON.stringify(json)); - }); - - tabsState = localStorage.getItem("tabs-state"); - json = JSON.parse(tabsState || "{}"); - - $.each(json, function(containerId, href) { - return $("#" + containerId + " a[href=" + href + "]").tab('show'); - }); - - $("ul.nav.nav-pills, ul.nav.nav-tabs").each(function() { - var $this = $(this); - if (!json[$this.attr("id")]) { - return $this.find("a[data-toggle=tab]:first, a[data-toggle=pill]:first").tab("show"); - } - }); -}); diff --git a/docs/js/jekyll-search.js b/docs/js/jekyll-search.js deleted file mode 100644 index d884a24..0000000 --- a/docs/js/jekyll-search.js +++ /dev/null @@ -1 +0,0 @@ -!function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a="function"==typeof require&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o=0}var self=this;self.matches=function(string,crit){return"string"!=typeof string?!1:(string=string.trim(),doMatch(string,crit))}}module.exports=new LiteralSearchStrategy},{}],4:[function(require,module){module.exports=function(){function findMatches(store,crit,strategy){for(var data=store.get(),i=0;i{title}',noResultsText:"No results found",limit:10,fuzzy:!1};self.init=function(_opt){validateOptions(_opt),assignOptions(_opt),isJSON(opt.dataSource)?initWithJSON(opt.dataSource):initWithURL(opt.dataSource)}}var Searcher=require("./Searcher"),Templater=require("./Templater"),Store=require("./Store"),JSONLoader=require("./JSONLoader"),searcher=new Searcher,templater=new Templater,store=new Store,jsonLoader=new JSONLoader;window.SimpleJekyllSearch=new SimpleJekyllSearch}(window,document)},{"./JSONLoader":1,"./Searcher":4,"./Store":5,"./Templater":6}]},{},[7]); diff --git a/docs/js/jquery.ba-throttle-debounce.min.js b/docs/js/jquery.ba-throttle-debounce.min.js deleted file mode 100644 index 0720550..0000000 --- a/docs/js/jquery.ba-throttle-debounce.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * jQuery throttle / debounce - v1.1 - 3/7/2010 - * http://benalman.com/projects/jquery-throttle-debounce-plugin/ - * - * Copyright (c) 2010 "Cowboy" Ben Alman - * Dual licensed under the MIT and GPL licenses. - * http://benalman.com/about/license/ - */ -(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this); \ No newline at end of file diff --git a/docs/js/jquery.navgoco.min.js b/docs/js/jquery.navgoco.min.js deleted file mode 100755 index 4ba4475..0000000 --- a/docs/js/jquery.navgoco.min.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - * jQuery Navgoco Menus Plugin v0.2.1 (2014-04-11) - * https://github.com/tefra/navgoco - * - * Copyright (c) 2014 Chris T (@tefra) - * BSD - https://github.com/tefra/navgoco/blob/master/LICENSE-BSD - */ -!function(a){"use strict";var b=function(b,c,d){return this.el=b,this.$el=a(b),this.options=c,this.uuid=this.$el.attr("id")?this.$el.attr("id"):d,this.state={},this.init(),this};b.prototype={init:function(){var b=this;b._load(),b.$el.find("ul").each(function(c){var d=a(this);d.attr("data-index",c),b.options.save&&b.state.hasOwnProperty(c)?(d.parent().addClass(b.options.openClass),d.show()):d.parent().hasClass(b.options.openClass)?(d.show(),b.state[c]=1):d.hide()});var c=a("").prepend(b.options.caretHtml),d=b.$el.find("li > a");b._trigger(c,!1),b._trigger(d,!0),b.$el.find("li:has(ul) > a").prepend(c)},_trigger:function(b,c){var d=this;b.on("click",function(b){b.stopPropagation();var e=c?a(this).next():a(this).parent().next(),f=!1;if(c){var g=a(this).attr("href");f=void 0===g||""===g||"#"===g}if(e=e.length>0?e:!1,d.options.onClickBefore.call(this,b,e),!c||e&&f)b.preventDefault(),d._toggle(e,e.is(":hidden")),d._save();else if(d.options.accordion){var h=d.state=d._parents(a(this));d.$el.find("ul").filter(":visible").each(function(){var b=a(this),c=b.attr("data-index");h.hasOwnProperty(c)||d._toggle(b,!1)}),d._save()}d.options.onClickAfter.call(this,b,e)})},_toggle:function(b,c){var d=this,e=b.attr("data-index"),f=b.parent();if(d.options.onToggleBefore.call(this,b,c),c){if(f.addClass(d.options.openClass),b.slideDown(d.options.slide),d.state[e]=1,d.options.accordion){var g=d.state=d._parents(b);g[e]=d.state[e]=1,d.$el.find("ul").filter(":visible").each(function(){var b=a(this),c=b.attr("data-index");g.hasOwnProperty(c)||d._toggle(b,!1)})}}else f.removeClass(d.options.openClass),b.slideUp(d.options.slide),d.state[e]=0;d.options.onToggleAfter.call(this,b,c)},_parents:function(b,c){var d={},e=b.parent(),f=e.parents("ul");return f.each(function(){var b=a(this),e=b.attr("data-index");return e?void(d[e]=c?b:1):!1}),d},_save:function(){if(this.options.save){var b={};for(var d in this.state)1===this.state[d]&&(b[d]=1);c[this.uuid]=this.state=b,a.cookie(this.options.cookie.name,JSON.stringify(c),this.options.cookie)}},_load:function(){if(this.options.save){if(null===c){var b=a.cookie(this.options.cookie.name);c=b?JSON.parse(b):{}}this.state=c.hasOwnProperty(this.uuid)?c[this.uuid]:{}}},toggle:function(b){var c=this,d=arguments.length;if(1>=d)c.$el.find("ul").each(function(){var d=a(this);c._toggle(d,b)});else{var e,f={},g=Array.prototype.slice.call(arguments,1);d--;for(var h=0;d>h;h++){e=g[h];var i=c.$el.find('ul[data-index="'+e+'"]').first();if(i&&(f[e]=i,b)){var j=c._parents(i,!0);for(var k in j)f.hasOwnProperty(k)||(f[k]=j[k])}}for(e in f)c._toggle(f[e],b)}c._save()},destroy:function(){a.removeData(this.$el),this.$el.find("li:has(ul) > a").unbind("click"),this.$el.find("li:has(ul) > a > span").unbind("click")}},a.fn.navgoco=function(c){if("string"==typeof c&&"_"!==c.charAt(0)&&"init"!==c)var d=!0,e=Array.prototype.slice.call(arguments,1);else c=a.extend({},a.fn.navgoco.defaults,c||{}),a.cookie||(c.save=!1);return this.each(function(f){var g=a(this),h=g.data("navgoco");h||(h=new b(this,d?a.fn.navgoco.defaults:c,f),g.data("navgoco",h)),d&&h[c].apply(h,e)})};var c=null;a.fn.navgoco.defaults={caretHtml:"",accordion:!1,openClass:"open",save:!0,cookie:{name:"navgoco",expires:!1,path:"/"},slide:{duration:400,easing:"swing"},onClickBefore:a.noop,onClickAfter:a.noop,onToggleBefore:a.noop,onToggleAfter:a.noop}}(jQuery); \ No newline at end of file diff --git a/docs/js/jquery.shuffle.min.js b/docs/js/jquery.shuffle.min.js deleted file mode 100644 index d103127..0000000 --- a/docs/js/jquery.shuffle.min.js +++ /dev/null @@ -1,1588 +0,0 @@ -/*! - * Shuffle.js by @Vestride - * Categorize, sort, and filter a responsive grid of items. - * Dependencies: jQuery 1.9+, Modernizr 2.6.2+ - * @license MIT license - * @version 3.0.0 - */ - -/* Modernizr 2.6.2 (Custom Build) | MIT & BSD - * Build: http://modernizr.com/download/#-csstransforms-csstransforms3d-csstransitions-cssclasses-prefixed-teststyles-testprop-testallprops-prefixes-domprefixes - */ -window.Modernizr=function(a,b,c){function z(a){j.cssText=a}function A(a,b){return z(m.join(a+";")+(b||""))}function B(a,b){return typeof a===b}function C(a,b){return!!~(""+a).indexOf(b)}function D(a,b){for(var d in a){var e=a[d];if(!C(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function E(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:B(f,"function")?f.bind(d||b):f}return!1}function F(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+o.join(d+" ")+d).split(" ");return B(b,"string")||B(b,"undefined")?D(e,b):(e=(a+" "+p.join(d+" ")+d).split(" "),E(e,b,c))}var d="2.6.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n="Webkit Moz O ms",o=n.split(" "),p=n.toLowerCase().split(" "),q={},r={},s={},t=[],u=t.slice,v,w=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["­",'"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},x={}.hasOwnProperty,y;!B(x,"undefined")&&!B(x.call,"undefined")?y=function(a,b){return x.call(a,b)}:y=function(a,b){return b in a&&B(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=u.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(u.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(u.call(arguments)))};return e}),q.csstransforms=function(){return!!F("transform")},q.csstransforms3d=function(){var a=!!F("perspective");return a&&"webkitPerspective"in g.style&&w("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},q.csstransitions=function(){return F("transition")};for(var G in q)y(q,G)&&(v=G.toLowerCase(),e[v]=q[G](),t.push((e[v]?"":"no-")+v));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)y(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},z(""),i=k=null,e._version=d,e._prefixes=m,e._domPrefixes=p,e._cssomPrefixes=o,e.testProp=function(a){return D([a])},e.testAllProps=F,e.testStyles=w,e.prefixed=function(a,b,c){return b?F(a,b,c):F(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+t.join(" "):""),e}(this,this.document); - -(function (factory) { - if (typeof define === 'function' && define.amd) { - define(['jquery', 'modernizr'], factory); - } else { - window.Shuffle = factory(window.jQuery, window.Modernizr); - } -})(function($, Modernizr, undefined) { - -'use strict'; - - -// Validate Modernizr exists. -// Shuffle requires `csstransitions`, `csstransforms`, `csstransforms3d`, -// and `prefixed` to exist on the Modernizr object. -if (typeof Modernizr !== 'object') { - throw new Error('Shuffle.js requires Modernizr.\n' + - 'http://vestride.github.io/Shuffle/#dependencies'); -} - - -/** - * Returns css prefixed properties like `-webkit-transition` or `box-sizing` - * from `transition` or `boxSizing`, respectively. - * @param {(string|boolean)} prop Property to be prefixed. - * @return {string} The prefixed css property. - */ -function dashify( prop ) { - if (!prop) { - return ''; - } - - // Replace upper case with dash-lowercase, - // then fix ms- prefixes because they're not capitalized. - return prop.replace(/([A-Z])/g, function( str, m1 ) { - return '-' + m1.toLowerCase(); - }).replace(/^ms-/,'-ms-'); -} - -// Constant, prefixed variables. -var TRANSITION = Modernizr.prefixed('transition'); -var TRANSITION_DELAY = Modernizr.prefixed('transitionDelay'); -var TRANSITION_DURATION = Modernizr.prefixed('transitionDuration'); - -// Note(glen): Stock Android 4.1.x browser will fail here because it wrongly -// says it supports non-prefixed transitions. -// https://github.com/Modernizr/Modernizr/issues/897 -var TRANSITIONEND = { - 'WebkitTransition' : 'webkitTransitionEnd', - 'transition' : 'transitionend' -}[ TRANSITION ]; - -var TRANSFORM = Modernizr.prefixed('transform'); -var CSS_TRANSFORM = dashify(TRANSFORM); - -// Constants -var CAN_TRANSITION_TRANSFORMS = Modernizr.csstransforms && Modernizr.csstransitions; -var HAS_TRANSFORMS_3D = Modernizr.csstransforms3d; -var SHUFFLE = 'shuffle'; -var COLUMN_THRESHOLD = 0.3; - -// Configurable. You can change these constants to fit your application. -// The default scale and concealed scale, however, have to be different values. -var ALL_ITEMS = 'all'; -var FILTER_ATTRIBUTE_KEY = 'groups'; -var DEFAULT_SCALE = 1; -var CONCEALED_SCALE = 0.001; - - -// Underscore's throttle function. -function throttle(func, wait, options) { - var context, args, result; - var timeout = null; - var previous = 0; - options = options || {}; - var later = function() { - previous = options.leading === false ? 0 : $.now(); - timeout = null; - result = func.apply(context, args); - context = args = null; - }; - return function() { - var now = $.now(); - if (!previous && options.leading === false) { - previous = now; - } - var remaining = wait - (now - previous); - context = this; - args = arguments; - if (remaining <= 0 || remaining > wait) { - clearTimeout(timeout); - timeout = null; - previous = now; - result = func.apply(context, args); - context = args = null; - } else if (!timeout && options.trailing !== false) { - timeout = setTimeout(later, remaining); - } - return result; - }; -} - -function each(obj, iterator, context) { - for (var i = 0, length = obj.length; i < length; i++) { - if (iterator.call(context, obj[i], i, obj) === {}) { - return; - } - } -} - -function defer(fn, context, wait) { - return setTimeout( $.proxy( fn, context ), wait ); -} - -function arrayMax( array ) { - return Math.max.apply( Math, array ); -} - -function arrayMin( array ) { - return Math.min.apply( Math, array ); -} - - -/** - * Always returns a numeric value, given a value. - * @param {*} value Possibly numeric value. - * @return {number} `value` or zero if `value` isn't numeric. - * @private - */ -function getNumber(value) { - return $.isNumeric(value) ? value : 0; -} - - -/** - * Represents a coordinate pair. - * @param {number} [x=0] X. - * @param {number} [y=0] Y. - */ -var Point = function(x, y) { - this.x = getNumber( x ); - this.y = getNumber( y ); -}; - - -/** - * Whether two points are equal. - * @param {Point} a Point A. - * @param {Point} b Point B. - * @return {boolean} - */ -Point.equals = function(a, b) { - return a.x === b.x && a.y === b.y; -}; - - -// Used for unique instance variables -var id = 0; -var $window = $( window ); - - -/** - * Categorize, sort, and filter a responsive grid of items. - * - * @param {Element} element An element which is the parent container for the grid items. - * @param {Object} [options=Shuffle.options] Options object. - * @constructor - */ -var Shuffle = function( element, options ) { - options = options || {}; - $.extend( this, Shuffle.options, options, Shuffle.settings ); - - this.$el = $(element); - this.element = element; - this.unique = 'shuffle_' + id++; - - this._fire( Shuffle.EventType.LOADING ); - this._init(); - - // Dispatch the done event asynchronously so that people can bind to it after - // Shuffle has been initialized. - defer(function() { - this.initialized = true; - this._fire( Shuffle.EventType.DONE ); - }, this, 16); -}; - - -/** - * Events the container element emits with the .shuffle namespace. - * For example, "done.shuffle". - * @enum {string} - */ -Shuffle.EventType = { - LOADING: 'loading', - DONE: 'done', - LAYOUT: 'layout', - REMOVED: 'removed' -}; - - -/** @enum {string} */ -Shuffle.ClassName = { - BASE: SHUFFLE, - SHUFFLE_ITEM: 'shuffle-item', - FILTERED: 'filtered', - CONCEALED: 'concealed' -}; - - -// Overrideable options -Shuffle.options = { - group: ALL_ITEMS, // Initial filter group. - speed: 250, // Transition/animation speed (milliseconds). - easing: 'ease-out', // CSS easing function to use. - itemSelector: '', // e.g. '.picture-item'. - sizer: null, // Sizer element. Use an element to determine the size of columns and gutters. - gutterWidth: 0, // A static number or function that tells the plugin how wide the gutters between columns are (in pixels). - columnWidth: 0, // A static number or function that returns a number which tells the plugin how wide the columns are (in pixels). - delimeter: null, // If your group is not json, and is comma delimeted, you could set delimeter to ','. - buffer: 0, // Useful for percentage based heights when they might not always be exactly the same (in pixels). - initialSort: null, // Shuffle can be initialized with a sort object. It is the same object given to the sort method. - throttle: throttle, // By default, shuffle will throttle resize events. This can be changed or removed. - throttleTime: 300, // How often shuffle can be called on resize (in milliseconds). - sequentialFadeDelay: 150, // Delay between each item that fades in when adding items. - supported: CAN_TRANSITION_TRANSFORMS // Whether to use transforms or absolute positioning. -}; - - -// Not overrideable -Shuffle.settings = { - useSizer: false, - itemCss : { // default CSS for each item - position: 'absolute', - top: 0, - left: 0, - visibility: 'visible' - }, - revealAppendedDelay: 300, - lastSort: {}, - lastFilter: ALL_ITEMS, - enabled: true, - destroyed: false, - initialized: false, - _animations: [], - styleQueue: [] -}; - - -// Expose for testing. -Shuffle.Point = Point; - - -/** - * Static methods. - */ - -/** - * If the browser has 3d transforms available, build a string with those, - * otherwise use 2d transforms. - * @param {Point} point X and Y positions. - * @param {number} scale Scale amount. - * @return {string} A normalized string which can be used with the transform style. - * @private - */ -Shuffle._getItemTransformString = function(point, scale) { - if ( HAS_TRANSFORMS_3D ) { - return 'translate3d(' + point.x + 'px, ' + point.y + 'px, 0) scale3d(' + scale + ', ' + scale + ', 1)'; - } else { - return 'translate(' + point.x + 'px, ' + point.y + 'px) scale(' + scale + ')'; - } -}; - - -/** - * Retrieve the computed style for an element, parsed as a float. This should - * not be used for width or height values because jQuery mangles them and they - * are not precise enough. - * @param {Element} element Element to get style for. - * @param {string} style Style property. - * @return {number} The parsed computed value or zero if that fails because IE - * will return 'auto' when the element doesn't have margins instead of - * the computed style. - * @private - */ -Shuffle._getNumberStyle = function( element, style ) { - return Shuffle._getFloat( $( element ).css( style ) ); -}; - - -/** - * Parse a string as an integer. - * @param {string} value String integer. - * @return {number} The string as an integer or zero. - * @private - */ -Shuffle._getInt = function(value) { - return getNumber( parseInt( value, 10 ) ); -}; - -/** - * Parse a string as an float. - * @param {string} value String float. - * @return {number} The string as an float or zero. - * @private - */ -Shuffle._getFloat = function(value) { - return getNumber( parseFloat( value ) ); -}; - - -/** - * Returns the outer width of an element, optionally including its margins. - * The `offsetWidth` property must be used because having a scale transform - * on the element affects the bounding box. Sadly, Firefox doesn't return an - * integer value for offsetWidth (yet). - * @param {Element} element The element. - * @param {boolean} [includeMargins] Whether to include margins. Default is false. - * @return {number} The width. - */ -Shuffle._getOuterWidth = function( element, includeMargins ) { - var width = element.offsetWidth; - - // Use jQuery here because it uses getComputedStyle internally and is - // cross-browser. Using the style property of the element will only work - // if there are inline styles. - if ( includeMargins ) { - var marginLeft = Shuffle._getNumberStyle( element, 'marginLeft'); - var marginRight = Shuffle._getNumberStyle( element, 'marginRight'); - width += marginLeft + marginRight; - } - - return width; -}; - - -/** - * Returns the outer height of an element, optionally including its margins. - * @param {Element} element The element. - * @param {boolean} [includeMargins] Whether to include margins. Default is false. - * @return {number} The height. - */ -Shuffle._getOuterHeight = function( element, includeMargins ) { - var height = element.offsetHeight; - - if ( includeMargins ) { - var marginTop = Shuffle._getNumberStyle( element, 'marginTop'); - var marginBottom = Shuffle._getNumberStyle( element, 'marginBottom'); - height += marginTop + marginBottom; - } - - return height; -}; - - -/** - * Change a property or execute a function which will not have a transition - * @param {Element} element DOM element that won't be transitioned - * @param {Function} callback A function which will be called while transition - * is set to 0ms. - * @param {Object} [context] Optional context for the callback function. - * @private - */ -Shuffle._skipTransition = function( element, callback, context ) { - var duration = element.style[ TRANSITION_DURATION ]; - - // Set the duration to zero so it happens immediately - element.style[ TRANSITION_DURATION ] = '0ms'; // ms needed for firefox! - - callback.call( context ); - - // Force reflow - var reflow = element.offsetWidth; - // Avoid jshint warnings: unused variables and expressions. - reflow = null; - - // Put the duration back - element.style[ TRANSITION_DURATION ] = duration; -}; - - -/** - * Instance methods. - */ - -Shuffle.prototype._init = function() { - this.$items = this._getItems(); - - this.sizer = this._getElementOption( this.sizer ); - - if ( this.sizer ) { - this.useSizer = true; - } - - // Add class and invalidate styles - this.$el.addClass( Shuffle.ClassName.BASE ); - - // Set initial css for each item - this._initItems(); - - // Bind resize events - // http://stackoverflow.com/questions/1852751/window-resize-event-firing-in-internet-explorer - $window.on('resize.' + SHUFFLE + '.' + this.unique, this._getResizeFunction()); - - // Get container css all in one request. Causes reflow - var containerCSS = this.$el.css(['position', 'overflow']); - var containerWidth = Shuffle._getOuterWidth( this.element ); - - // Add styles to the container if it doesn't have them. - this._validateStyles( containerCSS ); - - // We already got the container's width above, no need to cause another reflow getting it again... - // Calculate the number of columns there will be - this._setColumns( containerWidth ); - - // Kick off! - this.shuffle( this.group, this.initialSort ); - - // The shuffle items haven't had transitions set on them yet - // so the user doesn't see the first layout. Set them now that the first layout is done. - if ( this.supported ) { - defer(function() { - this._setTransitions(); - this.element.style[ TRANSITION ] = 'height ' + this.speed + 'ms ' + this.easing; - }, this); - } -}; - - -/** - * Returns a throttled and proxied function for the resize handler. - * @return {Function} - * @private - */ -Shuffle.prototype._getResizeFunction = function() { - var resizeFunction = $.proxy( this._onResize, this ); - return this.throttle ? - this.throttle( resizeFunction, this.throttleTime ) : - resizeFunction; -}; - - -/** - * Retrieve an element from an option. - * @param {string|jQuery|Element} option The option to check. - * @return {?Element} The plain element or null. - * @private - */ -Shuffle.prototype._getElementOption = function( option ) { - // If column width is a string, treat is as a selector and search for the - // sizer element within the outermost container - if ( typeof option === 'string' ) { - return this.$el.find( option )[0] || null; - - // Check for an element - } else if ( option && option.nodeType && option.nodeType === 1 ) { - return option; - - // Check for jQuery object - } else if ( option && option.jquery ) { - return option[0]; - } - - return null; -}; - - -/** - * Ensures the shuffle container has the css styles it needs applied to it. - * @param {Object} styles Key value pairs for position and overflow. - * @private - */ -Shuffle.prototype._validateStyles = function(styles) { - // Position cannot be static. - if ( styles.position === 'static' ) { - this.element.style.position = 'relative'; - } - - // Overflow has to be hidden - if ( styles.overflow !== 'hidden' ) { - this.element.style.overflow = 'hidden'; - } -}; - - -/** - * Filter the elements by a category. - * @param {string} [category] Category to filter by. If it's given, the last - * category will be used to filter the items. - * @param {ArrayLike} [$collection] Optionally filter a collection. Defaults to - * all the items. - * @return {jQuery} Filtered items. - * @private - */ -Shuffle.prototype._filter = function( category, $collection ) { - category = category || this.lastFilter; - $collection = $collection || this.$items; - - var set = this._getFilteredSets( category, $collection ); - - // Individually add/remove concealed/filtered classes - this._toggleFilterClasses( set.filtered, set.concealed ); - - // Save the last filter in case elements are appended. - this.lastFilter = category; - - // This is saved mainly because providing a filter function (like searching) - // will overwrite the `lastFilter` property every time its called. - if ( typeof category === 'string' ) { - this.group = category; - } - - return set.filtered; -}; - - -/** - * Returns an object containing the filtered and concealed elements. - * @param {string|Function} category Category or function to filter by. - * @param {ArrayLike.} $items A collection of items to filter. - * @return {!{filtered: jQuery, concealed: jQuery}} - * @private - */ -Shuffle.prototype._getFilteredSets = function( category, $items ) { - var $filtered = $(); - var $concealed = $(); - - // category === 'all', add filtered class to everything - if ( category === ALL_ITEMS ) { - $filtered = $items; - - // Loop through each item and use provided function to determine - // whether to hide it or not. - } else { - each($items, function( el ) { - var $item = $(el); - if ( this._doesPassFilter( category, $item ) ) { - $filtered = $filtered.add( $item ); - } else { - $concealed = $concealed.add( $item ); - } - }, this); - } - - return { - filtered: $filtered, - concealed: $concealed - }; -}; - - -/** - * Test an item to see if it passes a category. - * @param {string|Function} category Category or function to filter by. - * @param {jQuery} $item A single item, wrapped with jQuery. - * @return {boolean} Whether it passes the category/filter. - * @private - */ -Shuffle.prototype._doesPassFilter = function( category, $item ) { - if ( $.isFunction( category ) ) { - return category.call( $item[0], $item, this ); - - // Check each element's data-groups attribute against the given category. - } else { - var groups = $item.data( FILTER_ATTRIBUTE_KEY ); - var keys = this.delimeter && !$.isArray( groups ) ? - groups.split( this.delimeter ) : - groups; - return $.inArray(category, keys) > -1; - } -}; - - -/** - * Toggles the filtered and concealed class names. - * @param {jQuery} $filtered Filtered set. - * @param {jQuery} $concealed Concealed set. - * @private - */ -Shuffle.prototype._toggleFilterClasses = function( $filtered, $concealed ) { - $filtered - .removeClass( Shuffle.ClassName.CONCEALED ) - .addClass( Shuffle.ClassName.FILTERED ); - $concealed - .removeClass( Shuffle.ClassName.FILTERED ) - .addClass( Shuffle.ClassName.CONCEALED ); -}; - - -/** - * Set the initial css for each item - * @param {jQuery} [$items] Optionally specifiy at set to initialize - */ -Shuffle.prototype._initItems = function( $items ) { - $items = $items || this.$items; - $items.addClass([ - Shuffle.ClassName.SHUFFLE_ITEM, - Shuffle.ClassName.FILTERED - ].join(' ')); - $items.css( this.itemCss ).data('point', new Point()).data('scale', DEFAULT_SCALE); -}; - - -/** - * Updates the filtered item count. - * @private - */ -Shuffle.prototype._updateItemCount = function() { - this.visibleItems = this._getFilteredItems().length; -}; - - -/** - * Sets css transform transition on a an element. - * @param {Element} element Element to set transition on. - * @private - */ -Shuffle.prototype._setTransition = function( element ) { - element.style[ TRANSITION ] = CSS_TRANSFORM + ' ' + this.speed + 'ms ' + - this.easing + ', opacity ' + this.speed + 'ms ' + this.easing; -}; - - -/** - * Sets css transform transition on a group of elements. - * @param {ArrayLike.} $items Elements to set transitions on. - * @private - */ -Shuffle.prototype._setTransitions = function( $items ) { - $items = $items || this.$items; - each($items, function( el ) { - this._setTransition( el ); - }, this); -}; - - -/** - * Sets a transition delay on a collection of elements, making each delay - * greater than the last. - * @param {ArrayLike.} $collection Array to iterate over. - */ -Shuffle.prototype._setSequentialDelay = function( $collection ) { - if ( !this.supported ) { - return; - } - - // $collection can be an array of dom elements or jquery object - each($collection, function( el, i ) { - // This works because the transition-property: transform, opacity; - el.style[ TRANSITION_DELAY ] = '0ms,' + ((i + 1) * this.sequentialFadeDelay) + 'ms'; - }, this); -}; - - -Shuffle.prototype._getItems = function() { - return this.$el.children( this.itemSelector ); -}; - - -Shuffle.prototype._getFilteredItems = function() { - return this.$items.filter('.' + Shuffle.ClassName.FILTERED); -}; - - -Shuffle.prototype._getConcealedItems = function() { - return this.$items.filter('.' + Shuffle.ClassName.CONCEALED); -}; - - -/** - * Returns the column size, based on column width and sizer options. - * @param {number} containerWidth Size of the parent container. - * @param {number} gutterSize Size of the gutters. - * @return {number} - * @private - */ -Shuffle.prototype._getColumnSize = function( containerWidth, gutterSize ) { - var size; - - // If the columnWidth property is a function, then the grid is fluid - if ( $.isFunction( this.columnWidth ) ) { - size = this.columnWidth(containerWidth); - - // columnWidth option isn't a function, are they using a sizing element? - } else if ( this.useSizer ) { - size = Shuffle._getOuterWidth(this.sizer); - - // if not, how about the explicitly set option? - } else if ( this.columnWidth ) { - size = this.columnWidth; - - // or use the size of the first item - } else if ( this.$items.length > 0 ) { - size = Shuffle._getOuterWidth(this.$items[0], true); - - // if there's no items, use size of container - } else { - size = containerWidth; - } - - // Don't let them set a column width of zero. - if ( size === 0 ) { - size = containerWidth; - } - - return size + gutterSize; -}; - - -/** - * Returns the gutter size, based on gutter width and sizer options. - * @param {number} containerWidth Size of the parent container. - * @return {number} - * @private - */ -Shuffle.prototype._getGutterSize = function( containerWidth ) { - var size; - if ( $.isFunction( this.gutterWidth ) ) { - size = this.gutterWidth(containerWidth); - } else if ( this.useSizer ) { - size = Shuffle._getNumberStyle(this.sizer, 'marginLeft'); - } else { - size = this.gutterWidth; - } - - return size; -}; - - -/** - * Calculate the number of columns to be used. Gets css if using sizer element. - * @param {number} [theContainerWidth] Optionally specify a container width if it's already available. - */ -Shuffle.prototype._setColumns = function( theContainerWidth ) { - var containerWidth = theContainerWidth || Shuffle._getOuterWidth( this.element ); - var gutter = this._getGutterSize( containerWidth ); - var columnWidth = this._getColumnSize( containerWidth, gutter ); - var calculatedColumns = (containerWidth + gutter) / columnWidth; - - // Widths given from getComputedStyle are not precise enough... - if ( Math.abs(Math.round(calculatedColumns) - calculatedColumns) < COLUMN_THRESHOLD ) { - // e.g. calculatedColumns = 11.998876 - calculatedColumns = Math.round( calculatedColumns ); - } - - this.cols = Math.max( Math.floor(calculatedColumns), 1 ); - this.containerWidth = containerWidth; - this.colWidth = columnWidth; -}; - -/** - * Adjust the height of the grid - */ -Shuffle.prototype._setContainerSize = function() { - this.$el.css( 'height', this._getContainerSize() ); -}; - - -/** - * Based on the column heights, it returns the biggest one. - * @return {number} - * @private - */ -Shuffle.prototype._getContainerSize = function() { - return arrayMax( this.positions ); -}; - - -/** - * Fire events with .shuffle namespace - */ -Shuffle.prototype._fire = function( name, args ) { - this.$el.trigger( name + '.' + SHUFFLE, args && args.length ? args : [ this ] ); -}; - - -/** - * Zeros out the y columns array, which is used to determine item placement. - * @private - */ -Shuffle.prototype._resetCols = function() { - var i = this.cols; - this.positions = []; - while (i--) { - this.positions.push( 0 ); - } -}; - - -/** - * Loops through each item that should be shown and calculates the x, y position. - * @param {Array.} items Array of items that will be shown/layed out in order in their array. - * Because jQuery collection are always ordered in DOM order, we can't pass a jq collection. - * @param {boolean} [isOnlyPosition=false] If true this will position the items with zero opacity. - */ -Shuffle.prototype._layout = function( items, isOnlyPosition ) { - each(items, function( item ) { - this._layoutItem( item, !!isOnlyPosition ); - }, this); - - // `_layout` always happens after `_shrink`, so it's safe to process the style - // queue here with styles from the shrink method. - this._processStyleQueue(); - - // Adjust the height of the container. - this._setContainerSize(); -}; - - -/** - * Calculates the position of the item and pushes it onto the style queue. - * @param {Element} item Element which is being positioned. - * @param {boolean} isOnlyPosition Whether to position the item, but with zero - * opacity so that it can fade in later. - * @private - */ -Shuffle.prototype._layoutItem = function( item, isOnlyPosition ) { - var $item = $(item); - var itemData = $item.data(); - var currPos = itemData.point; - var currScale = itemData.scale; - var itemSize = { - width: Shuffle._getOuterWidth( item, true ), - height: Shuffle._getOuterHeight( item, true ) - }; - var pos = this._getItemPosition( itemSize ); - - // If the item will not change its position, do not add it to the render - // queue. Transitions don't fire when setting a property to the same value. - if ( Point.equals(currPos, pos) && currScale === DEFAULT_SCALE ) { - return; - } - - // Save data for shrink - itemData.point = pos; - itemData.scale = DEFAULT_SCALE; - - this.styleQueue.push({ - $item: $item, - point: pos, - scale: DEFAULT_SCALE, - opacity: isOnlyPosition ? 0 : 1, - skipTransition: isOnlyPosition, - callfront: function() { - if ( !isOnlyPosition ) { - $item.css( 'visibility', 'visible' ); - } - }, - callback: function() { - if ( isOnlyPosition ) { - $item.css( 'visibility', 'hidden' ); - } - } - }); -}; - - -/** - * Determine the location of the next item, based on its size. - * @param {{width: number, height: number}} itemSize Object with width and height. - * @return {Point} - * @private - */ -Shuffle.prototype._getItemPosition = function( itemSize ) { - var columnSpan = this._getColumnSpan( itemSize.width, this.colWidth, this.cols ); - - var setY = this._getColumnSet( columnSpan, this.cols ); - - // Finds the index of the smallest number in the set. - var shortColumnIndex = this._getShortColumn( setY, this.buffer ); - - // Position the item - var point = new Point( - Math.round( this.colWidth * shortColumnIndex ), - Math.round( setY[shortColumnIndex] )); - - // Update the columns array with the new values for each column. - // e.g. before the update the columns could be [250, 0, 0, 0] for an item - // which spans 2 columns. After it would be [250, itemHeight, itemHeight, 0]. - var setHeight = setY[shortColumnIndex] + itemSize.height; - var setSpan = this.cols + 1 - setY.length; - for ( var i = 0; i < setSpan; i++ ) { - this.positions[ shortColumnIndex + i ] = setHeight; - } - - return point; -}; - - -/** - * Determine the number of columns an items spans. - * @param {number} itemWidth Width of the item. - * @param {number} columnWidth Width of the column (includes gutter). - * @param {number} columns Total number of columns - * @return {number} - * @private - */ -Shuffle.prototype._getColumnSpan = function( itemWidth, columnWidth, columns ) { - var columnSpan = itemWidth / columnWidth; - - // If the difference between the rounded column span number and the - // calculated column span number is really small, round the number to - // make it fit. - if ( Math.abs(Math.round( columnSpan ) - columnSpan ) < COLUMN_THRESHOLD ) { - // e.g. columnSpan = 4.0089945390298745 - columnSpan = Math.round( columnSpan ); - } - - // Ensure the column span is not more than the amount of columns in the whole layout. - return Math.min( Math.ceil( columnSpan ), columns ); -}; - - -/** - * Retrieves the column set to use for placement. - * @param {number} columnSpan The number of columns this current item spans. - * @param {number} columns The total columns in the grid. - * @return {Array.} An array of numbers represeting the column set. - * @private - */ -Shuffle.prototype._getColumnSet = function( columnSpan, columns ) { - // The item spans only one column. - if ( columnSpan === 1 ) { - return this.positions; - - // The item spans more than one column, figure out how many different - // places it could fit horizontally. - // The group count is the number of places within the positions this block - // could fit, ignoring the current positions of items. - // Imagine a 2 column brick as the second item in a 4 column grid with - // 10px height each. Find the places it would fit: - // [10, 0, 0, 0] - // | | | - // * * * - // - // Then take the places which fit and get the bigger of the two: - // max([10, 0]), max([0, 0]), max([0, 0]) = [10, 0, 0] - // - // Next, find the first smallest number (the short column). - // [10, 0, 0] - // | - // * - // - // And that's where it should be placed! - } else { - var groupCount = columns + 1 - columnSpan; - var groupY = []; - - // For how many possible positions for this item there are. - for ( var i = 0; i < groupCount; i++ ) { - // Find the bigger value for each place it could fit. - groupY[i] = arrayMax( this.positions.slice( i, i + columnSpan ) ); - } - - return groupY; - } -}; - - -/** - * Find index of short column, the first from the left where this item will go. - * - * @param {Array.} positions The array to search for the smallest number. - * @param {number} buffer Optional buffer which is very useful when the height - * is a percentage of the width. - * @return {number} Index of the short column. - * @private - */ -Shuffle.prototype._getShortColumn = function( positions, buffer ) { - var minPosition = arrayMin( positions ); - for (var i = 0, len = positions.length; i < len; i++) { - if ( positions[i] >= minPosition - buffer && positions[i] <= minPosition + buffer ) { - return i; - } - } - return 0; -}; - - -/** - * Hides the elements that don't match our filter. - * @param {jQuery} $collection jQuery collection to shrink. - * @private - */ -Shuffle.prototype._shrink = function( $collection ) { - var $concealed = $collection || this._getConcealedItems(); - - each($concealed, function( item ) { - var $item = $(item); - var itemData = $item.data(); - - // Continuing would add a transitionend event listener to the element, but - // that listener would not execute because the transform and opacity would - // stay the same. - if ( itemData.scale === CONCEALED_SCALE ) { - return; - } - - itemData.scale = CONCEALED_SCALE; - - this.styleQueue.push({ - $item: $item, - point: itemData.point, - scale : CONCEALED_SCALE, - opacity: 0, - callback: function() { - $item.css( 'visibility', 'hidden' ); - } - }); - }, this); -}; - - -/** - * Resize handler. - * @private - */ -Shuffle.prototype._onResize = function() { - // If shuffle is disabled, destroyed, don't do anything - if ( !this.enabled || this.destroyed || this.isTransitioning ) { - return; - } - - // Will need to check height in the future if it's layed out horizontaly - var containerWidth = Shuffle._getOuterWidth( this.element ); - - // containerWidth hasn't changed, don't do anything - if ( containerWidth === this.containerWidth ) { - return; - } - - this.update(); -}; - - -/** - * Returns styles for either jQuery animate or transition. - * @param {Object} opts Transition options. - * @return {!Object} Transforms for transitions, left/top for animate. - * @private - */ -Shuffle.prototype._getStylesForTransition = function( opts ) { - var styles = { - opacity: opts.opacity - }; - - if ( this.supported ) { - styles[ TRANSFORM ] = Shuffle._getItemTransformString( opts.point, opts.scale ); - } else { - styles.left = opts.point.x; - styles.top = opts.point.y; - } - - return styles; -}; - - -/** - * Transitions an item in the grid - * - * @param {Object} opts options. - * @param {jQuery} opts.$item jQuery object representing the current item. - * @param {Point} opts.point A point object with the x and y coordinates. - * @param {number} opts.scale Amount to scale the item. - * @param {number} opts.opacity Opacity of the item. - * @param {Function} opts.callback Complete function for the animation. - * @param {Function} opts.callfront Function to call before transitioning. - * @private - */ -Shuffle.prototype._transition = function( opts ) { - var styles = this._getStylesForTransition( opts ); - this._startItemAnimation( opts.$item, styles, opts.callfront || $.noop, opts.callback || $.noop ); -}; - - -Shuffle.prototype._startItemAnimation = function( $item, styles, callfront, callback ) { - // Transition end handler removes its listener. - function handleTransitionEnd( evt ) { - // Make sure this event handler has not bubbled up from a child. - if ( evt.target === evt.currentTarget ) { - $( evt.target ).off( TRANSITIONEND, handleTransitionEnd ); - callback(); - } - } - - callfront(); - - // Transitions are not set until shuffle has loaded to avoid the initial transition. - if ( !this.initialized ) { - $item.css( styles ); - callback(); - return; - } - - // Use CSS Transforms if we have them - if ( this.supported ) { - $item.css( styles ); - $item.on( TRANSITIONEND, handleTransitionEnd ); - - // Use jQuery to animate left/top - } else { - // Save the deferred object which jQuery returns. - var anim = $item.stop( true ).animate( styles, this.speed, 'swing', callback ); - // Push the animation to the list of pending animations. - this._animations.push( anim.promise() ); - } -}; - - -/** - * Execute the styles gathered in the style queue. This applies styles to elements, - * triggering transitions. - * @param {boolean} noLayout Whether to trigger a layout event. - * @private - */ -Shuffle.prototype._processStyleQueue = function( noLayout ) { - var $transitions = $(); - - // Iterate over the queue and keep track of ones that use transitions. - each(this.styleQueue, function( transitionObj ) { - if ( transitionObj.skipTransition ) { - this._styleImmediately( transitionObj ); - } else { - $transitions = $transitions.add( transitionObj.$item ); - this._transition( transitionObj ); - } - }, this); - - - if ( $transitions.length > 0 && this.initialized ) { - // Set flag that shuffle is currently in motion. - this.isTransitioning = true; - - if ( this.supported ) { - this._whenCollectionDone( $transitions, TRANSITIONEND, this._movementFinished ); - - // The _transition function appends a promise to the animations array. - // When they're all complete, do things. - } else { - this._whenAnimationsDone( this._movementFinished ); - } - - // A call to layout happened, but none of the newly filtered items will - // change position. Asynchronously fire the callback here. - } else if ( !noLayout ) { - defer( this._layoutEnd, this ); - } - - // Remove everything in the style queue - this.styleQueue.length = 0; -}; - - -/** - * Apply styles without a transition. - * @param {Object} opts Transitions options object. - * @private - */ -Shuffle.prototype._styleImmediately = function( opts ) { - Shuffle._skipTransition(opts.$item[0], function() { - opts.$item.css( this._getStylesForTransition( opts ) ); - }, this); -}; - -Shuffle.prototype._movementFinished = function() { - this.isTransitioning = false; - this._layoutEnd(); -}; - -Shuffle.prototype._layoutEnd = function() { - this._fire( Shuffle.EventType.LAYOUT ); -}; - -Shuffle.prototype._addItems = function( $newItems, addToEnd, isSequential ) { - // Add classes and set initial positions. - this._initItems( $newItems ); - - // Add transition to each item. - this._setTransitions( $newItems ); - - // Update the list of - this.$items = this._getItems(); - - // Shrink all items (without transitions). - this._shrink( $newItems ); - each(this.styleQueue, function( transitionObj ) { - transitionObj.skipTransition = true; - }); - - // Apply shrink positions, but do not cause a layout event. - this._processStyleQueue( true ); - - if ( addToEnd ) { - this._addItemsToEnd( $newItems, isSequential ); - } else { - this.shuffle( this.lastFilter ); - } -}; - - -Shuffle.prototype._addItemsToEnd = function( $newItems, isSequential ) { - // Get ones that passed the current filter - var $passed = this._filter( null, $newItems ); - var passed = $passed.get(); - - // How many filtered elements? - this._updateItemCount(); - - this._layout( passed, true ); - - if ( isSequential && this.supported ) { - this._setSequentialDelay( passed ); - } - - this._revealAppended( passed ); -}; - - -/** - * Triggers appended elements to fade in. - * @param {ArrayLike.} $newFilteredItems Collection of elements. - * @private - */ -Shuffle.prototype._revealAppended = function( newFilteredItems ) { - defer(function() { - each(newFilteredItems, function( el ) { - var $item = $( el ); - this._transition({ - $item: $item, - opacity: 1, - point: $item.data('point'), - scale: DEFAULT_SCALE - }); - }, this); - - this._whenCollectionDone($(newFilteredItems), TRANSITIONEND, function() { - $(newFilteredItems).css( TRANSITION_DELAY, '0ms' ); - this._movementFinished(); - }); - }, this, this.revealAppendedDelay); -}; - - -/** - * Execute a function when an event has been triggered for every item in a collection. - * @param {jQuery} $collection Collection of elements. - * @param {string} eventName Event to listen for. - * @param {Function} callback Callback to execute when they're done. - * @private - */ -Shuffle.prototype._whenCollectionDone = function( $collection, eventName, callback ) { - var done = 0; - var items = $collection.length; - var self = this; - - function handleEventName( evt ) { - if ( evt.target === evt.currentTarget ) { - $( evt.target ).off( eventName, handleEventName ); - done++; - - // Execute callback if all items have emitted the correct event. - if ( done === items ) { - callback.call( self ); - } - } - } - - // Bind the event to all items. - $collection.on( eventName, handleEventName ); -}; - - -/** - * Execute a callback after jQuery `animate` for a collection has finished. - * @param {Function} callback Callback to execute when they're done. - * @private - */ -Shuffle.prototype._whenAnimationsDone = function( callback ) { - $.when.apply( null, this._animations ).always( $.proxy( function() { - this._animations.length = 0; - callback.call( this ); - }, this )); -}; - - -/** - * Public Methods - */ - -/** - * The magic. This is what makes the plugin 'shuffle' - * @param {string|Function} [category] Category to filter by. Can be a function - * @param {Object} [sortObj] A sort object which can sort the filtered set - */ -Shuffle.prototype.shuffle = function( category, sortObj ) { - if ( !this.enabled || this.isTransitioning ) { - return; - } - - if ( !category ) { - category = ALL_ITEMS; - } - - this._filter( category ); - - // How many filtered elements? - this._updateItemCount(); - - // Shrink each concealed item - this._shrink(); - - // Update transforms on .filtered elements so they will animate to their new positions - this.sort( sortObj ); -}; - - -/** - * Gets the .filtered elements, sorts them, and passes them to layout. - * @param {Object} opts the options object for the sorted plugin - */ -Shuffle.prototype.sort = function( opts ) { - if ( this.enabled && !this.isTransitioning ) { - this._resetCols(); - - var sortOptions = opts || this.lastSort; - var items = this._getFilteredItems().sorted( sortOptions ); - - this._layout( items ); - - this.lastSort = sortOptions; - } -}; - - -/** - * Reposition everything. - * @param {boolean} isOnlyLayout If true, column and gutter widths won't be - * recalculated. - */ -Shuffle.prototype.update = function( isOnlyLayout ) { - if ( this.enabled && !this.isTransitioning ) { - - if ( !isOnlyLayout ) { - // Get updated colCount - this._setColumns(); - } - - // Layout items - this.sort(); - } -}; - - -/** - * Use this instead of `update()` if you don't need the columns and gutters updated - * Maybe an image inside `shuffle` loaded (and now has a height), which means calculations - * could be off. - */ -Shuffle.prototype.layout = function() { - this.update( true ); -}; - - -/** - * New items have been appended to shuffle. Fade them in sequentially - * @param {jQuery} $newItems jQuery collection of new items - * @param {boolean} [addToEnd=false] If true, new items will be added to the end / bottom - * of the items. If not true, items will be mixed in with the current sort order. - * @param {boolean} [isSequential=true] If false, new items won't sequentially fade in - */ -Shuffle.prototype.appended = function( $newItems, addToEnd, isSequential ) { - this._addItems( $newItems, addToEnd === true, isSequential !== false ); -}; - - -/** - * Disables shuffle from updating dimensions and layout on resize - */ -Shuffle.prototype.disable = function() { - this.enabled = false; -}; - - -/** - * Enables shuffle again - * @param {boolean} [isUpdateLayout=true] if undefined, shuffle will update columns and gutters - */ -Shuffle.prototype.enable = function( isUpdateLayout ) { - this.enabled = true; - if ( isUpdateLayout !== false ) { - this.update(); - } -}; - - -/** - * Remove 1 or more shuffle items - * @param {jQuery} $collection A jQuery object containing one or more element in shuffle - * @return {Shuffle} The shuffle object - */ -Shuffle.prototype.remove = function( $collection ) { - - // If this isn't a jquery object, exit - if ( !$collection.length || !$collection.jquery ) { - return; - } - - function handleRemoved() { - // Remove the collection in the callback - $collection.remove(); - - // Update things now that elements have been removed. - this.$items = this._getItems(); - this._updateItemCount(); - - this._fire( Shuffle.EventType.REMOVED, [ $collection, this ] ); - - // Let it get garbage collected - $collection = null; - } - - // Hide collection first. - this._toggleFilterClasses( $(), $collection ); - this._shrink( $collection ); - - this.sort(); - - this.$el.one( Shuffle.EventType.LAYOUT + '.' + SHUFFLE, $.proxy( handleRemoved, this ) ); -}; - - -/** - * Destroys shuffle, removes events, styles, and classes - */ -Shuffle.prototype.destroy = function() { - // If there is more than one shuffle instance on the page, - // removing the resize handler from the window would remove them - // all. This is why a unique value is needed. - $window.off('.' + this.unique); - - // Reset container styles - this.$el - .removeClass( SHUFFLE ) - .removeAttr('style') - .removeData( SHUFFLE ); - - // Reset individual item styles - this.$items - .removeAttr('style') - .removeData('point') - .removeData('scale') - .removeClass([ - Shuffle.ClassName.CONCEALED, - Shuffle.ClassName.FILTERED, - Shuffle.ClassName.SHUFFLE_ITEM - ].join(' ')); - - // Null DOM references - this.$items = null; - this.$el = null; - this.sizer = null; - this.element = null; - - // Set a flag so if a debounced resize has been triggered, - // it can first check if it is actually destroyed and not doing anything - this.destroyed = true; -}; - - -// Plugin definition -$.fn.shuffle = function( opts ) { - var args = Array.prototype.slice.call( arguments, 1 ); - return this.each(function() { - var $this = $( this ); - var shuffle = $this.data( SHUFFLE ); - - // If we don't have a stored shuffle, make a new one and save it - if ( !shuffle ) { - shuffle = new Shuffle( this, opts ); - $this.data( SHUFFLE, shuffle ); - } else if ( typeof opts === 'string' && shuffle[ opts ] ) { - shuffle[ opts ].apply( shuffle, args ); - } - }); -}; - - -// http://stackoverflow.com/a/962890/373422 -function randomize( array ) { - var tmp, current; - var top = array.length; - - if ( !top ) { - return array; - } - - while ( --top ) { - current = Math.floor( Math.random() * (top + 1) ); - tmp = array[ current ]; - array[ current ] = array[ top ]; - array[ top ] = tmp; - } - - return array; -} - - -// You can return `undefined` from the `by` function to revert to DOM order -// This plugin does NOT return a jQuery object. It returns a plain array because -// jQuery sorts everything in DOM order. -$.fn.sorted = function(options) { - var opts = $.extend({}, $.fn.sorted.defaults, options); - var arr = this.get(); - var revert = false; - - if ( !arr.length ) { - return []; - } - - if ( opts.randomize ) { - return randomize( arr ); - } - - // Sort the elements by the opts.by function. - // If we don't have opts.by, default to DOM order - if ( $.isFunction( opts.by ) ) { - arr.sort(function(a, b) { - - // Exit early if we already know we want to revert - if ( revert ) { - return 0; - } - - var valA = opts.by($(a)); - var valB = opts.by($(b)); - - // If both values are undefined, use the DOM order - if ( valA === undefined && valB === undefined ) { - revert = true; - return 0; - } - - if ( valA < valB || valA === 'sortFirst' || valB === 'sortLast' ) { - return -1; - } - - if ( valA > valB || valA === 'sortLast' || valB === 'sortFirst' ) { - return 1; - } - - return 0; - }); - } - - // Revert to the original array if necessary - if ( revert ) { - return this.get(); - } - - if ( opts.reverse ) { - arr.reverse(); - } - - return arr; -}; - - -$.fn.sorted.defaults = { - reverse: false, // Use array.reverse() to reverse the results - by: null, // Sorting function - randomize: false // If true, this will skip the sorting and return a randomized order in the array -}; - -return Shuffle; - -}); \ No newline at end of file diff --git a/docs/js/toc.js b/docs/js/toc.js deleted file mode 100644 index b5244bb..0000000 --- a/docs/js/toc.js +++ /dev/null @@ -1,90 +0,0 @@ -// https://github.com/ghiculescu/jekyll-table-of-contents -// this library modified by fastai to: -// - update the location.href with the correct anchor when a toc item is clicked on -(function($){ - $.fn.toc = function(options) { - var defaults = { - noBackToTopLinks: false, - title: '', - minimumHeaders: 3, - headers: 'h1, h2, h3, h4', - listType: 'ol', // values: [ol|ul] - showEffect: 'show', // values: [show|slideDown|fadeIn|none] - showSpeed: 'slow' // set to 0 to deactivate effect - }, - settings = $.extend(defaults, options); - - var headers = $(settings.headers).filter(function() { - // get all headers with an ID - var previousSiblingName = $(this).prev().attr( "name" ); - if (!this.id && previousSiblingName) { - this.id = $(this).attr( "id", previousSiblingName.replace(/\./g, "-") ); - } - return this.id; - }), output = $(this); - if (!headers.length || headers.length < settings.minimumHeaders || !output.length) { - return; - } - - if (0 === settings.showSpeed) { - settings.showEffect = 'none'; - } - - var render = { - show: function() { output.hide().html(html).show(settings.showSpeed); }, - slideDown: function() { output.hide().html(html).slideDown(settings.showSpeed); }, - fadeIn: function() { output.hide().html(html).fadeIn(settings.showSpeed); }, - none: function() { output.html(html); } - }; - - var get_level = function(ele) { return parseInt(ele.nodeName.replace("H", ""), 10); } - var highest_level = headers.map(function(_, ele) { return get_level(ele); }).get().sort()[0]; - //var return_to_top = ''; - // other nice icons that can be used instead: glyphicon-upload glyphicon-hand-up glyphicon-chevron-up glyphicon-menu-up glyphicon-triangle-top - var level = get_level(headers[0]), - this_level, - html = settings.title + " <"+settings.listType+">"; - headers.on('click', function() { - if (!settings.noBackToTopLinks) { - var pos = $(window).scrollTop(); - window.location.hash = this.id; - $(window).scrollTop(pos); - } - }) - .addClass('clickable-header') - .each(function(_, header) { - base_url = window.location.href; - base_url = base_url.replace(/#.*$/, ""); - this_level = get_level(header); - //if (!settings.noBackToTopLinks && this_level > 1) { - // $(header).addClass('top-level-header').before(return_to_top); - //} - txt = header.textContent.split('¶')[0].split(/\[(test|source)\]/)[0]; - if (!txt) {return;} - if (this_level === level) // same level as before; same indenting - html += "
  • " + txt + ""; - else if (this_level <= level){ // higher level than before; end parent ol - for(i = this_level; i < level; i++) { - html += "
  • " - } - html += "
  • " + txt + ""; - } - else if (this_level > level) { // lower level than before; expand the previous to contain a ol - for(i = this_level; i > level; i--) { - html += "<"+settings.listType+">"+((i-level == 2) ? "
  • " : "
  • ") - } - html += "" + txt + ""; - } - level = this_level; // update for the next one - }); - html += ""; - if (!settings.noBackToTopLinks) { - $(document).on('click', '.back-to-top', function() { - $(window).scrollTop(0); - window.location.hash = ''; - }); - } - - render[settings.showEffect](); - }; -})(jQuery); diff --git a/docs/licenses/LICENSE b/docs/licenses/LICENSE deleted file mode 100644 index 21e88dc..0000000 --- a/docs/licenses/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -/* This license pertains to the docs template, except for the Navgoco jQuery component. */ - -The MIT License (MIT) - -Original theme: Copyright (c) 2016 Tom Johnson -Modifications: Copyright (c) 2017 onwards fast.ai, Inc - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/docs/licenses/LICENSE-BSD-NAVGOCO.txt b/docs/licenses/LICENSE-BSD-NAVGOCO.txt deleted file mode 100644 index 7fdefc3..0000000 --- a/docs/licenses/LICENSE-BSD-NAVGOCO.txt +++ /dev/null @@ -1,27 +0,0 @@ -/* This license pertains to the Navgoco jQuery component used for the sidebar. */ - -Copyright (c) 2013, Christodoulos Tsoulloftas, http://www.komposta.net -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of the nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/docs/log.png b/docs/log.png deleted file mode 100644 index c3453e7cfaf1fbcecff656a927d604c829af2ea3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170761 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%0Ds_Q(}qv)+(slFqQb0MYR8Mw-i9E+r^-t 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 B-QEBI diff --git a/docs/logo.jpg b/docs/logo.jpg deleted file mode 100644 index 0ef9845d11007916a8adf06a16e1c93261bfc169..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42630 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 - - - - diff --git a/docs/loopstack.html b/docs/loopstack.html deleted file mode 100644 index 2012412..0000000 --- a/docs/loopstack.html +++ /dev/null @@ -1,1519 +0,0 @@ ---- - -title: 15 LoopStack - - -keywords: fastai -sidebar: home_sidebar - -summary: "Stack loops in layers" -description: "Stack loops in layers" -nb_path: "nbs/15_loopstack.ipynb" ---- - - -
    - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    To run through iterations quickly, we use the california housing data

    - -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    from sklearn.datasets.california_housing import fetch_california_housing
    -x,y = fetch_california_housing(return_X_y = True)
    -
    -x.shape, y.shape
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    ((20640, 8), (20640,))
    -
    - -
    - -
    -
    - -
    - {% endraw %} - -
    -
    -

    Normalized Data

    - -
    -
    -
    -
    -
    -

    Preview x input

    - -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    def norm(m,s): return lambda x: (x-m)/s
    -def denorm(m,s): return lambda x: (x*s)+m
    -
    -x_normed = norm(x.mean(0),x.std(0))(x)
    -y_normed = norm(y.mean(),y.std())(y)
    -
    -x_normed = np.clip(x_normed,-2,2)
    -y_normed = np.clip(y_normed,-2,2)
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    x_normed.mean(0).astype(np.float16),x_normed.std(0),\
    -y_normed.mean().astype(np.float16),y_normed.std()
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    (array([-0.04333 ,  0.000478, -0.0397  , -0.04486 , -0.0554  , -0.01229 ,
    -        -0.007812,  0.001071], dtype=float16),
    - array([0.85610596, 0.99901853, 0.53787672, 0.32598025, 0.73420682,
    -        0.09438235, 0.98221114, 0.99421595]),
    - -0.0302,
    - 0.928904447452199)
    -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    from matplotlib import pyplot as plt
    -%matplotlib inline
    -plt.imshow(x_normed[np.random.choice(range(1000),10)])
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    <matplotlib.image.AxesImage at 0x1a16a7fa50>
    -
    - -
    - -
    - - - -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    x_normed
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    array([[ 2.        ,  0.98214266,  0.62855945, ..., -0.04959654,
    -         1.05254828, -1.32783522],
    -       [ 2.        , -0.60701891,  0.32704136, ..., -0.09251223,
    -         1.04318455, -1.32284391],
    -       [ 1.7826994 ,  1.85618152,  1.15562047, ..., -0.02584253,
    -         1.03850269, -1.33282653],
    -       ...,
    -       [-1.14259331, -0.92485123, -0.09031802, ..., -0.0717345 ,
    -         1.77823747, -0.8237132 ],
    -       [-1.05458292, -0.84539315, -0.04021111, ..., -0.09122515,
    -         1.77823747, -0.87362627],
    -       [-0.78012947, -1.00430931, -0.07044252, ..., -0.04368215,
    -         1.75014627, -0.83369581]])
    -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    create_event[source]

    create_event(event_name)

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    events[source]

    events(*enames)

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    class LoopStack[source]

    LoopStack(iterable=[], name=None) :: Loop

    -
    -

    Basic loop class

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    TRAIN_EVENTS = ["DATA_PROCESS","FORWARD","LOSS_CALC",
    -                "BACKWARD","OPT_STEP","METRICS"]
    -EVAL_EVENTS = ["DATA_PROCESS","EVAL_WRAP","FORWARD","LOSS_CALC","METRICS"]
    -
    - -
    -
    -
    - -
    - {% endraw %} - -
    -
    -

    Tabulated Metrics

    -
    -
    -
    - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    class MetricTab[source]

    MetricTab()

    -
    -

    An object handling metric running

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    metab = MetricTab()
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    for i in range(100):
    -    sleep(.01)
    -    metab+=dict(loss= np.random.rand()*(100-i))
    -    metab.update(i=i,epoch=i//5,bs = 32,ts = datetime.now())
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    batch_df,batch_mean = metab.mark()
    -display(batch_df)
    -batch_mean
    -
    - -
    -
    -
    - -
    -
    - -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    iepochbstsloss
    000322020-06-29 23:44:44.96674016.961023
    110322020-06-29 23:44:44.97932013.221317
    220322020-06-29 23:44:44.99155820.029550
    330322020-06-29 23:44:45.00412135.804462
    440322020-06-29 23:44:45.01450279.937055
    ..................
    959519322020-06-29 23:44:46.0932001.311746
    969619322020-06-29 23:44:46.1032833.787564
    979719322020-06-29 23:44:46.1133602.087981
    989819322020-06-29 23:44:46.1251220.246656
    999919322020-06-29 23:44:46.1378250.154635
    -

    100 rows × 5 columns

    -
    -
    - -
    - -
    - - - -
    -
    {'loss': 24.615831910057956,
    - 'epoch': 1,
    - 'span': Timedelta('0 days 00:00:01.171085')}
    -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    metab.summary()
    -
    - -
    -
    -
    - -
    -
    - -
    - - -
    -
    - - - - - - - - - - - - - - - - - - -
    lossepochspan
    024.615832100:00:01.171085
    -
    -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    train_callbacks[source]

    train_callbacks(loop:Loop)

    -
    -

    call backs allow optimizing model weights

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    eval_callbacks[source]

    eval_callbacks(loop:Loop)

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    to_tensor[source]

    to_tensor(x)

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    simple_forward[source]

    simple_forward(metric_func:list=[])

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    single_device[source]

    single_device(device)

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    class TrainLoop[source]

    TrainLoop(data_iter, model=[], opt=[], loss_func=[], loss=[], hp=[], cuda=[], callbacks=[<function train_callbacks at 0x1203e94d0>], tolerate=True) :: LoopStack

    -
    -

    Basic loop class

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    class EvalLoop[source]

    EvalLoop(data_iter, callbacks, tolerate=False) :: LoopStack

    -
    -

    Basic loop class

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    from sklearn.model_selection import train_test_split
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    x_train,x_val,y_train, y_val = train_test_split(x_normed,y_normed,test_size = .1)
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    list(a.shape for a in [x_train,x_val,y_train, y_val])
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    [(18576, 8), (2064, 8), (18576,), (2064,)]
    -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    from torch import nn
    -import torch
    -
    -data_train = list(zip(chunkify(x_train),chunkify(y_train)))
    -data_val = list(zip(chunkify(x_val),chunkify(y_val)))
    -
    -forward_cb = simple_forward([nn.MSELoss()])
    -
    -train_loop = TrainLoop(data_train,tolerate=False,callbacks=[train_callbacks,forward_cb,])
    -val_loop = EvalLoop(data_val,callbacks=[eval_callbacks,forward_cb,])
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    assigning callback <function train_callbacks at 0x1a32fc70e0>
    -assigning callback <function simple_forward.<locals>.simple_forward_cb at 0x1a2e995950>
    -assigning callback <function eval_callbacks at 0x1a32fc7290>
    -assigning callback <function simple_forward.<locals>.simple_forward_cb at 0x1a2e995950>
    -
    -
    -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    @train_loop.every_end_METRICS
    -def run_eval(self):
    -    val_loop.run(1)
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
     
    -
    - -
    -
    -
    - -
    - {% endraw %} - -
    -
    -

    Assigning stuff

    -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    train_loop.model.baseline = nn.Linear(8,1)
    -train_loop.loss_func.mse = torch.nn.MSELoss()
    -train_loop.metric_func.mae = torch.nn.L1Loss() # MAE is L1 loss 
    -train_loop.opt.adam = torch.optim.Adam(train_loop.model.baseline.parameters())
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    find_stuff[source]

    find_stuff(core:StorageCore)

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    share_stuff[source]

    share_stuff(loop_from:Loop, loop_to:Loop)

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    share_stuff(train_loop,val_loop)
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    train_loop.search()
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    for i in range(10): train_loop.run()
    -
    - -
    -
    -
    - -
    -
    - -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    maemseepochspan
    00.5438400.470426100:00:00.192830
    10.4694420.370095200:00:00.218338
    20.4359340.328378300:00:00.341273
    30.4210580.309691400:00:00.226564
    40.4139190.301794500:00:00.370209
    50.4107330.298556600:00:00.243021
    60.4094060.297206700:00:00.590279
    70.4088200.296614800:00:00.211286
    80.4085520.296338900:00:00.222686
    90.4084070.2962031000:00:00.243863
    -
    -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    from matplotlib import pyplot as plt
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    plt.figure(figsize = (12,5))
    -metric_df = train_loop.metric_tab.summary()
    -val_metric_df = val_loop.metric_tab.summary()
    -
    -display(metric_df)
    -display(val_metric_df)
    -plt.plot(metric_df.mse,"bo--",label="train mse")
    -plt.plot(metric_df.mae,"bo",label="train mae")
    -plt.plot(val_metric_df.mse,"ro--",val_metric_df.mae,"ro")
    -
    - -
    -
    -
    - -
    -
    - -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    maemseepochspan
    00.6382080.643468100:00:03.698205
    10.5029920.419795200:00:03.794402
    20.4521210.352748300:00:02.817318
    30.4280870.322776400:00:03.210466
    40.4172100.309802500:00:03.277518
    50.4127800.304515600:00:02.883348
    60.4109440.302396700:00:03.805901
    70.4101530.301516800:00:03.043291
    80.4097860.301119900:00:02.914900
    90.4095950.3009211000:00:02.387062
    -
    -
    - -
    - -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    maemseepochspan
    00.5438400.470426100:00:00.192830
    10.4694420.370095200:00:00.218338
    20.4359340.328378300:00:00.341273
    30.4210580.309691400:00:00.226564
    40.4139190.301794500:00:00.370209
    50.4107330.298556600:00:00.243021
    60.4094060.297206700:00:00.590279
    70.4088200.296614800:00:00.211286
    80.4085520.296338900:00:00.222686
    90.4084070.2962031000:00:00.243863
    -
    -
    - -
    - -
    - - - -
    -
    [<matplotlib.lines.Line2D at 0x1a2f731050>,
    - <matplotlib.lines.Line2D at 0x1a2f461cd0>]
    -
    - -
    - -
    - - - -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - -
    - - diff --git a/docs/minimum.html b/docs/minimum.html deleted file mode 100644 index b777ee2..0000000 --- a/docs/minimum.html +++ /dev/null @@ -1,466 +0,0 @@ ---- - -title: Minimum - - -keywords: fastai -sidebar: home_sidebar - -summary: "Minimal way of managing a **(Directed Acyclic Graph)DAG pipeline**" -description: "Minimal way of managing a **(Directed Acyclic Graph)DAG pipeline**" -nb_path: "nbs/21_minimum.ipynb" ---- - - -
    - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    now[source]

    now()

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    Link(func)

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    Link.verbose = 2
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    @Link
    -def abc(a = 2,b=3):
    -    return a**2
    -
    -@Link
    -def process_abc(f = abc,d=2): 
    -    return f*d
    -
    -@Link
    -def step2(d=5,e = process_abc,):
    -    return {"power":e**d,"mod":e%d}
    -
    -@Link
    -def step3(mod):
    -    return mod/2
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    step3()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    [step3] final args []
    -[step3] final kwargs {}
    -
    -
    -
    - -
    - -
    -
    ----------------------------------------------------------------------------
    -TypeError                                 Traceback (most recent call last)
    -<ipython-input-160-93e7421bb413> in <module>
    -----> 1 step3()
    -
    -<ipython-input-155-5099601ed5c0> in __call__(self, *args, **kwargs)
    -    120 
    -    121     def __call__(self,*args,**kwargs,):
    ---> 122         return self.unit_call()(*args,**kwargs)
    -    123 
    -    124     def register_args(self)->None:
    -
    -<ipython-input-155-5099601ed5c0> in called(*args, **kwargs)
    -    109                 print(f"[{self.func_name}] final args {args0}")
    -    110                 print(f"[{self.func_name}] final kwargs {kwargs0}")
    ---> 111             rt = self.func(*args0,**kwargs0)
    -    112 
    -    113             # save outputs
    -
    -TypeError: step3() missing 1 required positional argument: 'mod'
    -
    -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    abc(5)
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    25
    -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    abc.inputs
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    {'9ddc067c-20ae-4489-88cb-facaf968b2c2': {'abc': {'args': (5,),
    -   'kwargs': {'b': 3, 'a': 2}}}}
    -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    abc.data
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    {'9ddc067c-20ae-4489-88cb-facaf968b2c2': {'b': 3, 'a': 2, 'abc': 25}}
    -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    abc.funcs_
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    {'abc': <function __main__.abc(a=2, b=3)>}
    -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    from inspect import getargspec,getfullargspec
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    def a():return 123
    -def b(a,b=1):return 123
    -def c(*args,a=1,b=2):return a
    -def d(a=1,b:{"type":int}=2,**kwargs, ):return a
    -def e(a=1,**kwargs):return a
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    for f in [a,b,c,d,e]:
    -    print(getfullargspec(f))
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    FullArgSpec(args=[], varargs=None, varkw=None, defaults=None, kwonlyargs=[], kwonlydefaults=None, annotations={})
    -FullArgSpec(args=['a', 'b'], varargs=None, varkw=None, defaults=(1,), kwonlyargs=[], kwonlydefaults=None, annotations={})
    -FullArgSpec(args=[], varargs='args', varkw=None, defaults=None, kwonlyargs=['a', 'b'], kwonlydefaults={'a': 1, 'b': 2}, annotations={})
    -FullArgSpec(args=['a', 'b'], varargs=None, varkw='kwargs', defaults=(1, 2), kwonlyargs=[], kwonlydefaults=None, annotations={'b': {'type': <class 'int'>}})
    -FullArgSpec(args=['a'], varargs=None, varkw='kwargs', defaults=(1,), kwonlyargs=[], kwonlydefaults=None, annotations={})
    -
    -
    -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    arg_spec = getfullargspec(b)
    -
    -kwargs_default = dict()
    -if arg_spec.defaults != None:
    -    kwargs_default.update(dict(zip(arg_spec.args[::-1],arg_spec.defaults[::-1])))
    -if arg_spec.kwonlydefaults != None:
    -    kwargs_default.update(dict(zip(arg_spec.kwonlyargs[::-1],arg_spec.kwonlydefaults[::-1])))
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    kwargs_default
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    {'b': 1}
    -
    - -
    - -
    -
    - -
    - {% endraw %} - -
    - - diff --git a/docs/multiprocess.html b/docs/multiprocess.html deleted file mode 100644 index d163ad2..0000000 --- a/docs/multiprocess.html +++ /dev/null @@ -1,269 +0,0 @@ ---- - -title: Multiprocessing Helper - - -keywords: fastai -sidebar: home_sidebar - -summary: "Things to smooth up the multiprocessing" -description: "Things to smooth up the multiprocessing" -nb_path: "nbs/09_multiprocess.ipynb" ---- - - -
    - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    Separate Process Magic

    -
    -
    -
    - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    class VipaClass[source]

    VipaClass()

    -
    -

    From meditation word Vipassana -Where creating a magic function -you can run a cell without holding the entire notebook

    -
    %%vipas
    -...do things
    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    Read single file line by line

    -
    -
    -
    - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    class SingleFileLiner[source]

    SingleFileLiner(file_path:Path, total:int=None)

    -
    -

    Text data reading line by line for multiprocessing

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    sfl = SingleFileLiner("../README.md")
    -from joblib import Parallel, delayed
    -from time import sleep
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    def get_line(x):
    -#     sleep(1)
    -    return x
    -
    -res = Parallel(backend="multiprocessing", n_jobs=6)(delayed(get_line)(i) for i in sfl)
    -
    - -
    -
    -
    - -
    - {% endraw %} - -
    -
    -

    Read dataframe row by row

    -
    -
    -
    - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    class DataFrameRowling[source]

    DataFrameRowling(df)

    -
    -

    Read dataframe row by row

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    import pandas as pd
    -df = pd.DataFrame({"col1":list(range(100))})
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    res = Parallel(backend="multiprocessing", n_jobs=6)(delayed(get_line)(i) for i in DataFrameRowling(df))
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    res[5]
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    col1    5
    -Name: 5, dtype: int64
    -
    - -
    - -
    -
    - -
    - {% endraw %} - -
    - - diff --git a/docs/optimizers.html b/docs/optimizers.html deleted file mode 100644 index 34fd16b..0000000 --- a/docs/optimizers.html +++ /dev/null @@ -1,378 +0,0 @@ ---- - -title: Optimizer Mangement - -keywords: fastai -sidebar: home_sidebar - -summary: "Handling PyTorch Cuda" ---- - - -
    - {% raw %} - -
    - -
    -
    -
    -

    This handler is created to handle the multiple optimizer situations

    - -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    class Opts[source]

    Opts(*args, **kwargs)

    -
    - -
    - -
    - -
    -
    - -
    -
    -
    -

    Experiment

    -
    -
    -
    -
    -
    - -
    -
    -
    import torch
    -from torch import nn
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    layer1 = nn.Linear(5,5)
    -layer2 = nn.Linear(5,5)
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    op1 = torch.optim.Adam(layer1.parameters())
    -op2 = torch.optim.Adagrad(layer2.parameters())
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    opts = Opts(op1, op2)
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    opts.optimizer_no1
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    Adam (
    -Parameter Group 0
    -    amsgrad: False
    -    betas: (0.9, 0.999)
    -    eps: 1e-08
    -    lr: 0.001
    -    weight_decay: 0
    -)
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    opts.optimizer_no2
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    Adagrad (
    -Parameter Group 0
    -    eps: 1e-10
    -    initial_accumulator_value: 0
    -    lr: 0.01
    -    lr_decay: 0
    -    weight_decay: 0
    -)
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    opts
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    optimizer_no1
    -	<class 'torch.optim.adam.Adam'>
    -	{'lr': 0.001, 'betas': (0.9, 0.999), 'eps': 1e-08, 'weight_decay': 0, 'amsgrad': False}
    -optimizer_no2
    -	<class 'torch.optim.adagrad.Adagrad'>
    -	{'lr': 0.01, 'lr_decay': 0, 'eps': 1e-10, 'weight_decay': 0, 'initial_accumulator_value': 0}
    -
    - -
    - -
    -
    - -
    -
    -
    -

    Let's create some gradients

    - -
    -
    -
    -
    -
    - -
    -
    -
    x = torch.rand(2,5)
    -y_ = -(layer2(torch.nn.functional.relu(layer1(x))).mean())
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    y_.backward()
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    layer1.weight.grad,layer1.bias.grad,layer2.weight.grad,layer2.bias.grad
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    (tensor([[ 0.0000e+00,  0.0000e+00,  0.0000e+00,  0.0000e+00,  0.0000e+00],
    -         [-5.7813e-02, -5.0724e-02, -6.1752e-02, -1.1506e-01, -6.0402e-02],
    -         [-4.5386e-04, -2.3771e-04, -2.1409e-04, -6.2308e-04, -3.3177e-04],
    -         [-1.3012e-01, -1.1416e-01, -1.3899e-01, -2.5898e-01, -1.3595e-01],
    -         [ 0.0000e+00,  0.0000e+00,  0.0000e+00,  0.0000e+00,  0.0000e+00]]),
    - tensor([ 0.0000, -0.1238, -0.0007, -0.2787,  0.0000]),
    - tensor([[ 0.0000, -0.1671, -0.0036, -0.1062,  0.0000],
    -         [ 0.0000, -0.1671, -0.0036, -0.1062,  0.0000],
    -         [ 0.0000, -0.1671, -0.0036, -0.1062,  0.0000],
    -         [ 0.0000, -0.1671, -0.0036, -0.1062,  0.0000],
    -         [ 0.0000, -0.1671, -0.0036, -0.1062,  0.0000]]),
    - tensor([-0.2000, -0.2000, -0.2000, -0.2000, -0.2000]))
    -
    - -
    - -
    -
    - -
    -
    -
    -

    Take a step for all optimizers

    -
    -
    -
    -
    -
    - -
    -
    -
    opts.step_all()
    -
    - -
    -
    -
    - -
    -
    -
    -

    Zero gradient on all optimizers

    -
    -
    -
    -
    -
    - -
    -
    -
    opts.zero_all()
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    layer1.weight.grad,layer1.bias.grad,layer2.weight.grad,layer2.bias.grad
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    (tensor([[0., 0., 0., 0., 0.],
    -         [0., 0., 0., 0., 0.],
    -         [0., 0., 0., 0., 0.],
    -         [0., 0., 0., 0., 0.],
    -         [0., 0., 0., 0., 0.]]),
    - tensor([0., 0., 0., 0., 0.]),
    - tensor([[0., 0., 0., 0., 0.],
    -         [0., 0., 0., 0., 0.],
    -         [0., 0., 0., 0., 0.],
    -         [0., 0., 0., 0., 0.],
    -         [0., 0., 0., 0., 0.]]),
    - tensor([0., 0., 0., 0., 0.]))
    -
    - -
    - -
    -
    - -
    - {% endraw %} -
    - - diff --git a/docs/pandas_extra.html b/docs/pandas_extra.html deleted file mode 100644 index 622cb85..0000000 --- a/docs/pandas_extra.html +++ /dev/null @@ -1,709 +0,0 @@ ---- - -title: Pandas Extra functions - - -keywords: fastai -sidebar: home_sidebar - -summary: "Extra pandas functions at import" -description: "Extra pandas functions at import" -nb_path: "nbs/01_pandas_extra.ipynb" ---- - - -
    - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    Value counts

    -
    -
    -
    - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    list_vc[source]

    list_vc(df, colname:str, value:str)

    -
    -

    count the values in a column - that each cell is a list

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    col_list_vc[source]

    col_list_vc(col, value:str)

    -
    -

    count the values in a column - that each cell is a list

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    Rename by rule

    -
    -
    -
    - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    default_rename_rule[source]

    default_rename_rule(x:str)

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    rename_by_rule[source]

    rename_by_rule(df, rule:Callable=default_rename_rule)

    -
    -

    rename the columns by a rule function

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    Rearrage Columns

    -
    -
    -
    - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    column_order[source]

    column_order(df, *col_names)

    -
    -

    df = df.column_order("col1", "col2", "col3") -will put col1, col2, and col3 as the 1st 3 column

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    Testing

    -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    from sklearn.datasets import california_housing
    -
    -cdata = california_housing.fetch_california_housing()
    -
    -df = pd.DataFrame(cdata["data"], columns=cdata["feature_names"])
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    df["old"] = df.HouseAge>20
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    df.vc("old")
    -
    - -
    -
    -
    - -
    -
    - -
    - - -
    -
    - - - - - - - - - - - - - - - - - - -
    old
    True14347
    False6293
    -
    -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    df.rename_by_rule()
    -
    - -
    -
    -
    - -
    -
    - -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    medinchouseageaveroomsavebedrmspopulationaveoccuplatitudelongitudeold
    08.325241.06.9841271.023810322.02.55555637.88-122.23True
    18.301421.06.2381370.9718802401.02.10984237.86-122.22True
    27.257452.08.2881361.073446496.02.80226037.85-122.24True
    35.643152.05.8173521.073059558.02.54794537.85-122.25True
    43.846252.06.2818531.081081565.02.18146737.85-122.25True
    ..............................
    206351.560325.05.0454551.133333845.02.56060639.48-121.09True
    206362.556818.06.1140351.315789356.03.12280739.49-121.21False
    206371.700017.05.2055431.1200921007.02.32563539.43-121.22False
    206381.867218.05.3295131.171920741.02.12320939.43-121.32False
    206392.388616.05.2547171.1622641387.02.61698139.37-121.24False
    -

    20640 rows × 9 columns

    -
    -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    df.column_order("old","AveOccup")
    -
    - -
    -
    -
    - -
    -
    - -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    oldAveOccupMedIncHouseAgeAveRoomsAveBedrmsPopulationLatitudeLongitude
    0True2.5555568.325241.06.9841271.023810322.037.88-122.23
    1True2.1098428.301421.06.2381370.9718802401.037.86-122.22
    2True2.8022607.257452.08.2881361.073446496.037.85-122.24
    3True2.5479455.643152.05.8173521.073059558.037.85-122.25
    4True2.1814673.846252.06.2818531.081081565.037.85-122.25
    ..............................
    20635True2.5606061.560325.05.0454551.133333845.039.48-121.09
    20636False3.1228072.556818.06.1140351.315789356.039.49-121.21
    20637False2.3256351.700017.05.2055431.1200921007.039.43-121.22
    20638False2.1232091.867218.05.3295131.171920741.039.43-121.32
    20639False2.6169812.388616.05.2547171.1622641387.039.37-121.24
    -

    20640 rows × 9 columns

    -
    -
    - -
    - -
    -
    - -
    - {% endraw %} - -
    - - diff --git a/docs/pl_training.html b/docs/pl_training.html deleted file mode 100644 index 5b8198c..0000000 --- a/docs/pl_training.html +++ /dev/null @@ -1,307 +0,0 @@ ---- - -title: Pytorch Lighting training - - -keywords: fastai -sidebar: home_sidebar - -summary: "on huggingface transformers" -description: "on huggingface transformers" -nb_path: "nbs/72_pl_training.ipynb" ---- - - -
    - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    # !pip install pytorch-lightning==1.3.8
    -# !pip install tensorflow==2.2.0
    -
    - -
    -
    -
    - -
    - {% endraw %} - -
    -
    -

    Load model and tokenizer

    -
    -
    -
    - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    ner_model_from[source]

    ner_model_from(name:str, dataset:IOBES)

    -
    -

    name: from_pretrain(name)

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    ner_tokenizer_from[source]

    ner_tokenizer_from(name:str)

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    Lightning data module

    -
    -
    -
    - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    class NERDataModule[source]

    NERDataModule(*args:Any, **kwargs:Any) :: LightningDataModule

    -
    -

    A DataModule standardizes the training, val, test splits, data preparation and transforms. -The main advantage is consistent data splits, data preparation and transforms across models.

    -

    Example::

    - -
    class MyDataModule(LightningDataModule):
    -    def __init__(self):
    -        super().__init__()
    -    def prepare_data(self):
    -        # download, split, etc...
    -        # only called on 1 GPU/TPU in distributed
    -    def setup(self):
    -        # make assignments here (val/train/test split)
    -        # called on every process in DDP
    -    def train_dataloader(self):
    -        train_split = Dataset(...)
    -        return DataLoader(train_split)
    -    def val_dataloader(self):
    -        val_split = Dataset(...)
    -        return DataLoader(val_split)
    -    def test_dataloader(self):
    -        test_split = Dataset(...)
    -        return DataLoader(test_split)
    -    def teardown(self):
    -        # clean up after fit or test
    -        # called on every process in DDP
    -
    -
    -

    A DataModule implements 6 key methods:

    -
      -
    • prepare_data (things to do on 1 GPU/TPU not on every GPU/TPU in distributed mode).
    • -
    • setup (things to do on every accelerator in distributed mode).
    • -
    • train_dataloader the training dataloader.
    • -
    • val_dataloader the val dataloader(s).
    • -
    • test_dataloader the test dataloader(s).
    • -
    • teardown (things to do on every accelerator in distributed mode when finished)
    • -
    -

    This allows you to share a full dataset without explaining how to download, -split transform and process the data

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    class NERModule[source]

    NERModule(model) :: LightningModule

    -
    -

    PyTorch lightning module for training ner model

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    Enhance pipeline

    -
    -
    -
    - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    clean_ner_output[source]

    clean_ner_output(outputs)

    -
    -

    Cleaning output for NER task

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    class NERInference[source]

    NERInference(model, tokenizer, name=None)

    -
    -

    NER Inference pipeline -ner = NERInference.from_pretrained('xxxx/xxxx') -ner.predict(['text1','text2'])

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    - - diff --git a/docs/sidebar.json b/docs/sidebar.json deleted file mode 100644 index 13258ab..0000000 --- a/docs/sidebar.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "forgebox": { - "Overview": "/", - "Pandas Extra functions": "pandas_extra.html", - "03 Imports": "imports.html", - "Async": "async.html", - "Tools on pandas dataframe": "df.html", - "HTML operation": "html.html", - "Interactive tools": "inter_widgets.html", - "Flatten": "flatten.html", - "spacy toolkit": "spacy.html", - "FreeMap": "freemap.html", - "Multiprocessing Helper": "multiprocess.html", - "Controllable loop process": "loop.html", - "ETL Helper": "etl.html", - "Get static file": "static_file.html", - "15 LoopStack": "loopstack.html", - "Config": "config.html", - "Minimum": "minimum.html", - "01 A logged editable table": "traceable_edit_in_flask.html", - "Dataframe filter": "df_filter.html", - "Hard drive files": "files.html", - "Wild Tree and loss": "wild_tree_and_loss.html", - "Image Widgets": "image_widgets.html", - "Categorical Transformation for DL": "category.html", - "Cosine ": "cosine_search.html", - "Lightning Callbacks": "thunder_callbacks.html", - "Data parts for hf transformers": "hf_transformer_data.html", - "Pytorch Lighting training": "pl_training.html", - "CUDA GPU Management": "CUDA_GPU_Management.html", - "Bert Visualize": "bert_visualize.html", - "NLP data": "bilstm-based-search-on-netflix-data.html", - "Create multi-task adjustment for cross-entropy": "cross_entropy_weighter.html", - "DataFrame PipeLine": "dataframe_pipeline.html", - "Optimizer Mangement": "optimizers.html", - "Turbo ": "turbo.html" - } -} \ No newline at end of file diff --git a/docs/sitemap.xml b/docs/sitemap.xml deleted file mode 100644 index 38a04d6..0000000 --- a/docs/sitemap.xml +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: none -search: exclude ---- - - - - {% for post in site.posts %} - {% unless post.search == "exclude" %} - - {{site.url}}{{post.url}} - - {% endunless %} - {% endfor %} - - - {% for page in site.pages %} - {% unless page.search == "exclude" %} - - {{site.url}}{{ page.url}} - - {% endunless %} - {% endfor %} - \ No newline at end of file diff --git a/docs/spacy.html b/docs/spacy.html deleted file mode 100644 index 63db92c..0000000 --- a/docs/spacy.html +++ /dev/null @@ -1,463 +0,0 @@ ---- - -title: spacy toolkit - -keywords: fastai -sidebar: home_sidebar - -summary: "Tools enhancing spacy usage" ---- - - -
    - {% raw %} - -
    - -
    -
    - -
    -
    -
    -

    Normalization and cosine distance calculation, between each word of 2 sentences

    - -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    l2norm[source]

    l2norm(x)

    -
    - -
    - -
    - -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    normal[source]

    normal(x)

    -
    - -
    - -
    - -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    distance[source]

    distance(a, b)

    -
    - -
    - -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    make_map[source]

    make_map(distance_map, th=0.1)

    -
    -

    create a hot spot map between similar token -return dict, token index with matching token index in the target sentence

    - -
    - -
    - -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    make_span[source]

    make_span(tok, tok_id, classes)

    -
    -

    create span for token -tok,spacy token -tok_id, span's html id

    -

    return forgebox.html.DOM

    - -
    - -
    - -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    make_div[source]

    make_div(doc, id_list, classes_list)

    -
    -

    create div tag for a sentence -doc:spacy doc -id_list, a list of html id -classes_list, a list of classes assigning to the token span

    -

    return forgebox.html.DOM

    - -
    - -
    - -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    doc2div[source]

    doc2div(doc, distance_map, th=0.1, is_src=True)

    -
    - -
    - -
    - -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    compare_sentences[source]

    compare_sentences(A, B, nlp, th=0.1)

    -
    -

    Compare between sentences -A: str, a sentence -B: str, another sentence -nlp: loaded spacy: eg. from spacy import load;nlp = load("some_model_name"), -see spacy documentation https://spacy.io/usage/spacy-101/

    -

    th:float, threshold for consine distance, smaller it is, fewer matching tokens will be found, -but assume that means higher quality

    - -
    - -
    - -
    -
    - -
    -
    -
    -

    Visualizing Sentence Compare

    -
    -
    -
    -
    -
    -

    Example

      -
    • Suppose you have 2 sentences, name them A and B
    • -
    - -
    -
    -
    -
    -
    - -
    -
    -
    A = """BACKGROUND: In the COU-AA-302 study (NCT00887198), abiraterone acetate plus prednisone (AAP) 
    -significantly improved outcomes in patients with metastatic castration-resistant prostate cancer (mCRPC) 
    -versus prednisone alone. Baseline clinical parameters predicting that treatment response could help inform 
    -clinical decisions were explored. OBJECTIVE: To identify patients who derive the greatest clinical benefit 
    -from AAP treatment. DESIGN, SETTING, AND PARTICIPANTS: A total of 1088 mCRPC patients treated with either 
    -AAP or prednisone in the first-line setting in COU-AA-302 were included in this post hoc analysis. 
    -INTERVENTION: Abiraterone acetate1000mg daily versus placebo, both plus prednisone 10mg daily. 
    -OUTCOME MEASUREMENTS AND STATISTICAL ANALYSIS: Univariate and multivariable Cox regression 
    -analyses were performed, including clinical and pathological parameters for the primary end points overall 
    -survival (OS) and radiographic progression-free survival (rPFS), and secondary study end points. 
    -Tumor-associated baseline parameters independently impacting OS were applied to stratify patients according 
    -to possible treatment effects. RESULTS AND LIMITATIONS: Baseline prostate-specific antigen (PSA), tumor-related 
    -pain as assessed by the Brief Pain Inventory-Short Form (BPI-SF), and Gleason score (GS) at primary diagnosis
    -were identified as tumor-associated variables that independently impacted OS. AAP significantly improved 
    -outcomes versus prednisone in both group 1 (BPI-SF 0-1 and PSA <80 ng/ml and GS <8; p=0.006; hazard ratio 
    -[HR]: 0.61) and group 2 (BPI-SF 2-3 and/or PSA ≥80 ng/ml and/or GS ≥8; p=0.03; HR: 0.84). 
    -The differences observed for treatment effects between groups 1 and 2 for OS (HR: 0.61 vs 0.84), rPFS 
    -(HR: 0.41 vs 0.59), and time to chemotherapy (HR: 0.64 vs 0.71) were not statistically significant. 
    -CONCLUSIONS: AAP significantly improved outcomes in mCRPC patients compared with prednisone alone regardless 
    -of baseline pain and PSA level, and GS at primary diagnosis with no significant differences between observed 
    -treatment effects in groups 1 and 2. PATIENT SUMMARY: Treatment with abiraterone acetate and prednisone 
    -(compared with treatment with prednisone only) for metastatic castration-resistant prostate cancer 
    -increased survival in all patients in the study regardless of pain, prostate-specific antigen levels 
    -at the start of treatment, and Gleason score at primary diagnosis."""
    -
    -B = """'Treatment with abiraterone acetate and prednisone (compared with treatment with prednisone only) 
    -for metastatic castration-resistant prostate cancer increased survival in all patients in the study regardless 
    -of pain, prostate-specific antigen levels at the start of treatment, and Gleason score at primary diagnosis.'
    -"""
    -
    - -
    -
    -
    - -
    -
    -
    -

    You can run the comparation between A & B

    - -
    -
    -
    -
    -
    - -
    -
    -
    from spacy import load
    -nlp = load("en_core_web_sm")
    -
    -compare_sentences(A,B,nlp)
    -
    - -
    -
    -
    - -
    -
    - -
    - - -
    -

    Sentence A

    -
    - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    -
    BACKGROUND:IntheCOU-AA-302study(NCT00887198),abirateroneacetateplusprednisone(AAP) -significantlyimprovedoutcomesinpatientswithmetastaticcastration-resistantprostatecancer(mCRPC) -versusprednisonealone.Baselineclinicalparameterspredictingthattreatmentresponsecouldhelpinform -clinicaldecisionswereexplored.OBJECTIVE:Toidentifypatientswhoderivethegreatestclinicalbenefit -fromAAPtreatment.DESIGN,SETTING,ANDPARTICIPANTS:Atotalof1088mCRPCpatientstreatedwitheither -AAPorprednisoneinthefirst-linesettinginCOU-AA-302wereincludedinthisposthocanalysis. -INTERVENTION:Abirateroneacetate1000mgdailyversusplacebo,bothplusprednisone10mgdaily. -OUTCOMEMEASUREMENTSANDSTATISTICALANALYSIS:UnivariateandmultivariableCoxregression -analyseswereperformed,includingclinicalandpathologicalparametersfortheprimaryendpointsoverall -survival(OS)andradiographicprogression-freesurvival(rPFS),andsecondarystudyendpoints. -Tumor-associatedbaselineparametersindependentlyimpactingOSwereappliedtostratifypatientsaccording -topossibletreatmenteffects.RESULTSANDLIMITATIONS:Baselineprostate-specificantigen(PSA),tumor-related -painasassessedbytheBriefPainInventory-ShortForm(BPI-SF),andGleasonscore(GS)atprimarydiagnosis -wereidentifiedastumor-associatedvariablesthatindependentlyimpactedOS.AAPsignificantlyimproved -outcomesversusprednisoneinbothgroup1(BPI-SF0-1andPSA<80ng/mlandGS<8;p=0.006;hazardratio -[HR]:0.61)andgroup2(BPI-SF2-3and/orPSA≥80ng/mland/orGS≥8;p=0.03;HR:0.84). -Thedifferencesobservedfortreatmenteffectsbetweengroups1and2forOS(HR:0.61vs0.84),rPFS -(HR:0.41vs0.59),andtimetochemotherapy(HR:0.64vs0.71)werenotstatisticallysignificant. -CONCLUSIONS:AAPsignificantlyimprovedoutcomesinmCRPCpatientscomparedwithprednisonealoneregardless -ofbaselinepainandPSAlevel,andGSatprimarydiagnosiswithnosignificantdifferencesbetweenobserved -treatmenteffectsingroups1and2.PATIENTSUMMARY:Treatmentwithabirateroneacetateandprednisone -(comparedwithtreatmentwithprednisoneonly)formetastaticcastration-resistantprostatecancer -increasedsurvivalinallpatientsinthestudyregardlessofpain,prostate-specificantigenlevels -atthestartoftreatment,andGleasonscoreatprimarydiagnosis.
    -
    - -
    - -
    - - -
    -

    Sentence B

    -
    - -
    - -
    - - -
    - -
    - -
    - -
    - - -
    -
    'Treatmentwithabirateroneacetateandprednisone(comparedwithtreatmentwithprednisoneonly) -formetastaticcastration-resistantprostatecancerincreasedsurvivalinallpatientsinthestudyregardless -ofpain,prostate-specificantigenlevelsatthestartoftreatment,andGleasonscoreatprimarydiagnosis.' -
    -
    - -
    - -
    - - -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} -
    - - diff --git a/docs/static_file.html b/docs/static_file.html deleted file mode 100644 index 1082a0a..0000000 --- a/docs/static_file.html +++ /dev/null @@ -1,220 +0,0 @@ ---- - -title: Get static file - - -keywords: fastai -sidebar: home_sidebar - -summary: "get none-python file, like js and html" -description: "get none-python file, like js and html" -nb_path: "nbs/12_static_file.ipynb" ---- - - -
    - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    get_static[source]

    get_static()

    -
    -

    return the absolute path of forgebox.static

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    open_static[source]

    open_static(relative_path:str)

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    The static file directory

    - -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    get_static()
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    PosixPath('/Users/xiaochen.zhang/github/forgebox/forgebox/static')
    -
    - -
    - -
    -
    - -
    - {% endraw %} - -
    -
    -

    Open relative path

    - -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    open_static("mlm/visual.html")
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    "<div>\n    <h2>Masked language modeling visualization</h2>\n    <script>\n        {{mlm_visual_js}}\n\n        var data = JSON.parse('{{data}}');\n        var text =  `{{text}}`;\n        var output_id = '{{output_id}}'\n        mlm_visualize(data,text,output_id);\n    </script>\n\n    <div id='{{output_id}}'></div>\n</div>"
    -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    print(open_static("mlm/visual.js")[:500])
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    var mlm_visualize = (data, text, output_id) => {
    -    var {
    -        Sentence,
    -        ControlBar,
    -        att_obj
    -    } = attention_factory(data, text, output_id)
    -
    -    var sentence = new Sentence();
    -    var control_bar = new ControlBar({
    -        nb_heads: att_obj.attention.length,
    -        current_head: 0
    -    });
    -
    -    control_bar.sensitive.add_callback(
    -        control_bar.func_print_change,
    -        control_bar.change_current_head(att_obj),
    -    )
    -
    -    $(`#${output_id}`).append(control_bar.dom)
    -   
    -
    -
    -
    - -
    -
    - -
    - {% endraw %} - -
    - - diff --git a/docs/test_nbdev.html b/docs/test_nbdev.html deleted file mode 100644 index 485bd26..0000000 --- a/docs/test_nbdev.html +++ /dev/null @@ -1,75 +0,0 @@ ---- - -title: The big title - -keywords: fastai -sidebar: home_sidebar - -summary: "The not big one" ---- - - -
    - {% raw %} - -
    - -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    test_nbdev_func[source]

    test_nbdev_func()

    -
    - -
    - -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    test_nbdev_func[source]

    test_nbdev_func()

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} -
    - - diff --git a/docs/thunder_callbacks.html b/docs/thunder_callbacks.html deleted file mode 100644 index 2e93103..0000000 --- a/docs/thunder_callbacks.html +++ /dev/null @@ -1,147 +0,0 @@ ---- - -title: Lightning Callbacks - - -keywords: fastai -sidebar: home_sidebar - -summary: "Thunder, the DIYed pytorch-lightening callbacks" -description: "Thunder, the DIYed pytorch-lightening callbacks" -nb_path: "nbs/61_thunder_callbacks.ipynb" ---- - - -
    - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    unfreeze[source]

    unfreeze()

    -
    -

    unfreeze this module, and its sub modules

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    freeze[source]

    freeze()

    -
    -

    freeze this module, and its sub modules

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    class DataFrameMetricsCallback[source]

    DataFrameMetricsCallback() :: Callback

    -
    -

    A metrics callback keep showing pandas dataframe

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    UnfreezeScheduler[source]

    UnfreezeScheduler(frozen_epochs:int=2)

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    - - diff --git a/docs/tooltips.json b/docs/tooltips.json deleted file mode 100644 index cee21d3..0000000 --- a/docs/tooltips.json +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: null -search: exclude ---- - -{ -"entries": -[ -{% for page in site.tooltips %} -{ -"doc_id": "{{ page.doc_id }}", -"body": "{{ page.content | strip_newlines | replace: '\', '\\\\' | replace: '"', '\\"' }}" -} {% unless forloop.last %},{% endunless %} -{% endfor %} -] -} - - - diff --git a/docs/traceable_edit_in_flask.html b/docs/traceable_edit_in_flask.html deleted file mode 100644 index a32f857..0000000 --- a/docs/traceable_edit_in_flask.html +++ /dev/null @@ -1,294 +0,0 @@ ---- - -title: 01 A logged editable table - - -keywords: fastai -sidebar: home_sidebar - -summary: "Traceable editable table in flask" -description: "Traceable editable table in flask" -nb_path: "nbs/30_traceable_edit_in_flask.ipynb" ---- - - -
    - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    from flask import Flask
    -app = Flask(__name__)
    -
    -@app.route('/')
    -def hello_world():
    -    return 'Hello, World!'
    -
    - -
    -
    -
    - -
    - {% endraw %} - -
    -
    -

    Run a simple applitcation

    -
    -
    -
    - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    get_static[source]

    get_static()

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    edit_js[source]

    edit_js()

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    class DefaultTemp[source]

    DefaultTemp(source, block_start_string='{%', block_end_string='%}', variable_start_string='{{', variable_end_string='}}', comment_start_string='{#', comment_end_string='#}', line_statement_prefix=None, line_comment_prefix=None, trim_blocks=False, lstrip_blocks=False, newline_sequence='\n', keep_trailing_newline=False, extensions=(), optimized=True, undefined=Undefined, finalize=None, autoescape=False, enable_async=False) :: Template

    -
    -

    Jinjia template with some default render config

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    Create sample data

    -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    con = ce("sqlite:///sample.db")
    -
    -sample_df = pd.DataFrame(dict(name=["Darrow","Virginia","Sevro",]*20,
    -                              house =["Andromedus","Augustus","Barca"]*20,
    -                              age=[20,18,17]*20))
    -
    -sample_df.to_sql("sample_table",index_label="id",
    -                 index=True,
    -                 con = con, method='multi',
    -                 if_exists="replace")
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    class Editable[source]

    Editable(name, app, table_name, con, id_col, log_con, log_table='editable_log', columns=None)

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    Testing editable frontend

    -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    app = Flask(__name__)
    -
    -# Create Editable pages around sample_table
    -Editable("table1", # route/task name
    -         app, # flask app to wrap around
    -         table_name="sample_table", # target table name
    -         id_col="id", # unique column
    -         con = con,
    -         log_con=con
    -        )
    -
    -app.run(host="0.0.0.0",port = 4242,debug=False)
    -
    - -
    -
    -
    - -
    - {% endraw %} - -
    -
    -

    Retrieve the log

    -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    from forgebox.df import PandasDisplay
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    with PandasDisplay(max_colwidth = 0,max_rows=100):
    -    display(pd.read_sql('editable_log',con = con))
    -
    - -
    -
    -
    - -
    - {% endraw %} - -
    - - diff --git a/docs/train.html b/docs/train.html deleted file mode 100644 index a0003d4..0000000 --- a/docs/train.html +++ /dev/null @@ -1,1024 +0,0 @@ ---- - -title: Title - -keywords: fastai -sidebar: home_sidebar - -summary: "summary" ---- - - -
    - {% raw %} - -
    - -
    -
    -
    -

    PyTorch Train

    -
    -
    -
    -
    - -
    -
    -
    - -
    -
    -
    import torch
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    def create_event(event_name):
    -    class ProductEvent(Event):pass
    -    
    -    ProductEvent.__name__=event_name
    -    return ProductEvent
    -
    -def events(*event_names):
    -    return tuple(list(map(create_event,event_names)))
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    events("e1","e2")[0]()
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    layer:>>>e1
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    class 
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    l1.summary()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    Loop layer e1 summary:
    -==================================================
    -🍰layer0.0	layer:>>>e1
    -	[🐍func_name]	after_last_e1
    -	[⛰doc]	
    -            Append new after_last callback for event:e1
    -            Use this function as decorator
    -        
    -	[😝var]	cls,f
    -	[😜names]	getattr
    -	...................................
    -	[🐍func_name]	before_1st_e1
    -	[⛰doc]	
    -            Append new before_1st callback for event:e1
    -            Use this function as decorator
    -        
    -	[😝var]	cls,f
    -	[😜names]	getattr
    -	...................................
    -	[🐍func_name]	on_e1
    -	[⛰doc]	
    -            Append new on callback for event:e1
    -            Use this function as decorator
    -        
    -	[😝var]	cls,f
    -	[😜names]	getattr
    -	...................................
    ---------------------------------------------------
    -==================================================
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    class DataLoop(Loop):
    -    def __init__(self,dataloader=None):
    -        super().__init__(iterable=dataloader)
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    from types import MethodType
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    class LoopStack:
    -    @classmethod
    -    def from_Loops(cls,*Loops):
    -        cls.Loops = dict()
    -        for L in Loops:
    -            setattr(cls,L.__name__,L)
    -            cls.Loops.update({L.__name__:L})
    -        def init(self,iterable=[]):
    -            last = iterable
    -            for k,L in self.Loops.items():
    -                layer = L(last) 
    -                last = layer
    -            self.layer = last
    -        
    -        setattr(cls,"__init__",MethodType(init,cls))
    -        return cls
    -    
    -    def __getattr__(self,k):
    -        return getattr(self.layer,k)
    -    
    -    def __repr__(self):
    -        return f"LoopStack with\n\t"+"\n\t".join(self.Loops.keys())
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    STANDARD_TRAIN_PROCESS = events("PREPROCESS","FORWARD","CALC_LOSS","BACKWARD","OPTIMIZING","METRICS")
    -STANDARD_EVAL_PROCESS = events("PREPROCESS","EVAL_SCOPE","FORWARD","CALC_LOSS","METRICS")
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    TrainLoop = LoopStack.from_Loops(DataLoop,
    -                                 ProgressBar,
    -                                 Tolerate,
    -                                 *STANDARD_TRAIN_PROCESS)
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    train_loop = TrainLoop(range(100))
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    train_loop
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    LoopStack with
    -	DataLoop
    -	ProgressBar
    -	Tolerate
    -	PREPROCESS
    -	FORWARD
    -	CALC_LOSS
    -	BACKWARD
    -	OPTIMIZING
    -	METRICS
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    train_loop.run()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    train_loop.summary()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    Loop layer opt_step summary:
    -==================================================
    -🍰layer0.0	layer:>>>DataLoop
    ---------------------------------------------------
    -🍰layer1.0	layer:>>>Progressb Bar
    -	[🐍func_name]	pgbar_data
    -	[⛰doc]	
    -        update progress bar with python dictionary
    -        data: python dictionary
    -        
    -	[😝var]	self,data
    -	[😜names]	t,set_postfix
    -	...................................
    -	[🐍func_name]	pgbar_description
    -	[⛰doc]	
    -        update progress bar prefix with text string
    -        
    -	[😝var]	self,text
    -	[😜names]	t,set_description_str
    -	...................................
    ---------------------------------------------------
    -🍰layer2.0	layer:>>>Tolerate
    -	[🐍func_name]	error_list
    -	[⛰doc]	
    -        A list of errors happend so far
    -        
    -	[😝var]	self
    -	[😜names]	errors
    -	...................................
    ---------------------------------------------------
    -🍰layer3.0	layer:>>>before_forward
    -	[🐍func_name]	on_before_forward
    -	[⛰doc]	
    -            Excute callback for event:before_forward
    -        
    -	[😝var]	self
    -	[😜names]	__call__
    -	...................................
    -	[🐍func_name]	set_before_forward
    -	[⛰doc]	
    -            Append new callback for event:before_forward
    -            Use this function as decorator
    -        
    -	[😝var]	self,f
    -	[😜names]	on
    -	...................................
    ---------------------------------------------------
    -🍰layer4.0	layer:>>>forward
    -	[🐍func_name]	on_forward
    -	[⛰doc]	
    -            Excute callback for event:forward
    -        
    -	[😝var]	self
    -	[😜names]	__call__
    -	...................................
    -	[🐍func_name]	set_forward
    -	[⛰doc]	
    -            Append new callback for event:forward
    -            Use this function as decorator
    -        
    -	[😝var]	self,f
    -	[😜names]	on
    -	...................................
    ---------------------------------------------------
    -🍰layer5.0	layer:>>>calc_loss
    -	[🐍func_name]	on_calc_loss
    -	[⛰doc]	
    -            Excute callback for event:calc_loss
    -        
    -	[😝var]	self
    -	[😜names]	__call__
    -	...................................
    -	[🐍func_name]	set_calc_loss
    -	[⛰doc]	
    -            Append new callback for event:calc_loss
    -            Use this function as decorator
    -        
    -	[😝var]	self,f
    -	[😜names]	on
    -	...................................
    ---------------------------------------------------
    -🍰layer6.0	layer:>>>backward
    -	[🐍func_name]	on_backward
    -	[⛰doc]	
    -            Excute callback for event:backward
    -        
    -	[😝var]	self
    -	[😜names]	__call__
    -	...................................
    -	[🐍func_name]	set_backward
    -	[⛰doc]	
    -            Append new callback for event:backward
    -            Use this function as decorator
    -        
    -	[😝var]	self,f
    -	[😜names]	on
    -	...................................
    ---------------------------------------------------
    -🍰layer7.0	layer:>>>opt_step
    -	[🐍func_name]	on_opt_step
    -	[⛰doc]	
    -            Excute callback for event:opt_step
    -        
    -	[😝var]	self
    -	[😜names]	__call__
    -	...................................
    -	[🐍func_name]	set_opt_step
    -	[⛰doc]	
    -            Append new callback for event:opt_step
    -            Use this function as decorator
    -        
    -	[😝var]	self,f
    -	[😜names]	on
    -	...................................
    ---------------------------------------------------
    -==================================================
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    @train_loop.layer.set_opt_step
    -def opt_step(self):
    -    print("step")
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    train_loop.run()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -step
    -
    -
    -
    -
    - -
    -
    - -
    - {% endraw %} -
    - - diff --git a/docs/turbo.html b/docs/turbo.html deleted file mode 100644 index 790d2d1..0000000 --- a/docs/turbo.html +++ /dev/null @@ -1,851 +0,0 @@ ---- - -title: Turbo - -keywords: fastai -sidebar: home_sidebar - -summary: "Iteration manager" ---- - - -
    - {% raw %} - -
    - -
    -
    -
    - -
    -
    -
    import pandas as pd
    -import numpy as np
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    import math
    -class turboBase(object):
    -    def __init__(self,length, batch_size=16,shuffle = True):
    -        self.length = length
    -        self.shuffle = shuffle 
    -        self.batch_size = batch_size
    -        self.march_funcs = {}
    -        self.march_order = []
    -        self.shuffle_data()
    -        self.idx = 0
    -        
    -    def epoch(self):
    -        gen = iter(self)
    -        t= tqdm(range(len(self)))
    -        for i in t:
    -            rt = next(gen)
    -            if rt["success"]==False:
    -                break
    -                
    -    def __repr__(self):
    -        return f"<turbo bs:{self.batch_size} len:{len(self)}>"
    -        
    -    def shuffle_data(self):
    -        if self.shuffle:
    -            self.order = np.random.permutation(len(self))
    -        
    -    def __len__(self):
    -        return math.ceil(float(self.length)/float(self.batch_size))
    -    
    -    def __iter__(self):
    -        raise NotImplemented("Please define the __iter__ function first")
    -    
    -    def march(self,f):
    -        funame = f.__name__
    -        self.march_funcs[funame] = f
    -        if funame not in self.march_order:
    -            self.march_order.append(funame)
    -        def wraper(*args,**kwargs):
    -            return f(*args,**kwargs)
    -        return wraper
    -    
    -    def __call__(self,x):
    -        for m in self.march_order:
    -            x = self.march_funcs[m](x)
    -        return x
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    df = pd.read_csv("data/netflix_titles.csv")
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    df
    -
    - -
    -
    -
    - -
    -
    - -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    show_idtypetitledirectorcastcountrydate_addedrelease_yearratingdurationlisted_indescription
    081145628MovieNorm of the North: King Sized AdventureRichard Finn, Tim MaltbyAlan Marriott, Andrew Toth, Brian Dobson, Cole...United States, India, South Korea, ChinaSeptember 9, 20192019TV-PG90 minChildren & Family Movies, ComediesBefore planning an awesome wedding for his gra...
    180117401MovieJandino: Whatever it TakesNaNJandino AsporaatUnited KingdomSeptember 9, 20162016TV-MA94 minStand-Up ComedyJandino Asporaat riffs on the challenges of ra...
    270234439TV ShowTransformers PrimeNaNPeter Cullen, Sumalee Montano, Frank Welker, J...United StatesSeptember 8, 20182013TV-Y7-FV1 SeasonKids' TVWith the help of three human allies, the Autob...
    380058654TV ShowTransformers: Robots in DisguiseNaNWill Friedle, Darren Criss, Constance Zimmer, ...United StatesSeptember 8, 20182016TV-Y71 SeasonKids' TVWhen a prison ship crash unleashes hundreds of...
    480125979Movie#realityhighFernando LebrijaNesta Cooper, Kate Walsh, John Michael Higgins...United StatesSeptember 8, 20172017TV-1499 minComediesWhen nerdy high schooler Dani finally attracts...
    .......................................
    622980000063TV ShowRed vs. BlueNaNBurnie Burns, Jason Saldaña, Gustavo Sorola, G...United StatesNaN2015NR13 SeasonsTV Action & Adventure, TV Comedies, TV Sci-Fi ...This parody of first-person shooter games, mil...
    623070286564TV ShowMaronNaNMarc Maron, Judd Hirsch, Josh Brener, Nora Zeh...United StatesNaN2016TV-MA4 SeasonsTV ComediesMarc Maron stars as Marc Maron, who interviews...
    623180116008MovieLittle Baby Bum: Nursery Rhyme FriendsNaNNaNNaNNaN2016NaN60 minMoviesNursery rhymes and original music for children...
    623270281022TV ShowA Young Doctor's Notebook and Other StoriesNaNDaniel Radcliffe, Jon Hamm, Adam Godley, Chris...United KingdomNaN2013TV-MA2 SeasonsBritish TV Shows, TV Comedies, TV DramasSet during the Russian Revolution, this comic ...
    623370153404TV ShowFriendsNaNJennifer Aniston, Courteney Cox, Lisa Kudrow, ...United StatesNaN2003TV-1410 SeasonsClassic & Cult TV, TV ComediesThis hit sitcom follows the merry misadventure...
    -

    6234 rows × 12 columns

    -
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    from tqdm import tqdm
    -class dfTurbo(turboBase):
    -    def __init__(self,df, batch_size=16, shuffle=False):
    -        super().__init__(len(df),batch_size=batch_size,shuffle=shuffle)
    -        self.df = df
    -        
    -    def __iter__(self):
    -        self.idx = 0
    -        return self
    -        
    -    def __next__(self):
    -        if self.shuffle:
    -            a = self.order[self.idx]
    -        else:
    -            a = self.idx
    -        b=a+1
    -        try:
    -            self.idx+=1
    -            dt = self(self.df[self.batch_size*a:self.batch_size*b])
    -            return  {"data":dt,"success":True}
    -        except Exception as e:
    -            self.idx=0
    -            return {"data":{"msg":str(e)}, "success":False}
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    dft = dfTurbo(df)
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    @dft.march
    -def directors(df):
    -    print(list(df[~df.director.isna()]["director"]))
    -    return df
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    dft.epoch()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
     51%|█████     | 199/390 [00:00<00:00, 901.99it/s]
    -
    -
    - -
    - -
    -
    ['Richard Finn, Tim Maltby', 'Fernando Lebrija', 'Gabe Ibáñez', 'Rodrigo Toro, Francisco Schultz', 'Henrik Ruben Genz', 'José Miguel Contreras', 'Daniel Alfredson', 'Munjal Shroff, Tilak Shetty', 'Munjal Shroff, Tilak Shetty', 'Tilak Shetty']
    -['Tilak Shetty', 'Munjal Shroff, Tilak Shetty', 'Gaspar Noé', "Tom O'Brien", 'Antoine Bardou-Jacquet', 'Mitch Dickman', 'Brad Anderson', 'Austin Stark', 'Hannah Fidell', 'Madeleine Gavin', 'Sopon Sukdapisit', 'Kevin R. Adams, Joe Ksander', 'Ian Samuels']
    -['Franck Ribière', 'Daniele Thompson', 'Anubhav Sinha', 'Maha Venkatesh', 'Tharun Bhascker', 'Şenol Sönmez', 'Tom Gianas, Ross R. Shuman', 'Rajkumar Hirani', 'Robert Osman, Nathanael Wiseman', 'Jon Spira', 'Mez Tharatorn', 'Adisorn Tresirikasem', 'Mez Tharatorn']
    -['Banjong Pisanthanakun', 'Banjong Pisanthanakun, Paween Purikitpanya, Songyos Sugmakanan, Parkpoom Wongpoom, Visute Poolvoralaks', 'Banjong Pisanthanakun, Parkpoom Wongpoom', 'Chayanop Boonprakob', 'Susan Johnson', 'Lynn Shelton', 'Farhan Alam', 'Chad Archibald', 'Brian Baugh', 'A. L. Vijay', 'Ryan Coogler', 'Ben Palmer', 'Chris Howe']
    -['Ken Kwapis', 'Park In-je', 'Rod Blackhurst, Brian McGinn', 'Jesse V. Johnson', 'Mahsun Kırmızıgül', 'Monique Gardenberg', 'Mike Flanagan', 'Jacob LaMendola']
    -['Ritesh Batra', 'Dylan Howitt', 'William Lau', 'Mana Yasuda', 'Brian De Palma', 'Mana Yasuda', 'Rizal Mantovani', 'Han Yan', 'Jeremy Saulnier', 'Kim A. Snyder', 'Raditya Dika', 'Rocky Soraya']
    -['Sunil Soraya', 'Álvaro Longoria, Gerardo Olivares', 'Brendan Byrne', 'Gupse Özay', 'Jim Mickle', 'Jumpei Mizusaki, Koji Morimoto, Michael Arias, Masaru Matsumoto, Arthell Isom, Henry Thurlow, Takanobu Mizuno, Elsa Nakamichi, Hajime Sasaki, Shinji Takagi', 'Chi Fat Chan', 'Nabil Ayouch', 'Rob LaDuca, Robert C. Ramirez', 'Mangesh Hadawale', 'Wong Kar Wai']
    -['Rob Cohen', 'Louis J. Horvitz', 'Linda Saffire, Adam Schlesinger', 'Luis Lopez, Clay Tweel', 'Otilia Portillo Padua', 'Le Van Kiet', 'Eric Summer, Éric Warin', 'B. V. Nandini Reddy', 'B. V. Nandini Reddy', 'Mario Van Peebles', 'Ava DuVernay', 'Sonia Lowman', 'Benjamin Turner', 'Michael J. Bassett', 'Troy Miller', 'Tan Bing']
    -['Warren P. Sonoda', 'Álex de la Iglesia', 'Rahul Ravindran', 'Archie Borders', 'Bonni Cohen, Jon Shenk', 'Bobcat Goldthwait', 'Deepti Naval', 'Morgan Neville', 'Anthony Byrne', 'Chris Moukarbel', 'Ana Lily Amirpour', 'Alex Winter', 'Kemi Adetiba', 'Toka McBaror']
    -['Gilles Paquet-Brenner', 'Niyi Akinmolayan', 'Rashida Jones, Alan Hicks', 'Scott Aukerman', 'Mariano Barroso', 'Amara Cash']
    -['Kiko Cruz Claverol, Patricia Font', 'Bedran Güzel', 'Chun Wong', 'Coerte Voorhees, John Voorhees', 'Samuel D. Pollard', 'Ham Tran', 'Feng Xiaogang', 'Gary Michael Schultz']
    -['Liv Ullmann', 'Sandeep Reddy Vanga', 'Jacques Perrin, Jacques Cluzaud', 'Justin Benson, Aaron Moorhead', 'Michael Bonfiglio', 'Zack Whedon', 'Eric Stoltz']
    -['Conrad Helten', 'Morgan Neville', 'Teo Konuralp', 'Jesse V. Johnson', 'Chris Perkel', 'Cheh Chang', 'Manny Rodriguez', 'Robert Eggers', 'Chuck Russell', 'John Erick Dowdle']
    -['Edgar Wright', 'Tony Elliott', 'Troy Miller', 'Louis C.K.', 'Jeremy Coon, Tim Skousen', 'Orlando von Einsiedel', 'Tom Donahue', 'Michèle Ohayon', 'Timothy Woodward Jr.']
    -['Nia Dinata', "Mark O'Connor", 'Ajithkumar', 'Lucky Kuswandi', 'Riri Riza', 'Vijay Milton', 'Susannah Heath-Eves', 'Santwana Bardoloi', 'Atanu Ghosh', 'Amitava Bhattacharya', 'Partha Chakraborty']
    -['Raffi Ahmad, Arie Azis', 'Angelina Jolie', 'Pavel Parkhomenko', 'Azfar Jafri', 'R. Ellis Frazier', 'R. Ellis Frazier', 'Yance Ford', 'Mark Tonderai', 'Roman Atwood, Ben Pluimer', 'Dan Forrer', 'Kip Andersen, Keegan Kuhn', 'B. V. Nandini Reddy', 'Randall Lobb', 'Stacie Passon', 'Manop Janjarasskul']
    -['Shinsuke Sato', 'Chatchai Katenut, Manussa Vorasingha, Tanwarin Sukkhapisit, Poj Arnon', 'Ariel Vromen', 'Nicole Holofcener', 'Jerry G. Angelo', 'Michael Feifer', 'Elle Callahan', 'Alex Stapleton', 'Kıvanç Baruönü']
    -['Teng Huatao', 'Nzingha Stewart', 'Mark Dennis, Ben Foster', 'Ben Wallis', 'Dan Krauss', 'David Soren', 'Alessio Cremonini', 'Elaine McMillion Sheldon']
    -['Michael Simon', 'Joram Lürsen', 'Oliver Frampton', 'Mike Binder', 'Ryan Murphy', 'Orlando von Einsiedel', 'Mark Franchetti, Andrew Meier', 'Damián Romay', 'Trent Haaga', 'Mary Harron', 'Roger Donaldson', 'Petra Costa', 'Steven C. Miller']
    -['Richard Miron', 'Tony Leondis', 'Roger Kumble', 'Kunle Afolayan', 'Craig Gillespie', 'Nick Cassavetes', 'Clint Eastwood', 'Kunle Afolayan', 'Petra Costa, Lea Glob', 'Roger Allers, Jill Culton', 'Kunle Afolayan', 'Wolfgang Petersen', 'Jonathan Demme', 'Bernie Denk']
    -['Ivan Reitman', 'Greg Mottola', 'Kunle Afolayan', 'Kunle Afolayan', 'Alejandro Agresti', 'Daniel Stamm', 'Phillip Noyce', 'Tony Scott', 'Ahmed Zain', 'Mohamed Hamdy', 'Dennis Dugan', 'Peter Ho', 'Jordi Llompart', 'Rian Johnson']
    -['Olivier Marchal', 'Dennis Iliadis', 'Qaushiq Mukherjee', 'Sudip Bandyopadhyay', 'Onir', 'Jatla Siddartha', 'Jeremy Saulnier', 'Kanwal Sethi', 'Banjong Pisanthanakun', 'Alfonso Cuarón', 'Samuel Jouy', 'Akiva Goldsman', 'Damien Leone', 'Karen Moncrieff', 'Jean-Pierre Devillers']
    -['Sophon Sakdaphisit', 'Curtis Hanson', 'Young Jun Lee', 'Rajiv Mehra', 'Toshiyuki Kubooka', 'Toshiyuki Kubooka', 'Todd S. Yellin', 'Jesse Adang, Syrine Boulanouar', 'Rajiv Mehra']
    -['Elizabeth Chai Vasarhelyi', 'Toshiya Shinohara', 'Toshiya Shinohara', 'Toshiya Shinohara', 'Mohammed Hussain', 'Eli Craig', 'Parambrata Chatterjee', 'Shammi Kapoor', 'Umesh Mehra', 'Masahiko Murata', 'Masahiko Murata', 'Masahiko Murata']
    -['Hirotsugu Kawasaki', 'Toshiyuki Tsuru', 'Tensai Okamura', 'Florian Schnell', 'Josh Izenberg, Wynn Padula', 'Thierry Demaizière, Alban Teurlai', 'Spike Lee', 'Latif Faiziyev, Umesh Mehra', 'Gastón Duprat, Mariano Cohn', 'Bette Gordon', 'Gary Wang', 'Raz Degan', 'Israel Adrián Caetano', 'Mariano Cohn, Gastón Duprat', 'Drew Stone']
    -['Joram Lürsen', 'Jelle de Jonge', 'Afia Nathaniel', 'Luke Jurevicius', 'Sean Cisterna', 'Will Allen', 'Nacho G. Velilla']
    -['David Serrano', 'Jay Chapman', 'Jenny Gage', 'Kaila York', 'Ifa Isfansyah', 'Stan Lathan', 'Angga Dwimas Sasongko', 'Evgeny Afineevsky', 'Ryan Polito', 'Kabir Bhatia', 'Russell Crowe', 'Andrew Sandler']
    -['Ava DuVernay', 'Dave Higby', 'Richie Smyth', 'Andibachtiar Yusuf', 'Dustin Nguyen', 'Chris Eigeman', 'Stanley Tong', 'David France', 'Vandana Kataria', 'Angga Dwimas Sasongko', 'Riri Riza']
    -['Olaf de Fleur', 'Tamara Jenkins', 'Onur Bilgetay', 'Vincenzo Natali', 'Tugçe Soysop', 'Jacob Joice, Steve Ball', 'Craig Goodwill', 'Riri Riza', 'Mickey Liddell']
    -['Michael D. Black', 'Juani Libonatti', 'DJ Chen', 'Dani de la Torre', 'Jerrold Tarog', 'Judah Friedlander', 'Errol Morris', 'Oliver Blackburn', 'Park Joon-hwa', 'Saravana Rajendran', 'Onir', 'Jitendra Tiwari, Pranav Singh']
    -['Vivek Wagh', 'Riri Riza', 'Alex Israel', 'Lee Fulkerson', 'Joe Camp', 'Kavi Raz', 'Nick Simon', 'Don Mancini', 'Brandon Jones', 'Alain Desrochers', 'Brian Volk-Weiss', 'Deniz Gamze Ergüven']
    -['Robert Vince', 'Everardo González', 'Matt Kay', 'Drake Doremus', 'Robert Vince', 'Osgood Perkins', 'Werner Herzog', 'Julien Rambaldi', 'Yvan Attal', 'Benjamin Weill', 'Scott Hussion, Seth Fuller', 'Wilson Yip', 'Griffin Dunne']
    -['Roger Gual', 'J. Davis', 'Rob Smat', 'Tinge Krishnan', 'Aleksey German', 'Eric Zaragosa', 'Sergio Barrejón', 'Sandi Tan', 'Vijay Yelakanti', 'Katherine Dieckmann', 'Natalie Portman', 'John Murlowski']
    -['Ozan Açıktan', 'Craig Brewer', 'Billy Lyons', 'Michael Steed', 'Zak Hilditch', 'Michael Steiner', 'Vlad Yudin', 'Paul Berczeller, Mark Radice']
    -['Quentin Tarantino', 'Chris Buck, Jennifer Lee, Patrick Osborne, Lauren MacMullan, John Kahrs, Nathan Greno, Byron Howard, Stevie Wermers, Dean Wellins, Kevin Deters, Roger Allers, Mike Gabriel, Mark Henn', 'Andrew Slater', 'Glen Goei, Gavin Yap', 'S.S. Rajamouli', 'Brian Klein', 'Katy Chevigny, Ross Kauffman', 'Sarik Andreasyan', 'Huw Cordey', 'Yuen Woo-ping', 'Steve Brill']
    -['Don Michael Paul', 'Noah Baumbach', 'Jonathan Mostow', 'Brett Haley', 'Gillian Robespierre', 'Tobe Hooper', 'Daniel Benmayor', 'Abu Bakr Shawky', 'Jedd Wider, Todd Wider', 'Nagesh Kukunoor', 'Priyadarshan', 'Raj Kanwar', 'Pooja Bhatt', 'Satish Kaushik', 'Nikhil Advani']
    -['Anees Bazmee', 'Andrew Bujalski', 'Ben Wheatley', 'Riri Riza', 'Anthony Giordano', 'Wyatt Cenac', 'Joanna Lombardi, Bruno Ascenzo', 'David Batty', 'Zak Hilditch', 'Jennifer Siebel Newsom', 'Heidi Ewing, Rachel Grady', 'Jeremy Rush']
    -['Luis Javier Henaine', 'Anand Kamalakar', 'Don Michael Paul', 'Eric Idle, Aubrey Powell', 'Anthony Giordano', 'Will Yapp']
    -['Eric Idle', 'Will Yapp', 'Terry Hughes, Ian MacNaughton', 'Roger Graef, James Rogan', 'Terry Jones', 'Ian MacNaughton', 'Albert Sharpe', 'Leslye Headland', 'Jay Karas', 'Prakash Satam', 'Barry Sonnenfeld', 'Omoni Oboli']
    -['Thomas Vinterberg', 'Marcos Bucay', 'Peter Lepeniotis', 'Kim Jee-woon', 'Rajesh Touchriver', 'David Lam', 'David Batty', 'David Batty', 'David Batty', 'Timo Tjahjanto']
    -['Reem Kherici', 'Adze Ugah', 'Steve Gukas', 'Ciarán Foy', 'Frank Rajah Arase', 'Yılmaz Erdoğan', 'Tope Oshin', 'Daniel Sánchez Arévalo', 'Don Omope', 'Ed Perkins', 'Steven Soderbergh']
    -['Tope Oshin', 'Udai Singh Pawar', 'Guntur Soeharjanto', 'Thiru', 'Federico Lemos', 'Harald Zwart', 'Bruce McDonald', 'Bobcat Goldthwait', 'Bassam Tariq', 'Leslie Iwerks', 'Kim Joo-hyung', 'Ciarán Foy', 'Louie Psihoyos']
    -['Tom Forrest', 'Milan Luthria', 'John Crowley', 'Ranjit Tiwari', 'Tom Fassaert', 'Adam Dubin', 'Cary Joji Fukunaga', 'Aaron Hann, Mario Miscione', 'Ahmet Katıksız', 'Alexandros Avranas', 'Anindya Chatterjee']
    -['Anik Datta', 'Rajkumar Hirani', 'Ishaan Trivedi', 'Biswajeet Bora', 'Sohail Tatari', 'David Stubbs', 'Madhur Bhandarkar', 'Parveen Kumar', 'Matías Gueilburt', 'Ananth Narayan Mahadevan', 'Ah Loong', 'Girish Malik', 'Debaloy Dey']
    -['Martin Rosete', "Jasmine D'Souza", 'Ben C. Lucas', 'Rohit Jugraj', 'Shakti Samanta', 'Raj B. Shetty', 'Navneet Behal', 'Sukhbir Singh', 'Naresh Saigal', 'Ram Gopal Varma', 'Dhruv Dhawan', 'Thomas Sorriaux', 'Toshiyuki Kubooka', 'Noriyuki Abe', 'Noriyuki Abe']
    -['Clovis Cornillac', 'Hajime Kamegaki', 'Hajime Kamegaki', 'Jean-François Blais', 'Derek Hui', 'Kevin MacDonald', 'Stefano Sollima', 'Dave Higby', 'Leïla Sy, Kery James', 'Shaad Ali']
    -['Mahmoud al Massad', 'Yesim Ustaoglu', 'Jan Suter', 'Lucy Cohen', 'McG', 'Noah Baumbach', 'Christopher Guest', 'Gareth Evans', 'Paul Urkijo Alijo', 'Johanna Demetrakas', 'Padraic McKinley', 'Rizal Mantovani', 'Kief Davidson']
    -['Sara Colangelo', 'Mahmoud Sabbagh', 'Borja Cobeaga', 'Jonathan Demme', 'Leo Riley', 'Hakan Algül', 'Vince Gilligan', 'Brad Anderson', 'Bolanle Austen-Peters', 'Sion Sono', 'Dennis Rovira van Boekholt', 'Angga Dwimas Sasongko', 'Mohamed Diab']
    -['Naoto Amazutsumi', 'Paul Greengrass', 'Rusty Cundieff, Darin Scott', 'Jay Karas', 'Alastair Fothergill', 'James Yukich', 'Maciej Dejczer', 'Rusty Nixon', 'Lee Tamahori', 'Richard Rich', 'Michael Bay', 'Michael Bay', 'Ted Demme']
    -['Bernard Rose', 'McG', 'McG', 'Lee Yoon-jung', 'Paul Haggis', 'Troy Miller', 'Dave Green', 'Wojciech Marczewski', 'Andrzej Bartkowiak', 'Roy Poortmans', 'Brian Robbins', 'Mark Helfrich']
    -['Jon Hurwitz, Hayden Schlossberg', 'Bille Woodruff', 'Janusz Majewski', 'Alex Merkin', 'Janusz Majewski', 'Alex Proyas', 'Vrinda Samartha', 'Jacek Koprowicz', 'Barry Sonnenfeld', 'Nicholaus Goossen', 'Scott Hicks', 'Steven Soderbergh', 'Steven Soderbergh']
    -['Morgan Spurlock', 'Martin Scorsese', 'Stig Bergqvist, Paul Demeyer', 'Wes Craven', 'Asif Kapadia', 'Robert Rodriguez, Frank Miller', 'Dorian Fernández-Moris', 'Jeannot Szwarc', 'Bryan Singer', 'Ash Brannon, Chris Buck', 'Andy Tennant', 'Rob Reiner', 'Marek Piwowski', 'Kunle Afolayan', 'Brian Levant']
    -['Brian Levant', 'Stanisław Różewicz', 'Gabriele Muccino', 'Igor Kovalyov, Norton Virgien', 'Krzysztof Zanussi', 'Noah Baumbach', 'Robert Schwentke', 'Danny Boyle', 'Wolfgang Petersen', 'Paul Feig', 'Alex Smith, Andrew J. Smith', 'Antoni Krauze', 'Stanisław Różewicz']
    -['Simranjit Singh Hundal', 'Justin G. Dyck', 'Ram Gopal Varma', 'N. Linguswamy', 'Deep Joshi', 'Antoine Fuqua', 'John Curran', 'Rakeysh Omprakash Mehra', 'Anurag Kashyap', 'Manjeet Maan', 'Shagufta Rafique', 'Shakun Batra', 'Andrew Renzi', 'Tinu Pappachan']
    -['Amitoj Mann', 'Amarpreet G S Chabbra', 'Paresh Mokashi', 'Anurag Basu', 'Rohit Jugraj', 'Ashutosh Gowariker', 'Atharv Baluja', 'Vishal Bhardwaj', 'Leslie Small, Tim Story', 'Shannon Hartman', 'Rohit Jugraj', 'Shashanka Ghosh', 'Steve Greenwood', 'Puneet Sira', 'Aziz Mirza']
    -["Renzil D'Silva", 'Smeep Kang', 'Sameer Sharma', 'Chandan Arora', 'Baljit Singh Deo', 'Amitoj Mann', 'Jennifer Peedom', 'Mysskin', 'Rajan Madhav', 'Raaghav Dar', 'Ishi Rudell', 'Ishi Rudell', 'David Lee Miller', 'Thiru', 'Amit Saxena']
    -['Pankaj Batra', 'Jaivi Dhanda', 'Suman Ghosh', 'Kabir Khan', 'Akshay Akkineni', 'Nidhi Sharma', 'Mastan Alibhai Burmawalla, Abbas Alibhai Burmawalla', 'Abbas Alibhai Burmawalla, Mastan Alibhai Burmawalla', 'Vipin Parashar', 'Vikram Pradhan', 'Vijay', 'Eduardo Chauvet', 'Sundar C.', 'Sartaj Singh Pannu']
    -['Vikramaditya Motwane', 'James McTeigue', 'N. Linguswamy', 'Ayaan Mukherji', 'Sidharth Malhotra', 'Saket Behl', 'Kevin Smith', 'Anjum Shahzad', 'Geun-hyun Cho', 'Christian Desmares, Franck Ekinci', 'Kyran Kelly', 'Adam Wood', 'Zeke Norton', 'Karen J. Lloyd', 'Andrew Tan, Michael Goguen', 'William Lau']
    -['Ezekiel Norton', 'Conrad Helten', 'Ezekiel Norton', 'Conrad Helten, Ezekiel Norton, Michael Goguen', 'Alê Abreu', 'Carlos Therón', 'Francesco Carrozzini', 'Noah Baumbach', 'Vlad Yudin', 'Karen J. Lloyd', 'Benjamin Turner, Gabe Turner']
    -['Steve Race', 'Brett Harvey', 'Roger Allers, Gaëtan Brizzi, Paul Brizzi, Joan C. Gratz, Mohammed Saeed Harib, Tomm Moore, Nina Paley, Bill Plympton, Joann Sfar, Michael Socha', 'Keiichi Hara', 'William Lau', 'Audu Paden, Eric Radomski', 'Claude Barras', 'Jean-Loup Felicioli, Alain Gagnol', 'Toa Fraser', 'Vibeke Idsøe']
    -['Chan-sang Lim', 'Kyoko Miyake', 'Carlos Algara, Alejandro Martinez-Beltran', 'Stephen Donnelly, Olly Reid, Jun Falkenstein', 'Mikhil Musale', 'Riccardo Pilizzeri', 'Guilherme Fontes', 'Aamir Bashir', 'Alejandro Fernández Almendras']
    -['Álex de la Iglesia', 'Ishi Rudell', 'David Schalko', 'Pieter Kuijpers', 'Prashant Nair', 'Paul Taublieb, Jon Freeman', 'Riccardo Milani', 'Larry Elikann', 'Robert Markowitz', 'Eric Laneuville']
    -['Joel Oliansky', 'Roy Campanella II', 'Arthur Allan Seidelman', 'John Herzfeld', 'Buzz Kulik', 'Richard Michaels', 'Linda Otto', 'Roger Young', 'Vincent Kok', 'Fellipe Barbosa', 'Christian Zübert', 'David Mackenzie']
    -['David Palmer, Dax Shepard', 'Luke Snellin', 'Xavier Durringer', 'Jack C. Newell', 'Cecilia Atán, Valeria Pivato', 'Gus Van Sant', 'Saratswadee Wongsomphet', 'Kirati Nakintanon', 'Antongiulio Panizzi', 'Pawan Kumar']
    -['Patricia Rozema', 'Trey Edward Shults', 'Christian Charles', 'Bronwen Hughes', 'Orlando von Einsiedel', 'Phillip Youmans', 'Zhang Yimou', 'John Ridley', 'Lucas Margutti', 'Neal Brennan', 'Azazel Jacobs', 'Jung Ji-woo', 'Leslie Small']
    -['Tejas Prabha Vijay Deoskar', 'Anees Bazmee', 'Jim Fall', 'Marita Grabiak', 'Jason Priestley', 'Neill Blomkamp', 'Noah Baumbach', "Matt D'Avella", 'Parthiban', 'Morgan Matthews', 'Marcus Raboy', 'Kief Davidson, Richard Ladkani']
    -['Luis Ara, Ignacio Jaunsolo', 'Abhishek Sharma', 'John Schultz', 'Damien O’Connor', 'Joseduardo Giordano, Sergio Goyri Jr.', 'Rudy Soedjarwo', 'Alice Rohrwacher', 'Kabir Bhatia, Titien Wattimena', 'Nandita Das', 'Leena Yadav', 'Romain Gavras', 'Sebastián Hofmann']
    -['Heidi Brandenburg, Mathew Orzel', 'John Luessenhop', 'Mike Disa', 'Pali Yahya', 'Mati Diop', 'Moses Inwang', 'Jérémy Clapin', 'Mandla Dube', 'Mike Ezuruonye', 'Cheta Chukwu', 'Roger Russell', 'Toka McBaror']
    -['Leslie Small', 'Frank Oz', 'Lu Yang', 'Edward Zwick', 'Basava Shankar Eeday', 'Prakash Satam', 'Elle-Máijá Tailfeathers, Kathleen Hepburn', 'Martin Scorsese', 'Dante Lam']
    -['Shreyas Talpade', 'Seth Barrish', 'Steve Ball', 'Sanjiv Jaiswal', 'Marta Jaenes, Rosa Márquez', 'Daniel Raim', 'Denny Lu, Mike Myhre', 'Luis Ara', 'María Jose Cuevas', 'Oz Rodriguez', 'Aleksandr Chernyaev, Fedor Lyass', 'Robert Altman']
    -['Ric Roman Waugh', 'Cary Murnion, Jonathan Milott', 'Jon Alpert', 'Ibai Abad', 'Charles A. Nichols, Iwao Takamoto', 'David Ayer', 'John Irvin', 'Simon Wells', 'David Ayer', 'Julio Soto Gurpide', 'Julien Abraham']
    -['Tsutomu Mizushima', 'Nate Adams, Adam Carolla', 'Clay Kaytis', 'Barbra Streisand, Jim Gable', 'Qaushiq Mukherjee, Nikon', 'Chris Sparling', 'Qaushiq Mukherjee', 'Kathryn Bigelow']
    -['Monika Mitchell', 'Noah Baumbach, Jake Paltrow', 'Fernando Colomo', 'Josh Wakely', 'Troy Miller', 'Jacob Kornbluth', 'Jon Gunn', 'Jan Suter, Raúl Campos Delgado', 'Anne Fontaine', 'Joshua Caldwell', 'Mike Judge', 'Bruce W. Smith', 'Eva Orner']
    -['Craig Brewer', 'Àlex Pastor, David Pastor', 'KVR Mahendra', 'Andrew Jenks', 'Ivan Reitman', 'John Schlesinger', 'Akiva Schaffer', 'Andy Tennant', 'Juan Carlos Rulfo', 'Christian Ditter', 'Raj R', 'Sergio Leone', 'Jim Field Smith', 'Bruce McCulloch', 'Steven Spielberg']
    -['William Brent Bell', 'Hugh WIlson', 'Sam Raimi', 'Neal Brennan', 'Robert Aldrich', 'Marco Schnabel', 'Francis Ford Coppola', 'Lasse Hallström', 'Oliver Stone', 'Jason Reitman', 'Raja Gosnell', 'David Fincher', 'Robert Vince']
    -['Rocky Soraya', 'Raditya Dika', 'David Paul Meyer', 'Savage Steve Holland', 'Savage Steve Holland', 'Troy Nixey', 'Scott McAboy', 'Raymie Muzquiz, Stu Livingston', 'Stephen Herek', 'Joe Menendez', 'Vince Marcello', 'David R. Ellis', 'Eric Bross']
    -['Will Eisenberg', 'Matheus Souza', 'Sara Dosa', 'Bradley Walsh', 'Orson Welles', 'Morgan Neville', 'Benjamin Ross', 'Stephen Hopkins', 'Steve Paley', 'Shannon Hartman, Michelle Caputo', 'Leslie Iwerks', 'Na Hyeon']
    -['Jerry Seinfeld', 'Houda Benyamina', 'Jerry Rothwell, Reuben Atlas', 'Kristin Hanggi', 'Joe Dante', 'Alex Zamm', 'Chris Smith', 'Tilak Shetty', 'Dee Rees', 'Glenn Miller']
    -['Nicolas Winding Refn', 'Timo Vuorensola', 'Robb Dipple', 'Sarah Gavron', 'Eli Roth', 'Daniel Goldhaber', 'Asri Bendacha', 'Fred Cavayé', 'Joel Coen, Ethan Coen', 'Shane Acker']
    -['Wash Westmoreland', 'Alessandro Angulo', 'Mauro Scandolari', 'Arjun Jandyala', 'Shashanka Ghosh, Samit Basu', 'Naoko Yamada', 'Sergio Pablos', 'Anand Tucker', 'Valli Bindana', 'Nate Adams, Adam Carolla']
    -['Makoto Shinkai', 'V C Abhilash', 'Justin G. Dyck', 'Nila Madhab Panda', 'Sameer Vidwans', 'Timo Tjahjanto', 'Nakul Singh Sawhney', 'Nishanth Ravindaran, Jathin Sanker Raj', 'Bill Guttentag, Michael Ware', 'Gajendra Ahire', 'Swapna Waghmare Joshi', 'Raymond McGrath', 'Adele K. Thomas, Richard Bailey']
    -['Richard Bailey', 'Julien Leclercq', 'Aitor Arregi, Jon Garaño', "Remo D'Souza", 'Radhika Rao, Vinay Sapru', 'Volker Weicker', 'Manjeet Singh', 'Oliver Stone', 'Nick Mead', 'Gautier & Leduc', 'Marcus Raboy']
    -['Timothy Woodward Jr.', 'Lance Bangs', 'Matt Piedmont', 'Erik Matti', 'Christopher Guest', 'John Scheinfeld', 'Rhys Thomas', 'Christopher Storer', 'Jeremy Saulnier', 'Jennifer Baichwal, Nicholas de Pencier', 'Tom Ford', 'J.M. Berrios']
    -['Josh Aronson', 'Alain Desrochers', 'Estela Renner', 'Jeff Wadlow', 'Laurent Cantet', 'Shannon Hartman', 'Raúl Campos, Jan Suter', 'Natalia Valdebenito', 'Marcelo Galvão', 'Lorene Machado', 'Richard Donner']
    -['Kevin Reynolds', 'Marina Seresesky', 'Tony Kaye', 'Kenny Leon', 'Peter Segal', 'David Salzberg, Christian Tureaud', 'Daniel Mann', 'Richard Brooks', 'Michael Kampa', 'Harvey Lowry', 'James Dearden', 'Jack Starrett', 'Les Mayfield']
    -['David Lean', 'Tarun Mansukhani', 'Jennifer Westcott', 'Robert Clouse', 'Valeria Golino', 'Stuart Baird', 'Gregory Hoblit', 'Terry Gilliam', 'Drea Cooper, Zackary Canepari', 'Fred M. Wilcox', 'David Silberg', 'Vincente Minnelli, Charles Walters', 'Robert Altman', 'Mathieu Kassovitz', 'Randal Kleiser']
    -['Ernie Barbarash', 'Michael A. Nickles', 'Ken Marino', 'Lionel C. Martin', 'Clint Eastwood', 'Joe Boyd', 'Jeffrey W. Byrd', 'Scott Stewart', 'Alfonso Arau', 'Ellen Weissbrod', 'Michael Anderson', 'Stanley Kubrick', 'Theodore Witcher', 'Callie Khouri, Jesse V. Johnson']
    -['Brett Ratner', 'Gil Kenan', 'Lewis Milestone, Carol Reed', 'Jared Hess', 'Gene Quintano', 'Lewis Milestone', 'Charles Stone III', 'Nicholas Ray', 'Sam Mendes', 'Roman Polanski', 'John Dahl', 'Stanley Tong', 'Blayne Weaver', 'Billy Bob Thornton']
    -["Sam O'Steen", 'Sam Raimi', 'David Fairhead, Anthony Palmer', 'Adam McKay', 'Gordon Parks', 'Neil Jordan', 'John Stephenson', 'Norman Jewison', 'David Fincher', 'John Dahl', 'Manolo Caro', 'David Michôd', 'Tony Scott', 'Marco Bonfanti', 'Lilly Wachowski, Lana Wachowski', 'Lilly Wachowski, Lana Wachowski']
    -['Lilly Wachowski, Lana Wachowski', 'Everardo González', 'Alan J. Pakula', 'Kevin Donovan', 'Charlotte Zwerin', 'Pete Travis', 'Nick Moore', 'Rodrigo Guardiola, Gabriel Cruz Rivas', 'Ruben Fleischer', 'Neeraj Pandey', 'Indrajit Nattoji', 'Raj Kumar Gupta', "Remo D'Souza"]
    -["Remo D'Souza", 'Arnab Chaudhuri', 'Rana Ranbir', 'Anurag Basu', 'David Zucker', 'Momoko Kamiya', 'Momoko Kamiya', 'Harry Baweja', 'Ken Ghosh', 'Justin G. Dyck', 'Priyadarshan, Kookie V. Gulati', 'Vivek Agnihotri', 'Umesh Shukla', 'Habib Faisal', 'Bobby Roth']
    -['Halder Gomes', 'Tony Zierra', 'Amitoj Mann', 'Raj Kumar Gupta', 'B. Unnikrishnan', 'Milan Luthria', 'Madhur Bhandarkar', 'Sajid Khan', 'Saji Surendran', 'Ksshitij Chaudhary', 'Abhishek Kapoor', 'Sundar C.', 'Gary Binkow', 'Nikhil Advani']
    -['Anurag Basu', 'Lance Bangs', 'Chad Hartigan', 'Nishikant Kamat', 'Navinder Pal Singh', 'Raj Kumar Gupta', 'Dibakar Banerjee', 'Tigmanshu Dhulia', 'Kunal Deshmukh', 'Prakash Jha', 'R. Kannan', 'Gaurav Narayanan', 'Kevin Layne', 'Jon J. Whelan', 'Leanne Gater']
    -['Jennifer M. Kroot', 'Jay Russell', 'Wally Pfister', 'Akin Omotoso', 'Shyam Benegal', 'Satyajit Bhatkal', 'Bharat Jain', 'Alo Sarkar', 'Rajeev Chaudhari', 'Vishal Mishra', 'Iñaki Dorronsoro', 'Takuya Inaba', 'Ali Bin Matar, Ibrahim Bin Mohamed', 'Daniel Ablin', 'Buta Singh']
    -['Abbas Alibhai Burmawalla, Mastan Alibhai Burmawalla', 'Jami', 'Ali Samadi Ahadi', 'Anurag Singh', 'Ashok Nanda', 'Navaniat Singh', 'Shweta Basu Prasad', 'Jesse V. Johnson', 'D Ho']
    -['Jitender Pawar', 'Erik Canuel', 'Param Gill', 'Jack Zagha Kababie', 'Ksshitij Chaudhary', 'Richard Mears', 'Heidi Ewing, Rachel Grady', 'Moto Sakakibara', 'Emilio Martínez Lázaro']
    -['Craig Monahan', 'Gillian Armstrong', 'Jon Reiner, Brad Rothschild', 'John Duigan', 'Mu Chu', 'Henry Sarwer-Foner', 'Will Lovelace, Dylan Southern', 'Jim Monaco', 'Sherif Ismail', 'Dava Whisenant', 'Yen Cheng-kuo', 'James Wan', 'Karim El Sobky', 'Mohamed Samy', 'Sameh Abdulaziz', 'Husam El-Gohari']
    -['Liz Plonka', 'Sam Patton', 'Bobcat Goldthwait', 'Rupert Jones', 'Sonia Kennebeck', 'David Pablos']
    -['Maya Gallus', 'Cavi Borges, Luciano Vidigal', 'Dani Levy', "Alma Har'el", 'Alex Parkinson, Richard da Costa', 'Kevin Peeples', 'Frant Gwo', 'Steven Spielberg', 'Jay Karas', 'Harrison Smith', 'Sonny Mallhi']
    -['Robert Vince', 'Jeff Garlin', 'Jan Suter, Raúl Campos', 'Michael Barnett', 'Andrew Nackman', 'Ole Bornedal', 'Andrew Niccol', 'Isabelle Nanty', 'Rob Epstein, Jeffrey Friedman', 'Antonio Morabito', 'Rene Bueno', 'John Woo', 'Nicolás López', 'Patricia Ferreira']
    -['Nahnatchka Khan', 'Sachin Yardi', 'Sachin Yardi', 'Partho Mitra', 'Santram Varma', 'Rakeysh Omprakash Mehra', 'Paul Spurrier', 'Han Han', 'Pawan Kripalani', 'Bhushan Patel', 'Raj Nidimoru, Krishna D.K.', 'Alexandra Dean']
    -['Cosima Spender', 'Simon Curtis', 'Jang Jae-hyun', 'Charlie McDowell', 'Liam Lynch', 'Hao Wu', 'Felipe Cano', 'Gabriela Tagliavini', 'Joe Berlinger', 'Ismail Farouk', 'Lee Jeong-beom', 'William Bindley']
    -['Fernando Ayllón', 'Maya Zinshtein', 'Vishal Bhardwaj', 'Jill Bauer, Ronna Gradus', 'Justin McConnell', 'Lasse Hallström, Joe Johnston', 'Bryce Wagoner', 'Steven Brill', 'Kim Sung-hoon', 'Norberto López Amado', 'Mary Mazzio']
    -['Joe Piscatella', 'Rahul Dholakia', 'David Michôd', 'Mark Craig', 'Ketan Mehta', 'Raúl Campos, Jan Suter', 'Alex Richanbach', 'Marcus Raboy', 'Christopher Smith', 'Nadia Hallgren', 'Sudabeh Mortezai', 'McG', 'Richard Shepard']
    -['Matthew Cooke', 'Mike Diva, Akiva Schaffer', 'Jean-Patrick Benes', 'Christopher Storer', 'Trisha Ziff', 'Vasan Bala', 'Tig Notaro', 'John Bridcut']
    -['Lance Bangs', 'Mike Fleiss', 'Barry Jenkins', 'Linda Mendoza', 'Aanand Rai', 'Sharon Grimberg', 'Akram Farouk', 'Christel Gibson', 'Andrew Stanton', 'Manav Shah', 'Antoine Fuqua', 'Jimmy Henderson', 'Jessica Yu']
    -['Kim Nguyen', 'Max Martini', 'Nila Madhab Panda', 'Ian Nelms, Eshom Nelms', 'Hiroyuki Seshita', 'Lygia Barbosa da Silva, Eliane Brum', 'Osgood Perkins', 'Ken Kushner', 'Yolanda Ramke, Ben Howling', 'Kagiso Lediga']
    -['Diego Enrique Osorno', 'Hernán Zin', 'Hernán Zin', 'Hernán Zin', 'Arthur Muhammad', 'Pedring A. Lopez', 'Sam Cullman', 'Francesco Imperato', 'Stefon Bristol', 'Brit McAdams', 'Steve Loter', 'Icíar Bollaín', 'Kate Melville', 'Aditya Vikram Sengupta']
    -['David Dhawan', 'Neil Burger', 'Dibakar Banerjee', 'Apoorva Lakhia', 'Milan Luthria', 'Mandie Fletcher', 'Michael Dowse', 'Vipul Amrutlal Shah', 'Rajkumar Santoshi', 'Mercedes Cordova', 'Antonio Campos', 'Derek Cianfrance', 'Ryan Polito', 'Meenu Gaur, Farjad Nabi', 'Matthew Hope']
    -['Asim Abbasi', 'Saurabh Kabra', 'Aijaz Khan', 'Anil V. Kumar', 'Sangeeth Sivan', 'Umesh Ghadge', 'Milan Luthria', 'Apoorva Lakhia', 'Midhun Manuel Thomas', 'Neeraj Pandey', 'Umer Adil', 'Hayao Miyazaki', 'Nicolas Winding Refn']
    -['Rajiv Mehra', 'Robert Kenner', 'Kundan Shah', 'So Yong Kim', 'Alina Teodorescu', 'Rajiv Mehra', 'Filip Renc', 'Femi Oyeniran, Kalvadour Peterson', 'David Morris, Jacqui Morris', 'Gonzalo López-Gallego', 'Damián Romay']
    -['Abby Epstein', 'Savage Steve Holland', 'Tim Maltby', 'Jay Karas', 'Andy Tennant', 'Hepi Mita', 'Anthony Abrams, Adam Larson Broder', 'Dylan Bank, Daniel DiMauro, Morgan Pehme', 'Sean Foley', 'Pierre Coré', 'Che Sandoval', 'Jean-Bernard Marlin']
    -['Yee Tung-Shing', 'Raúl Campos, Jan Suter', 'Trey Borzillieri, Barbara Schroeder', 'Vince Marcello', 'Rajiv Chilaka', 'Sidheswar Shukla, Asit Mohapatra', 'Asit Mohapatra, Shyamal Chaulia', 'Shyamal Chaulia, Asit Mohapatra', 'Patricia Font', 'Amy Poehler']
    -['Sachin Kundalkar', 'Puri Jagannadh', 'Krish', 'Shoojit Sircar', 'Ribhu Dasgupta', 'Geoff Anderson', 'Federico Veiroj', 'Robert Vince', 'Mark Zwonitzer', 'Bo Welch', 'Sedat Kirtan, Kubilay Sarikaya', 'Stacia Crawford', 'Michael Epstein', 'Sudipto Roy', 'Frédéric Tonolli', 'Rachel Lears']
    -['Emmanuel Amara', 'Syamsul Yusof', 'Nicholas Winter', 'Bong Joon Ho', 'Mangesh Kanthale', 'Kevin Munroe', 'Frank Oz, Jim Henson', 'Gary Young', 'Nicanor Loreti', 'Simon Napier-Bell', 'A. L. Vijay', 'Devashish Makhija']
    -['Amal Neerad', 'Fluvio Iannuci, Roly Santos', 'Julius R. Nasso', 'Lucas Figueroa', 'Francis Lee', 'Shanker Raman', 'Rakshith Thirthahalli', 'C. Fitz', 'Alex Timbers', 'Damien Piscarel, Florent Bodin', 'Saandeep Patel', 'Justin G. Dyck']
    -['Arun Vaidyanathan', 'Pradip Kurbah', 'Alfonso Rodríguez', 'Guillermo Garcia, David Cantolla', 'Makarand Mane', 'Pierfrancesco Diliberto', 'Priyadarshan', 'Sean Menard']
    -['Dito Montiel', 'Vicente Villanueva', 'Don Michael Paul', 'Anu Menon', 'Adrian Murray', 'Andy Goddard', 'K. Rajagopal', 'Atanu Ghosh', 'Supavitra Babul', 'Zoya Akhtar, Dibakar Banerjee, Karan Johar, Anurag Kashyap', "Anthony D'Souza", 'Soumendra Padhi', 'Mahesh Bhatt', 'David Dhawan', 'Ken Burns, Artemis Joukowsky', 'Fuwad Khan']
    -['Mike Birbiglia', 'Nishikant Kamat', 'Praveen Nischol', 'Dylan Mohan Gray', 'Kabir Sadanand', "Shinji Aramaki, Mamoru Oshii, Hideki Futamura, Toshiyuki Kanno, Tomoki Kyoda, Koichi Mashimo, Yasushi Muraki, Daisuke Nishio, Frank O'Connor, Koji Sawai, Joseph Chou, Hiroshi Yamazaki", 'Justin Bare, Matthew Miele', 'Lucien Jean-Baptiste', 'Jalil Lespert', 'Sudhir Mishra', 'Edward Cotterill', 'Sean Cisterna', 'Sudhanshu Saria', 'Sarah Moshman', 'Omung Kumar']
    -['Bob Hercules, Rita Coburn Whack', 'Munish Bhardwaj', 'Dilip Mehta', 'Satish Rajwade', 'Umesh Shukla', 'Devika Bhagat', 'Luv Ranjan', 'Luv Ranjan', 'Vikas Bahl', 'Dharmesh Darshan', 'Kireet Khurana, Padmakumar Narasimhamurthy', 'Bejoy Nambiar', 'Neeraj Pandey', 'Aanand Rai', 'Isaki Lacuesta, Isa Campo', 'Gurmmeet Singh']
    -['Sangeeth Sivan', 'Nathan Landeg', 'Fernando González Molina', 'Yann Arthus-Bertrand, Michael Pitiot', 'Gonzalo López-Gallego', 'Kazuya Murata', 'Mina Shum', 'Martin Zandvliet', 'Stephen Belber', 'Tony Stone', 'Cosmo Feilding-Mellen', 'Peter Foott', 'Raam Reddy', 'Majid Al Ansari']
    -['Woody Allen', 'Ibrahim Bin Mohamed, Hasan Aljaberi', 'Clark Johnson', 'Emmanuel Mouret', 'Robert Rodriguez', 'Terry Gilliam', 'Robin Swicord', 'Conor Allyn']
    -['Uraaz Bahl', 'Frank Coraci', 'John Patrick Shanley', 'Haifaa Al-Mansour', 'Wenn V. Deramas', 'Olivia M. Lamasan', 'Antoinette Jadaone', 'Nuel Naval', 'Nicolás López', 'Paul Solet, Rick Benattar', 'Amy Schumer', 'Ian Kirby']
    -['Sean McNamara', 'Joe Camp', 'Joe Camp', 'Joe Camp', 'Michael Simon', 'Justin Chon', 'Aziz Ansari', 'David Sampliner', 'Adam Shankman', 'Chito S. Roño', 'Marc Forster', 'Keoni Waxman', 'Benny Fine', 'Mae Czarina Cruz']
    -['Onir', 'Paul Soriano', 'Wenn V. Deramas', 'Ruel S. Bayani', 'Peter Mortimer, Josh Lowell', 'Ben Wallis', 'Greg Coolidge', 'Iginio Straffi', 'Owen Egerton', 'Sam "Blitz" Bazawule', 'Norm Hiscock, Gary Howsam, Mike Smith, John Paul Tremblay, Robb Wells', 'Joe Miale', 'Dheeraj Berry', 'Richard Sears']
    -['Nirpal Bhogal', 'Laurent Bouzereau', 'Brett Whitcomb', 'Lucy van Beek', 'Frank Capra, Joris Ivens', 'John Huston', 'Jakob Verbruggen', 'George Stevens', 'Frank Capra', 'John Huston', 'John Ford', 'Charlie McDowell', 'Michael Samuels']
    -['William Wyler', 'Stuart Heisler', 'William Wyler, John Sturges', 'Frank Capra, John Huston, Hugh Stewart, Roy Boulting, Anthony Veiller', 'John Ford', 'Frank Capra, Anatole Litvak', 'John Huston', 'Micah Bickham, Galley Molina', 'Stuart Orme', 'Olivia Newman']
    -['Jared Stern', 'Yang Lei', 'Raúl Campos, Jan Suter', 'Lennart Ruff', 'Mike Clattenburg', 'Mike Clattenburg', 'Adam MacDonald', 'Saurav Palodhi', 'Shawn Crahan', 'Michael Whitton', 'Steve Carr', 'Swapnaneel Jayakar', 'Kyzza Terrazas']
    -['Miguel Conde', 'Philippe Falardeau', 'John Lee Hancock', 'Theo Love', 'Eli Craig', 'Bart Freundlich', 'Shannon Hartman', 'Awi Suryadi', 'Hanung Bramantyo', 'Óskar Thór Axelsson', 'Dan Lucchesi']
    -['Vishal Mahadkar', 'Ryan Polito', 'Mikhail Red', 'Raj Babu', 'Rodolphe Guenoden', 'Javier Ruiz Caldera', 'Dan Fraga, William Lau', 'Marina Willer', 'Diego Pignataro', "Meghan O'Hara", "Tommy O'Haver", 'Douglas McGrath', 'Chanon Yingyong, Phuwanit Pholdee']
    -['Kyle Newacheck', 'Mijke de Jong', 'Jorge Granier', 'Daryl Hannah', 'Michael Larnell', 'Advait Chandan', 'Abel Ferrara', 'Oriol Paulo', 'Stuart Sender']
    -['Jeff Tremaine', 'Paul Dugdale', 'Wenn V. Deramas', 'Joyce Bernal', 'Jason Paul Laxamana', 'Maryo J. De los Reyes', 'Chito S. Roño', 'Theodore Boborol', 'Gavin Fitzgerald', 'Juan Zapata', 'Stan Lathan', 'Gianfranco Rosi', 'Gianfranco Rosi']
    -['Oliver Daly', 'Luis Ara', 'Karan Shivajirao Chavan, Vikram Tanajirao Patil', 'Melinda Janko', 'Ram Gopal Varma', 'Tanuj Bhramar', 'Isao Yukisada', 'A.R. Murugadoss', 'A.R. Murugadoss', 'John Lee Hancock', 'Robin Swicord']
    -['Faraz Haider', 'Fritz Ofner', 'Mozez Singh', 'Raúl Campos, Jan Suter', 'Raúl Campos, Jan Suter', 'Robin Aubert', 'Brendan Toller', 'Kristian Levring', 'Mark Helenowski, Kevin Pang', 'Amy Schumer', 'Jonathan Ignatius Green', 'Sonny Marler', 'Taron Lexton', 'Robert Vince']
    -['Eva Vives', 'Lonny Price', 'Sang-ho Yeon', 'Jason Krawczyk', 'Sam Wrench', 'Sophie Robinson, Lotje Sodderland', 'John Lee', 'Richard Loncraine', 'Sydney Freeland', 'Ben Bowie, Geoff Luck', 'Jung-woo Park', 'Asghar Farhadi', 'Brandon Camp']
    -['Alison Klayman', 'Yoo Byung-jae', 'Victor Levin', 'Henry Selick', 'James Ivory', 'Gonzalo López-Gallego', 'Lone Scherfig', 'Mark Dindal', 'Pia Sukanya', 'Yann Gozlan', 'Niyi Akinmolayan', 'Francesco Imperato', 'Hoyt Yeatman']
    -['Lukas Dhont', 'Manny Rodriguez', 'Michael Simon, Matthew McNeil', 'Manny Rodriguez', 'Michael Simon', 'Stephen Chow', 'Frank W Chen', 'Adrian Teh', 'Florian Henckel von Donnersmarck', 'Steven R. Monroe']
    -['Buz Wallick', 'Indrasis Acharya', 'Aatmaram Dharne', 'Sumitra Bhave, Sunil Sukthankar', 'Sunao Katabuchi', 'Kedar Shinde', 'Johan Brisinger', 'Attila Till', 'Mahesh Manjrekar', 'Tim Bartley', 'Robyn Butler', 'John Upchurch', 'Deepika Narayan Bhardwaj']
    -['Israel Adrián Caetano, Bruno Stagnaro', 'Girish Joshi', 'Aditya Sarpotdar', 'Arjun Gourisaria, Moinak Biswas', 'Maria Sadowska', 'Santosh Sivan', 'Erik Canuel', 'Pascal Blanchard, Sonia Dauger, David Dietz', 'Heidi Saman', 'Peter Middleton, James Spinney', 'Shashilal K. Nair', 'Jayaraj Rajasekharan Nair', 'Partho Sen-Gupta']
    -['Eric Drath', 'Sam Upton', 'Maryo J. De los Reyes', 'Olivia M. Lamasan', 'Joyce Bernal', 'Theodore Boborol', 'Cathy Garcia-Molina', 'Yang Woo-seok', 'Pan Nalin', 'Shannon Hartman', 'J.C. Chandor']
    -['John L. Spencer', 'Victor Cook', 'Brian Klein', 'Devin Chanda', 'Tekin Girgin', 'David Chirchirillo', 'Marianna Palka', 'Dennis Bartok', 'Kenneth Müller', 'Marcel Barrena']
    -['Burak Aksak', 'Hakan Algül', 'Gerard McMurray', 'Muharrem Gülmez', 'Ozan Açıktan', 'Meltem Bozoflu', 'Hakan Algül', 'Selçuk Aydemir, Birkan Pusa', 'Selçuk Aydemir', 'Hakan Algül', 'Hakan Algül', 'Hakan Algül', 'Ömer Faruk Sorak', 'Şenol Sönmez', 'Ali Taner Baltacı, Cem Yılmaz']
    -['Sermiyan Midyat', 'Sermiyan Midyat', 'Aytaç Ağırlar', 'Burak Aksak', 'Kıvanç Baruönü', 'Kıvanç Baruönü', 'Yusuf Pirhasan', 'Mahsun Kırmızıgül', 'Hakan Algül', 'Kıvanç Baruönü', 'Clementine Malpas, Leslie Knott', 'Ketche', 'Erol Özlevi', 'Hakan Yonat', 'Ozan Açıktan']
    -['Olivier Loustau', 'Yılmaz Erdoğan', 'Yılmaz Erdoğan, Ömer Faruk Sorak', 'Yılmaz Erdoğan', 'Nottapon Boonprakob', 'Perry Lang', 'Nawapol Thamrongrattanarit', 'Xavier Gens', 'Gary Wheeler', 'Ang Lee', 'Tom Edmunds', 'Brant Sersen', 'Sam Liu, Frank Paur', 'Phil Morrison']
    -['Paul Katis', 'Matthew Vaughn', 'Jonathan A. Rosenbaum', 'Franck Phelizon', 'Peter Howitt', 'Matthew Atkinson', 'Rajiv Menon', 'Chiwetel Ejiofor', 'Michael Buster', 'Philip Einstein Lipski, Jørgen Lerdam, Amalie Næsby Fick', 'Rodrigo Salomón, Pietro Scappini', 'Mark Waters', 'James Toback']
    -['David Wain', 'Debra Granik', 'Miguel Ángel Vivas', 'Joey Curtis', 'Alison Klayman', 'Abbas Alibhai Burmawalla, Mastan Alibhai Burmawalla', 'Shikha Makan', 'Haissam Hussain', 'Mitch Gould', 'Kaizad Gustad', 'Ram Gopal Varma', 'Clay Porter', 'Mani Ratnam']
    -['Eeshwar Nivas', 'Hugues Nancy, Fabien Beziat', 'Indra Kumar', 'Mani Ratnam', 'Satish Kaushik', 'Tim Van Someren', 'David Dhawan', 'Shawn Arranha', 'Jonathan Baker', 'K. Subhash', 'Nagesh Kukunoor', 'V. K. Prakash', 'Manish Tiwary', 'David Dhawan', 'Kranti Redkar', 'Dhilip Kumar']
    -['Subhash Ghai', 'Surya S.J., Sunil Kumar Agrawal', 'Samir Karnik', 'Daniel Lindsay, T.J. Martin', 'Syed Ahmad Afzal', 'RZA', 'Steve Sacks', 'Mike Fetterly, Steve Sacks', 'Anees Bazmee', 'Subhash Ghai', 'Mahesh Manjrekar', 'Rajkumar Santoshi', 'Manish Gupta', 'Jeeva']
    -['K. Gopinathan', 'Lars Büchel', 'Krishna Vamshi', 'Dibakar Banerjee', 'Gurudev Bhalla', 'Samar Khan', 'Amit Barot', 'Adarsh Eshwarappa', 'Bejoy Nambiar', 'Carlo Padial', 'Indra Kumar', 'Ashutosh Gowariker', 'Mike Smith, John Paul Tremblay, Robb Wells', 'Subhash Ghai', 'Julien Seri', 'Leena Yadav']
    -['Bryan Buckley', 'Keerthi', 'Abhishek Sharma', 'Gajendra Ahire', 'Gajendra Ahire', 'Buddhadev Dasgupta', 'Mike Smith, John Paul Tremblay, Robb Wells', 'Mike Smith, John Paul Tremblay, Robb Wells', 'Mike Clattenburg', 'Mike Clattenburg', 'Mukul Anand', 'Preston A. Whitmore II', 'Milind Dhaimade', 'Ashish R. Mohan', 'N. Chandra', 'Subhash Ghai']
    -['Mani Ratnam', 'Volker Arzt, Angelika Sigl', 'Arne Birkenstock', 'Jonathan Taylor', 'Alessandro Pepe', 'Selvamani Selvaraj', 'Vijay Jayapal']
    -['Matt Wechsler', 'Hernán Belón', 'Anurag Kashyap', 'Harvey Lilley', 'Lev L. Spiro', 'Michael Polish', 'Maria Ripoll', 'Dani de la Torre', 'Oren Uziel', 'Adam Marino']
    -['Kurt Wimmer', 'Craig Johnson', 'Jeffrey Walker', 'Ulises Valencia', 'Gabriel Grieco', 'Federico Veiroj', 'Isabel Coixet', 'Grant Sputore', 'Laxman Utekar', 'Juan Antin', 'Hanno Olderdissen', 'Amar Kaushik']
    -['Reginald Hudlin', 'Grant Korgan, Brian Niles', 'Ajay Bahl', 'Kees Van Oostrum', 'Eva Trobisch', 'Tamer Bassiouni', 'Travis Zariwny', 'Corbin Bernsen', 'Asghar Farhadi', 'Shadi Ali', 'Sameh Abdulaziz', 'Mahmoud Karim', 'Walerian Borowczyk', 'Hani Hamdi', 'Wael Ihsan']
    -['Amr Arafa', 'Wael Ihsan', 'Ahmed Al-Badry', 'Mohammed El-Tahawy, Mohamed Mostafa', 'Naoko Yamada', 'Philip Marlatt', 'Scott Mosier, Yarrow Cheney', 'David Gelb', 'David Guy Levy', 'Taika Waititi', 'Saul Dibb', 'Manika Sharma', 'Mathieu Auvray', 'Marcus Raboy', 'Limbert Fabian, Brandon Oldenburg', 'Grant Heslov']
    -['Timothy Reckart', 'Sittisiri Mongkolsiri', 'Kelly Reichardt', 'Robbie Grewal', 'Jay Karas', 'Ted Geoghegan', 'Yayo Herrero', 'Juan Manuel Cotelo', 'Damani Baker', 'Lyric R. Cabral, David Felix Sutcliffe', 'Cosima Spender', 'Alfonso Serrano Maturino']
    -['Timo Tjahjanto, Kimo Stamboel', 'Johnnie To', 'Seong-hun Kim', 'Bo Burnham, Christopher Storer', 'Christopher Nolen', 'Thiagarajan Kumararaja', 'Matt Palmer', 'Raúl Campos, Jan Suter', 'Rodrigo Triana', 'Elaine McMillion Sheldon', "Federico D'Alessandro", 'Anthony Pierce']
    -['Mike Mills', 'Kate Horne', 'Roberto Girault Facha', 'Christopher Ray', 'Michel Tikhomiroff', 'Emanuel Hoss-Desmarais', 'Bong Joon Ho', 'Paul Thomas Anderson', 'Alex Díaz, Marcos Bucay', 'Fredric Lean']
    -["Bill D'Elia", 'Sujoy Ghosh', 'Peter Ramsey, Rodney Rothman, Bob Persichetti', 'Doron Paz, Yoav Paz', 'Svati Chakravarty Bhatkal', 'Rian Johnson', 'Shannon Hartman', 'Justin Kelly', 'Pablo Larraín', 'Liz Garbus', 'Kevin Bray', 'Michael James Regan', 'Aditya Kripalani']
    -['Seiji Mizushima', 'Sanjay Gupta', 'Myriam Aziza', 'Vivieno Caldinelli', 'Vivieno Caldinelli', 'Raúl Campos, Jan Suter', 'Rob Burnett', 'Jay Lyons', 'Drew Casson', 'Chris Buck, Kevin Lima', 'Charlie Siskel']
    -['Brian Knappenberger', 'Brian Smith', 'Brent Bonacorso', 'Jennifer Phang', 'Mohamed Hamdy', 'Jesse V. Johnson, Jesse Johnson', 'Gerard Barrett', 'Rene Liu', 'Geoffrey Orthwein, Andrew Sullivan', 'Jovanka Vuckovic, Annie Clark, Roxanne Benjamin, Karyn Kusama', 'Miguel Cohan, Miguel Cohan', 'Luis Alberto Restrepo, Andrés Beltrán, Jaime Rayo', 'Hideaki Anno', 'Tarek Abdel Moaty']
    -['Hideaki Anno, Kazuya Tsurumaki', 'Nitesh Tiwari', 'Ismail Farouk, Hazem Fouda', 'Khaled Marei', 'Abhijit Kokate, Srivinay Salian', 'Husam El-Gohari', 'Magdy Al-Hawwary', 'Ahmad El-Badri', 'Antonin Baudry', 'Mohamed Hamdy', 'Sherif Mandour', 'Ken Burns, Lynn Novick', 'Atul Malhotra']
    -['Roy Burdine, Johnny Castuciano', 'Scott Moran', 'George Clooney', 'Datta Mohan Bhandare', 'Kieran Darcy-Smith', 'Tom Hooper', 'Salvador Calvo', 'Jun-seong Kim', 'Chris Robinson', 'Janet Tobias, Claus Wehlisch', 'David L. Cunningham']
    -['Petra Costa', 'Ed Lilly', 'Madeleine Parry, Jon Olb', 'Isaac Ezban', 'Jay Karas', 'Anirban Majumder', 'Scott Martin', 'Jeremy Kenyon Lockyer Corbell', 'Rajiv Chilaka', 'Anirban Majumder', 'Sumit Das', 'George Mendeluk']
    -['Wilson Yip', 'Kyle Patrick Alvarez', 'Jon Watts', 'Jakob Lass', 'Jay Bulger', 'Kevin Derek', 'Kip Andersen, Keegan Kuhn', 'Shazia Javed', 'John Haptas, Kristine Samuelson', 'Sanjay Jadhav', 'Ahmed El Gendy', 'Vinod Kapri']
    -['Elías León', 'Israel Adrián Caetano', 'Anders Falck, Stinus Morell Vithner', 'Zoya Akhtar, Karan Johar, Anurag Kashyap, Dibakar Banerjee', 'Oded Raz', 'Mariana Tschudi, Héctor Gálvez', 'Claire Scanlon', 'Ramón Salazar', 'Eduardo Mendoza de Echave', 'Henrik Martin Dahlsbakken', 'Arun Chidambaram', 'Caio Cobra', 'Tomer Heymann']
    -['Alex Infascelli', 'Cal Seville', 'Peggy Holmes', 'Bruno Garotti', 'Kyle Newacheck', 'Zachary Heinzerling', 'Abdul Aziz Hashad', 'Khaled Marei', 'Mark Ritchie', 'Mahmoud Karim', 'Rocky Soraya']
    -['Sameh Abdulaziz', 'Tarek Al Eryan', 'Hadi El Bagoury', 'Patrik Syversen', 'Michael John Warren', 'Andy Capper', 'Shannon Hartman', 'Martin Scorsese', 'Waymon Boone', 'Phil Johnston, Rich Moore', 'Julie Dash', 'Andrew C. Erin']
    -['Chang-Min Lee', 'Derek Yee', 'Cristina Jacob', 'Cristina Jacob', 'Roland Emmerich', 'Jonathan Levine', 'David McCracken', 'Brian De Palma', 'Sanjib Dey', 'Ron Davis', 'Cristina Jacob']
    -['Cristina Jacob', 'Barry Avrich', 'Jon Avnet', 'V. Scott Balcerek', 'Joe Dante', 'Richard Kelly', 'Joel Schumacher', 'Peter Chelsom', 'Peter Hutchings', 'Daniel Yee Heng Chan', 'Dennie Gordon', 'Shadab Khan', 'Nattawut Poonpiriya', 'Elvira Lind', 'Davis Guggenheim']
    -["Gavin O'Connor", 'Jon Turteltaub', 'Mahesh Manjrekar', 'Lynn Shelton', 'Felix Starck', 'Robert Kouba', 'Umesh Mehra', 'Edward Cotterill', 'Ted Braun', 'Jon Manning', 'Onur Tukel', 'Luis Lopez', 'Saara Cantell', 'Ron Howard']
    -['Cal Seville', 'Edward Cotterill', 'Jayaprakash Radhakrishnan', 'Rob Meyer', 'Anita Barbosa', 'Ketan Mehta', 'Daniel Wilner', 'Ketan Mehta', 'Lekh Tandon', 'Umesh Mehra']
    -['Alberto Rodríguez', 'Edward Cotterill', 'Alfonso Cuarón', 'Jose Manuel Colón', 'Javier Ruiz Caldera', 'David Sington', 'Zoe Berriatúa', 'Luis Estrada', 'Spike Jonze']
    -['Rob Marshall', 'Lee Eung-bok', 'Karyn Kusama', 'Phyllida Lloyd', 'Leif Tilden', 'Pat Healy', 'Dustin McKenzie, Andrew Duncan, Audu Paden', 'Fabio Grassadonia, Antonio Piazza', 'Raúl Campos, Jan Suter']
    -['Jody Hill', 'Samu Fuentes', 'Alexandre Espigares', 'Suhas Kadav', 'Dan Harris', 'Qaushiq Mukherjee', 'Marcelo Altmark, Mariano Mucci, Luis A. Scalella', 'Derek Cianfrance', 'Anurag Basu', 'Michèle Ohayon', 'Renny Harlin', 'Kevin Layne']
    -['Amanda Micheli', 'Eric Khoo', 'Gideon Raff', 'Kang Cheng, Shan Hua', 'Cheh Chang', 'Nizar Shafi', 'Víctor García', 'Wilson Coneybeare', 'Marcus Raboy', 'Note Chern-Yim', 'Note Chern-Yim', 'Poj Arnon', 'Fernando Sariñana, José Luis Gutiérrez']
    -['Jonathan Levine', 'Scott L. Montoya', 'Scott L. Montoya', 'Marcus Raboy', 'David Blair', 'Kirk De Micco, Chris Sanders', 'Spike Jonze', 'Sian Heder', 'Ted Emery', 'Ted Emery', 'John Wells', 'Meng Hua Ho', 'Tony Datis', 'Vanessa Roth']
    -['Ben Ryder', 'Jim Strouse', 'Raúl Campos, Jan Suter', 'Ben Young', 'Kirby Dick', 'Raymond Wood', 'Jorge M. Fontana', 'Mikhail Red', 'Olivier Afonso', 'James Woodroffe', 'Rachel Bell']
    -['David Leveaux', 'Sebastián Schindel', 'Asif Kapadia', 'Kyle Newman', 'Gilles Paquet-Brenner', 'Alex Garland', 'Keanu Reeves', 'Anna Boden, Ryan Fleck', 'William Monahan', 'Piti Jaturaphat', 'Atom Egoyan', 'John Maclean', 'James Ponsoldt', 'Tanit Jitnukul']
    -['Atsajun Sattakovit', 'Poj Arnon', 'Poj Arnon', 'Poj Arnon', 'Abhishek Sharma', 'Note Chern-Yim', 'Sukum Maetawanitch', 'Tiffanie Hsu', 'Daniel Gray Longino', 'Nick Gomez', 'Karim Amer, Jehane Noujaim', 'Steve Paley', 'Daniel Calparsoro', 'Kevin Smith', 'Kasper Collin', 'Brandon Dickerson']
    -['Harvey Lowry', 'William Friedkin', 'Quentin Tarantino', 'Paul Andrew Williams', 'J.C. Chandor', 'Byron Howard, Chris Williams', 'Dharmesh Darshan', 'Benny Chan', 'Jay Chapman', 'Jay Karas, Demetri Martin', 'Dante Lam', 'Chi Keung Fung', 'Corey Yuen, Patrick Leung']
    -['To-hoi Kong', 'Jeff Baena', 'Andrew Lau Wai-Keung, Andrew Loo', 'Pete Travis', 'Michael Gallagher', 'Hassan Hegazy, Shady Ali', 'Chris Jenkins', 'Alexandre Avancini', 'Atom Egoyan', 'Ziga Virc']
    -['Jeffrey Walker', 'Sam Voutas', 'Alexander Nevsky', 'Frank Ariza', 'Jacob Schwab', 'Alphonso J. Wesson', 'Gillian Robespierre', 'Lenny Abrahamson', 'Lynn Shelton']
    -['Julius Avery', 'David Michôd', 'Orson Welles', 'Peter Sullivan', 'Destin Daniel Cretton', 'Alexis Morante', 'Kobun Shizuno, Hiroyuki Seshita', 'Fazila Allana', 'Eric Abrams', 'Peter Svatek', 'Aditya Sarpotdar', 'Hiromasa Yonebayashi', 'Agustí Villaronga']
    -['Kristina Goolsby, Ashley York', 'Nisheeta Keni', 'Daniel Gray Longino', 'Harvey Glazer, Stuart Stone', 'Peyton Reed', 'Ron Clements, John Musker', 'Chris Stokes', 'Steven Fine', 'Roman Coppola', 'Denis Villeneuve', 'Alejandro Doria']
    -['Heber Cannon', 'Sally Potter', 'Clay Glen', 'Steven Knight', 'Ana Quiroga', 'Harmony Korine', 'Jean-Cosme Delaloye', 'Santosh Sivan', 'Natalia Garagiola', 'Pamela Romanowsky', 'James Ponsoldt', 'Jonathan Glazer', 'Esteban Crespo', 'Anil Sharma', 'Ganesh Kadam']
    -['Anthony Scott Burns, Nicholas McCarthy, Adam Egypt Mortimer, Gary Shore, Kevin Smith, Sarah Adina Smith, Scott Stewart, Kevin Kolsch, Dennis Widmyer', 'Ticoy Rodriguez', 'Karl Mueller', 'Joe Berlinger', 'Philipp Stölzl', 'Michael Curtiz', 'Florian Gallenberger', 'Harry Chaskin', 'Jeff Orlowski', 'Marti Noxon', 'Allan Ungar', 'Patrick Brice', 'Christophe Honoré']
    -['David M. Rosenthal', 'Scott Zabielski', 'Leslie Small, Tim Story', 'Diego Cohen', 'William Eubank, Will Eubank', 'Jay Chapman', 'John Dower', 'Jay Chapman', 'Gerardo Olivares', 'Mark Harris', 'Wi Ding Ho']
    -['Thomas Sieben', 'Joe Lynch', 'Noam Murro', 'Andreas Pichler', 'Neslihan Yesilyurt']
    -['Daniel Arasanz', 'Joseph Martin', 'Chapman Way, Maclain Way', 'Sylvie Verheyde', 'Kasper Barfoed', 'Phil Joanou', 'Martin Scorsese', 'Courtney Hunt', 'Iain Softley', 'Linda Mendoza', 'Jonathan Hensleigh']
    -['M. Night Shyamalan', 'Richard Greenberg', 'Nathan Morlando', 'Martin Scorsese', 'Lee Tamahori', 'George C. Wolfe', 'Rushmore DeNooyer', 'Martin Gorst', 'Giulia Clark', 'Sarah Holt', 'Terri Randall', 'Doug Hamilton', 'Martin Gorst', 'Peter Fison']
    -['Graham Townsley', 'Paula Apsell, Kirk Wolfinger', 'Oliver Twinch', 'Oliver Twinch', 'Llewellyn M. Smith', 'Daniel McCabe', 'Peter Yost', 'Tom Stubberfield', 'Noel Dockstader, Quinn Kanaly', 'Gail Willumsen', 'Steve Carr', 'Jonathan Demme', 'Andy Fickman', 'Barry Levinson']
    -['Max Lang, Jani Lachauer', 'Wes Craven', 'Robert Rodriguez', 'David Allensworth, Monière', 'Todd Phillips', 'Ann Deborah Fishman', 'Dominic Sena', 'Martin Scorsese', 'Ryu Jung-woo', 'Matthew Shoychet', 'Albert Hughes, Allen Hughes', 'Terry Gilliam', 'Rob Minkoff', 'Andrew Fleming']
    -['Shawn Levy', 'Hernán Zin', 'Martin Scorsese', 'Lijo Jose Pellissery', 'Raj Kaushal', 'Bo Burnham, Christopher Storer', 'Noushad', 'Aziz Mirza', 'Anuranjan Premji', 'Jason Bourque', 'Johnson Esthappan', 'K.C. Bokadia', 'Greg MacGillivray', 'Miguel Arteta']
    -['P.K. Baaburaaj', 'Nila Madhab Panda', 'Vineeth Anil', 'Katherine Brooks', 'Jayan Vannery', 'Bob Odenkirk', 'Samir Soni', 'Vipul Amrutlal Shah', 'Chandran Narikode', 'Gafoor Y. Elliyaas', 'Dileep Narayanan', 'Paritosh Painter', 'Venugopan', 'Jay Chou', 'Imtiaz Ali']
    -['Juan Antonio de la Riva', 'Jenée LaMarque', 'Michael Radford', 'Heber Cannon, Mariah Moore, Marston Sawyers', 'Saheed Arafath', 'Jeffrey Nachmanoff', 'Kabir Sadanand', 'P.T. Kunju Muhammad', 'Greg MacGillivray', 'Huang Lei', 'Bert Marcus, Cyrus Saidi', 'Shlok Sharma', 'Adam Deyoe', 'Nicolas Brossette', 'Serdar Akar', 'Clay Glen']
    -['Castille Landon', 'Lekh Tandon', 'Martin Hodara', 'Vivieno Caldinelli', 'Doesjka van Hoogdalem', 'Rod Blackhurst', 'Asim Raza', 'Sushil Majumdar', 'Geetu Mohandas']
    -['Abbas Alibhai Burmawalla, Mastan Alibhai Burmawalla', 'Lekh Tandon', 'Paulo Oriol', 'Li Jun', 'Bilal Lashari', 'Yasir Nawaz', 'Umesh Mehra', 'Oskar Santos']
    -['Anders Sømme Hammer, Marius Arnesen, Klaus Erik Okstad, Olav Njaastad', 'Ryan Polito', 'Felix Thompson', 'Ishaya Bako', 'Ola Flyum, David Hebditch', 'Benny Fredman', 'Hemant Gaba, Pratim D. Gupta, Sudhish Kamath, Nalan Kumarasamy, Anu Menon, Sandeep Mohan, Qaushiq Mukherjee, Rajshree Ojha, Raja Sen, Abhinav Shiv Tiwari, Suparn Verma', 'Ivona Juka', 'Don Michael Paul', 'Mark Sloper', 'Kobun Shizuno, Hiroyuki Seshita', 'Kunal Kohli']
    -['Ron Howard', 'Ron Howard', 'Bryan Bertino', 'J. Michael Long', 'Milind Rau', 'Nick Broomfield', 'James Wan', 'Jay Karas', 'David Lowery', 'Maria Ripoll', 'Florian Henckel von Donnersmarck', 'Aaron Hancox, Michael McNamara', 'Noor Imran Mithu', 'Paakhi Tyrewala']
    -['Barbara Kopple', 'Babak Anvari', 'Sandy Chronopoulos', 'Emily Hagins', 'Eric Juhola', 'Greg Richardson', 'Dharmendra Suresh Desai', 'Iman Brotoseno', 'Anggy Umbara', 'Garin Nugroho', 'Sridhar Jetty', 'Clive Tonge', 'Nonzee Nimibutr', 'Hanung Bramantyo', 'Mike Flanagan', 'Masaaki Yuasa']
    -['Mahin Ibrahim, Austin Kolodney, Will Lowell, David Beier, Dave Dorsey, Xu Zhang, Alana Waksman, Jon YonKondy, Drue Metz, Brandon Somerhalder', 'José Eduardo Belmonte', 'Hans Petter Moland', 'Uwe Boll', 'Ísold Uggadóttir', 'Lorena Munoz', 'Genevieve Nnaji', 'Mitch Schauer', 'Terry Loane', 'Mamat Khalid', 'Maria Demeshkina Peek']
    -['Pang Ho-cheung', 'Mario Mattei', 'Lasse Hallström', 'Selima Taibi', 'Jay Karas', 'Alejandra Márquez Abella', 'Amarjit Virdi', 'Kamal Sahani', 'Dan Kwan, Daniel Scheinert', 'Brad Bird', 'Fred Durst', 'Pankaj Batra', 'Marty Callner', 'William Lau, Sylvain Blais']
    -['Yibrán Asuad', 'Anees Bazmee', 'John Hughes', 'Luke Sparke', 'Wim Wenders', 'Lance Bangs', 'Peyton Reed', 'Nishil Sheth', 'Manny Rodriguez', 'Byun Hyuk', 'Zoe Berriatúa', 'Javier Ambrossi, Javier Calvo', 'Federico Lemos', 'Jeremy Kenyon Lockyer Corbell']
    -['Peter Nicks', 'Sébastien Betbeder', 'Adam Bhala Lough', 'Faozan Rizal', 'Mansore', 'Hanung Bramantyo', 'Kuntz Agus', 'Hanung Bramantyo, Meisa Felaroze', 'Alastair Fothergill', 'Adam Randall']
    -['Nick Broomfield', 'Jerrold Tarog', 'David Wain', 'Michael McKay', 'Alexandre Heboyan, Benoît Philippon', 'Raúl Campos, Jan Suter', 'Laura Alvea, José Ortuño', 'Kim Seong-hun', 'Gastón Duprat']
    -['Isaac Florentine', 'Marco Dutra', 'Genndy Tartakovsky', 'Andy Caballero, Diego Corsini', 'July Hygreck', 'Raúl Campos, Jan Suter', 'Paul Shoulberg', 'Marcus Raboy', 'Greg Whiteley', 'Seren Yüce', 'Jorge Blanco', 'Law Wing-cheong', 'Dash Shaw', 'Scott Moran']
    -
    -
    - -
    - -
    -
    100%|██████████| 390/390 [00:00<00:00, 1009.41it/s]
    -
    -
    - -
    - -
    -
    -['Mario Rouleau', 'Santiago Diaz, Pablo Martin Farina', 'Scott Zabielski', 'Raúl Campos, Jan Suter', 'Ahmed Khaled Moussa', 'Néstor Sánchez Sotelo', 'Aniruddha Roy Chowdhury', 'Chester Tam', 'Mohit Suri']
    -['Terry Gilliam, Terry Jones', 'Jon Schnitzer', 'Craig Elrod', 'Benjamin Cohen, Nicolas Cotto', 'Mike Rossiter', 'Michael McKay', 'Charles Stone III', 'Matt Angel, Suzanne Coote', 'Chris McCoy', 'Sofia Coppola', 'Chris Smith', 'Jonathan Helpert']
    -["André D'Elia", 'Matías Gueilburt', 'Ivan Ayr', 'Chris Baugh', 'Jenny Carchman', 'Tyler Perry', 'Raúl Campos, Jan Suter', 'Kobun Shizuno, Hiroyuki Seshita', 'Neal Brennan', 'G.J. Echternkamp']
    -['Jehane Noujaim', 'Caryn Waechter', 'Nicholas Stoller', 'Tim Hill', 'Numa Perrier', 'Brian Helgeland', 'Yoshiyuki Momose', 'Danny Boyle', 'Colin Strause, Greg Strause', 'Ethan Coen, Joel Coen', 'Jean-Marc Vallée', 'Marc Abraham', 'Steve Barker']
    -['Shawn Levy', 'Rima Das', 'Paco Plaza', 'Andrew Goth', 'Jeffrey G. Hunt', 'William Kaufman', 'Marek Kanievska', 'Skye Borgman', 'Hashim Nadeem Khan', 'Mohsin Ali', 'Svetlana Cvetko', 'Sarjun', 'Alejandro Lozano']
    -['Michael Civille', 'Feroz', 'Syed Atif Ali', 'Lee Seung-won', 'Rik Reinholdtsen', 'Stephanie Soechtig, Jeremy Seifert', 'Rocky Soraya', 'Rocky Soraya', 'John Asher', 'Latif Faiziyev, Umesh Mehra', 'M.J. Isakson', 'Matt Toronto', 'Michael Roberts', 'Noah Moskin', 'John H. Lee']
    -['Ajay Bhuyan, Kunal Kohli', 'Rajiv Mehra', 'Rhiannon Bannenberg', 'Bin Bunluerit', 'Jennifer Brea', 'Pradeep Verma', 'Hannes Stöhr', 'Ron Davis', 'Marty Stalker', 'Daniel Noah', 'Andreas Prochaska', 'Maximilian Erlenwein', 'John Carchietta', 'Isaac Ezban', 'Burhan Qurbani']
    -['Wilson Yip', 'Wilson Yip', 'David Benioff, D.B. Weiss', 'Paul Thomas Anderson', 'Patryk Vega', 'Charles Officer', 'Peter Sattler', 'Marcelo González', 'Zach Clark', 'N.D. Wilson', 'Sean Penn', 'Daniel Stamm', 'Gauravv K Chawla']
    -['David O. Russell', 'Kleber Mendonça Filho', 'Hubert Woroniecki', 'Alistair Legrand', 'Steve Boettcher', 'Mikhil Musale', 'Julian Jarrold', 'Quinn Lasher', 'David Mrnka', 'John Mikulak, Joshua Brown', 'Maya Forbes', 'Choi Jin-seong', 'Jay Karas', 'Ira Sachs', 'Mir-Jean Bou Chaaya']
    -['Peter Hewitt', 'Dan Villegas', 'Bent-Jorgen Perlmutt', 'Hugo Stuven', 'Greg Pritikin', 'Amman Abbasi', 'Soumendra Padhi', 'Tom Green', 'Mike Gunther', 'Fred Olen Ray', 'Sam Raimi']
    -['Johannes Roberts', 'Heitor Dhalia', 'Jeannie Gaffigan', 'Robert Luketic', 'Mark Rosman', 'Richard Rich', 'Sam Mendes', 'Sarah Smith', 'Edwin', 'James L. Brooks', 'Jeff Tremaine']
    -['Vadim Jean', 'Steven Spielberg', 'Nicholas Hytner', 'Tim Burton', 'Kevin Smith', 'Ken Hughes', 'Atom Egoyan', 'Fernando Meirelles, Katia Lund', 'Frank Coraci', 'Matt Reeves', 'Thomas Carter', 'Jay Roach', 'Mike Newell']
    -['Rob Cohen', 'Colin Teague', 'Doug Lefler', 'Paul W.S. Anderson', 'Chris Stokes', 'James Wong', 'David R. Ellis', 'James Wong', 'Simon Wincer', 'Marcus Nispel', 'Mark A.Z. Dippé, Kyung Ho Lee', 'Mark A.Z. Dippé, Eondeok Han', 'Mark A.Z. Dippé', 'Mark Steven Johnson', 'Anurag Kashyap, Dibakar Banerjee, Karan Johar, Zoya Akhtar', 'Roland Emmerich']
    -['Adam Shankman', 'Danny Leiner', 'Andy Tennant', 'Keoni Waxman', 'Christopher Nolan', 'Eugenio Derbez', 'Michael Simon', 'John A. Davis', 'Nora Ephron', 'James Mangold', 'Quentin Tarantino', 'Quentin Tarantino', 'Peter Farrelly, Bobby Farrelly', 'Gary Fleder', 'Luis Valdez', 'Zack Snyder']
    -['Lucas Margutti', 'Paul Thomas Anderson', 'Shyam Benegal', 'Patricia Rozema', 'Robert Luketic', 'Duncan Jones', 'Howard Zieff', 'Dennie Gordon', 'Justin Webster', 'Guillermo del Toro', 'Oren Peli', 'Phillip Noyce', 'Tetsuo Yajima', 'Edwin']
    -['Paul W.S. Anderson', 'John Lyde', 'Steve Rash', 'Keenen Ivory Wayans', 'John Stockwell', 'Gregg Bishop', 'Phillip Noyce', 'Chris Koch', 'Baz Luhrmann', 'Rob Minkoff', 'Rob Minkoff', 'Tim Burton', 'Michael Pressman']
    -['Steve Barron', 'Jonathan Mostow', 'McG', 'Andrew Douglas', 'Andrew Fleming', 'Neil Jordan', 'Jay Chandrasekhar', 'Robert Berlinger', 'David R. Ellis', 'Ricky Gervais, Matthew Robinson', 'Peter Jackson', 'Peter Jackson', 'Martin Campbell', 'David Zucker']
    -['David Zucker', 'Barry Levinson', 'Spike Lee', 'Mimi Leder', 'Gore Verbinski', 'Anthony Minghella', 'Ron Underwood', 'S.S. Wilson', 'Brent Maddock', 'S.S. Wilson', 'Don Michael Paul', 'Henry Hathaway', 'Jason Reitman', 'Robert Zemeckis', 'Barry Sonnenfeld', 'Mel Stuart']
    -['Lawrence Kasdan', 'Peyton Reed', 'Nicole Conn', 'Julie Taymor', 'Alejandro G. Iñárritu', 'Yanyong Kuruaungkoul', 'Ridley Scott', 'Neill Blomkamp', 'Joe Roth', 'Steve Carr', 'Mark Landre Gould', 'David Mackenzie', 'Steven Spielberg', 'Steven Spielberg', 'Steven Spielberg']
    -['Steven Spielberg', 'Kevin Smith', 'Clint Eastwood', 'Lori Kaye', 'William H. Macy', 'Massy Tadjedin', 'Guy Ritchie', 'Lenin Bharathi', 'Mike Newell', 'Jay Chapman', 'James Foley', 'Kunihiko Yuyama', 'Quentin Tarantino', 'Ranjit Jeyakodi', 'Ram', 'Antoine Fuqua']
    -['Mark Herman', 'Alex Proyas', 'Ben A. Williams', 'Stephen Daldry', 'John Fortenberry', 'Rob Cohen', 'Lee Tamahori', 'Chandrakant Kulkarni', 'Uttung Shelar', 'Greg Kohs', 'Sumitra Bhave, Sunil Sukthankar', 'Lisa Arnold', 'Bedabrata Pain', 'Sumitra Bhave, Sunil Sukthankar', 'Reiner Holzemer']
    -['Kim Nguyen', 'Jose Manuel Colón', 'Nagraj Manjule', 'Bob Rose', 'Abba T. Makama', 'Joe Dietsch, Louie Gibson', 'Chris Sivertson', 'Amar Gupte', 'Sooraj R. Barjatya', 'Sooraj R. Barjatya', 'Sachin', 'Amardeep Singh Gill', 'Jon M. Chu', 'Chandrakant Kulkarni', 'Pratim D. Gupta']
    -['Ben Patterson', 'Sooraj R. Barjatya', 'David Batty', 'Sachin', 'Santosh Manjrekar', 'Steve Ball, Andrew Duncan', 'Dustin McKenzie', 'Victor Dal Chele, Alfred Gimeno', 'William Lau', 'Dustin McKenzie, Steve Sacks', 'Kiki Goshay, Jacqueline Monetta', 'Peter Pardini', 'Lars von Trier', 'Rebecca Zlotowski', 'René Pérez Joglar']
    -['Rajeev Patil', 'Sudesh Manjrekar', 'Kevin Phillips', 'Jee-woon Kim', 'Niyi Akinmolayan', 'Satish Manwar', 'Alison MacLean', 'David Koepp', 'Dan Bush', 'Sameer Vidwans', 'Sam Hobkinson', 'Kedar Shinde', 'Karan Bali']
    -['Rohit Mittal', 'Steve Hickner, Simon J. Smith', 'Jalil Lespert', 'Matt Kugelman', 'Hari Viswanath', 'Pratim D. Gupta', 'Pieter-Jan De Pue', 'Miriam Chandy Menacherry', 'Edward Ellis, Flor Salcedo, Aaron Woolf', 'Abhishek Chaubey']
    -['Jerry Rothwell']
    -['Charlie Haskell, Koichi Sakamoto', 'James Barr', 'Sorin Dan Mihalcescu', 'Harold Cronk']
    -['Roberta Grossman, Sophie Sartain', 'David Bruckner', 'Tamta Gabrichidze', 'Ari Sandel', 'Caradog W. James', 'Steven Soderbergh', 'Brad Bird', 'Tom Stern', 'Kelly Duane de la Vega', 'Julio Medem', 'Toa Fraser', 'Deane Taylor']
    -['Luis Javier M. Henaine', 'Mathias Malzieu, Stéphane Berla', 'Jenna Laurenzo', 'Scott Aukerman, Akiva Schaffer', 'Hark Tsui', 'Bob Nelson', 'Lance Bangs', 'Trevor Ryan', 'Alex Zamm', 'Charles Stone III', 'Michael Showalter']
    -['Stephen Cone', 'Julius Onah', 'Jordan Ross', 'Krishna Agazzi, Filippo Gastaldi', 'Alison E. Rose', 'Roland Joffé', 'Lance Bangs', 'Philipp Stölzl', 'Craig Moss', 'Wade Allain-Marcus, Jesse Allain-Marcus']
    -['Raúl Campos, Jan Suter', 'Malik Vitthal', 'Vonda Harrell, Daniel Camenisch', 'Fabio Guaglione, Fabio Resinaro', 'Carlos Vermut', 'Shaina Allen', 'Joey Kern', 'Hong-seon Kim', 'Lilibet Foster', 'Seth Barrish, Mike Birbiglia', 'J.C. Falcón', 'Cathy Garcia-Molina', 'Wenn V. Deramas', 'Mae Czarina Cruz', 'Mae Czarina Cruz', 'Sridhar Rangayan']
    -['Cathy Garcia-Molina', 'Wenn V. Deramas', 'Cathy Garcia-Molina', 'Cathy Garcia-Molina', 'Saw Teong Hin, Nik Amir Mustapha, M.S. Prem Nath', 'Cathy Garcia-Molina', 'Dan Villegas', 'Olivia M. Lamasan', 'Wenn V. Deramas', 'Cathy Garcia-Molina', 'Antoinette Jadaone', 'Marcus Raboy', 'Abhinay Deo', 'John Asher']
    -['Jesse Peretz', 'Michael Blieden', 'Sherwin Shilati', 'Mark Columbus, Lauren Hoekstra, Sarah Kruchowski, Ryan Moody, Simon Savelyev, Vanita Shastry, Shadae Lamar Smith, Jeremy David White', 'Dejan Zečević', 'Pascale Lamche', 'Lô Politi', 'Yuen Wo-Ping', 'Joshua Oppenheimer', 'Jeremy Saulnier', 'Charles Martin Smith', 'Pawan K Shrivastava', 'Paco Plaza', 'Tomas Portella']
    -['Kazuchika Kise, Masahiko Murata', 'Kazuchika Kise', 'Kazuchika Kise', 'Macon Blair', 'Mitch Schauer', 'Mar Targarona', 'Duncan Jones', 'Steven Gomez', 'Robert Cannan, Ross Adam', 'Ryan Polito']
    -['Aruna Raje', 'Alex Lehmann', 'Elisabeth Vogler', 'Parambrata Chatterjee', 'Brian A. Miller', 'Errol Morris', 'Adam Smith', 'Ken Burns', 'Ken Burns', 'Benjamin Ree', 'Susannah Ward', 'Sam Taplin', 'Kasia Uscinska', 'Vicky Matthews']
    -['Vicky Matthews', 'Woo Min-ho', 'Femi Oyeniran, Nicky Slimting Walker', 'Hang-Jun Jang', 'Steven Spielberg', 'Kurt Voelker', 'David Paul Meyer', 'Constance Marks', 'Paul Miller', 'Michael Del Monte', 'Andreas Johnsen', 'Nora Twomey', 'Rakeysh Omprakash Mehra', 'Chris Blake', 'Johnny Kevorkian']
    -['Amshan Kumar', 'David L.G. Hughes', 'Michael McKay', 'Ildiko Enyedi', 'You-Jeong Chang', 'Richard Bates Jr.', 'Steve McLean', 'Robert Rodriguez', 'Gregory Caruso', 'Benjamin Arfmann', 'Fumihiko Sori', 'Shin-yeon Won']
    -['Mar Targarona', 'Keith Scholey', 'Juan Pablo Buscarini', 'Keiichi Sato, Yasushi Kawamura', 'Chad Van De Keere', 'Chad Van De Keere', 'Suseenthiran', 'Lucky McKee', 'Cecilia Peck', 'Sanjeev Gupta', 'Paul Tanter', 'Nishikant Kamat']
    -['Nishikant Kamat', 'Ribhu Dasgupta', 'Kevin MacDonald', 'Matt Tyrnauer', 'Stephan Rick', 'Mariano Baez', 'Stephanie Laing', 'Gus Van Sant', 'Logan Kibens', 'Leo Riley, Eric Radomski', 'Vincent Perez', 'Ozan Açıktan', 'Carlos Marques-Marcet', 'Prasanth Varma']
    -['Gangadhar Salimath', 'Daniel J. Clark', 'Marcelo Galvão', 'Shanawaz Nellikunnil', 'Sudhir Mishra', 'Danny J. Boyle', 'Rajat Kapoor', 'Lars Kaalund', 'Bedran Güzel', 'Hari Nath', 'Josh Webber', 'Adam Collins, Luke Radford', 'Saket Chaudhary', 'Tanuja Chandra']
    -['Jackie van Beek, Madeleine Sami', 'Blair Hayes', 'Sachin Kamlakar Khot', 'Tolga Örnek', 'Daniel Monzón', 'Sung-soo Kim', 'Chandrakant Kanse', 'Sanjay Jadhav', 'Sudesh Manjrekar, Atul Kale', 'Avadhoot Gupte', 'Satish Rajwade', 'Sanjay Soorkar']
    -['Gajendra Ahire', 'Michael J. Bassett', 'Chandrakant Kulkarni', 'Avadhoot Gupte', 'Thomas Stuber', 'Christopher Chambers', 'Giulio Base', 'Sam Dunn, Scot McFadyen', 'Raúl Arévalo', 'Matías Bize', 'Alex Holmes', 'Tanuj Chopra', 'Jon M. Chu']
    -['Bo Burnham', 'Anand Tiwari', 'Michael Paul Stephenson', 'Colin Dench', 'Jesús Magaña Vázquez', 'Corey Grant', 'Gareth Evans', 'Shaul Schwarz, Christina Clusiau', 'Rayka Zehtabchi', 'Jevons Au, Zune Kwok, Chow Kwun-wai, Ng Ka-Leung, Wong Fei-Pang', 'Olivier Assayas', 'Jeremiah Zagar', 'Afonso Poyart']
    -['Ricky Gervais', 'Joachim Fest, Christian Herrendoerfer', 'Joe Berlinger, Bruce Sinofsky', 'Adam Davis, Jerry Kolber, Trey Nelson, Erich Sturm', 'Chris Weitz, Paul Weitz', 'Stephen Daldry', 'Brad Peyton', 'Hsu Chih-yen, Mag Hsu', 'Emma Hatherley', 'Meghna Gulzar']
    -['Eddie Martin', 'Kelly Noonan', 'Rick Morales', 'Andrew Tan, Stephen Murray', 'Michael D. Black', 'Michael Winnick', 'James McTeigue', 'Olivier Assayas']
    -['Kelly Fremon Craig', 'Kyle Rankin', 'Pramod Pawar', 'Dan Gilroy', 'Rebecca Harrison', 'Milla Harrison-Hansley, Alicky Sussman', 'Storm Theunissen', 'Jack C. Newell']
    -['Karyn Kusama', 'Fisher Stevens', 'Neil Triffett', "Tom O'Dell", 'John Trengove', 'Ui-seok Jo', 'Michael Mayer', 'Greg MacGillivray', 'Drake Doremus', 'Amber Tamblyn', 'Jani Lachauer, Jakob Schuh']
    -['Marina Zenovich', 'Carlos Bolado', 'Gurvinder Singh', 'Rohit Shetty', 'Anjali Nayar', 'Farah Khan', 'Shlok Sharma', 'Joaquín Mazón', 'Scott Hicks', 'Adam Sjöberg', 'John Stewart Muller', 'Leandro Mark, Nicolás Silbert', 'Pulkit', 'Jennie Livingston', 'Oscar Micheaux, Spencer Williams, Richard E. Norman, Richard Maurice']
    -['Vlad Yudin', 'Jonás Trueba', 'Peter DeLuise', 'Robbie Countryman', 'Trey Edward Shults', 'Jason James', 'James Yukich', 'Nic Mathieu', 'Gary Howsam, Mike Smith, John Paul Tremblay, Robb Wells', 'Pierre Morel', 'Sujeeth']
    -['Agasyah Karim, Khalid Kashogi', 'Jonathan Sobol', 'Ifa Isfansyah', 'Nia Dinata', 'Rudy Soedjarwo, Riri Riza', 'Abhinay Deo', 'Kiran Rao', 'David E. Talbert', 'Umesh Mehra', 'Abbas Tyrewala', 'Ashutosh Gowariker', 'Bhagyaraj', 'Anusha Rizvi, Mahmood Farooqui', 'Latif Faiziyev, Umesh Mehra', 'Aamir Khan', 'Baltasar Kormákur']
    -['John Stockwell', 'Chris Kelly', 'Karey Kirkpatrick', 'Alexandre Avancini', 'Marco Risi', 'Anne Fletcher', 'Marek Losey', 'Andy Serkis', 'Mat King', 'Brian Oakes', 'Jacob Joice', 'Bert Marcus', 'Drew Heriot']
    -['BB Sasore', 'Pascal Amanfo', 'Noah Baumbach', 'Atsuko Ishizuka', 'Eric Aghimien', 'Robert Kenner, Taki Oldham', 'Bruce Robinson', 'Omoni Oboli', 'Omoni Oboli']
    -['Saratswadee Wongsomphet', 'Joel Crawford', 'Alex Lehmann', 'Roman Gackowski', 'Benjamin Dickinson', 'Mads Matthiesen', 'John Schultz', 'Simon Baker', 'Fernando Moro', 'Jay Chapman', 'Kasra Farahani']
    -['Jay Karas', 'Ladislas Chollat', 'Michael Mason', 'Chris Howe', 'Ofir Raul Graizer', 'Sacha Wolff', 'Sofia Coppola', 'Nagesh Kukunoor', 'Prakash Jha', 'Ravi Babu', 'Sandeep Chatterjee', 'Shivam Nair', 'Soumitra Ranade', 'Manmohan Desai']
    -['Manish Jha', 'Raja Menon', 'Hrishikesh Mukherjee', 'Sagar Sarhadi', 'Jon Rosenbaum', 'Priyadarshan', 'Ram Gopal Varma', 'Raj Kapoor', 'David Carson', 'David Dhawan', 'Tom Holland', 'Hrishikesh Mukherjee', 'Tanveer Khan', 'Indra Kumar', 'Lee Tamahori']
    -['Chandra Barot', 'Ajay Phansekar', 'Rajkumar Santoshi', 'Partho Ghosh', 'Hrishikesh Mukherjee', 'Martin Campbell', 'Rohit Shetty', 'David Mirkin', 'Prakash Mehra', 'Bruce Leddy', 'Shirish Kunder', 'Madhur Bhandarkar', 'Radhu Karmakar', 'Ahishor Solomon', 'David Dhawan', 'Tinnu Anand']
    -['Sai Paranjape', 'Hrishikesh Mukherjee', 'Gulzar', 'Remy Kohli', 'David Dhawan', 'Shekhar Kapur', 'David Dhawan', 'Prakash Mehra', 'Karan Lalit Butani', 'Abhishek Saxena', 'Basu Chatterjee', 'Raj Kapoor', 'Sanjay Dayma', 'John Milius']
    -['Amit Rai', 'Raman Kumar', 'Balu Mahendra', 'Raj Kapoor', 'Raj N. Sippy', 'Ram Gopal Varma', 'Basu Chatterjee', 'Tariq Khan', 'Shakti Samanta', 'Michael Apted', 'Roger Spottiswoode', 'Madhur Bhandarkar', 'Shyam Benegal', 'Sanjay Patel', 'Ashu Trikha']
    -['Kushal Srivastava', 'Chandra Prakash Dwivedi', 'John Fortenberry', 'Chris Bould', 'Chris Bould', 'Kevin Booth, David Johndrow', 'Paul M. Green', 'Julio Fernández Talamantes', 'Walter C. Miller', 'Walter C. Miller']
    -['Walter C. Miller', 'Paul Dugdale', 'Tommy Avallone', 'Noriyuki Abe', 'Ellen Brown', 'Matt Askem', 'Matt Askem', 'Jay Chapman', 'Rob Zombie', 'Barry Avrich', 'Gary Cohen, Ross Hockrow']
    -['Stan Lathan', 'Fabien Beziat, Hugues Nancy', 'Nils Tavernier', 'Alethea Jones', 'Guy Vasilovich', 'Rich Ragsdale', 'Dana Doron, Uriel Sinai', 'Hidetaka Inazuka', 'James Brown', 'Paul Schrader', 'Diego Luna']
    -['Brittany Andrews', 'Tim Blake Nelson', 'André Øvredal', 'Jay Baruchel', 'Rodrigo Van Der Put', 'Linda Mendoza', 'John Michael McDonagh', 'Theo Davies', 'Timothy Woodward Jr.', 'Benoît Jacquot', 'Fernando Frías De La Parra']
    -['John Hillcoat', 'Måns Mårlind, Björn Stein', 'Ludovic Bernard', 'Jason Moore', 'Yuki Yamato', 'Álvaro Brechner', 'Levan Tsikurishvili', 'Rakesh Mehta', 'Mat Whitecross']
    -['Eduardo Chauvet', 'Gonzalo Bendala', 'Stefan Aust, Dirk Laabs', 'Biyi Bandele', 'Andrew Wessels', 'Emir Kusturica', 'Chris Renaud', 'Odunlade Adekola', 'Jason Stone', 'Detlev Buck', 'Luis Prieto']
    -['Elisa Fuksas', 'Vic Armstrong', 'Anne Fontaine', 'Lee Toland Krieger', 'Noël Wells', 'Jay Chapman', 'Marc Francis, Max Pugh', 'Alik Sakharov', 'Tony Giglio']
    -['Akiyuki Shinbo, Nobuyuki Takeuchi', 'Ron Oliver', 'Don Michael Paul', 'Shojiro Nishimi, Guillaume Renard', 'J.D. Dillard', 'Anthony Russo, Joe Russo', 'Michael Petroni', 'Erik Nelson', 'Ritu Sarin, Tenzing Sonam', 'Pepe Bojórquez', 'Rhys Thomas']
    -['Jeff Baena', 'Noam Murro', 'Patrick Brice', 'Daniel Kontur', 'Jorge Michel Grau', 'Riki Lindhome, Jeremy Konner', 'Werner Herzog', 'David M. Rosenthal', 'Ross Boyask', 'Bruce Beresford', 'David Ayer']
    -['Satyajit Bhatkal', 'Louise Alston', 'Sunkanmi Adebayo', 'Kheiron', 'Susanne Bier', 'Irek Dobrowolski', 'Rodrigo Van Der Put', 'Josh Mendoza']
    -['Diego Kaplan', 'Ari Levinson', 'George Ford', 'George Ford', 'Omoni Oboli', 'Falz', 'Frank Rajah Arase', 'Omoni Oboli', 'Fernando Meirelles', 'Hasraf Dulull', 'Gilbert Chan', 'Rarecho', 'Steve Cheng']
    -['Sam Loh', 'Jason Lai', 'Marco Deufemia, Justin G. Dyck', 'Lydia Tenaglia', 'Thomas Astruc', 'Pablo Parés', 'Manny Rodriguez', 'David Grossman', 'Mario Cambi', 'Luc Vinciguerra', 'Luc Vinciguerra', 'Ahsan Rahim', 'Yorgos Lanthimos']
    -['Imtiaz Ali', 'Michael Barrett', 'Adam Nimoy', 'Elizabeth Wood', 'Kevin Smith', 'Rodrigo Reyes', 'Samit Kakkad', 'Kenny Young', 'Peter Orton', 'Emil Ben-Shimon', 'Kenny Young', 'Julia Hart']
    -['Warren P. Sonoda', 'Mark Lewis', 'Joel Gallen, Tig Notaro', 'Rob W. King', 'Ian MacAllister-McDonald', 'L. Frazier', 'Paul Reubens, Wayne Orr', 'Sebastian DiNatale', 'Prasobh Vijayan', 'Jon Rosenbaum', 'Ekachai Uekrongtham', 'Jay Surridge', 'Jayson Thiessen, Ishi Rudell', 'Steve Antin']
    -['Nuhash Humayun, Syed Ahmed Shawki, Rahat Rahman, Robiul Alam Robi, Golam Kibria Farooki, Mir Mukarram Hossain, Tanvir Ahsan, Mahmudul Islam, Abdullah Al Noor, Krishnendu Chattopadhyay, Syed Saleh Ahmed Sobhan', 'Tom Hooper', 'Brendon Marotta', 'Sriram Raghavan', 'Elaine Bogan, John Sanford', 'Michael Cuesta', 'David Cronenberg', 'Lone Scherfig', 'Thom Zimny', 'James Marsh', 'Gordon Chan', 'Vikram Gandhi']
    -['Morgan Spurlock', 'Sean Hanish', 'David Shisgall', 'Mark Williams', 'Karan Anshuman', 'Obi Emelonye', 'Farhan Akhtar', 'Zoya Akhtar', 'Farhan Akhtar', 'Farhan Akhtar', 'Mrighdeep Singh Lamba', 'Abhinay Deo', 'Tsutomu Mizushima']
    -['Fernando Ayllón', 'Reema Kagti', 'Brodje Wemboendja', 'Jadesola Osiberu', 'Vijay Lalwani', 'Farhan Akhtar', 'Zoya Akhtar', 'Shirley Frimpong-Manso', 'Abhishek Kapoor', 'Hiroshi Aoyama, Kazumi Fukushima, Jim Stenstrum', 'Reema Kagti', 'Phil Roman', 'Téo Frank', 'Zoya Akhtar']
    -['Sean Olson', 'Sigrid Andrea Bernardo', 'Matt Askem', 'Matt Askem', 'Guillermo de Oliveira', 'Elliot Hegarty', 'Manoj Beedha', 'Vikram Bhatt']
    -['Daniel Alfredson', 'Jody Lambert', 'Sridhar Rangayan', 'Ernie Barbarash', 'Agnidev Chatterjee', 'Todd Standing', 'Marc Levin', 'Manbhavan Singh', 'Pa. Ranjith', 'Ignacio López Escrivá', 'Rahat Kazmi', 'Nicholas Kharkongor']
    -['Varun Narvekar', 'Seth Henrikson', 'Devaki Singh, Luke Kenny', 'Benson Lee', 'Antonio Serrano', 'Chris Burkard', 'Sinan Akkuş', 'Matt Bell', 'Hardik Mehta']
    -['Ehtesham Uddin', 'Elite Zexer', 'Pedro Morelli', 'John Banas', 'Wim Bonte', 'Alfonso Cuarón', 'Bruce MacDonald, Gabriel Sabloff']
    -['Mike Nicoll', 'Michael Bay', 'Robert O. Peters', 'Bunmi Ajakaiye', 'Omoni Oboli', 'Biodun Stephen', 'M.J. Bassett', 'Ding-Lin Wang', 'Robert O. Peters', "Richard van't Riet", 'John Hoffman, Nanfu Wang', 'Marcus Raboy']
    -['Michael Winterbottom', 'Jean-Pierre Dardenne, Luc Dardenne', 'Gurinder Chadha', 'Gabriela Cowperthwaite', 'Raúl Campos, Jan Suter', 'Christopher Smith', 'Josh Greenbaum', 'Shonali Bose', 'Adam Alleca', 'Marcus Raboy', 'Craig Anderson', 'Michael G. Kehoe', 'Alex Lehmann', 'Frank Coraci', 'Sameh Abdulaziz']
    -['Lance Bangs', 'Hiroshi Katagiri', 'Ivan Sen', 'Anthony Caronna, Alexander Smith', 'Jeffrey C. Bell', 'Michelle Johnston', 'John Fortenberry', 'Jay Roach', 'Jay Roach', 'Jay Roach', 'Vijay Kumar Arora', 'Matt Shakman', 'Mikhail Red', 'Pankaj Batra']
    -['Craig Brewer', 'Serge Ou', 'Navaniat Singh', 'Gaurav Bavdankar', 'David Raynr', 'Gregory Hoblit', 'Jagdeep Sidhu', 'Malik Bendjelloul', 'Jamie M. Dagg', 'Tanawat Aiemjinda', 'Robert Rodriguez', 'Martin Scorsese']
    -['Brendan Malloy, Emmett Malloy', 'Mukesh Vohra', 'Syrine Boulanouar, Nekfeu', 'Tudor Giurgiu', 'Andrew Lau Wai-Keung', 'Cheang Pou Soi', 'Enrique García Meza', 'Katarina Launing', 'Johnnie To', 'Gabriel Clarke, Torquil Jones', 'Lawrence Cheng', 'Prakash Balwant Saini', 'Nam Ron', 'Johnnie To']
    -['Johnnie To', 'Baljit Singh Deo', 'Leung Lok Man, Luk Kim-ching', 'Guillermo del Toro', 'Jazz Boon', 'Prakash Satam', 'Andrew Lau Wai-Keung', 'Felix Chong', 'Dhanush', 'Gary Mak', 'Liu Jiang']
    -['Gabriele Muccino', 'Blake Harris, Chris Bouchard', 'Evan Spiridellis, Jeff Gill', 'Jasbir Bijendra Bhati', 'Tristan Ferland Milewski', 'Harjit Singh', 'Jon Carey, Adam Darke', 'Jennifer Lynch', 'Leopoldo Aguilar', 'Nana Ekvtimishvili, Simon Gross']
    -['Olivier Jean-Marie', 'Daniel Mann, Joseph Sargent', 'Ashish R. Shukla', 'Rohit Jugraj', 'Priyadarshan', 'Peter Spirer', 'Ali F. Mostafa', 'Myles Kane, Josh Koury', 'Robert McCullough Jr.', 'Shrihari Sathe', 'Ralph Macchio', 'Ricardo Maldonado']
    -['Vetrimaaran', 'Chad L. Scheifele', 'Linas Phillips', 'Jeff Margolis', 'Einar Gabbassov', 'Bauddhayan Mukherji', 'Mark Risley']
    -['Ishi Rudell, Jayson Thiessen', 'Susan Lambert, Stefan Moore', 'Tim Johnson', 'Robert Moresco', 'Aadish Keluskar', 'Joe Murray, Cosmo Segurson', 'Jesse Moss', 'Michael Fahey', 'Alejandro Montiel', 'Ian Cheney', 'Jesse Gustafson']
    -['John Schultz', 'Shin Won-ho', 'Shin Won-ho', 'Nancy Schwartzman', 'Darren Lynn Bousman', 'Ted Demme', 'Sujoy Ghosh', 'John Papola']
    -['John Asher', 'S.S. Rajamouli', 'S.S. Rajamouli', 'S.S. Rajamouli', 'S.S. Rajamouli', 'S.S. Rajamouli', 'S.S. Rajamouli', 'Osman Ali', 'Rolfe Kanefsky', 'Mae Czarina Cruz', 'Lance Bangs', 'Shannon Hartman', 'Christopher Nolen', 'Billy Corben', 'Joe DeMaio']
    -['Rob Silvestri', 'Mohamed Samy', 'Alex Burunova', 'Jesús Torres Torres', 'Matthias Hoene', 'Chris Nahon', 'Dante Lam', 'Ringo Lam', 'Alex Coletti', 'Mark Osborne', 'Christian De Vita', 'Abhishek Varman', 'Sabir Khan', 'Nikhil Nagesh Bhat']
    -['Xiaoxing Yi, Yoshitaka Takeuchi, Haoling Li', 'Raúl Campos, Jan Suter', 'Bryan Fogel', 'Fabrice Du Welz', 'Rohit Shetty', 'Johnnie To', 'Wong Jing', 'Mateo Gil']
    -['Paul Andrew Williams', 'Rémy Four, Julien War', 'Fernando Ayllón', 'Alejandro Fernández Almendras', 'Jota Linares', 'Will Lockhart, Cole D. Pruitt', 'Erwin van den Eshof', 'Lauren Miller Rogen']
    -['Fernando González Molina', 'Joseph Mbah', 'Roger Kumble', 'Wagner de Assis', 'David Mackenzie', 'Jacob Kornbluth', 'Robert Adetuyi', 'Marcus Raboy', 'White Trash Tyler', 'Van M. Pham', 'Shivam Nair', 'Tanuja Chandra', 'A.R. Murugadoss', 'Gaby Dellal', 'Chris Bell']
    -['John Barnard', 'Stan Lathan', 'Philip Yung', 'Sarah Adina Smith', 'Aaron Burns', 'Abdellatif Kechiche', 'Jay Karas', 'Christopher Louie', 'Tim Rouhana', 'Joe Berlinger', 'Ana Kokkinos', 'Toshiya Shinohara', 'Jordan Brady', 'Lars von Trier', 'Keiko Yagi']
    -['Cate Shortland', 'Adam Wingard', 'Mohd Khairul Azri Bin Md Noor', 'Daniela Goggi', 'Toby Haynes', 'Yeung Yat-Tak', 'Keith L. Smith', 'Todd Biermann', 'Patrick Graham', 'Mike Clattenburg', 'Han Qing', 'Ian Edelman']
    -['Randall Lobb, Robert McCallum', 'Rai Yuvraj Bains', 'Sunil Thakur', 'Muh Chen', 'Saurabh Sinha', 'Ari Folman', 'Bassam Kurdali', "Brian O'Malley", 'Peter Spirer', 'Marcus Raboy', 'Michael Seater', 'Steven Bognar, Julia Reichert', 'Ashwin Saravanan']
    -['Ashwin Saravanan', 'Ashwin Saravanan', 'Jun Lana', 'Ashwiny Iyer Tiwari', 'Atlee Kumar', 'Ravi Udyawar', 'R. Balki', 'Shree Narayan Singh', 'Salima Koroma', 'Woo Ming Jin', 'Shamyl Othman', 'Michael Mazzola', 'Martin Scorsese']
    -['Julia Knowles', 'Scott Marshall Smith', 'Nagesh Kukunoor', 'Dean Wright', 'Camille Shooshani', 'Lesli Linka Glatter', 'Vijay Kumar', 'Vishal Bhardwaj', 'Vikas Bahl, Nitesh Tiwari', 'Stacie Passon', 'Michael Thelin', 'Madhur Bhandarkar']
    -['Abhishek Kapoor', 'Khalid Mohamed', 'Luis Ara', 'Sanjay Leela Bhansali', 'Vishal Bhardwaj', 'Imtiaz Ali', 'Punit Malhotra', 'Shirish Kunder', 'Dibakar Banerjee', 'Prem Soni', 'Ashutosh Gowariker', 'Clarence Yiu-leung Fok', 'Prakash Jha', 'Rakeysh Omprakash Mehra', 'Prabhu Deva', 'Imtiaz Ali']
    -['Farah Khan', 'Mandeep Kumar', 'Anees Bazmee', 'Vishal Bhardwaj', 'Michael Drumm', 'Fabrizio Copano, Augusto Matte', 'Esteban Vidal', 'Esteban Vidal', 'Liu Jie', 'Ding Sheng', 'Justin Krook', 'Gervasio Iglesias, Alexis Morante', 'Will Gluck']
    -['Daniel Lindsay, T.J. Martin', 'Tommy Wirkola', 'Michael Carney', 'Manuel Martín Cuenca', 'Susan Johnson', 'Y. Joon Chung', 'Jon Rosenbaum']
    -['Mark Murphy', 'Tarsem Singh', 'Michael Tiddes', 'Kepa Sojo', 'Vikramaditya Motwane', 'Wong Jing', 'Chia-Liang Liu', 'Chia-Liang Liu', 'Johnnie To', 'Sze Yu Lau']
    -['Stephen Chow', 'Johnnie To', 'Li Pei-Chuan', 'Chia-Liang Liu', 'Anthony Chan', 'Siu-hung Chung, Wong Jing', 'Poj Arnon', 'Chia Tang', 'Alex Law', 'Chia-Liang Liu', 'Herman Yau', 'Cheh Chang', 'Johnnie To', 'Johnny To', 'Sze Yu Lau', 'Zach Braff']
    -['Rajiv Chilaka, Binayak Das', 'Cho Li, Chen Hung-yi, Weica Wang, Liu Bang-yao, Lin Guan-fu, Shen Chi, YC Tom Lee', 'Diego Pignataro', 'Kyle Rideout', 'Gajendra Ahire, Viju Mane, Girish Mohite, Ravi Jadhav', 'Rucha Humnabadkar', 'Scott Cooper', 'Matt Kugelman', 'Ashutosh Gowariker', 'Matthew Salleh', 'Jay Chapman', 'Jay Chapman']
    -['Michael Dowse', 'Nathaniel Warsh', 'Alejandro Agresti', 'Anthony Wonke', 'Ashim Ahluwalia', 'Louis C.K.', 'Robert Nixon, Fisher Stevens', 'Manu Ashokan', 'James Lee']
    -['Peter Hutchings', 'Jay Karas', 'Anita Udeep', 'Vlad Yudin', 'Alberto Arnaut Estrada', 'Barak Goodman', 'Max McGill', 'David Fairhead', 'Victor Zarcoff', 'Jean-Claude La Marre', 'Jorge Hernandez Aldana', 'Michael Tiddes', 'Michael Drumm', 'Troy Miller']
    -['Jay Karas', 'Jay Chapman', 'Majid Majidi', 'Eduardo Chauvet', 'Mike Newell', 'Jake Szymanski', 'Floyd Russ', 'Susan Glatzer', 'Will Canon', 'Barney Clay', 'Ernie Barbarash', 'Rajkumar Hirani', 'Khaled El Halafawy']
    -['Todor Chapkanov', 'Louis Leterrier', 'Prawal Raman', 'Sriram Raghavan', 'Rajesh Mapuskar', 'Mike Newell', 'Alexandre Aja', 'Quentin Tarantino', 'Lana Wachowski, Lilly Wachowski', 'Kazuaki Kiriya', 'Phanindra Narsetti', 'Bharat Nalluri', 'David Fincher', 'John G. Avildsen']
    -['Sylvester Stallone', 'Sylvester Stallone', 'Sylvester Stallone', 'John G. Avildsen', 'Rob Reiner', 'Chris Stokes', 'Nancy Meyers', 'Clint Eastwood', 'Beeban Kidron', 'Bejoy Nambiar', 'Paul Raschid', 'Mel Smith', 'Jesse Handsher, Olivier Roland']
    -['Wong Jing', 'Bradley Parker', 'Wong Jing', 'Gregory Caruso', 'Corey Yuen', 'Vishnu Govindhan', 'Andrew Lau Wai-Keung, Alan Mak', 'Pablo Giorgelli', 'Jijo Pancode', 'Andrés Couturier', 'Suresh Pillai', 'B.N. Shajeer Sha', 'Hua Shan', 'Alessandro Angulo', 'Pang Ho-cheung', 'Amaan Khan']
    -["Pablo D'Alo Abba", 'Binu Ulahhannan', 'Anil Thomas', 'Sabu Varghese', 'Matt Askem', 'Charlie Lightening', 'Charlie Lightening', 'Matt Askem', 'Kiran Narayanan', 'Kundan Shah', 'Richard Correll', 'Amir Mohiuddin', 'Zakariya', 'Alistair Legrand']
    -['Steven Soderbergh', 'John Duigan', 'Aditya Kripalani', 'Maria Burton', 'Charlie Vaughn', 'Avinash Das', 'Paul Serafini', 'April Mullen', 'Lilly Wachowski, Lana Wachowski, Tom Tykwer', 'Ben Steele']
    -['John Butler', 'Ali Scher', 'Maz Jobrani', 'Isaac Rentz', 'Clay Glen', 'Christopher Murray', 'Kevin Ford, Smriti Keshari, Eric Schlosser']
    -['David Briggs', 'Neil Rawles', 'Claude Lelouch', 'J.F. Musial, Josh Vietze', 'John Smithson', 'Daniel Kontur', 'Neil Armfield', 'Cal Saville', 'Christopher Martin']
    -['Tom Whitter', 'Peter Farrelly, Will Graham, Steve Carr, Griffin Dunne, Steve Brill, James Duffy, Jonathan van Tulleken, Elizabeth Banks, Patrik Forsberg, Brett Ratner, Rusty Cundieff, James Gunn', 'Brian M. Conley, Nathan Ives', 'Lena Khan', 'David Wnendt', 'Rajiv Menon']
    -['Justin Webster', 'Suman Mukhopadhyay', 'Mike Flanagan', 'Karthik Subbaraj', 'Brian Smrz', 'Kim A. Snyder', 'Ester Gould, Reijer Zwaan', 'Gerardo Olivares', 'Joe Swanberg', 'Maria Pulera', 'Werner Herzog', 'Marja Lewis Ryan', 'Ryan Koo', 'Hatem Khraiche']
    -['Derek Peck', 'Ryan Polito', 'Jennifer Morrison', 'Mitzi Vanessa Arreola, Amir Galvan Cervera', 'Raúl Campos, Jan Suter', 'Nicolas Pesce', 'Jeremiah Jones', 'Dave Patten', 'Prabhuraj', 'Karthik Subbaraj', 'Jean-Simon Chartier']
    -['Thomas Meadmore', 'Brie Larson', 'Katherine Fairfax Wright', 'Hèctor Hernández Vicens', 'Cem Yılmaz', 'Ömer Faruk Sorak', 'Sermiyan Midyat', 'Yılmaz Erdoğan', 'Kıvanç Baruönü', 'Ali Taner Baltacı', 'Bedran Güzel', 'Holger Tappe']
    -['Yılmaz Erdoğan', 'Cem Yılmaz', 'Louis C.K.', 'Herman Yau', 'Marcus Raboy', 'C.J. Wallis', 'Çagan Irmak', 'Amit Roy']
    -['Teddy Lussi-Modeste', 'Daniel Lee', 'Fernando Ayllón', 'Rocky Soraya, Anggy Umbara', 'Kader Aoun', 'Bille Woodruff', 'Abhay Chopra', 'Lee Chang-dong', 'Kranti Kanade', 'Dar Gai', 'Ricky Gervais', 'Jon Greenhalgh', 'Christopher S. Rech, Brandon Kimber', 'Kitty Green']
    -['Spike Lee', 'Evan Katz', 'Andrea Arnold', 'Dawn Porter', 'Ben Shelton', 'Curro Velázquez', 'Laura Brownson', 'Robert Smigel']
    -['Khaled Youssef', 'Wael Ehsan', 'Joachim Rønning, Espen Sandberg', 'Fernando Ayllón', 'Yılmaz Erdoğan', 'Sathyan Anthikad', 'Brian Oakes', 'Dominic Sena', 'Wayne Blair', 'Max Amini', 'Dimitri Logothetis', 'Simon Stone']
    -['Ahmad El-Badri', 'Yam Laranas', 'Ari Sandel', 'Ahmad Samir Farag', 'Mohamed Samy', 'Chris Sivertson', 'Amr Arafa', 'Quentin Tarantino', 'Robert Luketic', 'Jason Sussberg, David Alvarado', 'Célia Catunda, Kiko Mistrorigo, Rodrigo Eba', 'Sang-ho Yeon', 'Gauri Shinde', 'Oliver Schmitz', 'Felix Herngren, Måns Herngren', 'Marcus Raboy']
    -['Camilla Nielsson', 'Sabal Singh Shekawat', 'Adam Del Giudice', 'Andy Fickman', 'Robert Tate', 'Prakash Satam', 'Kasia Uscinska', 'Susannah Ward', 'Sam Taplin', 'Vicky Matthews, Gareth Sacala', 'Louise Wardle', 'Shalini Kantayya']
    -['Alastair Fothergill', 'Dennis Scholl, Kareem Tabsch', 'Jill Bauer, Ronna Gradus, Rashida Jones', 'Fernando Coimbra', 'Adam Leon', 'Bille August', 'Fab Five Freddie', 'Rebecca Addelman', 'Olivia Milch', 'Mark Raso']
    -['David Sington, Heather Walsh', 'Dylan C. Brown', 'Chris Stokes', 'Shelly Chopra Dhar', 'Shanjey Kumar Perumal', 'Leslie Small', 'Andrew Niccol', 'Jarrad Paul, Andrew Mogel', 'Michael Doneger', 'Sandra Restrepo', 'Ken Loach', 'Sarthak Dasgupta']
    -['Sameh Abdulaziz', 'Jennifer Kaytin Robinson', 'Ken Burns, Christopher Loren Ewers, Erik Ewers', 'Renato De Maria', 'Pedro Coutinho', 'Wong Jing, Jason Kwan', 'Barak Goodman', 'Barak Goodman', 'Hani Hamdi', 'Khaled El Halafawy', 'Ismail Farouk', 'Moataz El Tony', 'Ossama Abu El Atta, Tarek Al Eryan']
    -['Hadi El Bagoury', 'Simon Verhoeven', 'Ron Oliver', 'Jay Chapman', 'Alan Rickman', 'Hasan Karacadağ', 'Dylan Haegens, Bas van Teylingen', 'Ulises Valencia', 'Beyoncé Knowles-Carter', "Bill D'Elia", 'Jon Lucas, Scott Moore', 'Richard Curtis']
    -['Tom Shadyac', 'Bill Oliver', 'Jennifer Beamish, Toby Trackman', 'Paul Weitz', 'Gabe Klinger', 'David Gordon Green', 'Nagesh Kukunoor', 'Suparn Verma', 'Vlad Yudin', 'Sudhir Mishra', 'Sujoy Ghosh', 'Anant Balani', 'Soukarya Ghosal', 'Leena Yadav']
    -['Amitabha Singh', 'Carly Stone', "Liam O'Donnell", 'Bruce Gowers', 'Ron Oliver', 'Enrico Bisi', 'Michael Lennox', 'Detlev Buck', 'Detlev Buck', 'Detlev Buck']
    -['Andrea Molaioli', 'Kemi Adetiba', 'Aaron Nee, Adam Nee', 'Felix Van Groeningen, Felix van Groeningen', 'Chris Bell, Josh Alexander, Greg Young', 'Werner Herzog', 'Ken Barbet', 'Dallas Jackson', 'Sam Taylor-Johnson', 'Marie Madinier', 'Miguel Ángel Lamata', 'Steven Brill', 'Antonio Chavarrías', 'Tiller Russell', 'Gabriel Julien-Laferrière', 'Yeo Siew Hua']
    -['Jota Linares', 'Joshua Marston', 'Eleonore Pourriat', "Anthony D'Souza", 'Zoe Lister-Jones', 'Mike Wiluan', 'Hasan Karacadağ', 'Hasan Karacadağ', 'Ayush Raina', 'Chris Nelson']
    -['Peter Webber', 'Antonio Serrano', 'Raphael Erichsen', 'Lee Kyoungmi, Yim Pilsung, Jeon Go-woon, Kim Jong-kwan', 'Leslie Small', 'Michael Kennedy', 'Fernando Ayllón', 'John R. Leonetti', 'Peter Orton', 'Grant S. Johnson, Ippsie Jones', 'Shravan Kumar', 'Julien Christian Lutz', 'Nick Davis']
    -['Jason Winer', 'Gregory Hoblit', 'Peter Segal', 'Huang Jianming', 'Laura VanZee Taylor', 'Gerry Hoban', 'Tianyu Zhao', 'Richard LaGravenese', 'Mark Palansky', 'Shazia Ali Khan', 'Guy Ritchie']
    -['Robert Rodriguez', 'Robert Rodriguez', 'Stacy Title', 'Bumpy', 'Manish Jha', 'Erik White', 'Ben Brewer, Alex Brewer', 'Victoria Bromley', 'Philip G. Atwell', 'Padmakumar Narasimhamurthy', 'Stephen Gyllenhaal', 'Diego Lerman', 'Don Bluth']
    -['Phil Nibbelink, Simon Wells', 'Larry Latham', 'Larry Latham', 'Simon Wells', 'Phil Weinstein', 'Phil Weinstein', 'Rajkumar Santoshi', 'Kaspar Astrup Schröder', 'Priyadarshan', 'Gregory Hoblit', 'Gary David Goldberg', 'Raj Amit Kumar', 'Kundan Shah']
    -['Keith Malloy', 'Nanette Burstein', 'Jocelyn Moorhouse', 'Luca Vullo', 'Ryan Polito', 'Kundan Shah', 'Jared Cohn', 'Farah Khan', 'Tathagata Banerjee', 'Ananda Krishnan', 'Farah Khan', 'Amol Palekar']
    -['Aziz Mirza', 'Kookie V. Gulati', 'Atanu Mukherjee', 'Nagraj Manjule', 'Steven Spielberg', 'Billy Ray', 'Esteban Sapir', 'Saul Dibb', 'Stephen Amezdroz', 'Benedict Andrews', 'Sushrut Jain', 'Gayane Petrosyan']
    -['Shivendra Singh Dungarpur', 'Alexandre Reinecke', 'Philipp Eichholtz', 'Jamal Hill', 'Daniel Gordon', 'K. Ramanlal', 'Maris Curran', 'John Edginton', 'Avinash Arun', 'Ed Gass-Donnelly', 'Jason Spingarn-Koff', 'Takuya Igarashi']
    -['A. Salaam', 'Jason Cohen', 'Eduardo Casanova', 'Keith Fulton, Louis Pepe', 'Rudradeep Bhattacharjee', 'Daniel Burman', 'Kike Maíllo', 'G.J. Echternkamp', 'G.J. Echternkamp', 'Zatella Beatty', 'Vlad Yudin']
    -['Mario Van Peebles, Ralph Hemecker, Gwyneth Horder-Payton, Milan Cheylov, Dean White, Michael Waxman, Bryan Spicer', 'Danny Cannon']
    -[]
    -[]
    -['Hayato Date', 'Michael Cumming']
    -[]
    -['Eli Roth']
    -[]
    -[]
    -[]
    -[]
    -['Go Koga']
    -['Everardo Gout']
    -['Bhavik Thakore', 'Phil Sgriccia', 'Rob Seidenglanz']
    -['Jesse Warn', 'Rob Seidenglanz', 'Glen Winter', 'Carlos Sedes', 'James Bamford']
    -['Jay Chandrasekhar', 'Philippa Lowthorpe']
    -['Ian Barber', 'Gordon Anderson']
    -[]
    -['Vijay Roche']
    -[]
    -[]
    -['Iginio Straffi']
    -['Stefan Brogren', 'Tensai Okamura']
    -['Peter McDonnell']
    -['Jerry Seinfeld']
    -[]
    -[]
    -['Tony Collingwood']
    -['Yasuhiro Irie']
    -[]
    -[]
    -['Dan Forrer']
    -[]
    -['James Hawes']
    -[]
    -['Jung-ah Im, Seung-uk Jo', 'Andy Devonshire']
    -['Thomas Astruc']
    -['Vikramaditya Motwane, Anurag Kashyap']
    -['Jung-ah Im']
    -[]
    -['Onur Ünlü']
    -[]
    -
    -
    -
    - -
    - -
    -
    -
    -
    -
    - -
    -
    - -
    - {% endraw %} -
    - - diff --git a/docs/widgets.html b/docs/widgets.html deleted file mode 100644 index f18b439..0000000 --- a/docs/widgets.html +++ /dev/null @@ -1,481 +0,0 @@ ---- - -title: Images - - -keywords: fastai -sidebar: home_sidebar - -summary: "Image widgets for jupyter noteook" -description: "Image widgets for jupyter noteook" -nb_path: "nbs/51_widgets.ipynb" ---- - - -
    - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    Imports

    -
    -
    -
    - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    Data url for img tag

    Use data url in <img src='data:...'>

    -
    -
    -
    - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    image_to_base64[source]

    image_to_base64(img:PIL.Image)

    -
    -

    Transform PIL Image to base64 for API -Return:

    - -
    - base64 encoded image bytes
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    data_url[source]

    data_url(img:PIL.Image)

    -
    -

    Return:

    - -
    - data url string,
    -    can be used as the src value of <img>
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    Preview images in jupyter notebook

    -
    -
    -
    - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    image_dom[source]

    image_dom(img:PIL.Image, **kwargs)

    -
    -

    Create tag with src='data:...' - with PIL.Image object -return forgebox.html.DOM

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    with_title_dom[source]

    with_title_dom(img:PIL.Image, title:str, col:int)

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    view_images[source]

    view_images(*images, num_per_row:int=4, titles:List[T]=None)

    -
    -

    Create

    wraping up images -view_images( - img1, img2, img3, - img4, img5, img6, - img7)()

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    Subplot

    -
    -
    -
    - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    class Subplots[source]

    Subplots(total:int, ncol:int=3, figsize=None)

    -
    -

    Simplifying plt sublots -sub = Subplots(18)

    - -
    @sub.single
    -def plotting(ax, data):
    -    ax.plot(data)
    -
    -for data in data_list:
    -    sub(data)
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    Test on image preview

    -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    import os
    -
    - -
    -
    -
    - -
    - {% endraw %} - -
    -
    -

    Original image

    - -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    HOME = os.environ['HOME']
    -img = Image.open(f"{HOME}/Pictures/img02.jpg").resize((200,50))
    -img
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - -
    -
    -

    Data url of the image

    - -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    data_url(img)[:100]
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    'data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHB'
    -
    - -
    - -
    -
    - -
    - {% endraw %} - -
    -
    -

    Visualize single image

    - -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    image_dom(img)()
    -
    - -
    -
    -
    - -
    -
    - -
    - - -
    -
    -
    - -
    - -
    -
    - -
    - {% endraw %} - -
    -
    -

    Visualize serveral images

    - -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    view_images(img, img, img, img, img, img, titles=list(f"lake:{i}" for i in range(6)))()
    -
    - -
    -
    -
    - -
    -
    - -
    - - -
    -
    lake:0
    lake:1
    lake:2
    lake:3
    lake:4
    lake:5
    -
    - -
    - -
    -
    - -
    - {% endraw %} - -
    -
    -

    Contains more images in a row

    - -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    view_images(
    -    img, img, img, img, img, img,
    -    num_per_row=6)()
    -
    - -
    -
    -
    - -
    -
    - -
    - - -
    -
    -
    - -
    - -
    -
    - -
    - {% endraw %} - -
    - - diff --git a/docs/wild_tree_and_loss.html b/docs/wild_tree_and_loss.html deleted file mode 100644 index 7363cc9..0000000 --- a/docs/wild_tree_and_loss.html +++ /dev/null @@ -1,946 +0,0 @@ ---- - -title: Wild Tree and loss - - -keywords: fastai -sidebar: home_sidebar - -summary: "A tree loss for classifiying categories as a tree structure" -description: "A tree loss for classifiying categories as a tree structure" -nb_path: "nbs/40_wild_tree_and_loss.ipynb" ---- - - -
    - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    Sample data

    -
    -
    -
    -
    -
    -

    We down load the data from oncotree here, save as json file

    - -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    import os
    -import json
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    with open(Path(os.environ['HOME'])/"Downloads"/"oncotree.json","r") as f:
    -    oncotree = json.load(f)
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    oncotree['TISSUE'].keys()
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    dict_keys(['code', 'color', 'name', 'mainType', 'externalReferences', 'tissue', 'children', 'parent', 'history', 'level', 'revocations', 'precursors'])
    -
    - -
    - -
    -
    - -
    - {% endraw %} - -
    -
    -

    Wildtree

    -
    -
    -
    - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    cache[source]

    cache(f:Callable)

    -
    -

    cache for class property, use as decorator

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    class WildNode[source]

    WildNode(name)

    -
    -

    A node in graph, with uncertain edge possibilities

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    class WildEdge[source]

    WildEdge(parent:WildNode, kid:WildNode)

    -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    class WildTree[source]

    WildTree()

    -
    -

    A tree that will analyze a tree structure - from (parent-kid) pairs data - use tree.create_new_edge('parent','kid') to - add a new edge

    -

    The tree doesn't have to be a very clear structure, - 2 nodes can have both parent-kid and siblings relationship - the tree will find the shortest path anyway

    -

    Important

    After added all the edges**, use tree.root_map for - finding the tree root.

    -

    tree('name1','name2') to get a dataframe on travel path

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - -
    -
    -

    Test wildtree

    -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    def parse_node(node: WildNode, callback: Callable) -> None:
    -    parent = node['name']
    -    if 'children' in node:
    -        for child_name,child_node in node['children'].items():
    -            # this is the onlything you have to do to fill a 
    -            # wild tree data, create new edge for 
    -            # every parent/kid string pairs
    -            callback(parent, child_node['name'])
    -            parse_node(child_node, callback=callback)
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    tree = WildTree()
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    parse_node(oncotree['TISSUE'], callback=tree.create_new_edge)
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    tree.root_map()
    -
    - -
    -
    -
    - -
    - {% endraw %} - -
    -
    -

    WildTree found the root node automatically

    - -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    tree.root
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    Tissue
    -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    print('\t'.join(list(tree.nodes.keys())[:100]))
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    Tissue	Ovary/Fallopian Tube	Ovarian Cancer, Other	Ovarian Choriocarcinoma, NOS	High-Grade Neuroendocrine Carcinoma of the Ovary	High-Grade Serous Fallopian Tube Cancer	Ovarian Epithelial Tumor	Endometrioid Borderlin Ovarian Tumor	Serous Ovarian Cancer	High-Grade Serous Ovarian Cancer	Low-Grade Serous Ovarian Cancer	Brenner Tumor	Brenner Tumor, Benign	Brenner Tumor, Borderline	Brenner Tumor, Malignant	Clear Cell Borderline Ovarian Tumor	Ovarian Seromucinous Carcinoma	Ovarian Seromucinous Adenoma	Endometrioid Ovarian Cancer	Serous Borderline Ovarian Tumor	Mucinous Ovarian Cancer	Serous Borderline Ovarian Tumor, Micropapillary	Mixed Ovarian Carcinoma	Mucinous Borderline Ovarian Tumor	Clear Cell Ovarian Cancer	Small Cell Carcinoma of the Ovary	Ovarian Seromucinous Borderline Tumor	Ovarian Carcinosarcoma/Malignant Mixed Mesodermal Tumor	Ovarian Germ Cell Tumor	Immature Teratoma	Polyembryoma	Mixed Germ Cell Tumor	Mature Teratoma	Dysgerminoma	Embryonal Carcinoma	Yolk Sac Tumor	Sex Cord Stromal Tumor	Sertoli-Leydig Cell Tumor	Steroid Cell Tumor, NOS	Granulosa Cell Tumor	Gonadoblastoma	Fibrothecoma	Lymphoid	Lymphoid Neoplasm	Posttransplant Lymphoproliferative Disorders	Classical Hodgkin Lymphoma PTLD	Polymorphic PTLD	Florid Follicular Hyperplasia PTLD	Monomorphic PTLD (B- and T-/NK-cell types)	Plasmacytic Hyperplasia PTLD	Infectious Mononucleosis PTLD	B-Lymphoblastic Leukemia/Lymphoma	B-Lymphoblastic Leukemia/Lymphoma with Recurrent Genetic Abnormalities	B-Lymphoblastic Leukemia/Lymphoma, BCR-ABL1 Like	B-Lymphoblastic Leukemia/Lymphoma with t(v;11q23.3);KMT2A Rearranged	B-Lymphoblastic Leukemia/Lymphoma with t(1;19)(q23;p13.3);TCF3-PBX1	B-Lymphoblastic Leukemia/Lymphoma with t(5;14)(q31.1;q32.3) IL3-IGH	B-Lymphoblastic Leukemia/Lymphoma with iAMP21	B-Lymphoblastic Leukemia/Lymphoma with Hyperdiploidy	B-Lymphoblastic Leukemia/Lymphoma with Hypodiploidy	B-Lymphoblastic Leukemia/Lymphoma with t(9;22)(q34.1;q11.2);BCR-ABL1	B-Lymphoblastic Leukemia/Lymphoma with t(12;21)(p13.2;q22.1); ETV6-RUNX1	B-Lymphoblastic Leukemia/Lymphoma, NOS	Non-Hodgkin Lymphoma	Mature B-Cell Neoplasms	Solitary Plasmacytoma of Bone	Follicular Lymphoma	In Situ Follicular Neoplasia	Duodenal-Type Follicular Lymphoma	Monoclonal B-Cell Lymphocytosis	Lymphoplasmacytic Lymphoma	Waldenstrom Macroglobulinemia	Burkitt Lymphoma	Primary Cutaneous DLBCL, Leg Type	EBV Positive Mucocutaneous Ulcer	DLBCL Associated with Chronic Inflammation	B-Cell Prolymphocytic Leukemia	Primary DLBCL of the central nervous system	B-Cell Lymphoma, Unclassifiable, with Features Intermediate between DLBCL and Classical Hodgkin lymphoma	Alpha Heavy-Chain Disease	Chronic Lymphocytic Leukemia/Small Lymphocytic Lymphoma	Mu Heavy-Chain Disease	Primary Cutaneous Follicle Center Lymphoma	Lymphomatoid Granulomatosis	High-Grade B-Cell Lymphoma, NOS	Monoclonal Gammopathy of Undetermined Significance	IgG	IgA	IgM	Burkitt-Like Lymphoma with 11q Aberration	HHV8 Positive DLBCL, NOS	Primary Mediastinal (Thymic) Large B-Cell Lymphoma	Plasmablastic Lymphoma	Gamma Heavy-Chain Disease	EBV Positive DLBCL, NOS	Large B-Cell Lymphoma with IRF4 Rearrangement	Extraosseous Plasmacytoma	Pediatric-Type Follicular Lymphoma	Hairy Cell Leukemia	High-Grade B-Cell Lymphoma, with MYC and BCL2 and/or BCL6 Rearrangements
    -
    -
    -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    tree('Chromophobe Renal Cell Carcinoma','Pleomorphic Adenoma')
    -
    - -
    -
    -
    - -
    -
    - -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    namedirectionfreqto_root
    0Chromophobe Renal Cell Carcinomanone14
    1Renal Non-Clear Cell Carcinomaup13
    2Renal Cell Carcinomaup12
    3Kidneyup11
    4Tissueup10
    5Head and Neckdown11
    6Salivary Carcinomadown12
    7Pleomorphic Adenomadown13
    -
    -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    print(tree['Chromophobe Renal Cell Carcinoma'].detail)
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    <name:Chromophobe Renal Cell Carcinoma,level:4>
    -	parents:{'Renal Non-Clear Cell Carcinoma': 1}
    -	kids:{}
    -
    -
    -
    - -
    -
    - -
    - {% endraw %} - -
    -
    -

    Integrate to binary cross entropy

    This part will create loss function with weights (according to tree), nhot encoder to translate string of a branch

    - -
    -
    -
    - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    calc_weight[source]

    calc_weight(x:array)

    -
    -

    Calculate the weight for BCELoss, - where the nodes closer to root will cause bigger loss - when it's wronged confidently

    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    -
    - -
    - - -
    -

    loss_package[source]

    loss_package(tree:WildTree)

    -
    -

    Create an entire package of things, -Input:

    -
      -
    • tree: WildTree -Output:
    • -
    • dictionary keys:
        -
      • weight
      • -
      • bce_loss: a pytorch nn module
      • -
      • encoder: Callable, a function translate name to nhot encoding
      • -
      • name_list: a list of entity names
      • -
      • to_root_list: an numpy array describe the

        travel distance to root

      • -
      -
    • -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    package = loss_package(tree)
    -
    - -
    -
    -
    - -
    - {% endraw %} - -
    -
    -

    Encoder function

    -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    from matplotlib import pyplot as plt
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    encoder = package['encoder']
    -
    - -
    -
    -
    - -
    - {% endraw %} - - {% raw %} - -
    -
    - -
    -
    -
    encoder('Renal Non-Clear Cell Carcinoma')[:200]
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    array([1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
    -       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.,
    -       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
    -       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
    -       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
    -       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
    -       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
    -       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
    -       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,
    -       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
    -       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
    -       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
    -
    - -
    - -
    -
    - -
    - {% endraw %} - -
    -
    -

    Visualize a port of nhot encoding

    - -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    plt.imshow(encoder('Renal Non-Clear Cell Carcinoma')[None,:200].repeat(20,axis=0))
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    <matplotlib.image.AxesImage at 0x11c4f0710>
    -
    - -
    - -
    - - - -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - -
    -
    -

    A list of int suggest the travel distance to root of all the categories

    -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    package['to_root_list']
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    array([0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    -       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    -       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    -       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    -       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    -       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    -       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    -       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    -       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    -       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    -       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    -       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,
    -       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    -       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    -       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    -       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    -       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    -       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    -       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    -       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    -       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    -       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    -       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    -       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    -       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    -       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    -       3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
    -       4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
    -       4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
    -       4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
    -       4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
    -       4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5,
    -       5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
    -       5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
    -       5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
    -       5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
    -       5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
    -       5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6,
    -       6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6])
    -
    - -
    - -
    -
    - -
    - {% endraw %} - -
    -
    -

    Loss function

    -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    bce_loss = package["bce_loss"]
    -type(bce_loss)
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    torch.nn.modules.loss.BCELoss
    -
    - -
    - -
    -
    - -
    - {% endraw %} - -
    -
    -

    The loss function as weights according to the structure

    - -
    -
    -
    - {% raw %} - -
    -
    - -
    -
    -
    plt.imshow(bce_loss.weight.numpy()[None,].repeat(200,axis=0))
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    <matplotlib.image.AxesImage at 0x11d78b0d0>
    -
    - -
    - -
    - - - -
    - -
    - -
    - -
    -
    - -
    - {% endraw %} - -
    - - diff --git a/forgebox/__init__.py b/forgebox/__init__.py index b4ed79e..5becc17 100644 --- a/forgebox/__init__.py +++ b/forgebox/__init__.py @@ -1 +1 @@ -__version__ = "0.4.20" +__version__ = "1.0.0" diff --git a/forgebox/_nbdev.py b/forgebox/_nbdev.py deleted file mode 100644 index 6d0c233..0000000 --- a/forgebox/_nbdev.py +++ /dev/null @@ -1,199 +0,0 @@ -# AUTOGENERATED BY NBDEV! DO NOT EDIT! - -__all__ = ["index", "modules", "custom_doc_links", "git_url"] - -index = {"list_vc": "01_pandas_extra.ipynb", - "col_list_vc": "01_pandas_extra.ipynb", - "pd.DataFrame.vc": "01_pandas_extra.ipynb", - "pd.Series.list_vc": "01_pandas_extra.ipynb", - "pd.DataFrame.list_vc": "01_pandas_extra.ipynb", - "default_rename_rule": "01_pandas_extra.ipynb", - "rename_by_rule": "01_pandas_extra.ipynb", - "pd.DataFrame.rename_by_rule": "01_pandas_extra.ipynb", - "column_order": "01_pandas_extra.ipynb", - "pd.DataFrame.column_order": "01_pandas_extra.ipynb", - "__all__": "02_imports.ipynb", - "Path.ls": "02_imports.ipynb", - "Async": "03_async.ipynb", - "PandasDisplay": "03_df.ipynb", - "DOM": "04_html.ipynb", - "image_to_base64": "04_html.ipynb", - "data_url": "04_html.ipynb", - "img_dom": "04_html.ipynb", - "deeper": "04_html.ipynb", - "list_group": "04_html.ipynb", - "col_sm": "04_html.ipynb", - "list_group_kv": "04_html.ipynb", - "JS": "04_html.ipynb", - "JS_file": "04_html.ipynb", - "display_df": "05_inter_widgets.ipynb", - "search_box": "05_inter_widgets.ipynb", - "paginate": "05_inter_widgets.ipynb", - "make_hboxes": "05_inter_widgets.ipynb", - "SingleButton": "05_inter_widgets.ipynb", - "Labeler": "05_inter_widgets.ipynb", - "EditableList": "05_inter_widgets.ipynb", - "EditableDict": "05_inter_widgets.ipynb", - "total_width": "05_inter_widgets.ipynb", - "LivingStep": "05_inter_widgets.ipynb", - "StepByStep": "05_inter_widgets.ipynb", - "Flatten": "06_flatten.ipynb", - "l2norm": "06_spacy.ipynb", - "normal": "06_spacy.ipynb", - "distance": "06_spacy.ipynb", - "make_map": "06_spacy.ipynb", - "make_span": "06_spacy.ipynb", - "make_div": "06_spacy.ipynb", - "doc2div": "06_spacy.ipynb", - "compare_sentences": "06_spacy.ipynb", - "highlight": "06_spacy.ipynb", - "FreeMap": "07_freemap.ipynb", - "VipaClass": "09_multiprocess.ipynb", - "SingleFileLiner": "09_multiprocess.ipynb", - "DataFrameRowling": "09_multiprocess.ipynb", - "Stuff": "10_loop.ipynb", - "method4all": "10_loop.ipynb", - "StorageCore": "10_loop.ipynb", - "Loop": "10_loop.ipynb", - "ProgressBar": "10_loop.ipynb", - "error_tolerate": "10_loop.ipynb", - "Tolerate": "10_loop.ipynb", - "LambdaCall": "10_loop.ipynb", - "Event": "10_loop.ipynb", - "chunkify": "10_loop.ipynb", - "NewFileScanner": "11_etl.ipynb", - "get_static": "30_traceable_edit_in_flask.ipynb", - "open_static": "12_static_file.ipynb", - "create_event": "15_loopstack.ipynb", - "events": "15_loopstack.ipynb", - "LoopStack": "15_loopstack.ipynb", - "MetricTab": "15_loopstack.ipynb", - "train_callbacks": "15_loopstack.ipynb", - "eval_callbacks": "15_loopstack.ipynb", - "to_tensor": "15_loopstack.ipynb", - "simple_forward": "15_loopstack.ipynb", - "single_device": "15_loopstack.ipynb", - "TrainLoop": "15_loopstack.ipynb", - "EvalLoop": "15_loopstack.ipynb", - "find_stuff": "15_loopstack.ipynb", - "share_stuff": "15_loopstack.ipynb", - "Config": "20_config.ipynb", - "first": "20_config.ipynb", - "getall": "20_config.ipynb", - "now": "21_minimum.ipynb", - "Link": "21_minimum.ipynb", - "edit_js": "30_traceable_edit_in_flask.ipynb", - "DefaultTemp": "30_traceable_edit_in_flask.ipynb", - "Editable": "30_traceable_edit_in_flask.ipynb", - "pct_to_float": "31_df_filter.ipynb", - "ensure_pct": "31_df_filter.ipynb", - "detect_number_column": "31_df_filter.ipynb", - "DataFilter": "31_df_filter.ipynb", - "LayerTorch": "31_df_filter.ipynb", - "RecursiveFilterCore": "31_df_filter.ipynb", - "RecursiveFilter": "31_df_filter.ipynb", - "get_files": "33_files.ipynb", - "file_detail": "33_files.ipynb", - "cache": "40_wild_tree_and_loss.ipynb", - "WildNode": "40_wild_tree_and_loss.ipynb", - "WildEdge": "40_wild_tree_and_loss.ipynb", - "WildTree": "40_wild_tree_and_loss.ipynb", - "calc_weight": "40_wild_tree_and_loss.ipynb", - "loss_package": "40_wild_tree_and_loss.ipynb", - "image_dom": "51_image_widgets.ipynb", - "with_title_dom": "51_image_widgets.ipynb", - "view_images": "51_image_widgets.ipynb", - "Subplots": "51_image_widgets.ipynb", - "C2I": "53_category.ipynb", - "Category": "53_category.ipynb", - "TreeCategory": "53_category.ipynb", - "CosineSearch": "55_cosine_search.ipynb", - "CosineSearchWithCategory": "55_cosine_search.ipynb", - "unfreeze": "61_thunder_callbacks.ipynb", - "freeze": "61_thunder_callbacks.ipynb", - "DataFrameMetricsCallback": "61_thunder_callbacks.ipynb", - "UnfreezeScheduler": "61_thunder_callbacks.ipynb", - "nn.Module.unfreeze": "61_thunder_callbacks.ipynb", - "nn.Module.freeze": "61_thunder_callbacks.ipynb", - "convert_iob2_file_to_iobes": "70_hf_transformer_data.ipynb", - "conbine_iobes_file": "70_hf_transformer_data.ipynb", - "IOBES": "70_hf_transformer_data.ipynb", - "ner_model_from": "72_pl_training.ipynb", - "ner_tokenizer_from": "72_pl_training.ipynb", - "NERDataModule": "72_pl_training.ipynb", - "NERModule": "72_pl_training.ipynb", - "clean_ner_output": "72_pl_training.ipynb", - "NERInference": "72_pl_training.ipynb", - "CudaDevice": "CUDA_GPU_Management.ipynb", - "CudaHandler": "CUDA_GPU_Management.ipynb", - "MLMVisualizer": "bert_visualize.ipynb", - "li": "bert_visualize.ipynb", - "infer_logits": "bert_visualize.ipynb", - "predict_text": "bert_visualize.ipynb", - "visualize": "bert_visualize.ipynb", - "visualize_result": "bert_visualize.ipynb", - "softmax": "bert_visualize.ipynb", - "MLMVisualizer.infer_logits": "bert_visualize.ipynb", - "MLMVisualizer.predict_text": "bert_visualize.ipynb", - "MLMVisualizer.visualize": "bert_visualize.ipynb", - "MLMVisualizer.visualize_result": "bert_visualize.ipynb", - "split_df": "bilstm-based-search-on-netflix-data.ipynb", - "Vocab": "bilstm-based-search-on-netflix-data.ipynb", - "seqData": "bilstm-based-search-on-netflix-data.ipynb", - "arrData": "bilstm-based-search-on-netflix-data.ipynb", - "fuse": "bilstm-based-search-on-netflix-data.ipynb", - "MultiTaskCELoss": "cross_entropy_weighter.ipynb", - "Node": "dataframe_pipeline.ipynb", - "chunkNode": "dataframe_pipeline.ipynb", - "frameEdge": "dataframe_pipeline.ipynb", - "colEdge": "dataframe_pipeline.ipynb", - "donothing": "dataframe_pipeline.ipynb", - "nothing": "dataframe_pipeline.ipynb", - "fillNaEdge": "dataframe_pipeline.ipynb", - "engTokEdge": "dataframe_pipeline.ipynb", - "CNTok": "dataframe_pipeline.ipynb", - "capMinMaxEdge": "dataframe_pipeline.ipynb", - "trackVocabEdge": "dataframe_pipeline.ipynb", - "saveCSV": "dataframe_pipeline.ipynb", - "saveSQL": "dataframe_pipeline.ipynb", - "eng_twt_tk": "dataframe_pipeline.ipynb", - "Opts": "optimizers.ipynb"} - -modules = ["pdenhanced.py", - "imports.py", - "asyncing.py", - "df.py", - "html.py", - "widgets.py", - "flatten.py", - "spacy.py", - "freemap.py", - "multiproc.py", - "loop.py", - "etl.py", - "static_file.py", - "loopstack.py", - "config.py", - "minimum.py", - "editable.py", - "df_filter.py", - "files.py", - "wildtree.py", - "images/widgets.py", - "category.py", - "cosine.py", - "thunder/callbacks.py", - "hf/data.py", - "hf/train.py", - "ftorch/cuda.py", - "bert_visualize.py", - "data/nlp.py", - "multitask_ce.py", - "pipe.py", - "ftorch/optimizer.py"] - -doc_url = "https://raynardj.github.io/forgebox/" - -git_url = "https://github.com/raynardj/forgebox/tree/master/" - -def custom_doc_links(name): return None diff --git a/forgebox/asyncing.py b/forgebox/asyncing.py deleted file mode 100644 index 2316c3d..0000000 --- a/forgebox/asyncing.py +++ /dev/null @@ -1,55 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/03_async.ipynb (unless otherwise specified). - -__all__ = ['Async'] - -# Cell -import asyncio -from typing import Callable -def Async(func: Callable): - """ - JS style async tool - def download_file(url): - ... - return path - - download_async = Async(download_file) - - download_async(url)\ - .then(lambda x: os.system(f"tar -xvf {path}")) - .catch(logging.error) - - """ - class AsyncFunc: - f"""{func.__doc__}""" - def __init__(self): - self.success=[] - - async def afunc(self, *args, **kwargs): - try: - result = func(*args, **kwargs) - for success_func in self.success: - result = success_func(result) - except Exception as e: - self.catch_func(e) - - def __repr__(self): - return f"async function [{func}]" - - def __call__(self, *args, **kwargs): - f"{func.__doc__}" - self.args = args - self.kwargs = kwargs - self.success = [] - return self - - def then(self, success): - self.success.append(success) - return self - - def catch(self, catch): - assert len(self.success)>0,\ - "You have to define self.then first" - self.catch_func = catch - asyncio.gather(self.afunc(*self.args, **self.kwargs)) - - return AsyncFunc() \ No newline at end of file diff --git a/forgebox/batcher.py b/forgebox/batcher.py new file mode 100644 index 0000000..1feb95f --- /dev/null +++ b/forgebox/batcher.py @@ -0,0 +1,38 @@ +import math +from typing import Iterable, List, Any + + +class Batcher: + """ + To cut iterable to batch + # example + >>> for batch in Batcher([1,2,3,4,5],batch_size=2): + >>> print(batch) + [1, 2] + [3, 4] + [5] + """ + + def __init__(self, iterable: Iterable, batch_size: int = 512): + self.iterable = iterable + self.batch_size = batch_size + + def __repr__(self) -> str: + return f"Batched:{len(self)} batches, with batch size: {self.batch_size}" + + def __len__(self,) -> int: + idx = float(len(self.iterable))/float(self.batch_size) + return math.ceil(idx) + + def __getitem__(self, idx) -> List[Any]: + if idx >= len(self): + raise KeyError( + f"We have {len(self)} batch, your index is {idx}") + return self.iterable[idx*self.batch_size:(idx+1)*self.batch_size] + + def __iter__(self) -> Iterable: + for i in range(len(self)): + yield self.iterable[i*self.batch_size:(i+1)*self.batch_size] + + def one_batch(self) -> List[Any]: + return self[0] diff --git a/forgebox/bert_visualize.py b/forgebox/bert_visualize.py deleted file mode 100644 index 39089cb..0000000 --- a/forgebox/bert_visualize.py +++ /dev/null @@ -1,118 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/bert_visualize.ipynb (unless otherwise specified). - -__all__ = ['MLMVisualizer', 'li', 'infer_logits', 'predict_text', 'visualize', 'visualize_result', 'softmax'] - -# Cell -from .imports import * -from .config import Config -from .static_file import open_static -from jinja2 import Template -from .html import DOM -from uuid import uuid4 - -# Cell -class MLMVisualizer: - def __init__(self,model,tokenizer): - super().__init__() - self.model = model - self.tokenizer = tokenizer - - @classmethod - def from_pretrained(cls, - tag:"str, like how you use from_pretrained from transformers" - ): - obj = cls( - model = AutoModelForMaskedLM.from_pretrained(tag), - tokenizer = AutoTokenizer.from_pretrained(tag,use_fast=True), - ) - return obj - - def tok(self,text:str,)->[ - torch.FloatTensor, - torch.BoolTensor, - list, - ]: - """ - A specific way of tokenizing. - with pytorch tensor as input - with mask tensor specifying where's the [MASK] token - with offset mapping marking the positions - in format of list in list - """ - tokenized = self.tokenizer( - text, - return_tensors = "pt", - return_offsets_mapping=True - ) - x = tokenized['input_ids'] - offset_mapping = tokenized['offset_mapping'] - mask = x==self.tokenizer.mask_token_id - if len(offset_mapping.shape)==3: - offset_mapping=offset_mapping[0] - return x,mask,offset_mapping - -# Cell -softmax = nn.Softmax(dim=-1) - -def li(x,)->np.array: - if torch.is_tensor(x): - x=x.cpu().numpy() - return x.tolist() - -def infer_logits( - vis, - y_pred, - mask) -> Config: - logits = softmax(y_pred[mask]) - pred_idx = logits.argmax(-1) - return Config( - logits=logits, - pred_idx=pred_idx, - pred_tokens = vis.tokenizer.convert_ids_to_tokens(pred_idx) - ) - - -MLMVisualizer.infer_logits = infer_logits - -def predict_text( - vis, - text, - )->Config: - with torch.no_grad(): - x,mask,mapper=vis.tok(text) - y_pred,attention = vis.model(x,output_attentions=True) - infered = vis.infer_logits(y_pred,mask) - return Config( - text = text, - x = li(x), - mask = li(mask), - mapper = li(mapper), -# y_pred = li(y_pred), -# logits = li(infered.logits), - pred_idx=li(infered.pred_idx), - pred_tokens =infered.pred_tokens, - attention = list(map(li,attention)), - ) -MLMVisualizer.predict_text = predict_text - -def visualize(vis, - text): - result = vis.predict_text(text) - vis.visualize_result(result) - - -def visualize_result(vis, result: Config): - template = Template(open_static('mlm/visual.html')) - js = open_static('mlm/visual.js') - text = result.text - delattr(result, 'text') - output_id = str(uuid4()) - page = template.render(data=json.dumps(result), - text=text, - output_id=output_id, - mlm_visual_js=js) - DOM(page, "div",)() - - -MLMVisualizer.visualize = visualize -MLMVisualizer.visualize_result = visualize_result \ No newline at end of file diff --git a/forgebox/category.py b/forgebox/category.py index af2a05d..74fbe45 100644 --- a/forgebox/category.py +++ b/forgebox/category.py @@ -1,172 +1,8 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/53_category.ipynb (unless otherwise specified). - -__all__ = ['C2I', 'Category', 'TreeCategory'] - -# Cell -import pandas as pd -import numpy as np -from pathlib import Path -import json -from torch.utils.data.dataset import Dataset -from torch.utils.data.dataloader import DataLoader -from typing import Iterable, Dict, List - - -class C2I: - """ - Category to indices - >>> c2i = C2I( - ["class 1", "class 2", ..., "class n"], - pad_mst=True, - ) - >>> c2i[["class 2", "class 5"]] - [0] array([2,3]) - - If the indices you put in the slicing is a np.ndarray - a verctorized function will be used - """ - - def __init__( - self, - arr: Iterable, - pad_mst: bool = False, - ): - self.pad_mst = pad_mst - self.pad = ["[MST]", ] if self.pad_mst else [] - self.dict = dict( - (v, k) for k, v in enumerate(self.pad + list(arr))) - self.get_int = self.get_get_int() - self.get_int_ = np.vectorize(self.get_int) - - def get_get_int(self,): - if self.pad_mst: - def get_int(idx: str) -> int: - if idx in self.dict: - return self.dict[idx] - else: - return 0 - else: - def get_int(idx: str) -> int: - return self.dict[idx] - return get_int - - def __repr__(self) -> str: - return f"C2I:{self.__len__()} categories" - - def __len__(self): - return len(self.dict) - - def __getitem__(self, k: int): - if type(k) in [np.ndarray, list]: - # use vectorized function - return self.get_int_(k) - else: - # use the original python function - return self.get_int(k) - - -class Category: - """ - Manage categorical translations - c = Category( - ["class 1", "class 2", ..., "class n"], - pad_mst=True,) - - c.c2i[["class 3","class 6"]] - c.i2c[[3, 2, 1]] - """ - - def __init__( - self, - arr: Iterable, - pad_mst: bool = False - ): - self.pad_mst = pad_mst - self.c2i = C2I(arr, pad_mst=pad_mst) - self.i2c = np.array(self.c2i.pad+list(arr)) - - def save(self, path: Path) -> None: - """ - save category information to json file - """ - with open(path, "w") as f: - json.dump(self.i2c.tolist(), f) - - @classmethod - def load(cls, path: Path): - """ - load category information from a json file - """ - with open(path, "r") as f: - l = np.array(json.load(f)) - if l[0] == "[MST]": - return cls(l[1:], pad_mst=True) - else: - return cls(l, pad_mst=False) - - def __len__(self): - return len(self.i2c) - - def __repr__(self): - return f"Category Manager with {self.__len__()}" - - -class TreeCategory(Category): - """ - Manage categorical translations - c = Category( - ["class 1", "class 2", ..., "class n"], - pad_mst=True,) - - c.c2i[["class 3","class 6"]] - c.i2c[[3, 2, 1]] - """ - - def __init__( - self, - parent_map: Dict[str, str], - pad_mst: bool = False - ): - self.parent_map = parent_map - arr = np.array(list(self.parent_map.keys())) - super().__init__(arr, pad_mst=pad_mst) - self.ancestor_map = dict() - for name in self.parent_map.keys(): - self.find_ancestor_map(name) - - self.get_depth_map() - self.get_depth_map_array() - - def find_ancestor_map( - self, name: str - ) -> Dict[str, List[str]]: - if name in self.ancestor_map: - return self.ancestor_map[name] - if name not in self.parent_map: - return [] - else: - result = [name, ]+self.find_ancestor_map(self.parent_map[name]) - self.ancestor_map[name] = result - return result - - - def tree_hot(self, name: str) -> np.array: - """ - return tree hot encoding name according to category - """ - target = np.zeros(len(self), dtype=int) - target[self.c2i[self.ancestor_map[name]]]=1 - return target - - def get_depth_map(self) -> Dict[str, int]: - self.depth_map = dict( - (k, len(v)) for k,v in self.ancestor_map.items()) - return self.depth_map - - def get_depth_map_array(self) -> np.array: - self.depth_map_array = np.vectorize( - self.depth_map.get)(self.i2c) - return self.depth_map_array - - def __repr__(self): - return f"""Tree Category({len(self)}):\n\tself.tree_hot("name")\tself.ancestor_map\tself.depth_map_array""" \ No newline at end of file +from category import ( + Category, MultiCategory, C2I +) + +from category.fast import ( + Category as FastCategory, + MultiCategory as FastMultiCategory +) diff --git a/forgebox/config.py b/forgebox/config.py index ac9377f..ec0d028 100644 --- a/forgebox/config.py +++ b/forgebox/config.py @@ -1,12 +1,6 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/20_config.ipynb (unless otherwise specified). - -__all__ = ['Config', 'first', 'getall'] - -# Cell import json -from datetime import datetime -# Cell + class Config(dict): def __setattr__(self,k,v): self[k]=v @@ -73,4 +67,4 @@ def getall(d,key): if type(d) in [tuple,list,set]: for i in d: results += getall(i,key) - return results \ No newline at end of file + return results diff --git a/forgebox/cosine.py b/forgebox/cosine.py index 6754254..ce674c6 100644 --- a/forgebox/cosine.py +++ b/forgebox/cosine.py @@ -1,13 +1,8 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/55_cosine_search.ipynb (unless otherwise specified). - -__all__ = ['CosineSearch', 'CosineSearchWithCategory'] - -# Cell import numpy as np import pandas as pd -from .category import Category +from category import Category + -# Cell class CosineSearch: """ Build a index search on cosine distance @@ -24,7 +19,7 @@ def __init__(self, base): self.normed_base = self.base/self.base_norm[:, None] self.dim = self.base.shape[1] - def __len__(self): return base.shape[0] + def __len__(self): return self.base.shape[0] @staticmethod def calc_base_norm(base: np.ndarray) -> np.ndarray: @@ -54,7 +49,7 @@ class CosineSearchWithCategory(CosineSearch): search_dataframe """ - def __init__(self, base: np.ndarray, category: np.ndarray): + def __init__(self, base: np.ndarray, category: Category): super().__init__(base) self.category = category assert len(self.category) >= len(self), "category number too small" @@ -75,4 +70,4 @@ def search_dataframe( idx = self.search(vec, return_similarity) return pd.DataFrame({ "category": self.category.i2c[idx], - "idx": idx}) \ No newline at end of file + "idx": idx}) diff --git a/forgebox/data/__init__.py b/forgebox/data/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/forgebox/data/nlp.py b/forgebox/data/nlp.py deleted file mode 100644 index 2781f11..0000000 --- a/forgebox/data/nlp.py +++ /dev/null @@ -1,169 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/bilstm-based-search-on-netflix-data.ipynb (unless otherwise specified). - -__all__ = ['split_df', 'Vocab', 'seqData', 'arrData', 'fuse'] - -# Cell -import numpy as np # linear algebra -import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv) -import os -from pathlib import Path -# Any results you write to the current directory are saved as output. - -# Cell -def split_df(df, valid=0.2, ensure_factor=2): - """ - df: dataframe - valid: valid ratio, default 0.1 - ensure_factor, ensuring the row number to be the multiplication of this factor, default 2 - return train_df, valid_df - """ - split_ = (np.random.rand(len(df)) > valid) - train_df = df[split_].sample(frac=1.).reset_index().drop("index", axis=1) - valid_df = df[~split_].sample(frac=1.).reset_index().drop("index", axis=1) - - if ensure_factor: - train_mod = len(train_df) % ensure_factor - valid_mod = len(valid_df) % ensure_factor - if train_mod: train_df = train_df[:-train_mod] - if valid_mod: valid_df = valid_df[:-valid_mod] - return train_df, valid_df - -# Cell -from itertools import chain -from multiprocessing import Pool -from collections import Counter -from torch.utils.data.dataset import Dataset - -class Vocab(object): - def __init__(self, iterative, tokenize, max_vocab = 20000,nproc=10): - """ - Count the most frequent words - Make the word<=>index mapping - """ - self.l = list(iterative) - self.nproc = nproc - self.max_vocab = max_vocab - self.tokenize = tokenize - self.word_beads = self.word_beads_() - self.counter() - - def __len__(self): - return len(self.words) - - def __repr__(self): - return f"vocab {self.max_vocab}" - - def word_beads_(self): - self.p = Pool(self.nproc) - return list(chain(*list(self.p.map(self.tokenize,self.l)))) - - def counter(self): - vals = np.array(list((k,v) for k,v in dict(Counter(self.word_beads)).items())) - self.words = pd.DataFrame({"tok":vals[:,0],"ct":vals[:,1]}) - self.words["ct"] = self.words["ct"].apply(int) - self.words = self.words.sort_values(by= "ct",ascending=False)\ - .reset_index().drop("index",axis=1).head(self.max_vocab-2) - self.words["idx"] = (np.arange(len(self.words))+2) - self.words=pd.concat([self.words,pd.DataFrame({"tok":["",""],"ct":[-1,-1],"idx":[0,1]})]) - return self.words - - def to_i(self): - self.t2i = dict(zip(self.words["tok"],self.words["idx"])) - def to_index(t): - i = self.t2i.get(t) - if i==None: - return 1 - else: - return i - return to_index - - def to_t(self): - return np.roll(self.words["tok"],2) - - -# Cell - -import torch -from torch.utils.data.dataloader import DataLoader -from torch.utils.data._utils.collate import default_collate - -class seqData(Dataset): - def __init__(self,lines,vocab,max_len=-1): - """ - lines: iterative of text, eg. each element a sentence - vocab:forge.data.nlp.Vocab - max_len: max length - """ - self.lines = list(lines) - self.vocab = vocab - self.to_i = np.vectorize(vocab.to_i()) - self.to_t = vocab.to_t() - self.bs=1 - self.max_len=max_len - - def __len__(self): - return len(self.lines) - - def __getitem__(self,idx): - """ - Translate words to indices - """ - line = self.lines[idx] - words = self.vocab.tokenize(line) - if self.max_len>2: - words = words[:self.max_len-2] - words = ["",]+words+[""] - return self.to_i(np.array(words)) - - def backward(self,seq): - """ - This backward has nothing to do with gradrient - Just to error proof the tokenized line - """ - return " ".join(self.to_t[seq]) - - def collate(self,rows): - """ - this collate will pad any sentence that is less then the max length - """ - line_len = torch.LongTensor(list(len(row) for row in rows)); - max_len = line_len.max() - ones = torch.ones(max_len.item()).long() - line_pad = max_len-line_len - return torch.stack(list(torch.cat([torch.LongTensor(row),ones[:pad.item()]]) for row,pad in zip(rows,line_pad[:,None]))) - -class arrData(Dataset): - def __init__(self, *arrs): - self.arr = np.concatenate(arrs,axis=1) - - def __len__(self): - return self.arr.shape[0] - - def __getitem__(self,idx): - return self.arr[idx] - - def collate(self,rows): - return default_collate(rows) - -# Cell -class fuse(Dataset): - def __init__(self, *datasets): - """ - A pytorch dataset combining the dataset - :param datasets: - """ - self.datasets = datasets - length_s = set(list(len(d) for d in self.datasets)) - assert len(length_s) == 1, "dataset lenth not matched" - self.length = list(length_s)[0] - self.collates = list(i.collate if hasattr(i,"collate") else default_collate for i in datasets) - - def __len__(self): - return self.length - - def __getitem__(self, idx): - return tuple(d.__getitem__(idx) for d in self.datasets) - - def collate(self,rows): - xs = list(zip(*rows)) - return tuple(func(x) for func, x in zip(self.collates,xs)) \ No newline at end of file diff --git a/forgebox/df.py b/forgebox/df.py index 5102170..9a89ee3 100644 --- a/forgebox/df.py +++ b/forgebox/df.py @@ -5,23 +5,25 @@ # Cell import pandas as pd + class PandasDisplay: """ - Temporary pandas display config "with" hook + Temporary pandas display config "with" scope with PandasDisplay(max_colwidth = 0,max_rows=100): display(df) """ - def __init__(self,**kwargs): + + def __init__(self, **kwargs): self.kwargs = kwargs self.cache = dict() def __enter__(self): - for k,v in self.kwargs.items(): + for k, v in self.kwargs.items(): self.cache[k] = pd.get_option(f"display.{k}") - pd.set_option(f"display.{k}",v) + pd.set_option(f"display.{k}", v) return self def __exit__(self, type, value, tb): - for k,v in self.cache.items(): - pd.set_option(f"display.{k}",v) \ No newline at end of file + for k, v in self.cache.items(): + pd.set_option(f"display.{k}", v) diff --git a/forgebox/df_filter.py b/forgebox/df_filter.py deleted file mode 100644 index e8149f8..0000000 --- a/forgebox/df_filter.py +++ /dev/null @@ -1,308 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/31_df_filter.ipynb (unless otherwise specified). - -__all__ = ['pct_to_float', 'ensure_pct', 'detect_number_column', 'DataFilter', 'LayerTorch', 'RecursiveFilterCore', - 'RecursiveFilter'] - -# Cell -from abc import ABC -from typing import List, Callable -from .html import DOM -from .imports import pd, np - -# Cell -from ipywidgets import VBox, Button,\ - FloatSlider, IntSlider, SelectionSlider,Dropdown, Label,Checkbox,\ - interact, Output, interact_manual - - -def pct_to_float(x): - if type(x)!=str: return x - if "%" not in x: - return x - else: - return float(x[:-1])/100 - -def ensure_pct(df): - for col in df: - if df[col].dtype.name=="object": - df[col] = df[col].apply(pct_to_float) - return df - -def detect_number_column(df): - """ - Detect number columns in dataframe - """ - cols = df.columns - dtypes = [df[col].dtype.name for col in cols] - return pd.DataFrame({"cols":cols, "dtypes":dtypes}) - -class DataFilter: - """ - Single column number filter - """ - def __init__(self, df: pd.DataFrame, fix_pct=True): - """ - df: input dataframe - - data_filter = DataFilter(df) - - # start filtering - data_filter() - """ - self.df = df - - if fix_pct: - self.df = ensure_pct(self.df) - - def show_distribution(self, col_name): - """ - show distribution of a column, using plotly - """ - import plotly.express as px - fig = px.histogram(self.df, x=col_name, height=300, width=800) - return fig - - def create_filter(self, field: str) -> None: - big_boxes = [] - - dtype = self.df[field].dtype.name - if 'float' in dtype: - slider = FloatSlider - slide = slider( - min = self.df[field].min(), - max = self.df[field].max(), - step = 0.001 - ) - elif 'int' in dtype: - slider = IntSlider - slide = slider( - min = self.df[field].min(), - max = self.df[field].max(),) - else: - print(f"filter of {dtype} not supported") - slider = SelectionSlider - slide = slider(options=sorted(map(str, set(list(self.df[field]))))) - - btn = Button(description="Run Filter") - btn.on_click(self.execute_filter) - - print(f"NaN count: {(self.df[field].isna()).sum()}") - - widget = VBox([ - Label(f"Range for {field}"), - Dropdown(options=["Larger Than or equal to", "Smaller Than or equal to"]), - slide, - Checkbox(description="Remove NaN", value=True), - btn - ]) - self.widget = widget - widget.original_name = field - - display(widget) - - def execute_filter( - self, _) -> None: - """ - This function will be used as a callback - for ipywidgets.Button.on_click - """ - original_name = self.widget.original_name - label_,condi_,value_,remove_na_, btn_ = self.widget.children - label, condi, value, remove_na = label_.value ,condi_.value ,value_.value, remove_na_.value - condi = ">=" if condi=='Larger Than or equal to' else "<=" - if type(value_)==SelectionSlider: - value = f"'{value}'" - expression = f"{original_name} {condi} {value}" - - if remove_na: - self.remove_na(original_name) - - print(f"Filter with query expression: {expression}") - before = len(self.df) - self.df = self.df.query(expression).reset_index(drop=True) - after = len(self.df) - print(f"[Before]: {before}, [After]: {after}") - - def remove_na(self, field): - """ - Remove nan value in a dataframe - """ - before = len(self.df) - self.df = self.df[~self.df[field].isna()] - after = len(self.df) - print(f"Remove NA on {field} [Before]: {before}, [After]: {after}") - - def __call__(self, columns=None): - """ - Execute an interact to filter things column by column - """ - columns = columns if columns else list(self.df.columns) - @interact - def select_field(field = columns): - # visualize histogram - self.show_distribution(field).show() - - # create a filter execution interactive - self.create_filter(field) - -# Cell -class LayerTorch: - """ - information passon from layer to layer - """ - def __init__(self, df, level=0,last_layer=None): - self.df = df - self.level = level - self.data = dict() - if last_layer is not None: - self.last_layer = last_layer - self.out = Output() - if last_layer is None: - self.axis = dict() - df.filter_layers = self.axis - else: - self.axis = last_layer.axis - self.axis[level] = self - - def __call__(self, **kwargs): - self.data.update(kwargs) - for k, v in kwargs.items(): - setattr(self, k, v) - - def __repr__(self): - return f"Level:{self.level}\n\t{self.data}" - - def next_layer(self): - new = LayerTorch(self.df, level=self.level+1, last_layer=self) - self.next_layer = new - return new - - @property - def layers(self) -> pd.DataFrame: - """ - Filter layers as a pandans dataframe - """ - return pd.DataFrame( - list(i.data for i in self.axis.values())) - - @property - def filter_chain(self) -> str: - query_list = list(i.data["query"] for i in self.axis.values()) - return ' and '.join(list(f"({q})" for q in query_list)) - -class RecursiveFilterCore(ABC): - - def display_queries(self, this_layer): - if this_layer.level > 0: - DOM("Queried Filters","h3", )() - display(this_layer.layers[:-1]) - - def handpick( - self, - chunk_callbacks: List[Callable]=[], - show_top: bool=True, - show_top_k: int=20, - pick_value_top_k: int=30, - from_last_layer: LayerTorch=None - ) -> None: - """ - Hand pick the portion of the data frame you liked - from filtering the column by value. - A function from enhanced pandas dataframe - - Inputs: - - chunk_callbacks: List[Callable]=[], - - show_top: bool, default True, do we should - the most frequent values of the current column - - show_top_k: int, the number of rows we show for - the most frequent values, when show_top=True, - default 20 - - pick_value_top_k: int, number of the most frequent - values in pick drop down default 30 - - from_last_layer: LayerTorch, default None, this - column doesn't mean for user configuration - """ - this_layer = LayerTorch(self) if from_last_layer is None else from_last_layer.next_layer() - display(this_layer.out) - - with this_layer.out: - self.display_queries(this_layer) - - DOM("Select Filter Column","h3")() - @interact - def select_columns(column = self.columns): - - this_layer(column=column) - series = self[column] - vc = self.vc(column) - - if show_top: - display(vc.head(show_top_k)) - - this_layer.out.played = True - - top_values = list(vc.index) - if pick_value_top_k is not None: - top_values = top_values[:pick_value_top_k] - - DOM(f"'{column}' equals to ?","h3", )() - - @interact() - def pick_value(picked = top_values): - query = f"`{column}`=='{picked}'" - sub = RecursiveFilter(self.query(query)) - - # keep record on this layer - this_layer( - query = query, - picked=picked, - before_rows=len(self), - after_rows=len(sub) - ) - - for cb in chunk_callbacks: - cb(sub) - - @interact_manual - def start_recursion(): - this_layer.out.clear_output() - - with this_layer.out: - - # Recursion - # Go on the filter to the next layer - sub.handpick( - chunk_callbacks=chunk_callbacks, - show_top=show_top, - show_top_k=show_top_k, - pick_value_top_k=pick_value_top_k, - from_last_layer=this_layer, - ) - - sub.paginate(10) - - - -class RecursiveFilter(pd.DataFrame, RecursiveFilterCore): - """ - Interactive Pandas DataFrame Filter - df = RecursiveFilter(df) - df.handpick() - - Hand pick the portion of the data frame you liked - from filtering the column by value. - A function from enhanced pandas dataframe - - Inputs: - - chunk_callbacks: List[Callable]=[], - - show_top: bool, default True, do we should - the most frequent values of the current column - - show_top_k: int, the number of rows we show for - the most frequent values, when show_top=True, - default 20 - - pick_value_top_k: int, number of the most frequent - values in pick drop down default 30 - - from_last_layer: LayerTorch, default None, this - column doesn't mean for user configuration - """ - pass \ No newline at end of file diff --git a/forgebox/editable.py b/forgebox/editable.py deleted file mode 100644 index 3225dcb..0000000 --- a/forgebox/editable.py +++ /dev/null @@ -1,137 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/30_traceable_edit_in_flask.ipynb (unless otherwise specified). - -__all__ = ['get_static', 'edit_js', 'DefaultTemp', 'Editable'] - -# Cell -import pandas as pd -from datetime import datetime -import json -from sqlalchemy import create_engine as ce -from sqlalchemy import text -from jinja2 import Template - -# Cell -from pathlib import Path -def get_static(): - import forgebox - return Path(forgebox.__path__[0])/"static" - -# Cell -def edit_js(): - with open(get_static()/"edit.js","r") as f: - return f"" - - -class DefaultTemp(Template): - """ - Jinjia template with some default render config - """ - def render(self,dt): - dt.update(dict(type=type,now = datetime.now())) - return super().render(dt) - -# Cell -from flask import request -from flask import g -from datetime import datetime - -class Editable: - def __init__(self,name,app,table_name,con,id_col, - log_con,log_table="editable_log",columns = None): - """ - name: route name for url path, - also it will be the task title appearning on the frontend - app:flask app - table_name: table to edit - con:sqlachemy connnection, created by : con = sqlalchemy.create_engine - id_col: a column with unique value - log_con:sqlachemy connnection, for storaging change log - """ - self.name = name - self.app = app - self.table_name = table_name - self.con = con - self.log_con = log_con - self.columns = ",".join(columns) if columns!=None else "*" - self.id_col = id_col - - self.t_workspace = self.load_temp(get_static()/"workspace.html") - self.t_table = self.load_temp(get_static()/"table.html") - self.assign() - - def assign(self): - self.app.route(f"/{self.name}")(self.workspace) - self.app.route(f"/{self.name}/df_api")(self.read_df) - self.app.route(f"/{self.name}/save_api", - methods=["POST"])(self.save_data) - - def workspace(self): - return self.t_workspace.render(dict(title=self.name, - pk=self.id_col, - edit_js = edit_js())) - - def save_data(self): - data = json.loads(request.data) - # update change and save log - changes = data["changes"] - log_df = pd.DataFrame(list(self.single_row(change) for change in changes)) - - log_df["idx"] = log_df.idx.apply(str) - log_df["original"] = log_df.original.apply(str) - log_df["changed"] = log_df.changed.apply(str) - log_df.to_sql(f"editable_log",con = self.log_con,index=False, if_exists="append") - - print(log_df) - # return updated table - query = data["query"] - page = query["page"] - where = query["where"] - return self.data_table(page,where) - - def settype(self,k): - if k[:3] == "int": return int - elif "float" in k: return float - elif k=="str":return str - elif k=="list":return list - elif k=="dict":return dict - else: return eval(k) - - def single_row(self,row): - row["ip"]= request.remote_addr - row["table_name"] = self.table_name - row["ts"] = datetime.now() - if row["original"]==row["changed"]: - row['sql'] = "" - return row - else: - col = row["col"] - val = row["changed"] - val = f"'{val}'" if 'str' in row["valtype"] else val - idx = row["idx"] - idx = f"'{idx}'" if type(idx)==str else idx - set_clause = f"SET {col}={val}" - sql = f"""UPDATE {self.table_name} - {set_clause} WHERE {self.id_col}={idx} - """ - row['sql'] = sql - self.con.execute(sql) - return row - - def read_df(self): - page = request.args.get('page') - where = request.args.get('where') - return self.data_table(page,where) - - def data_table(self,page,where): - where_clause = "" if where.strip() == "" else f"WHERE {where} " - sql = f"""SELECT {self.columns} FROM {self.table_name} {where_clause} - ORDER BY {self.id_col} ASC LIMIT {page},20 - """ - print(sql) - df = pd.read_sql(sql,self.con) - df = df.set_index(self.id_col) - return self.t_table.render(dict(df = df)) - - def load_temp(self,path): - with open(path, "r") as f: - return DefaultTemp(f.read()) \ No newline at end of file diff --git a/forgebox/etl.py b/forgebox/etl.py deleted file mode 100644 index 77ad3cc..0000000 --- a/forgebox/etl.py +++ /dev/null @@ -1,67 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/11_etl.ipynb (unless otherwise specified). - -__all__ = ['NewFileScanner'] - -# Cell - -from .imports import * -from typing import Callable, Union -import traceback as tb -import logging - -class NewFileScanner: - """ - Keep scannning a directory for new file - if found any, callback processing the file - - Designed for download and delete strategy - - # Example - new_file_scanner = NewFileScanner(".", new_file_filter=lambda x:x[-4:]==".txt") - new_file_scanner(lambda x:print(f"new file:{x} found"))s - """ - def __init__( - self, - directory, - new_file_filter: Callable=None, - done_list_getter: Callable=None, - stop_callback: Callable=None, - ): - self.directory = Path(directory) - - if new_file_filter is not None: - self.new_file_filter=new_file_filter - else: - self.new_file_filter=lambda x:True - - if done_list_getter is not None: - self.done_list_getter = done_list_getter - else: - self.done_list_getter = lambda *args:[] - - if stop_callback is not None: - self.stop_callback = stop_callback - - self.processed = [] - - def __call__(self, process: Callable): - while True: - try: - done_list = self.done_list_getter() - for fname in self.directory.iterdir(): - fname = str(fname) - if self.new_file_filter(fname) != True: - continue - file_path = str(self.directory/fname) - if fname not in done_list: - if fname not in self.processed: - result = process(file_path) - self.processed.append(fname) - except KeyboardInterrupt as e: - if hasattr(self, "stop_callback"): - self.stop_callback() - logging.error("manually stoped") - break - except Exception as e: - error = tb.format_exc() - logging.error(error) \ No newline at end of file diff --git a/forgebox/files.py b/forgebox/files.py index c9a51e8..8a74a6c 100644 --- a/forgebox/files.py +++ b/forgebox/files.py @@ -2,28 +2,28 @@ __all__ = ['get_files', 'file_detail'] -# Cell from typing import Union, List from .imports import Path, pd + def get_files( path: Path, - skip: Union[str, List[str]]=None + skip: Union[str, List[str]] = None ) -> pd.DataFrame: """Get all file paths from a directory""" path = Path(path).absolute() files = [] if type(skip) == str: - def not_skipping(phrase)->bool: + def not_skipping(phrase) -> bool: return skip in phrase elif type(skip) == list: - def not_skipping(phrase)->bool: + def not_skipping(phrase) -> bool: for sk in skip: if sk in phrase: return True return False elif skip is None: - not_skipping = lambda x:True + def not_skipping(x): return True else: raise TypeError( f"type of skip not correct: {type(skip)}") @@ -39,14 +39,16 @@ def get_files_(p: Path) -> None: return pd.DataFrame(dict(path=files)) + def file_detail( path: Path, - skip: Union[str, List[str]]=None + skip: Union[str, List[str]] = None ) -> pd.DataFrame: """ Get detailed file information from a directory """ file_df = get_files(path, skip=skip) + def find_type(x): try: x = Path(x) @@ -77,4 +79,4 @@ def find_depth(x): file_df["parent"] = file_df.path.apply(find_parent) file_df["depth"] = file_df.path.apply(find_depth) - return file_df \ No newline at end of file + return file_df diff --git a/forgebox/flatten.py b/forgebox/flatten.py deleted file mode 100644 index b7710bb..0000000 --- a/forgebox/flatten.py +++ /dev/null @@ -1,43 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/06_flatten.ipynb (unless otherwise specified). - -__all__ = ['Flatten'] - -# Cell - -from typing import List, Callable, Any, Dict -class Flatten: - """ - Flatten a tree structure dictionary - """ - def __init__( - self, data, - key_callback: Callable = None, - key_connection: str = "_", - ): - self.data = data - self.key_callback = key_callback - self.key_connection = key_connection - - def flattening( - self, data, - result=None, - upper_key="" - ) -> Dict[str, str]: - """ - Recursive flatten function - """ - if result is None: - result = {} - for key, value in data.items(): - if self.key_callback is not None: - key = self.key_callback(key) - if isinstance(value, dict): - self.flattening(value, result, - upper_key=f"{key}{self.key_connection}") - else: - result[f"{upper_key}{key}"] = value - return result - - def __call__(self) -> Dict[str, str]: - return self.flattening(self.data) - diff --git a/forgebox/freemap.py b/forgebox/freemap.py deleted file mode 100644 index 8f4074f..0000000 --- a/forgebox/freemap.py +++ /dev/null @@ -1,83 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/07_freemap.ipynb (unless otherwise specified). - -__all__ = ['FreeMap'] - -# Cell -from collections import OrderedDict - -# Cell -class FreeMap: - def __init__(self, - func= lambda x:x, - filter_function = lambda x: True, - flatten = False): - """ - run map operation on a free stucture, - like dictionary, list within dictionary, etc - - """ - self.func = func - self.filter_function = filter_function - self.flatten = flatten - if flatten: - self.result_list = [] - self.create_doc() - - def __repr__(self): - return f""" - Please put in one of the following type: - dict, list, tuple, set, OrderedDict - - {self.keep_structure} - ====== - Mapped function - {self.func} - Value Filter function - {self.filter_function} - """ - - @property - def keep_structure(self): - return "This operation will flatten the structure to a list"\ - if self.flatten else\ - "This operation will keep the original structure" - - def create_doc(self): - doc = f""" - map function for list,dict,tuple,set,OrderedDict - {self.keep_structure} - - """ - if hasattr(self.func,"__doc__"): - if self.func.__doc__!=None: - doc += f"doc string from mapping function:\n\t\t{self.func.__doc__}\t" - setattr(self,"__doc__",doc) - - def parse(self,thing): - if type(thing) in [list,tuple,set]: - return self.parse_seq(thing) - elif type(thing) in [dict,OrderedDict]: - return self.parse_kv(thing) - else: - return self.parse_value(thing) - - def parse_seq(self,thing): - return type(thing)(self.parse(i) for i in thing) - - def parse_kv(self,thing): - return type(thing)((k,self.parse(v)) for k,v in thing.items()) - - def parse_value(self,thing): - if self.filter_function(thing): - if self.flatten==False: - return self.func(thing) - else: - self.result_list.append(self.func(thing)) - return thing - - def __call__(self,iterable): - result = self.parse(iterable) - if self.flatten: - return self.result_list - else: - return result \ No newline at end of file diff --git a/forgebox/ftorch/README.md b/forgebox/ftorch/README.md deleted file mode 100644 index 0b9ae4e..0000000 --- a/forgebox/ftorch/README.md +++ /dev/null @@ -1,69 +0,0 @@ -# ftorch: A pytorch API to forge - -### Preprocessor -forgebox contains data pre-processing module for pytorch. - -It returns pytorch dataset -```python -from forgebox.ftorch.prepro import DF_Dataset,fuse -train_ds_x = DF_Dataset(train_df, # pandas dataframe for training - prepro=x_prepro, # x_prepro is the function: input a chunk of dataframe, return same len of data in numpy array - bs=64, # batch_size - shuffle=False) -# train_ds_x will be a pytorch dataset -train_ds_y = DF_Dataset(train_df,prepro=y_prepro,bs=64,shuffle=False) -``` -fuse combines 2 datasets together, -```python -train_ds = fuse(train_ds_x,train_ds_y) -``` -we can use it like ```x,y = next(iter(train_ds))``` - -### Trainer -```python -from forgebox.ftorch.train import Trainer - -trainer=Trainer(train_ds, val_dataset = valid_ds ,batch_size=1,print_on=2) -trainer.opt["adm1"] = torch.opt.Adam(model.parameters()) -``` - -#### A training step -we use the step_train decorator to define a training step -```python -from forgebox.ftorch.metrics import metric4_bi - -@trainer.step_train -def action(self): - x,y = self.data - x = x.squeeze(0) - y = y.float() - opt.zero_grad() - y_ = model(x) - loss = loss_func(y_,y) - acc, rec, prec, f1 = metric4_bi(y_,y) - loss.backward() - self.opt.adm.step() - return {"loss":loss.item(),"acc":acc.item(),"rec":rec.item(),"prec":prec.item(),"f1":f1.item()} -``` -The above is only an example, you can define the training step as you like. - -Even if you have 3 models, updated by 2 optimizers, as long as you can decribe them in a single training step, it can be done easily. - -#### A validation step -Very similar to the train step, minus any code relate to updating weights - -```python -@trainer.step_val # step_val decorator -def val_action(self) - x,y = self.data - x = x.squeeze(0) - y = y.float() - y_ = model(x) - ... -``` - -Then run the training for 3 epochs like: - -```python -trainer.train(3) -``` \ No newline at end of file diff --git a/forgebox/ftorch/callbacks.py b/forgebox/ftorch/callbacks.py deleted file mode 100644 index 2c0c980..0000000 --- a/forgebox/ftorch/callbacks.py +++ /dev/null @@ -1,29 +0,0 @@ -import pandas as pd -from datetime import datetime -from .utils import mars - -def recorddf(record): - return pd.DataFrame(record) - -## The following are the callbacks for trainer - -def print_all(record): - df = recorddf(record) - mars(df) - - -def stat(record): - """ - Print out track statistics - :param record: self.track[epoch] in trainer.run(self.epoch) - :param dataset: train dataset or val_dataset - """ - df = recorddf(record) - start = datetime.strptime(list(df["ts"])[0], "%Y-%m-%d %H:%M:%S.%f").timestamp() - end = datetime.strptime(list(df["ts"])[-1], "%Y-%m-%d %H:%M:%S.%f").timestamp() - - des = df.describe().loc[["mean", "min", "max"], :] - des["timestamp"] = [(end - start) / len(df), 0, end - start] - mars(des) - - diff --git a/forgebox/ftorch/cuda.py b/forgebox/ftorch/cuda.py index e7d4cc6..48975a2 100644 --- a/forgebox/ftorch/cuda.py +++ b/forgebox/ftorch/cuda.py @@ -1,8 +1,3 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/CUDA_GPU_Management.ipynb (unless otherwise specified). - -__all__ = ['CudaDevice', 'CudaHandler'] - -# Cell import torch import subprocess @@ -49,11 +44,11 @@ def refresh(self): def __call__(self): return self.device -# Cell -class CudaHandler(object): + +class Cudas(object): def __init__(self): """ - ch = CudaHandler() + ch = Cudas() dev = ch.idle()() some_torch_tensor.to(dev) """ @@ -103,4 +98,6 @@ def idle(self): if d.free > rt.free: rt = d print(f"Found the most idle GPU: cuda:{rt.idx}, {rt.free} MB Mem remained") - return rt \ No newline at end of file + return rt + +CudaHandler = Cudas \ No newline at end of file diff --git a/forgebox/ftorch/optimizer.py b/forgebox/ftorch/optimizer.py index 1e064c6..4b4a53f 100644 --- a/forgebox/ftorch/optimizer.py +++ b/forgebox/ftorch/optimizer.py @@ -1,9 +1,5 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/optimizers.ipynb (unless otherwise specified). - __all__ = ['Opts'] -# Cell -import torch class Opts(object): def __init__(self, *args, **kwargs): diff --git a/forgebox/ftorch/prepro.py b/forgebox/ftorch/prepro.py index 7231d6e..6a55aed 100644 --- a/forgebox/ftorch/prepro.py +++ b/forgebox/ftorch/prepro.py @@ -1,269 +1,16 @@ import random from torch.utils.data import Dataset, DataLoader -import math -import os import torch -import pandas as pd import numpy as np -from collections import Counter from typing import Callable -class Empty(Dataset): - def __init__(self, length): - """ - empety dataset, spit out random number - :param length: how long you want this dataset - """ - self.length = length - self.seq = np.random.rand(length, 2) - - def __len__(self): - return self.length - - def __getitem__(self, idx): - return self.seq[idx] - - -class DF_Dataset(Dataset): - def __init__( - self, df, bs, - prepro=lambda x: x.values, - shuffle: bool = False, - col: str = None - ): - """ - df_dataset, a dataset for slicing pandas dataframe, - instead of single indexing and collate - Please use batch_size=1 for dataloader, and define the batch size here - eg. - ``` - ds = DF_Dataset(data_df,bs=1024) - ``` - """ - # super(DF_Dataset, self).__init__() - - if shuffle: - print("shuffling") - df = df.sample(frac=1.).reset_index().drop("index", axis=1) - print("shuffled") # shuffle the data here - - if col: - df = df[col] - self.df = df - self.prepro = prepro - self.bs = bs - - def __len__(self): - return math.ceil(len(self.df) / self.bs) - - def __getitem__(self, idx): - start = idx * self.bs - end = (idx + 1) * self.bs - return self.prepro(self.df[start:end]) - - -class Arr_Dataset(Dataset): - def __init__(self, *args, bs): - """ - arr_dataset, a dataset for slicing numpy array, - instead of single indexing and collate - Please use batch_size=1 for dataloader, and define the batch size here - eg. - ``` - ds = Arr_Dataset(arr_1,arr_2,arr_3,bs = 512) - ``` - """ - super(Arr_Dataset, self).__init__() - self.arrs = args - self.bs = bs - - def __len__(self): - return math.ceil(len(self.arrs[0]) / self.bs) - - def __getitem__(self, idx): - start = idx * self.bs - end = (idx + 1) * self.bs - return tuple(self.arrs[i][start:end] for i in range(len(self.arrs))) - - -class Seq_Dataset(Dataset): +class ZipDataset(Dataset): """ - a mechanism for reading sequence data, - the preparation stage of nlp learning + ZipDataset the dataset into one """ - def __init__( - self, - seqname, - seq, - seq_len: int = None, - vocab_path: str = None, - bs: int = 16, - vocab_size: int = 10000, - build_vocab: bool = False, - sep_tok: str = "", - discard_side: str = "right", - element_type: str = "int", - fixlen: bool = False - ): - ''' - A pytorch dataset for sequence - seq: enumerable sequence - vocab_path: path to vocabulary json file - threads:process number - element_type: "int" or "float" - ''' - self.seqname = seqname - print(seqname, "sequence type:", type(seq)) - self.process_funcs = [] - self.seq = list(seq) - self.seq_len = seq_len - self.vocab_path = vocab_path - self.vocab_size = int(vocab_size) - - self.bs = bs - self.calc_bn() - print(seqname, "sequence total_length type:", self.N) - - self.sep_tok = sep_tok if sep_tok is not None else "" - self.make_breaker() - self.discard_side = discard_side - if self.seq_len: - self.make_discard() - - if vocab_path: - if (build_vocab is False) and ( - os.path.exists(vocab_path) is False): - print("vocab path not found, building vocab path anyway") - build_vocab = True - if build_vocab: - self.vocab = self.build_vocab(self.seq) - self.vocab.to_json(self.vocab_path) - else: - self.vocab = pd.read_json(self.vocab_path) - self.char2idx, self.idx2char = self.get_mapping(self.vocab) - self.make_translate() - if fixlen: - self.process_batch = self.process_batch_fixlen - self.element_type = element_type - self.make_totorch() - - def __len__(self): - return self.BN - - def calc_bn(self): - """ - calculate batch numbers - :return: batch numbers - """ - self.N = len(self.seq) - self.BN = math.ceil(self.N / self.bs) - return self.BN - - def __getitem__(self, idx): - start_ = self.bs * idx - seq_crop = self.seq[start_:start_ + self.bs] - return self.process_batch(seq_crop) - - def make_breaker(self): - if self.sep_tok != "": - def breaker(self, line): - return str(line).split(self.sep_tok) - else: - def breaker(self, line): - return list(str(line)) - self.breaker = breaker - self.process_funcs.append(self.breaker) - - def make_discard(self): - if self.discard_side == "right": - def discard(self, seqlist): - return seqlist[:self.seq_len] - if self.discard_side == "left": - def discard(self, seqlist): - return seqlist[-self.seq_len:] - self.discard = discard - self.process_funcs.append(self.discard) - - def make_translate(self): - def translate(self, x): - return np.vectorize(self.mapfunc)(x) - - self.translate = translate - self.process_funcs.append(self.translate) - - def make_totorch(self): - if self.element_type == "int": - def totorch(self, seq): - return torch.LongTensor(np.array(seq).astype(np.int)) - if self.element_type == "float": - def totorch(self, seq): - return torch.FloatTensor(np.array(seq).astype(np.float32)) - self.totorch = totorch - self.process_funcs.append(self.totorch) - - def process_batch(self, batch): - return torch.nn.utils.rnn.pad_sequence( - np.vectorize(self.seq2idx, otypes=[list])(batch), batch_first=True) - - def process_batch_fixlen(self, batch): - return torch.nn.utils.rnn.pad_sequence( - np.vectorize( - self.seq2idx, otypes=[list])( - batch+[self.dummy_input()]), batch_first=True)[:-1, ...] - - def dummy_input(self,): - dummy = self.sep_tok.join([" "]*self.seq_len) - return dummy - - def seq2idx(self, x): - for f in self.process_funcs: - x = f(self, x) - return x - - def get_mapping(self, vocab_df): - char2idx = dict(zip(vocab_df["token"], vocab_df["idx"])) - idx2char = dict(zip(vocab_df["idx"], vocab_df["token"])) - return char2idx, idx2char - - def mapfunc(self, x): - """ - from token to index number - """ - try: - return self.char2idx[x] - except: - return 1 - - def get_token_count_dict(self, full_token): - """count the token to a list""" - return Counter(full_token) - - def get_full_token(self, list_of_tokens): - """ - From a list of list of tokens - to a long list of tokens, duplicate tokens included - """ - return self.breaker(self, self.sep_tok.join(list_of_tokens)) - - def build_vocab(self, seq_list): - ct_dict = self.get_token_count_dict(self.get_full_token(seq_list)) - ct_dict["SOS_TOKEN"] = 9e9 - ct_dict["EOS_TOKEN"] = 8e9 - ct_dict[" "] = 7e9 - tk, ct = list(ct_dict.keys()), list(ct_dict.values()) - - token_df = pd.DataFrame({"token": tk, "count": ct}).sort_values( - by="count", ascending=False) - - return token_df.reset_index().drop("index", axis=1)\ - .reset_index()\ - .rename(columns={"index": "idx"}).fillna("")[:self.vocab_size] - - -class fuse(Dataset): def __init__(self, *datasets): """ A pytorch dataset combining the dataset @@ -277,6 +24,9 @@ def __init__(self, *datasets): self.bs = list(bs_s)[0] self.length = list(length_s)[0] + def __repr__(self) -> str: + return f"ZipDataset: {self.datasets}" + def __len__(self): return self.length @@ -288,296 +38,6 @@ def collate(batch): return tuple(i[0] for i in zip(*batch)) -class col_core: - def __init__(self, col_name, save_dir=".matchbox/fields", debug=False): - os.system("mkdir -p %s" % (save_dir)) - self.col_name = col_name - self.debug = debug - self.save_dir = save_dir - if self.save_dir[-1] != "/": - self.save_dir += "/" - - self.meta = dict() - - def save_meta(self): - np.save(self.save_dir + str(self.col_name) + ".npy", self.meta) - - def set_meta(self, meta=None): - """ - pass meta dict values to obj attributes - """ - if meta is None: - meta = self.meta - for k, v in meta.items(): - if self.debug: - print("setting:\t%s\t%s" % (k, v)) - setattr(self, k, v) - - def load_meta(self, path=None): - if path is None: - path = self.save_dir + str(self.col_name) + ".npy" - self.meta = np.load(path).tolist() - self.set_meta(self.meta) - - if self.meta["coltype"] == "tabulate": - self.make_sub() # make sub-objects out of meta - - def make_meta(self): - for attr in self.make_meta_list: - self.meta[attr] = getattr(self, attr) - - def check_dim(self, data): - return pd.DataFrame(data, columns=self.dim_names) - - -class categorical(col_core): - def __init__(self, col_name, save_dir=".matchbox/fields"): - super(categorical, self).__init__(col_name, save_dir) - self.coltype = "categorical" - self.make_meta_list = ["col_name", "coltype", - "idx2cate", "cate2idx", - "width", "eye", "dim_names"] - self.__call__ = self.prepro - - def build(self, pandas_s, max_=20): - assert max_ > 1, "max should be bigger than 1" - - vcount = pd.DataFrame(pandas_s.value_counts()) - - print(vcount) - - self.cate_full = list(vcount.index.tolist()) - self.cate_list = self.cate_full[:max_ - 1] - - # build dictionary - self.idx2cate = dict((k, v) for k, v in enumerate(self.cate_list)) - self.idx2cate.update({len(self.cate_list): "_other"}) - - self.cate2idx = dict((v, k) for k, v in self.idx2cate.items()) - self.eye = np.eye(len(self.cate2idx)) - - self.width = len(self.cate2idx) - - self.dim_names = list("%s -> %s" % (self.col_name, k) - for k in self.cate2idx.keys()) - self.make_meta() - - def trans2idx(self, cate): - """Translate category to index - """ - try: - return self.cate2idx[cate] - except: - return self.cate2idx["_other"] - - def prepro_idx(self, pandas_s): - return pandas_s.apply(self.trans2idx) - - def prepro(self, pandas_s, expand=False): - return self.eye[self.prepro_idx(pandas_s).values.astype(int)] - - def __call__(self, pandas_s, expand=False): - return self.eye[self.prepro_idx(pandas_s).values.astype(int)] - - def dataset(self, df, bs, shuffle): - return DF_Dataset( - df, prepro=self.prepro, bs=bs, shuffle=shuffle, col=self.col_name) - - -class categorical_idx(col_core): - """ - preprocessor - """ - - def __init__(self, col_name, save_dir=".matchbox/fields"): - """ - column name - :param col_name: str,column name - :param save_dir: str, the place to save metadata, - default .matchbox/fields - """ - super(categorical_idx, self).__init__(col_name, save_dir) - self.coltype = "categorical_idx" - self.dim_names = [self.col_name] - self.width = 1 - self.make_meta_list = ["col_name", "coltype", - "idx2cate", "cate2idx", "width", "dim_names"] - self.__call__ = self.prepro - - def build(self, pandas_s, max_=20): - assert max_ > 1, "max should be bigger than 1" - - vcount = pd.DataFrame(pandas_s.value_counts()) - - print(vcount) - - self.cate_full = list(vcount.index.tolist()) - self.cate_list = self.cate_full[:max_ - 1] - - # build dictionary - self.idx2cate = dict((k, v) for k, v in enumerate(self.cate_list)) - self.idx2cate.update({len(self.cate_list): "_other"}) - - self.cate2idx = dict((v, k) for k, v in self.idx2cate.items()) - - self.make_meta() - - def trans2idx(self, cate): - try: - return self.cate2idx[cate] - except: - return self.cate2idx["_other"] - - def prepro(self, pandas_s, expand=True): - x = pandas_s.apply(self.trans2idx).values - if expand: - x = np.expand_dims(x, -1) - return x - - def __call__(self, pandas_s, expand=True): - return self.prepro(pandas_s, expand) - - def dataset(self, df, bs, shuffle): - return DF_Dataset( - df, prepro=self.prepro, bs=bs, shuffle=shuffle, col=self.col_name) - - -class minmax(col_core): - def __init__(self, col_name, fillna=0.0, save_dir=".matchbox/fields"): - """minmax scaler: scale to 0~1""" - super(minmax, self).__init__(col_name, save_dir) - self.coltype = "minmax" - self.fillna = fillna - self.dim_names = [self.col_name] - self.width = 1 - self.make_meta_list = ["col_name", "coltype", - "min_", "max_", "range", "width", "dim_names"] - self.__call__ = self.prepro - - def build(self, pandas_s=None, min_=None, max_=None): - if type(pandas_s) != pd.core.series.Series: - assert (min_ is not None) and ( - max_ is not None),\ - "you have to set min_,max_ value" - self.min_ = min_ - self.max_ = max_ - - else: - pandas_s = pandas_s.fillna(self.fillna) - if min_ == None: - self.min_ = pandas_s.min() - else: - self.min_ = min_ - if max_ == None: - self.max_ = pandas_s.max() - else: - self.max_ = max_ - - self.range = self.max_ - self.min_ - assert self.range != 0, "the value range is 0" - print("min_:%.3f \tmax_:%.3f\t range:%.3f" % - (self.min_, self.max_, self.range)) - self.make_meta() - - def prepro(self, data, expand=True): - x = (np.clip(data.values.astype(np.float64), - self.min_, self.max_) - self.min_) / self.range - if expand: - x = np.expand_dims(x, -1) - return x - - def __call__(self, data, expand=True): - return self.prepro(data, expand) - - def dataset(self, df, bs, shuffle): - return DF_Dataset( - df, prepro=self.prepro, bs=bs, - shuffle=shuffle, col=self.col_name) - - -class tabulate(col_core): - def __init__(self, table_name, save_dir=".matchbox/fields"): - super(tabulate, self).__init__(table_name, save_dir) - self.coltype = "tabulate" - self.cols = dict() - - self.save_dir = save_dir - if self.save_dir[-1] != "/": - self.save_dir = "%s/" % (self.save_dir) - - self.make_meta_list = ["col_name", "coltype", "cols", "dim_names"] - - def build_url(self, metalist): - for url in metalist: - meta_dict = np.load(url).tolist() - self.cols[meta_dict["col_name"]] = meta_dict - self.make_dim() - self.make_meta() - - def build(self, *args): - for obj in args: - self.cols[obj.col_name] = obj.meta - self.make_sub() - self.make_dim() - self.make_meta() - - def make_col(self, meta): - """ - creat sub obj according to sub meta - """ - col_name = meta["col_name"] - - setattr(self, col_name, eval(meta["coltype"])(col_name)) - getattr(self, col_name).set_meta(meta) - if meta["coltype"] == "tabulate": - getattr(self, col_name).make_sub() - getattr(self, col_name).meta = meta - - def make_sub(self): - """ - create sub-objects according to meta - """ - for k, meta in self.cols.items(): - self.make_col(meta) - - def make_dim(self): - self.dim_names = [] - - for k, meta in self.cols.items(): - for sub_dim in meta["dim_names"]: - self.dim_names.append("%s -> %s" % (self.col_name, sub_dim)) - - self.width = len(self.dim_names) - - def prepro(self, data): - """ - data being a pandas dataframe - """ - data_list = [] - - for k, v in self.meta["cols"].items(): - # preprocess the data for every column - col = getattr(self, k) - if v["coltype"] == "tabulate": - data_list.append(col.prepro(data)) - else: - data_list.append(col.prepro(data[k])) - return np.concatenate(data_list, axis=1) - - def __call__(self, data): - return self.prepro(data) - - def dataset(self, df, bs, shuffle): - """ - Get the dataset from the preprocess unit - :param df: dataframe - :param bs: batch size - :param shuffle: if shuffle for the dataset - :return: A pytorch dataset - """ - return DF_Dataset(df, prepro=self.prepro, bs=bs, shuffle=shuffle) - - class test_DS: def __init__(self, dataset, *args, **kwargs): """ @@ -637,7 +97,7 @@ def recover(self, x): return (x * self.std) + self.mean -class historyReplay(object): +class HistoryReplay(object): """ A historic replay scheduler for GAN training diff --git a/forgebox/ftorch/train.py b/forgebox/ftorch/train.py deleted file mode 100644 index da3a790..0000000 --- a/forgebox/ftorch/train.py +++ /dev/null @@ -1,138 +0,0 @@ -from torch.utils.data import DataLoader -from collections import namedtuple -from types import MethodType -import torch -from forgebox.ftorch.optimizer import Opts -from forgebox.ftorch.utils import stty_size - -from forgebox.utils import JUPYTER - -TrainerBatch = namedtuple("TrainerBatch", ("epoch", "i", "data", "trainer")) -from forgebox.train import Trainer as Universal_Trainer -from .cuda import CudaHandler - - -class Trainer(Universal_Trainer): - def __init__(self, dataset, val_dataset=None, batch_size=16, fg=None, - print_on=20, opts = [], batch_start_zg = True, fields=None, is_log=True, shuffle=True, num_workers=4, - conn=None, modelName="model", tryName="try", callbacks=[], val_callbacks=[], jupyter = JUPYTER, using_gpu = True): - """ - Pytorch trainer - fields: the fields you choose to print out - is_log: writing a log? - - Training: - - write action function for a step of training, - assuming a generator will spit out tuple x,y,z in each: - then pass the function to object - - t=Trainer(...) - t.train(epochs = 30) - - @t.step_train - def action(self): - x,y,z = self.data - - self.opt.sgd.zero_grad() - self.opt.adam.zero_grad() - - # model is a global variable, or many models if you like - y_ = model(x) - y2_ = model_2(z) - - ...... more param updating details here - - # metrics you want to check return as dictionary here - return {"loss":loss.item(),"acc":accuracy.item()} - - same work for validation:trainer.val_action = val_action - train_data: torch.utils.data.dataset.Dataset - val_data: torch.utils.data.dataset.Dataset - print_on: int, print metrics on progress for each n steps, default 20 - batch_size: int, default 16 - batch_start_zg: bool, zero grad all the optimizers at start, default True - - conn: a sql table connection, (sqlalchemy). if assigned value, save the record in the designated sql database; - """ - self.batch_size = batch_size - self.shuffle = shuffle - self.num_workers = num_workers - train_data = self.ds_to_dl(dataset) - val = (len(val_dataset)>0) - val_data = self.ds_to_dl(val_dataset) if val else None - train_len = len(train_data) - val_len = len(val_data) if val else None - self.before_train_batch_list = [] - self.before_val_batch_list = [] - super().__init__(train_data, train_len=train_len, val_data=val_data, val_len=val_len, - fg=fg, print_on=print_on, fields=fields,batch_start_zg = batch_start_zg, - is_log=is_log, conn=conn, modelName=modelName, - tryName=tryName, callbacks=callbacks, val_callbacks=val_callbacks, - jupyter = jupyter - ) - self.initialize_gpu(using_gpu) - self.initialize_opt(opts) - - def ds_to_dl(self,ds): - return DataLoader(ds, batch_size=self.batch_size, shuffle=self.shuffle, num_workers=self.num_workers) - - def val_action_wrap(self): - with torch.no_grad(): - return self.val_action() - - def before_train_batch(self, func_name): - """ - @t.before_train_batch("process_data1") - def pd1(self): - .... - """ - def wrapper(f): - setattr(self,func_name, MethodType(f, self)) - self.before_train_batch_list.append(getattr(self,func_name)) - return wrapper - - def before_val_batch(self, func_name): - """ - @t.before_val_batch("process_data1") - def pd1(self): - .... - """ - def wrapper(f): - setattr(self, func_name, MethodType(f, self)) - self.before_val_batch_list.append(getattr(self,func_name)) - return wrapper - - def data_to_dev(self,device ="cuda:0"): - def to_dev(self): - self.data = tuple(dt.to(device) for dt in self.data) - self.step_extra("data_to_device")(to_dev) - self.step_extra("val_data_to_device")(to_dev) - - def initialize_opt(self,opts): - if type(opts)==list: - self.opt = Opts(*opts) - if len(opts) == 0: - print(self.warning_no_optimizer) - elif type(opts) == dict: - self.opt = Opts(**opts) - else: - self.opt = Opts(opts) - - def initialize_gpu(self,using_gpu): - """ - decide whether to use cuda device - """ - self.using_gpu = False - if (using_gpu == True) and (torch.cuda.is_available()): - self.using_gpu = True - if self.using_gpu: - self.data_to_dev() - - @property - def warning_no_optimizer(self): - return f"""{stty_size()*"="}\nNotice, The Trainer was not initiated with optimizer - Use the following syntax to initialize optimizer - t.opt["adm1"] = torch.optim.Adam(m1.parameters()) - t.opt["adg1"] = torch.optim.Adagrad(m2.parameters())\n{stty_size()*"="} - """ diff --git a/forgebox/ftorch/utils.py b/forgebox/ftorch/utils.py deleted file mode 100644 index 68bcb14..0000000 --- a/forgebox/ftorch/utils.py +++ /dev/null @@ -1,31 +0,0 @@ -from forgebox.utils import JUPYTER -if JUPYTER: - from IPython.display import display -import torch -import os - - -def mars(printstuff): - """ - A print function works between jupyter and console print - :param printstuff: - """ - if JUPYTER: - display(printstuff) - else: - print(printstuff) - - -def save_model(model, path): - torch.save(model.state_dict(), path) - - -def load_model(model, path): - model.load_state_dict(torch.load(path)) - - -def stty_size(): - try: - return int(os.popen('stty size', 'r').read().split()[1]) - except: - return 60 diff --git a/forgebox/hf/__init__.py b/forgebox/hf/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/forgebox/hf/data.py b/forgebox/hf/data.py deleted file mode 100644 index dfe8367..0000000 --- a/forgebox/hf/data.py +++ /dev/null @@ -1,217 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/70_hf_transformer_data.ipynb (unless otherwise specified). - -__all__ = ['convert_iob2_file_to_iobes', 'conbine_iobes_file', 'IOBES'] - -# Cell -from ..imports import * -from ..category import Category -from typing import List, Dict, Callable, Any, Tuple - -# Cell -def convert_iob2_file_to_iobes(file_path, result_path): - """ - Convert IOB2 file to IOBES - """ - with open(file_path, 'r') as f: - lines = f.readlines() - with open(result_path, 'w') as f: - for line in lines: - line = line.strip() - if line == '': - f.write('\n') - continue - line = line.split() - if line[-1] == 'O': - f.write(' '.join(line) + '\n') - else: - f.write(' '.join(line[:-1]) + ' ' + line[-1] + '\n') - - -def conbine_iobes_file( - file_paths: List[Path], - new_file_path: Path -): - """ - Conbine from multiple IOBES files - into IOBES files - """ - with open(new_file_path, 'w') as new_file: - for file_path in file_paths: - with open(file_path, 'r') as file: - for line in file: - new_file.write(line) - -# Cell -class IOBES(Dataset): - """ - Load iobes file for NER training task - """ - - def __init__( - self, - file_path, - tokenizer, - max_len=128, - save_buffer: int = 15, - category: Category = None, - return_string: bool = False, - use_frag: bool = False, - ): - """ - file_path, - tokenizer, - max_len=128, - save_buffer: int = 15, - category: Category = None, - label categories, if set to None, will be figured out - automatically. - You can set this to None for train dataset, but for valid - dataset: - valid_ds = IOBES(...,category=train_ds.cates) - return_string: bool = False, do we return original string - for tokenizer output, this option is good for debuging - but the data won't pass into cuda if choose so - use_frag: bool = False, do we use prepend like 'I-','B-' - """ - self.file_path = file_path - self.max_len = max_len - self.pairs = [] - self.list_of_words = [] - self.list_of_labels = [] - self.tokenizer = tokenizer - self.cates = category - self.return_string = return_string - self.use_frag = use_frag - self.load_data(save_buffer) - - def load_data(self, save_buffer: int = 15): - """ - Load file in to object structure - """ - with open(self.file_path, 'r') as f: - for line in f: - line = line.strip() - if line: - splited = line.split() - if len(splited) != 2: - continue - word, label = splited - # do we use 'I-', 'B-' etc - if self.use_frag is False: - if "-" in label: - label = label.split('-')[1] - self.pairs.append([word, label]) - - self.pairs = np.array(self.pairs) - - if self.cates is None: - labels_df = pd.DataFrame({"label": self.pairs[:, 1]}) - self.cates = Category(list(labels_df.vc("label").index)) - - self.batching_words(save_buffer) - - def batching_words(self, save_buffer: int = 15): - """ - batching self.words into self.list_of_words - by self.max_len -15 - """ - for i in range(0, len(self.pairs), self.max_len-save_buffer): - chunk_slice = slice(i, i+self.max_len-save_buffer) - self.list_of_words.append(self.pairs[chunk_slice, 0]) - self.list_of_labels.append(self.pairs[chunk_slice, 1]) - - def __len__(self) -> int: - return len(self.list_of_words) - - def __getitem__(self, idx: int) -> Tuple[List[str]]: - return list(self.list_of_words[idx]), list(self.list_of_labels[idx]) - - def __repr__(self): - return f"""NER dataset using IOBES annotation - {len(self)} sentences, - Labels: - {list(self.cates.i2c)} - """ - - def collate_fn(self, data): - """ - data: list of tuple - """ - words, text_labels = zip(*data) - - inputs = self.tokenizer( - list(words), - return_tensors='pt', - padding=True, - truncation=True, - max_length=self.max_len, - is_split_into_words=True, - return_offsets_mapping=True, - add_special_tokens=False, - ) - return self.align_offsets(inputs, text_labels, words) - - def align_offsets( - self, - inputs, - text_labels: List[List[str]], - words: List[List[str]] - ): - """ - inputs: output if tokenizer - text_labels: labels in form of list of list of strings - words: words in form of list of list of strings - """ - labels = torch.zeros_like(inputs.input_ids).long() - labels -= 100 - text_lables_array = np.empty(labels.shape, dtype=object) - words_array = np.empty(labels.shape, dtype=object) - max_len = inputs.input_ids.shape[1] - - for row_id, input_ids in enumerate(inputs.input_ids): - word_pos = inputs.word_ids(row_id) - for idx, pos in enumerate(word_pos): - if pos is None: - continue - if pos <= max_len: - labels[row_id, idx] = self.cates.c2i[text_labels[row_id][pos]] - if self.return_string: - text_lables_array[row_id, - idx] = text_labels[row_id][pos] - words_array[row_id, idx] = words[row_id][pos] - - inputs['labels'] = labels - if self.return_string: - inputs['text_labels'] = text_lables_array.tolist() - inputs['word'] = words_array.tolist() - return inputs - - def dataloader(self, batch_size: int = 32, shuffle: bool = True): - """ - Create dataloader - """ - return DataLoader( - self, - batch_size=batch_size, - shuffle=shuffle, - collate_fn=self.collate_fn, - ) - - def one_batch(self, batch_size: int = 32, shuffle: bool = True): - return next(iter(self.dataloader(batch_size, shuffle))) - - def visualize_batch(self, batch, row_idx=0): - return list(zip(self.tokenizer.convert_ids_to_tokens(batch.input_ids[row_idx]), - batch.labels[row_idx].numpy(), - batch.text_labels[row_idx], - batch.word[row_idx], - batch.offset_mapping[row_idx].numpy(), - )) - - def set_hfconfig(self, config): - """ - set the category information to huggingface config - """ - config.num_labels = len(self.cates) - config.id2label = {i: label for i, label in enumerate(self.cates.i2c)} - config.label2id = {label: i for i, label in enumerate(self.cates.i2c)} \ No newline at end of file diff --git a/forgebox/hf/train.py b/forgebox/hf/train.py deleted file mode 100644 index e797c5b..0000000 --- a/forgebox/hf/train.py +++ /dev/null @@ -1,326 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/72_pl_training.ipynb (unless otherwise specified). - -__all__ = ['ner_model_from', 'ner_tokenizer_from', 'NERDataModule', 'NERModule', 'clean_ner_output', 'NERInference'] - -# Cell -from .data import IOBES -from ..imports import * -from ..loop import chunkify -import pytorch_lightning as pl -from transformers import ( - AutoModelForTokenClassification, - AutoTokenizer, - pipeline -) -from tqdm.notebook import tqdm -from typing import Callable, List -from torch import device - -# Cell -try: - ishell = get_ipython() - IS_JUPYTER = True - from tqdm.notebook import tqdm -except NameError: - IS_JUPYTER = False - from tqdm import tqdm - -# Cell - -# ner model and tokenizer -def ner_model_from( - name:str, dataset: IOBES -): - """ - name: from_pretrain(name) - """ - model = AutoModelForTokenClassification.from_pretrained( - name, - num_labels=len(dataset.cates), - ) - dataset.set_hfconfig(model.config) - return model - -def ner_tokenizer_from( - name: str -): - return AutoTokenizer.from_pretrained( - name, add_prefix_space=True) - -# Cell - -# ner data module -class NERDataModule(pl.LightningDataModule): - def __init__(self, train_ds, val_ds, batch_size=32): - super().__init__() - self.train_ds = train_ds - self.val_ds = val_ds - self.batch_size = batch_size - - def train_dataloader(self): - return self.train_ds.dataloader(batch_size=self.batch_size, shuffle=True) - - def val_dataloader(self): - return self.val_ds.dataloader(batch_size=self.batch_size*2, shuffle=False) - -# Cell - -# ner module -class NERModule(pl.LightningModule): - """ - PyTorch lightning module for training ner model - """ - def __init__( - self, model, - ): - """ - model: huggingface transformer model for ner - """ - super().__init__() - self.model = model - - def forward(self, batch): - return self.model( - input_ids=batch['input_ids'], - attention_mask=batch['attention_mask'], - labels=batch['labels']) - - def training_step(self, batch, batch_idx): - outputs = self(batch) - loss = outputs.loss - self.log("loss", loss) - self.log("acc", self.calcualte_acc(outputs, batch.labels)) - return loss - - def validation_step(self, batch, batch_idx): - outputs = self(batch) - loss = outputs.loss - self.log("val_loss", loss) - self.log("val_acc", self.calcualte_acc(outputs, batch.labels)) - return loss - - def calcualte_acc(self, outputs, labels): - pred_idx = outputs.logits.argmax(-1) - mask = torch.ones_like(pred_idx) - mask[labels==-100]=False - return (pred_idx[mask]==labels[mask]).float().mean() - - def configure_optimizers(self): - # discriminative learning rate - param_groups = [ - {'params': self.model.roberta.parameters(), 'lr': 5e-6}, - {'params': self.model.classifier.parameters(), 'lr': 1e-3}, - ] - optimizer = torch.optim.Adam(param_groups, lr=1e-3) - return optimizer - -# Cell -def clean_ner_output(self, outputs): - """ - Cleaning output for NER task - """ - results = [] - current = [] - last_idx = 0 - # make to sub group by position - for output in outputs: - if output["start"] in [last_idx, last_idx-1]: - current.append(output) - else: - results.append(current) - current = [output, ] - last_idx = output["end"] - if len(current) > 0: - results.append(current) - - # from tokens to string - strings = [] - for c in results: - tokens = [] - starts = [] - ends = [] - for o in c: - tokens.append(o['word']) - starts.append(o['start']) - ends.append(o['end']) - - new_str = self.tokenizer.convert_tokens_to_string(tokens) - if new_str != '': - strings.append(dict( - word=new_str, - start=min(starts), - end=max(ends), - entity=c[0]['entity_group'] - )) - return strings - -# Cell -class NERInference: - """ - NER Inference pipeline - ner = NERInference.from_pretrained('xxxx/xxxx') - ner.predict(['text1','text2']) - """ - - def __init__(self, model, tokenizer, name=None): - super().__init__() - self.model = model.eval() - self.tokenizer = tokenizer - self.name = name if name else "NER model" - - def __repr__(self): - return f"[NERInference on {self.name}]" - - def to(self, device_str): - self.model = self.model.to(device(device_str)) - return self - - @classmethod - def from_pretrained(cls, tag): - """ - Load from pretrained model and tokenizer - """ - model = AutoModelForTokenClassification.from_pretrained(tag) - tokenizer = AutoTokenizer.from_pretrained(tag) - return cls(model=model, tokenizer=tokenizer, name=model.config._name_or_path) - - def __call__(self, data, batch_size=32, dev=device("cpu")): - if type(data) == str: - return self.batch_predict([data,]) - else: - return self.predict(data, dev=dev, batch_size=batch_size) - - def predict( - self, - texts: List[str], - dev=device("cpu"), - batch_size: int = 32, - progress_bar: bool = True - ) -> pd.DataFrame: - """ - Predict a list of sentences/ paragraphs - """ - # place the model into device - self.model = self.model.to(dev) - iterator = list(enumerate(chunkify(texts, bs=batch_size))) - if progress_bar: - iterator = tqdm(iterator, leave=False) - - # run through iterator - all_dfs = [] - for i, text_b in iterator: - # by batch prediction - batch_df = self.batch_predict(text_b) - if len(batch_df) > 0: - # calculate the row number - batch_df['text_id'] = batch_df.apply( - lambda row: i*batch_size+row.batch_row_sn, axis=1) - all_dfs.append(batch_df) - - # place the model back to cpu - self.model = self.model.to("cpu") - return pd.concat(all_dfs).reset_index(drop=True) - - def tokenizing(self, texts): - inputs = self.tokenizer( - texts, - padding="max_length", - max_length=self.tokenizer.model_max_length, - return_attention_mask=True, - return_tensors='pt', truncation=True, return_offsets_mapping=True - ).to(self.model.device) - return inputs - - - def batch_predict(self, texts:List[str])-> pd.DataFrame: - """ - Predict a single batch of sentences - """ - id2label = self.model.config.id2label - inputs = self.tokenizing(texts) - - with torch.no_grad(): - outputs = self.model(input_ids=inputs.input_ids, - attention_mask=inputs.attention_mask) - inputs = inputs.to(device('cpu')) - - pred_idx = outputs.logits.argmax(-1).to(device("cpu")) - batch_size = pred_idx.size(0) - offsets = inputs.offset_mapping - results = [] - for bi in range(batch_size): - text = texts[bi] - input_ids = inputs.input_ids[bi] - word_ids = inputs.word_ids(bi) - pred_ids = pred_idx[bi] - # initial values for the row - last_pos = 0 - previous_has_positive = False - current_start = 0 - current_index = 0 - current_id = 0 - line = [] - for ti in range(1, len(input_ids)): - if input_ids[ti] == self.tokenizer.sep_token_id: - break - # is the current token an appending sub-word? - if word_ids[ti] == last_pos: - pass - # is current token negative - elif pred_ids[ti].item() == 0: - # store the previous hanging prediction - if previous_has_positive: - start = current_start - end = offsets[bi, ti, 0].item() - line.append({ - "start": start, "end": end, - "entity": id2label[current_id], - "word": text[start:end], - "index": current_index, - }) - - current_start = offsets[bi, ti, 0].item() - previous_has_positive = False - current_id = 0 - current_index = ti - # has positive prediction index, other than zero - else: - if previous_has_positive: - # different than the previous - if current_id != pred_ids[ti].item(): - start = current_start - end = offsets[bi, ti, 0].item() - line.append({ - "start": start, - "end": end, - "entity": id2label[current_id], - "word": text[start:end], - "index": current_index, - }) - current_start = offsets[bi, ti, 0].item() - # this is the 1st postive predict for a while - else: - current_start = offsets[bi, ti, 0].item() - previous_has_positive = True - current_index = ti - current_id = pred_ids[ti].item() - - last_pos = word_ids[ti] - if previous_has_positive: - start = current_start - end = offsets[bi, ti, 1].item() - line.append({ - "start": start, - "end": end, - "entity": id2label[current_id], - "word": text[start:end], - "index": current_index, - }) - - results.append(line) - all_dfs = [] - for i, res in enumerate(results): - sub_df = pd.DataFrame(res) - sub_df["batch_row_sn"] = i - all_dfs.append(sub_df) - return pd.concat(all_dfs) \ No newline at end of file diff --git a/forgebox/html.py b/forgebox/html.py index 80d090d..762ba8a 100644 --- a/forgebox/html.py +++ b/forgebox/html.py @@ -1,46 +1,69 @@ # AUTOGENERATED! DO NOT EDIT! File to edit: nbs/04_html.ipynb (unless otherwise specified). -__all__ = ['DOM', 'image_to_base64', 'data_url', 'img_dom', 'deeper', 'list_group', 'col_sm', 'list_group_kv', 'JS', +import math +from PIL.Image import Image as ImageClass +import base64 +from io import BytesIO +__all__ = ['display', 'DOM', 'image_to_base64', 'data_url', + 'img_dom', 'deeper', 'list_group', + 'col_sm', 'list_group_kv', 'JS', 'JS_file'] # Cell from IPython.display import HTML +from typing import Dict, Any + +try: + display(HTML('''''')) +except: + display = print + class DOM: - def __init__(self,txt,tag,kwargs = dict()): + """ + DOM object in python + dom = DOM("some text", "div", {"class":"myclass"}) + dom.append(another_dom) + dom['class'] = "newclass" + # show in jupyter + dom() + """ + + def __init__(self, txt, tag, kwargs=dict()): self.txt = txt self.tag = str(tag).lower() self.attrs = kwargs self.refresh_attr() @staticmethod - def extend(text,tag,**kwargs): - attributes =(" ".join(f'{k}="{v}"' for k,v in kwargs.items())) - attributes=" "+attributes if attributes else attributes + def extend(text, tag, **kwargs): + attributes = (" ".join(f'{k}="{v}"' for k, v in kwargs.items())) + attributes = " "+attributes if attributes else attributes start = f"<{tag}{attributes}>" inner = f"{text}" end = f"" text = f"{start}{inner}{end}" - return start,inner,end + return start, inner, end def refresh_attr(self): - self.start,self.inner,self.end = self.extend(self.txt,self.tag,**self.attrs) + self.start, self.inner, self.end = self.extend( + self.txt, self.tag, **self.attrs) - def __mul__(self,new_tag): - assert type(new_tag)==str - return DOM(self.text,new_tag) + def __mul__(self, new_tag): + assert type(new_tag) == str + return DOM(self.text, new_tag) - def __add__(self,dom): + def __add__(self, dom): return self.text+dom.text def __repr__(self): return f"{self.start}{self.inner}{self.end}" - def __getitem__(self,k): + def __getitem__(self, k): return self.attrs[k] - def __setitem__(self,k,v): - self.update({k,v}) + def __setitem__(self, k, v): + self.update({k, v}) def __call__(self): self.display() @@ -49,22 +72,21 @@ def __call__(self): def text(self): return str(self) - def append(self,subdom): + def append(self, subdom): self.inner = self.inner+str(subdom) return self - def update(self,dict_): + def update(self, dict_): self.attrs.update(dict_) self.refresh_attr() return self def display(self): + """ + Display the html in Jupyter + """ display(HTML(self.text)) -# Cell -from io import BytesIO -import base64 -from PIL.Image import Image as ImageClass def image_to_base64( img: ImageClass @@ -81,6 +103,7 @@ def image_to_base64( base64_str = base64.b64encode(byte_data) return base64_str.decode() + def data_url( img: ImageClass ) -> str: @@ -91,10 +114,13 @@ def data_url( """ return f"data:image/jpg;base64,{image_to_base64(img)}" -def img_dom(img: ImageClass): - return DOM("","img",{"src":data_url(img)}) -# Cell +def img_dom(img: ImageClass) -> DOM: + """ + show PIL.Image in HTML + """ + return DOM("", "img", {"src": data_url(img)}) + def deeper(x): if type(x) in [list, set, tuple]: @@ -115,9 +141,6 @@ def list_group(iterable): ul.append(li) return ul -# Cell -import math - def col_sm(iterable, portions=None,): if portions == None: @@ -127,23 +150,27 @@ def col_sm(iterable, portions=None,): row.append(DOM(i, "div", {"class": f"col-sm-{p}"})) return row -# Cell -def list_group_kv(data): + +def list_group_kv(data: Dict[str, Any]) -> DOM: + """ + Key + """ result = [] - for k,v in data.items(): - row = DOM("","div",{"class":"row"}) - row.append(DOM(f"{k}","strong",{"class":"col-sm-5"}))\ - .append(DOM(f"{deeper(v)}","span",{"class":"col-sm-7"})) + for k, v in data.items(): + row = DOM("", "div", {"class": "row"}) + row.append(DOM(f"{k}", "strong", {"class": "col-sm-5"}))\ + .append(DOM(f"{deeper(v)}", "span", {"class": "col-sm-7"})) result.append(row) return list_group(result) -# Cell + def JS(code): - DOM(code,"script",)() + DOM(code, "script",)() + def JS_file(path): """ load javascript file """ - with open(path,"r") as f: - DOM(f.read(),"script")() \ No newline at end of file + with open(path, "r") as f: + DOM(f.read(), "script")() diff --git a/forgebox/images/widgets.py b/forgebox/images/widgets.py index fd611a0..aa899b3 100644 --- a/forgebox/images/widgets.py +++ b/forgebox/images/widgets.py @@ -1,17 +1,9 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/51_image_widgets.ipynb (unless otherwise specified). - -__all__ = ['image_dom', 'with_title_dom', 'view_images', 'Subplots'] - -# Cell -import base64 -from io import BytesIO from PIL import Image from typing import List, Callable import math -from ..html import DOM, image_to_base64, data_url +from forgebox.html import data_url, DOM -# Cell def image_dom( img: Image, **kwargs @@ -21,7 +13,6 @@ def image_dom( with PIL.Image object return forgebox.html.DOM """ - from ..html import DOM img_dom = DOM("", "img", dict( src=data_url(img), @@ -32,18 +23,18 @@ def image_dom( return div_dom -def with_title_dom(img: Image, title:str, col: int): +def with_title_dom(img: Image, title: str, col: int): from ..html import DOM img_dom = image_dom(img) - out_dom = DOM(img_dom, "div", {"class":f"col-sm-{col}"}) + out_dom = DOM(img_dom, "div", {"class": f"col-sm-{col}"}) out_dom.append(title) return out_dom def view_images( *images, - num_per_row: int=4, - titles: List=None, + num_per_row: int = 4, + titles: List = None, ): """ Create
    wraping up images @@ -69,7 +60,7 @@ def view_images( frame.append(with_title_dom(img, title, col)) return frame -# Cell + class Subplots: """ Simplifying plt sublots @@ -115,4 +106,4 @@ def __call__(self, *args, **kwargs): ax = self.ax[math.floor( float(self.i)/float(self.ncol)), self.i % self.ncol] self.single_func(ax, *args, **kwargs) - self.i += 1 \ No newline at end of file + self.i += 1 diff --git a/forgebox/imports.py b/forgebox/imports.py index a460cfd..1f5a9cb 100644 --- a/forgebox/imports.py +++ b/forgebox/imports.py @@ -4,11 +4,11 @@ # Cell -__all__ = ["pd","np","partial","Path","json","Counter", - "plt","os","sys","glob","Image",] +__all__ = ["pd", "np", "partial", "Path", "json", "Counter", + "plt", "os", "sys", "glob", "Image", ] # import enhanced version of pandas -from .pdenhanced import pd +from .pd_plus import pd import numpy as np from pathlib import Path import json @@ -25,7 +25,7 @@ pass try: - from .widgets import search_box,paginate + from .widgets import search_box, paginate pd.DataFrame.search_box = search_box pd.DataFrame.paginate = paginate except: @@ -36,66 +36,18 @@ from torch import nn from torch.utils.data.dataset import Dataset from torch.utils.data.dataloader import DataLoader - __all__+=["nn","torch","Dataset","DataLoader"] + __all__ += ["nn", "torch", "Dataset", "DataLoader"] except: pass try: from ipywidgets import interact, interact_manual from IPython.display import HTML - __all__+=["interact","interact_manual","HTML"] -except: - pass - -try: - import redis - def read_redis(key, host='localhost', port=6379, db=3): - rd = redis.Redis(host=host, port=port, db=db) - return pd.read_json(rd.get(key)) - - __all__+=["read_redis",] - - def to_redis(self, key:str, con:redis.Redis = None, ex:int=600): - """ - Save dataframe to redis - """ - if con is None: - con = redis.Redis(host='localhost', port=6379, db=3) - return con.set(key, self.to_json()) - - pd.DataFrame.to_redis = to_redis - - def df_cache(ex=600, host='localhost', port=6379, db=3): - """ - Caching pd.DataFrame, use as decorator - - @df_cache(ex=300) - def get_table_abc(uuid): - return pd.read_sql(f"select * from abc where uuid='{uuid}'", con=conn) - - within 5 minutes, under same uuid, the code will query data base only once - """ - rd = redis.Redis(host=host, port=port, db=db) - def decorator(f): - def wrapper(*args, **kwargs): - key = "_".join(str(i).lower() for i in args) - if len(kwargs)>0: - key += "_" - key += "_".join(f"{k}-{v}" for k,v in kwargs.items()) - if rd.exists(key): - return pd.read_json(rd.get(key)) - df = f(*args, **kwargs) - df.to_redis(key, con=rd) - return df - - return wrapper - return decorator - __all__+=["df_cache",] - + __all__ += ["interact", "interact_manual", "HTML"] except: pass from glob import glob from PIL import Image -Path.ls = lambda x:os.listdir(x) \ No newline at end of file +Path.ls = lambda x: os.listdir(x) diff --git a/forgebox/initialize.py b/forgebox/initialize.py deleted file mode 100644 index afa5e62..0000000 --- a/forgebox/initialize.py +++ /dev/null @@ -1,9 +0,0 @@ -from forge.config import SQLALCHEMY_DATABASE_URI -from configparser import ConfigParser - -config = ConfigParser() - -config["DATABASE"] = {"fg_db":SQLALCHEMY_DATABASE_URI} - -with open('/etc/forgebox.cfg', 'w') as configfile: - config.write(configfile) \ No newline at end of file diff --git a/forgebox/loop.py b/forgebox/loop.py deleted file mode 100644 index df8ca78..0000000 --- a/forgebox/loop.py +++ /dev/null @@ -1,622 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/10_loop.ipynb (unless otherwise specified). - -__all__ = ['Stuff', 'method4all', 'StorageCore', 'Loop', 'ProgressBar', 'error_tolerate', 'Tolerate', 'LambdaCall', - 'Event', 'chunkify'] - -# Cell -import numpy as np -import pandas as pd -import math - -# Cell -class Stuff: - _is_stuff = True - def __init__(self,name): - self.name = name - self.cases = dict() - self.funcs = dict() - - def __setitem__(self,k,v): - setattr(self,k,v) - - def __setattr__(self,k,v): - if k not in ["name","cases","funcs"]: - self.cases[k] = v - else: - super().__setattr__(k,v) - - def __getitem__(self,k): - return self.cases[k] - - def append(self,obj): - self[f"{self.name}_{len(self+1)}"] = obj - - def clear(self): - self.cases = dict() - - def __getattr__(self,k): - if k in self.cases: - return self.cases[k] - elif k in self.funcs: - return self.funcs[k] - else: - return super().__getattr__() - - def __repr__(self,): - return f"🍄:{self.name}[\n\t"+"\n\t".join(self.cases.keys())+"\n]" - - def __len__(self): - return len(self.cases) - - def apply(self,func,scope = None): - """ - func, the function to apply on each element - scope, list, name the scope of element - """ - def apply_func(*args,**kwargs): - for k,case in self.cases.items(): - if scope!=None: - if k not in scope: - continue - if type(func)==str: - self[k] = getattr(case,func)(*args,**kwargs) - else: - self[k] = func(case,*args,**kwargs) - return apply_func - - def update(self,dictionary): - for k, v in dictionary.items(): - self[k]=v - - def __call__(self,func=None): - """ - func: str or callable, - if str, it will run on each subject case's such named function - if callable, it will call on the callable, with the 1st arg being the subject case - args: extra args - kwargs: extra key word arguments - - return: a list of returned results - """ - def run_funcs(*args,**kwargs): - results = dict() - for k,case in self.cases.items(): - if type(func)==str: - results.update({k:getattr(case,func)(*args,**kwargs)}) - elif func==None: - results.update({k:getattr(case,"__call__")(*args,**kwargs)}) - else: - results.update({k:func(case,*args,**kwargs)}) - return results - return run_funcs - -# Cell -from tqdm import tqdm -from types import MethodType -import inspect -from functools import partial - -def method4all(f): - """ - Use this function as a decorator, - The decorated function under Loop class can be used on outer layer - """ - setattr(f,"forall",True) - return f - -class StorageCore: - def __init__(self,start_layer): - self.layers = [] - self.lmap = dict() - self.forall_pool = dict() - self.new_layer(start_layer) - self.i = -1 - self.epoch = -1 - - def new_layer(self,layer): - layer.core = self - self.layers.append(layer) - - self.lmap[layer._loop_layer]=layer - if hasattr(self,layer.name): - raise KeyError(f"Layer name already exist: {layer.name}") - setattr(self,layer.name,layer) - self.update_forall(layer) - self.assign_forall(layer) - - def __repr__(self): - return str(self.lmap) - - def for_all_functions(self,obj): - return dict(inspect.getmembers(obj, - predicate=lambda x:hasattr(x,"forall"))) - - def update_forall(self,obj): - self.forall_pool.update(self.for_all_functions(obj)) - - def assign_forall(self,obj): - for name,f in self.forall_pool.items(): - setattr(obj,name,f) - -class Loop(list): - """ - Basic loop class - """ - _loop_layer = 0. - _loop_obj = True - def __init__(self,iterable = [],name=None): - self.iterable = iterable - self.next_layer = None - self.name = name if name!=None else self.__class__.__name__ - - if hasattr(iterable,"_loop_layer"): - self._loop_layer = iterable._loop_layer + 1 - iterable.next_layer = self - iterable.core.new_layer(self) - else: - self.core = StorageCore(self) - - def __call__(self): - pass - - def __repr__(self): - return f"layer🍰{self.name}" - - def on(self,iterable): - self.iterable = iterable - self._loop_layer = iterable._loop_layer + 1 - - def func_detail(self,f): - detail = dict({"🐍func_name":f.__name__, - "⛰doc":f.__doc__, - "😝var":",".join(f.__code__.co_varnames), - "😜names":",".join(f.__code__.co_names), - }) - return detail - - def func_detail_df(self): - funcs = [] - result = [] - for idx,layer in self.core.lmap.items(): - for fname,f in self.core.for_all_functions(layer).items(): - if id(f) not in funcs: - dt = self.func_detail(f) - dt.update(layer=str(layer)) - result.append(dt) - funcs.append(id(f)) - return pd.DataFrame(result) - - def search(self): - from .widgets import search_box - pd.set_option('display.max_colwidth', 0) - doc_df = self.func_detail_df() - doc_df["⛰doc"]= doc_df["⛰doc"].apply(lambda x:str(x).replace("\n"," ")) - search_box(doc_df, ["🐍func_name","⛰doc","layer","😝var","😜names"]) - - def summary(self): - rt = f"Loop layer {self.name} summary:\n" - rt+= "="*50+"\n" - funcs = [] - for idx,layer in self.core.lmap.items(): - rt+= f"🍰layer{idx}\t{str(layer)}\n" - for fname,f in self.core.for_all_functions(layer).items(): - if id(f) not in funcs: - rt+="\t" - rt+="\n\t".join(f"[{k}]\t{v}" for k,v in self.func_detail(f).items()) - rt+="\n\t"+"."*35+"\n" - funcs.append(id(f)) - rt+="-"*50+"\n" - rt+= "="*50+"\n" - print(rt) - - def __len__(self): - return self.iterable.__len__() - - def run(self,run_nb=1): - """ - Run through iteration - run start_call for every layer on the start of iteration - run __call__ for every layer for each iteration - run end_call for every layer on the end of iteration - """ - self.before_1st_callon() - for i in range(run_nb): - self.one_epoch() - self.after_last_callon() - - def one_epoch(self): - first = self.layers[0] - self.refresh_i() - first.start_callon() - for element in first: - first() - first.end_callon() - - def __getitem__(self,idx): - return self.iterable[idx] - - def __setitem__(self,idx,v): - self.iterable[idx] = v - - def refresh_i(self): - self.core.i=-1 - self.core.epoch+=1 - - def update_i(self): - self.core.i+=1 - - def downstream_wrap(self,f):return f() - def downstream_start_wrap(self,f):return f() - def downstream_end_wrap(self,f):return f() - def downstream_before_1st_wrap(self,f): return f() - def downstream_after_last_wrap(self,f): return f() - - def downstream(self,f): - """ - set downstream wrapper on callback, - The callback will happend in the local realm of the deocrated function - example - @loop.downstream - def control_layer(self,callback): - try: - callback() - except: - print("error happened") - """ - setattr(self,"downstream_wrap",MethodType(f,self)) - return f - - def downstream_start(self,f): - """ - set downstream wrapper on start callback, - The start_callback will happend in the local realm of the deocrated function - example - @loop.downstream_start - def control_layer(self,start_callback): - try: - start_callback() - except: - print("error happened") - """ - setattr(self,"downstream_start_wrap",MethodType(f,self)) - return f - - def downstream_end(self,f): - """ - set downstream wrapper on end callback, - The end_callback will happend in the local realm of the deocrated function - @loop.downstream_end - def control_layer(self,end_callback): - try: - end_callback() - except: - print("error happened") - """ - setattr(self,"downstream_end_wrap",MethodType(f,self)) - return f - - def callon(self): - self() - self.downstream_wrap(self.iter_cb) - - def start_callon(self): - self.start_call() - self.downstream_start_wrap(self.start_cb) - - def end_callon(self): - self.end_call() - self.downstream_end_wrap(self.end_cb) - - def before_1st_callon(self): - self.before_1st_call() - self.downstream_before_1st_wrap(self.before_1st_cb) - - def after_last_callon(self): - self.after_last_call() - self.downstream_before_1st_wrap(self.after_last_cb) - - def iter_cb(self): - """ - call back during each iteration - """ - if self.next_layer!=None: - self.next_layer.callon() - self.after() - - def after(self): - pass - - def start_cb(self): - """ - callback at the start of iteration - """ - if self.next_layer!=None: - self.next_layer.start_callon() - - def end_cb(self): - """ - callback at the end of iteration - """ - if self.next_layer!=None: - self.next_layer.end_callon() - - def before_1st_cb(self): - """ - callback before the 1st of iteration - """ - if self.next_layer!=None: - self.next_layer.before_1st_callon() - - def after_last_cb(self): - """ - callback after the last of iteration - """ - if self.next_layer!=None: - self.next_layer.after_last_callon() - - def before_1st_call(self):pass - def after_last_call(self):pass - def start_call(self):pass - def end_call(self):pass - - def __iter__(self,): - for element in self.iterable: - if self._loop_layer ==0: - self.update_i() - self.core.element = element - self.callon() - yield self.element - - def __getattr__(self,k): - return getattr(self.core,k) - - def is_newloop(self): - """ - return Bool:Is this a new loop ready to start - """ - return (self.i==-1 or self.i==self.__len__()-1) - -# Cell -class ProgressBar(Loop): - def __init__(self,iterable=[],jupyter = True,mininterval = 1.,leave=False): - super().__init__(iterable,"ProgressBar") - """ - jupyter:bool, using the jupyter progressbar (or the console pb)? - default True - mininterval: minimun update interval - leave:bool, if true, we do not remove the progress bar at the end - default: False - """ - - if jupyter: # jupyter widget - from tqdm.notebook import tqdm - - else: # compatible for console print - from tqdm import tqdm - - self.tqdm = tqdm - self.leave = leave - self.mininterval = mininterval - self.data = dict() - - @method4all - def pgbar_data(self,data): - """ - update progress bar with python dictionary - data: python dictionary - """ - self.t.set_postfix(data) - - @method4all - def pgbar_description(self,text): - """ - update progress bar prefix with text string - """ - self.t.set_description_str(f"{text}") - - def start_call(self): - self.create_bar() - - def end_call(self): - self.t.close() - - def __call__(self): - self.t.update(1) - - def create_bar(self): - self.t = self.tqdm(total=len(self.iterable),leave=self.leave, - mininterval=self.mininterval) - -# Cell -def error_tolerate(self,downstream_func): - """ - downstream_func:Downstream function - """ - try: - downstream_func() - except Exception as e: - self.errors.append(dict(stage=downstream_func.__name__, - i=self.i, - epoch=self.epoch, - error=e)) - -class Tolerate(Loop): - """ - Tolerate any error happened downstream - layer2 = Tolerate(upstream_iterable) - # build downstream tasks - layer3 = OtherApplication(layer2) - layer3.run() - # show the happened error message - layer3.error_list() - """ - def __init__(self,iterable = []): - super().__init__(iterable,) - self.errors = list() - # wrap downstream task with error tolerate - for decorator in [self.downstream, - self.downstream_start, - self.downstream_end]: - decorator(error_tolerate) - - @method4all - def error_list(self): - """ - A list of errors happend so far - """ - return self.errors - - def end_call(self,): - le = len(self.error_list()) - if le>0: - print(f"WARNING:{le} errors") - -class LambdaCall(Loop): - def __init__(self,iterable = [], - func = lambda x:x, - start_func = lambda x:x, - end_func = lambda x:x - ): - super().__init__(iterable,name=f"Lambda<{hex(id(self))}>") - self.func = func - self.start_func = end_func - self.end_func = end_func - - def __call__(self): - self.func(self) - - def start_call(self): - self.start_func(self) - - def end_call(self): - self.end_func(self) - -# Cell - -class Event(Loop): - """ - An event is the landmark with in 1 iteration - """ - def __init__(self,iterable=[]): - event_name = self.__class__.__name__ - super().__init__(iterable,event_name) - self.event_name = event_name - self.cbs = [] - self.create_cb_deco("on") - self.create_cb_deco("before_1st") - self.create_cb_deco("every_start") - self.create_cb_deco("every_end") - self.create_cb_deco("after_last") - self.core.update_forall(self) - self.core.assign_forall(self) - - def __repr__(self): - return f"event🌏{self.event_name}" - - def create_cb_deco(self,moment): - event_name = self.event_name - def wraper(cls,f):return getattr(self,moment)(f) - wraper.__name__ = f"{moment}_{event_name}" - wraper.__doc__ = f""" - Append new {moment} callback for event:{event_name} - Use this function as decorator - """ - setattr(self,wraper.__name__,MethodType(method4all(wraper),self)) - - def __call__(self): - if len(self.cbs)>0: - self.cbs[0].callon() - - def start_call(self): - if len(self.cbs)>0: - self.cbs[0].start_callon() - - def end_call(self): - if len(self.cbs)>0: - self.cbs[0].end_callon() - - def on(self,f): - class EventCB(Loop): - def __init__(self_,iterable=[]): - super().__init__(iterable=iterable, - name = f"ON_{self.event_name}_{self.cbs.__len__()+1}_{f.__name__}") - self_.f = f - - def __call__(self_): self_.f(self) - - new_cb = EventCB() - self.new_event_cb(new_cb) - return f - - def every_start(self,f): - class EventCbEveryStart(Loop): - def __init__(self_,iterable=[]): - super().__init__(iterable=iterable, - name = f"EVERY_START_{self.event_name}_{self.cbs.__len__()+1}_{f.__name__}") - self_.f = f - - def start_call(self_): self_.f(self) - - new_cb = EventCbEveryStart() - self.new_event_cb(new_cb) - return f - - def before_1st(self,f): - class EventCbBefore1st(Loop): - def __init__(self_,iterable=[]): - super().__init__(iterable=iterable, - name = f"BEFORE_1ST_{self.event_name}_{self.cbs.__len__()+1}_{f.__name__}") - self_.f = f - - def before_1st_call(self_): self_.f(self) - - new_cb = EventCbBefore1st() - self.new_event_cb(new_cb) - return f - - def every_end(self,f): - class EventCbEveryEnd(Loop): - def __init__(self_,iterable=[]): - super().__init__(iterable=iterable, - name = f"EVERY_END_{self.event_name}_{self.cbs.__len__()+1}_{f.__name__}") - self_.f = f - - def end_call(self_): self_.f(self) - - new_cb = EventCbEveryEnd() - self.new_event_cb(new_cb) - return f - - def after_last(self,f): - class EventCbAfter(Loop): - def __init__(self_,iterable=[]): - super().__init__(iterable=iterable, - name = f"AFTER_LAST_{self.event_name}_{self.cbs.__len__()+1}_{f.__name__}") - self_.f = f - - def after_last_call(self_): self_.f(self) - - new_cb = EventCbAfter() - self.new_event_cb(new_cb) - return f - - def new_event_cb(self,new_cb): - new_cb.core.update_forall(new_cb) - new_cb.core.assign_forall(new_cb) - new_cb.core = self.core - if len(self.cbs)>0: - self.cbs[-1].next_layer = new_cb -# self.cbs[-1].new_layer(new_cb) - self.cbs.append(new_cb) - -# Cell -from joblib import Parallel,delayed - -# Cell -def chunkify(*iterables,bs = 32): - if len(iterables)>1: - return list(tuple(l[i*bs:(i+1)*bs] for l in iterables) \ - for i in range(math.ceil(len(iterables[0])/bs))) - else: - return list(iterables[0][i*bs:(i+1)*bs] \ - for i in range(math.ceil(len(iterables[0])/bs))) \ No newline at end of file diff --git a/forgebox/loopstack.py b/forgebox/loopstack.py deleted file mode 100644 index 59df7a2..0000000 --- a/forgebox/loopstack.py +++ /dev/null @@ -1,263 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/15_loopstack.ipynb (unless otherwise specified). - -__all__ = ['create_event', 'events', 'LoopStack', 'MetricTab', 'train_callbacks', 'eval_callbacks', 'to_tensor', - 'simple_forward', 'single_device', 'TrainLoop', 'EvalLoop', 'find_stuff', 'share_stuff'] - -# Cell -from .loop import StorageCore,Loop,ProgressBar,Tolerate,Event,Stuff,chunkify -from types import MethodType -from datetime import datetime -import numpy as np -import pandas as pd -from time import sleep - -# Cell -def create_event(event_name): - class BatchEvent(Event):pass - BatchEvent.__name__ = event_name - return BatchEvent - -def events(*enames): - return list(map(create_event,enames)) - -# Cell -class LoopStack(Loop): - settings = [] - """ - A stack of loop - """ - @classmethod - def from_loops(cls,*loops): - def init(self,iterable=[],name = None): - name = name if name!=None else cls.__name__ - - self.loops = dict() - l = Loop(iterable) - for L in loops: l = L(iterable = l) - super().__init__(iterable = l, - name = name) - - for stuff in cls.settings: - self.make_stuff(stuff) - - setattr(cls,"init",init) - return cls - - @classmethod - def new_setting(cls,*settings): - cls.settings+=list(settings) - - def make_stuff(self,name): - new_stuff = Stuff(name) - setattr(self.core,name,new_stuff) - setattr(self,name,new_stuff) - - def __repr__(self,): - return f"LoopStack>:{self.name}\n\t"+\ - "\n\t".join(map(str,self.core.layers[:-1])) - -# Cell -class MetricTab: - """ - An object handling metric running - """ - def __init__(self): - self.df_by_epoch = [] - self.mean_by_epoch = [] - self.refresh_list() - - def __add__(self,row): - self.results.append(row) - return self - - def summary(self): - """The summary on metrics""" - return pd.DataFrame(self.mean_by_epoch) - - def update(self,**batch): - self.batch.append(batch) - return self - - def result_df(self): - return pd.DataFrame(self.results) - - def batch_df(self): - return pd.DataFrame(self.batch) - - def refresh_list(self): - self.batch = [] - self.results = [] - - def calc_mean(self,result_df,batch_df): - product_df = pd.DataFrame(dict((col,result_df[col]*batch_df["bs"]) for col in self.result_cols)) - batch_mean = dict() - for col in self.result_cols: - batch_mean[col] = product_df[col].sum()/batch_df["bs"].sum() - batch_mean["epoch"] = len(self.mean_by_epoch)+1 - batch_mean["span"] = batch_df.ts.max()-batch_df.ts.min() - return batch_mean - - def mark(self): - result_df = self.result_df() - batch_df = self.batch_df() - - self.result_cols = result_df.columns - for col in self.result_cols: - batch_df[col] = result_df[col] - - batch_mean = self.calc_mean(result_df,batch_df) - - self.df_by_epoch.append(batch_df) - self.mean_by_epoch.append(batch_mean) - - self.refresh_list() - - return batch_df, batch_mean - -# Cell -def train_callbacks(loop:Loop)->"A cluster of callback function": - """ - call backs allow optimizing model weights - """ - loop.core.metric_tab = MetricTab() - - @loop.every_start_FORWARD - def switch_model_to_train(loop:Loop): loop.model("train")() - - @loop.on_DATA_PROCESS - def opt_zero_grad(loop:Loop):loop.opt("zero_grad")() - - @loop.on_BACKWARD - def opt_move(loop:Loop): - loop.loss("backward")() - loop.opt("step")() - -def eval_callbacks(loop:Loop): - loop.core.metric_tab = MetricTab() - @loop.on_DATA_PROCESS - def switch_model_to_eval(loop:Loop): loop.model("eval")() - -def to_tensor(x): - return torch.Tensor(x) - -def simple_forward(metric_func:list = [])->"A cluster of callback function": - def simple_forward_cb(self): - @self.on_DATA_PROCESS - def set_xy(self): - self.var.clear() - self.var.x,self.var.y = self.element - self.var.apply(to_tensor,scope = ["x","y"])() - - @self.on_FORWARD - def forward_pass(self): - y_ = self.model()(self.var.x) - self.var.y_ = y_.popitem()[1][:,0] - - @self.on_LOSS_CALC - def calculate_loss(self): - losses = self.loss_func()(self.var.y_,self.var.y) - self.loss.update(losses) - - @self.on_METRICS - def calcualte_metrics(self): - # calculate metrics - with torch.no_grad(): - metrics = self.metric_func()(self.var.y_,self.var.y) - self.metric.update(metrics) - - @self.on_METRICS - def to_item(self): - # loop through metrics - self.metric.update(self.loss.cases) - dt = dict((k,v.item() if is_tensor(v) else v) \ - for k,v in self.metric.cases.items()) - self.metric_tab+=dt - self.pgbar_data(dt) - - @self.on_METRICS - def save_batch_row(self): - self.metric_tab.update( - bs = self.var.x.size(0), - epoch = self.epoch, - i = self.i, - ts = datetime.now() - ) - - @self.every_end_METRICS - def show_metric(self): - self.metric_tab.mark() - summary =self.metric_tab.summary() - try: - from IPython.display import clear_output - clear_output() - display(summary) - except: - print(summary) - - return simple_forward_cb - -def single_device(device): - def single_device_callback(self): - @self.on_DATA_PROCESS - def var_to_device(self): - self.var.apply("to")(device) - - @self.before_1st_FORWARD - def model_to_device(self): - self.model.apply("to")(device) - - return single_device - -# Cell -import torch -from torch import is_tensor - -class TrainLoop(LoopStack): - def __init__(self,data_iter,model=[],opt=[],loss_func=[],loss=[],hp=[],cuda=[], - callbacks = [train_callbacks,],tolerate=True): - loops = [ProgressBar,] - if tolerate: - loops.append(Tolerate) - loops+=list(events(*TRAIN_EVENTS)) - self.from_loops(*loops) - self.new_setting("model","var", - "opt","loss_func","loss", - "hp","cuda","metric_func","metric") - self.init(data_iter,) - for cb in callbacks: - print(f"assigning callback {cb}") - cb(self) - -# @classmethod -# def from_config(cls,train_data,val_data,model,opt,) - -class EvalLoop(LoopStack): - def __init__(self,data_iter,callbacks,tolerate=False): - loops = [ProgressBar,] - if tolerate: - loops.append(Tolerate) - loops+=list(events(*EVAL_EVENTS)) - self.from_loops(*loops) - self.new_setting("model","var", - "loss_func","loss", - "hp","cuda","metric_func","metric") - self.init(data_iter,) - - for cb in callbacks: - print(f"assigning callback {cb}") - cb(self) - - @self.FORWARD.downstream - def torch_eval_wrap(self,func): - with torch.no_grad(): - func() - -# Cell -def find_stuff(core:StorageCore): - klist = list(filter(lambda k:hasattr(getattr(core,k),"_is_stuff"), vars(core).keys())) - return dict((k,getattr(core,k)) for k in klist) - -def share_stuff(loop_from:Loop,loop_to:Loop): - stuff_dict = find_stuff(loop_from.core) - for k,v in stuff_dict.items(): - setattr(loop_to.core,k,v) \ No newline at end of file diff --git a/forgebox/minimum.py b/forgebox/minimum.py deleted file mode 100644 index d8f2e1a..0000000 --- a/forgebox/minimum.py +++ /dev/null @@ -1,161 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/21_minimum.ipynb (unless otherwise specified). - -__all__ = ['now', 'Link'] - -# Cell -from .config import Config -from datetime import datetime -from uuid import uuid4 -from inspect import getargspec -from copy import deepcopy - -# Cell -def now():return datetime.now().timestamp() - -class Link: - is_link_identifier = True - data = Config() - inputs = Config() - verbose = 0 - def __init__(self,func): - self.ensure_funcs() - func_name = func.__name__ - self.func_name = func_name - self.funcs_[func_name] = func - self.func = self.funcs_[func_name] - self.register_args() - - def __repr__(self,): - return f"[Link Function]:{self.func}" - - def ensure_funcs(self,): - if hasattr(self,"funcs_")==False: - self.__class__.funcs_ = Config() - - def ensure_uuid(self,uuid:str)->str: - """ - Make sure there's uuid, - if not create on - """ - if uuid == False: - uuid = str(uuid4()) - self.data[uuid] = Config() - self.inputs[uuid] = Config() - return uuid - else: - return uuid - - def check_callback(self,v,uuid): - - if hasattr(v,"is_link_identifier")==False: - # this is not a callback function - return v - - elif v.func_name in self.data[uuid]: - # found calculated result of the function - # read the cached result - if self.verbose>0: - print(f"[{self.func_name}] using cache:\t{v.func_name}") - return self.data[uuid].get(v.func_name) - - else: - # calculated result of function v not found, - # execuate the calculation - if self.verbose>0: - print(f"[{self.func_name}] execute callback:\t{v.func_name}") - result = v.unit_call(uuid)() - return result - - @staticmethod - def value_only(dict_:Config)->Config: - """ - filter out the value that requires callback - """ - return Config((k,v) for k,v in dict_.items() if hasattr(v,"is_link_identifier")==False) - - @staticmethod - def callback_only(dict_:Config)->Config: - """ - filter out the value that does not require callback - """ - return Config((k,v) for k,v in dict_.items() if hasattr(v,"is_link_identifier")==True) - - def get_cached(self,uuid:str)->Config: - """ - Get the cached data - """ - this_data = self.data[uuid] - return Config((k,this_data.get(k)) for k in self.all_argname \ - if k in this_data) - - def unit_call(self,uuid = False): - uuid = self.ensure_uuid(uuid) - - def called(*args,**kwargs): - # record inputs - kwargs0 = deepcopy(self.kwargs_default) - kwargs0.update(kwargs) - - # save inputs - self.inputs[uuid].update(Config({self.func_name:Config(args = args, - kwargs = kwargs0)})) - # save data - self.data[uuid].update(self.value_only(kwargs0)) - - # check the cache for all args - cached = self.get_cached(uuid) - kwargs0.update(cached) - - # check the callback trigger - args0 = list(self.check_callback(a,uuid) for a in args) - kwargs0 = dict((k,self.check_callback(v,uuid)) for k,v in kwargs0.items()) - - # redundant keywords - if (len(args0)>0) and len(self.arg_spec.args)>=len(args0): - manual_args = self.arg_spec.args[:len(args0)] - for k in manual_args: - if k in kwargs0: - del kwargs0[k] - if len(args0)>len(manual_args): - # TODO: continue development - for arg in args0[-len(manual_args):]: - pass - - # run function - if self.verbose > 1: - print(f"[{self.func_name}] final args {args0}") - print(f"[{self.func_name}] final kwargs {kwargs0}") - rt = self.func(*args0,**kwargs0) - - # save outputs - if hasattr(rt,'items'): - self.data[uuid].update(rt) - self.data[uuid].update({self.func_name:rt}) - - return rt - return called - - def __call__(self,*args,**kwargs,): - return self.unit_call()(*args,**kwargs) - - def register_args(self)->None: - """ - Register all the arguements - """ - arg_spec = getfullargspec(self.func) - self.arg_spec = arg_spec - - # gather all the default **keyword** arguments - kwargs_default = dict() - if arg_spec.defaults != None: - kwargs_default.update(dict(zip(arg_spec.args[::-1],arg_spec.defaults[::-1]))) - if arg_spec.kwonlydefaults != None: - kwargs_default.update(dict(zip(arg_spec.kwonlyargs[::-1],arg_spec.kwonlydefaults[::-1]))) - self.kwargs_default = kwargs_default - - # gather all the arg,kwarg name - self.all_argname = [] - if len(arg_spec.args)>0: - self.all_argname+=arg_spec.args - if len(arg_spec.kwonlyargs)>0: - self.all_argname+=arg_spec.kwonlyargs \ No newline at end of file diff --git a/forgebox/multiproc.py b/forgebox/multiproc.py deleted file mode 100644 index 3fed27e..0000000 --- a/forgebox/multiproc.py +++ /dev/null @@ -1,174 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/09_multiprocess.ipynb (unless otherwise specified). - -__all__ = ['VipaClass', 'SingleFileLiner', 'DataFrameRowling'] - -# Cell -from pathlib import Path -import logging -from typing import List, Dict, Callable, Any, Tuple -import random -from multiprocessing import Process - -# Cell -class VipaClass: - """ - From meditation word Vipassana - Where creating a magic function - you can run a cell without holding the entire notebook - ```ipython - %%vipas - ...do things - ``` - """ - def __init__(self): - self.procs = [] - - def vipas(self, line, cell): - """ - run a cell magic function, that will not hold the process - """ - ishell = get_ipython() - proc = Process(target=ishell.run_cell, args = (cell,), daemon=True) - proc.start() - self.procs.append(proc) - -try: - ishell = get_ipython() - from IPython.core import magic - vipa_class = VipaClass() - magic.register_cell_magic(vipa_class.vipas) - vipas = vipa_class.vipas -except: - pass - -# Cell -class SingleFileLiner: - """ - Text data reading line by line for multiprocessing - """ - - def __init__(self, file_path: Path, total: int = None): - """ - filepath: Path, - path to a textual file - total: int - if you set total to an integer, we'll have a fixed length interation object - if you set total to None, we'll read the file till it's over - """ - self.file_path = Path(file_path) - global SingleFileLiner_fp - SingleFileLiner_fp = open(file_path, "r") - global text_line_num - text_line_num = 0 - self.total = total - - def __repr__(self) -> str: - return f"SingleFileLiner:\t{self.file_path}" - - def __next__(self) -> str: - global SingleFileLiner_fp - line = SingleFileLiner_fp.readline() - global text_line_num - text_line_num += 1 - if line == "": - if self.total is None: - raise StopIteration(f"SingleFileLiner file read finish") - logging.warning(f"looping on {self.file_path}") - - self.restart() - return line.strip() - - def __len__(self): - if self.total is not None: - return self.total - else: - raise RuntimeError(f"You have to set total for len(self)") - - def __iter__(self) -> str: - if self.total is None: - while True: - try: - yield next(self) - except StopIteration: - # end the file reading - break - else: - for i in range(self.total): - yield next(self) - - def restart(self) -> None: - """resetart file reader""" - global SingleFileLiner_fp - SingleFileLiner_fp.close() - SingleFileLiner_fp = open(self.file_path, "r") - - def split_train_test( - self, - val_ratio: float = 0.1, - remove_original: bool = False, - logging_interval: int = 1000000) -> Tuple[Path]: - """ - Split the text file into train and test - :param val_ratio: - :return: - """ - suffix = self.file_path.suffix - - train_file_path = self.file_path.parent / \ - f"{self.file_path.stem}_train{suffix}" - valid_file_path = self.file_path.parent / \ - f"{self.file_path.stem}_valid{suffix}" - - # delete the file if exists - if remove_original: - train_file_path.unlink() - valid_file_path.unlink() - - # read and write by line - with open(self.file_path, "r") as f, open( - train_file_path, "w") as f_train, open( - valid_file_path, "w") as f_valid: - for i, line in enumerate(f): - if i % 1000000 == 0: - logging.info(f"{i}\tlines processed") - if random.random() < val_ratio: - f_valid.write(line) - else: - f_train.write(line) - return train_file_path, valid_file_path - -# Cell -class DataFrameRowling: - """ - Read dataframe row by row - """ - def __init__(self, df): - self.df = df - self.restart() - - def restart(self): - global DataFrameRowling_df - DataFrameRowling_df = self.df - global DataFrameRowling_ct - DataFrameRowling_ct = 0 - - def __repr__(self) -> str: - return f"DataFrameRowling:\t{len(self)} Rows" - - def __len__(self): - return len(self.df) - - def __iter__(self): - for i in range(len(self)): - yield next(self) - - def __getitem__(self, idx): - global DataFrameRowling_df - return DataFrameRowling_df[list(DataFrameRowling_df.index)[idx]] - - def __next__(self): - global DataFrameRowling_df - global DataFrameRowling_ct - row = DataFrameRowling_df.loc[list(DataFrameRowling_df.index)[DataFrameRowling_ct]] - DataFrameRowling_ct+=1 - return row \ No newline at end of file diff --git a/forgebox/multitask_ce.py b/forgebox/multitask_ce.py deleted file mode 100644 index 3452d5c..0000000 --- a/forgebox/multitask_ce.py +++ /dev/null @@ -1,37 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/cross_entropy_weighter.ipynb (unless otherwise specified). - -__all__ = ['MultiTaskCELoss'] - -# Cell -import torch -from torch import nn -import pandas as pd -import numpy as np -from typing import Callable - -# Cell -class MultiTaskCELoss(nn.Module): - """ - A cross entropy loss function which will cancel out - the effect of different class numbers - """ - def __init__(self,): - super().__init__() - self.celoss = nn.CrossEntropyLoss() - - def forward( - self, - y_pred: torch.FloatTensor, - y_true: torch.LongTensor, - )-> torch.FloatTensor: - """ - Input: - - y_pred: torch.FloatTensor, Prediction tensor - - y_true: torch.LongTensor, Label indices - Return: - - loss: torch.FloatTensor, scala adjusted - """ - nb_classes = y_pred.size(-1) - lambda_ = 1/np.log10(nb_classes) - loss = self.celoss(y_pred,y_true) - return loss*lambda_ \ No newline at end of file diff --git a/forgebox/pdenhanced.py b/forgebox/pd_plus.py similarity index 65% rename from forgebox/pdenhanced.py rename to forgebox/pd_plus.py index a683e96..421545e 100644 --- a/forgebox/pdenhanced.py +++ b/forgebox/pd_plus.py @@ -1,12 +1,10 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/01_pandas_extra.ipynb (unless otherwise specified). - __all__ = ['list_vc', 'col_list_vc', 'default_rename_rule', 'rename_by_rule', 'column_order'] -# Cell import pandas as pd from typing import Callable +import numpy as np + -# Cell def list_vc( df, colname: str, value: str ) -> pd.DataFrame: @@ -31,7 +29,27 @@ def col_list_vc( pd.Series.list_vc = col_list_vc pd.DataFrame.list_vc = list_vc -# Cell +def split(df, valid=0.2, ensure_factor=2): + """ + df: dataframe + valid: valid ratio, default 0.1 + ensure_factor, ensuring the row number to be the multiplication of this factor, default 2 + return train_df, valid_df + """ + split_ = (np.random.rand(len(df)) > valid) + train_df = df[split_].sample(frac=1.).reset_index().drop("index", axis=1) + valid_df = df[~split_].sample(frac=1.).reset_index().drop("index", axis=1) + + if ensure_factor: + train_mod = len(train_df) % ensure_factor + valid_mod = len(valid_df) % ensure_factor + if train_mod: train_df = train_df[:-train_mod] + if valid_mod: valid_df = valid_df[:-valid_mod] + return train_df, valid_df + +pd.DataFrame.split = split + + def default_rename_rule(x: str) -> str: return x.replace(" ", "_").replace("-", "_").lower() @@ -49,7 +67,7 @@ def rename_by_rule( pd.DataFrame.rename_by_rule = rename_by_rule -# Cell + def column_order(df, *col_names) -> pd.DataFrame: """ df = df.column_order("col1", "col2", "col3") @@ -66,4 +84,5 @@ def column_order(df, *col_names) -> pd.DataFrame: cols.insert(0, cols.pop(cols.index(col_name))) return df[cols] -pd.DataFrame.column_order = column_order \ No newline at end of file +pd.DataFrame.column_order = column_order + diff --git a/forgebox/pipe.py b/forgebox/pipe.py deleted file mode 100644 index 393ad90..0000000 --- a/forgebox/pipe.py +++ /dev/null @@ -1,251 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/dataframe_pipeline.ipynb (unless otherwise specified). - -__all__ = ['Node', 'chunkNode', 'frameEdge', 'colEdge', 'donothing', 'nothing', 'fillNaEdge', 'engTokEdge', 'CNTok', - 'capMinMaxEdge', 'trackVocabEdge', 'saveCSV', 'saveSQL', 'eng_twt_tk'] - -# Cell -import numpy as np -import pandas as pd -from itertools import chain -from collections import Counter - -# Cell -class Node(object): - def __init__(self, df, verbose=1): - super(Node,self).__init__() - self.df = df - self.verbose = verbose - self.pipenames = list() - self.pipe = list() - - def __repr__(self): - return "\n\t|"+"\n\t|".join(self.pipenames) - - def __or__(self, edge): - """ - use it as: - node|edge|edge - :param process_step: - :return: - """ - self.pipe.append(edge) - self.pipenames.append(edge.edge_name) - return self - - def run(self): - for pro_i in range(len(self.pipe)): - if self.verbose > 0: print("[df edge]:%s" % self.pipenames[pro_i]) - pro = self.pipe[pro_i] - self.df = pro.pro(self.df) - return self.df - -class chunkNode(Node): - def __init__(self, df_chunk, verbose=1): - """ - Use this class instead of Node class, for huge data sourse like big csv or huge SQL table - chunkNode(pd.read_csv("xxx.csv",chunksize = 1000), verbose =1) - :param df_chunk: pandas dataframe with chunksize parameter - :param verbose: - """ - super(chunkNode, self).__init__(df = df_chunk, verbose = verbose) - self.df_chunk = self.df - - def run(self): - """ - Running iterations on the entire dataset - :return: None - """ - for df in self.df: - for pro_i in range(len(self.pipe)): - if self.verbose > 0: print("[df edge]:%s" % self.pipenames[pro_i]) - pro = self.pipe[pro_i] - df = pro.pro(df) - - def testrun(self): - """ - testing for 1 iteration - :return: the result dataframe - """ - testdf = next(self.df) - print("Please restart the generator after running test",flush=True) - for pro_i in range(len(self.pipe)): - if self.verbose > 0: print("[df edge]:%s" % self.pipenames[pro_i]) - pro = self.pipe[pro_i] - testdf = pro.pro(testdf) - - return testdf - -# Cell -class frameEdge(object): - def __init__(self, edge_name=None): - super(frameEdge, self).__init__() - if edge_name == None: - edge_name = "DataFrame_Processing_Edge" - self.edge_name = edge_name - self.i = None - - def __mul__(self, cols): - assert 0, "Only colEdge support * columns operation" - - def define(self, f): - def wraper(df): - return f(df) - - self.pro = wraper - return wraper - - -class colEdge(object): - def __init__(self, edge_name=None): - super().__init__() - if edge_name == None: - edge_name = "DataSeries_Processing_Edge" - self.edge_name = edge_name - self.cols = [] - - def __mul__(self, cols): - self.cols = cols - return self - - def __mod__(self,col): - self.cols = [col] - return self - - def define(self, f): - def wraper(col): - col = f(col) - return col - - self.colpro = wraper - return wraper - - def pro(self, df): - for c in self.cols: - df[c] = self.colpro(df[c]) - return df - -nothing = frameEdge("empety_process") - -@nothing.define -def donothing(df): - return df - -# Cell -class fillNaEdge(colEdge): - def __init__(self, fill=0.): - super().__init__("fillna_%s"%(fill)) - self.fill = fill - - def colpro(self, col): - return col.fillna(self.fill) - - -class engTokEdge(colEdge): - def __init__(self, tokenizer=None, max_len=None): - """ - Default using tweet tokenizer - """ - super().__init__("En Tokenization") - if tokenizer ==None: - from nltk.tokenize import TweetTokenizer - self.tokenizer = TweetTokenizer() - else: - self.tokenizer = tokenizer - self.max_len = max_len - - def colpro(self, c): - return c.apply(lambda x: self.tokenizer.tokenize(x)[:self.max_len]) - -eng_twt_tk = engTokEdge() - -class CNTok(colEdge): - def __init__(self): - """ - cntok = CNTok() - datanode = start_node|cntok*["col1","col2"] - datanode.run() - """ - super().__init__("chinese_tokenize") - from jieba import cut - self.cut = cut - - def colpro(self, col): - col = col.apply(lambda x:list(self.cut(str(x)))) - return col - -class capMinMaxEdge(colEdge): - def __init__(self, min_ = None, max_ = None): - super().__init__("cap min:%s max:%s"%(min_,max_)) - self.min_ = min_ - self.max_ = max_ - - def colpro(self,col): - col = np.clip(col.values,a_min = self.min_, a_max = self.max_) - return col - -class trackVocabEdge(colEdge): - """ - a colEdge - input column should contain python list - This edge will keep track a vocabulary pandas DataFrame - tck_vcb = TrackVocab() - tck_vcb.vocab is the accumulated vocabulary - """ - def __init__(self): - super().__init__("track vocab") - self.vocab = pd.DataFrame({"token": [], "cnt": []}) - - def colpro(self, col): - lists = list(col) - biglist = list(chain.from_iterable(lists)) - self.vocab = self.combine_vocab(self.build_vocab(biglist)) - return col - - def get_token_count_dict(self, full_tok): - """count the token to a list""" - return Counter(full_tok) - - def build_vocab(self, full_tok): - ct_dict = self.get_token_count_dict(full_tok) - tk, ct = list(ct_dict.keys()), list(ct_dict.values()) - - return pd.DataFrame({"token": tk, "cnt": ct}) - - def combine_vocab(self, new_vocab): - combinedf = pd.concat([self.vocab, new_vocab]).groupby("token").sum().reset_index() - return combinedf.sort_values(by="cnt", ascending=False).reset_index().rename(columns = {"index":"idx"}) - - def save_vocab(self, json_url): - self.vocab.to_json(json_url) - - -class saveCSV(frameEdge): - """ - DataFrame Edge - SaveCsv("/path/to/file.csv") - """ - def __init__(self, csvpath, tocsv_conf={"sep": "\t", "index":False}): - super().__init__("save to csv") - self.csvpath = csvpath - self.tocsv_conf = tocsv_conf - self.header = True - - def pro(self, df): - df.to_csv(self.csvpath,header=self.header, mode="a", **self.tocsv_conf) - self.header = False - return df - -class saveSQL(frameEdge): - """ - DataFrame Edge - SaveSQL("table_name", con) - """ - def __init__(self, table_name, con, tosql_conf={"index": False, "if_exists":"append"}): - super().__init__("save to sql_table") - self.table_name = table_name - self.con = con - self.tosql_conf = tosql_conf - - def pro(self, df): - df.to_sql(self.table_name, con=self.con, **self.tosql_conf) - return df \ No newline at end of file diff --git a/forgebox/spacy.py b/forgebox/spacy.py deleted file mode 100644 index 417804a..0000000 --- a/forgebox/spacy.py +++ /dev/null @@ -1,156 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/06_spacy.ipynb (unless otherwise specified). - -__all__ = ['l2norm', 'normal', 'distance', 'make_map', 'make_span', 'make_div', 'doc2div', 'compare_sentences', - 'highlight'] - -# Cell -from .html import DOM,JS -import numpy as np -import json - -# Cell -def l2norm(x):return np.sqrt(np.power(x,2).sum(-1)) -def normal(x):return (x/l2norm(x)[:,None]) -def distance(a,b):return 1- normal(a)@(normal(b).T) - -# Cell - -highlight = """ -$(document).ready(function(){ - const red=(dom)=>{ - $(dom) - .css("background-color","#FFCCEE") - .css("box-shadow","0px 0px 10px #FFCCEE") - } - const white=(dom)=>{ - $(dom).css("background-color","#FFFFFF") - .css("box-shadow","0px 0px 0px #FFFFFF") - } - $(".nlp_tok") - .css("margin","1px 2px") - .css("padding","1px 1px") - .css("border-radius","5px"); - var edge = JSON.parse(window.edge_data) - var edge2 = JSON.parse(window.edge_data2) - var all_b = [] - for(var a in edge) - { - $(`#map_word_src_${a}`).data("match",edge[a].idx) - $(`#map_word_src_${a}`).css("font-weight",900) - $(`#map_word_src_${a}`) - .hover(function(){ - red(this) - var b_match = $(this).data("match") - for(var i in b_match){ - var b = b_match[i] - red(document.querySelector(`#map_word_tgt_${b}`)) - } - }) - $(`#map_word_src_${a}`) - .mouseleave(function(){ - white(this) - var b_match = $(this).data("match") - for(var i in b_match){ - var b = b_match[i] - white(document.querySelector(`#map_word_tgt_${b}`)) - } - }) - } - for(var a in edge2) - { - $(`#map_word_tgt_${a}`).data("match",edge2[a].idx) - $(`#map_word_tgt_${a}`).css("font-weight",900) - $(`#map_word_tgt_${a}`) - .hover(function(){ - red(this) - var b_match = $(this).data("match") - for(var i in b_match){ - var b = b_match[i] - red(document.querySelector(`#map_word_src_${b}`)) - } - }) - $(`#map_word_tgt_${a}`) - .mouseleave(function(){ - white(this) - var b_match = $(this).data("match") - for(var i in b_match){ - var b = b_match[i] - white(document.querySelector(`#map_word_src_${b}`)) - } - }) - } - -}) -""" -def make_map(distance_map,th = .1): - """ - create a hot spot map between similar token - return dict, token index with matching token index in the target sentence - """ - a2b_dict = dict() - tgt_range = np.arange(distance_map.shape[-1]) - for i in range(len(distance_map)): - slice_ = (distance_map[i,:]0: - a2b_dict[str(i)]= dict(dist = list(distance_map[i,:][slice_].astype(float)), - idx = list(tgt_range[slice_].astype(str))) - return a2b_dict - -def make_span(tok,tok_id,classes): - """ - create span for token - tok,spacy token - tok_id, span's html id - - return forgebox.html.DOM - """ - return DOM(tok.text,"span",{"class":" ".join(classes),"id":tok_id}) - -def make_div(doc,id_list,classes_list): - """ - create div tag for a sentence - doc:spacy doc - id_list, a list of html id - classes_list, a list of classes assigning to the token span - - return forgebox.html.DOM - """ - div = DOM("","div",{"class":"text-block"}) - for tok,tok_id,classes in zip(doc,id_list,classes_list): - div.append(make_span(tok,tok_id,classes)) - return div - -def doc2div(doc,distance_map,th=.1,is_src= True): - totallen = len(doc) - src_tgt = "src" if is_src else "tgt" - id_list = list(f"map_word_{src_tgt}_{i}" for i in range(len(doc))) - if is_src: - edge_map = make_map(distance_map,th=th) - DOM(f"window.edge_data = '{json.dumps(edge_map)}'","script")() - else: - edge_map2 = make_map(distance_map.T,th=th) - DOM(f"window.edge_data2 = '{json.dumps(edge_map2)}'","script")() - - return make_div(doc,id_list,zip([src_tgt,]*totallen,["nlp_tok"]*totallen)) - - - -def compare_sentences(A,B,nlp,th=.1): - """ - Compare between sentences - A: str, a sentence - B: str, another sentence - nlp: loaded spacy: eg. from spacy import load;nlp = load("some_model_name"), - see spacy documentation https://spacy.io/usage/spacy-101/ - - th:float, threshold for consine distance, smaller it is, fewer matching tokens will be found, - but assume that means higher quality - """ - doc_a = nlp(A) - doc_b = nlp(B) - distance_map = distance(doc_a.tensor,doc_b.tensor) - DOM("Sentence A","h3",{"class":"text-primary"})() - doc2div(doc_a,distance_map,th=th,is_src=True)() - DOM("Sentence B","h3",{"class":"text-primary"})() - doc2div(doc_b,distance_map,th=th,is_src=False)() - JS(highlight) \ No newline at end of file diff --git a/forgebox/static_file.py b/forgebox/static_file.py deleted file mode 100644 index 8bd7a89..0000000 --- a/forgebox/static_file.py +++ /dev/null @@ -1,17 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/12_static_file.ipynb (unless otherwise specified). - -__all__ = ['get_static', 'open_static'] - -# Cell -from pathlib import Path -def get_static()->Path: - """ - return the absolute path of forgebox.static - """ - import forgebox - return Path(forgebox.__path__[0])/"static" - -def open_static(relative_path:str)->str: - file = get_static()/relative_path - with open(file,"r") as f: - return f.read() \ No newline at end of file diff --git a/forgebox/tensor.py b/forgebox/tensor.py deleted file mode 100644 index 74942cd..0000000 --- a/forgebox/tensor.py +++ /dev/null @@ -1,45 +0,0 @@ -__all__ = ['modules_to_opt_conf','measure_freeze','numpify'] - -from copy import deepcopy -from torch import nn - -def modules_to_opt_conf(*modules,**opt_kwargs)->"a list of PyTorch optimizer config": - """ - put in a sequence of pytorch modules, - return optimizer param groups of configs - """ - param_list = [] - param_list_nd = [] - no_decay = ["bias", "LayerNorm.weight"] - - for m in modules: - for n,p in m.named_parameters(): - if any(nd in n for nd in no_decay): - param_list_nd.append(p) - else: - param_list.append(p) - - opt_kwargs_nd = deepcopy(opt_kwargs) - opt_kwargs_nd["weight_decay"]=0. - - return [dict(params=param_list,**opt_kwargs), # param_group with weight decay - dict(params=param_list_nd,**opt_kwargs_nd), # param_group without weight decay - ] - -def measure_freeze(m:nn.Module)->"a describtion about how many submodules are unfreezed": - """ - measure the how many sub-module we freezed or unfreezed - """ - total = 0 - trainable = 0 - for param in m.parameters(): - total+=1 - if param.requires_grad: trainable+=1 - return f"{trainable} trainables/{total} total" - -def numpify(*tensors): - tensors = list(tensors) - """Transform bunch of pytorch tensors to numpy array, even if in cuda""" - for i in range(len(tensors)): - tensors[i] = tensors[i].clone().cpu().numpy() - return tensors \ No newline at end of file diff --git a/forgebox/test_nbdev.py b/forgebox/test_nbdev.py deleted file mode 100644 index 44b6c91..0000000 --- a/forgebox/test_nbdev.py +++ /dev/null @@ -1,8 +0,0 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/test_nbdev.ipynb (unless otherwise specified). - -__all__ = ['test_nbdev_func'] - -# Cell - -def test_nbdev_func(): - return 42 \ No newline at end of file diff --git a/forgebox/thunder/callbacks.py b/forgebox/thunder/callbacks.py index 07b8cbc..d942dfe 100644 --- a/forgebox/thunder/callbacks.py +++ b/forgebox/thunder/callbacks.py @@ -1,17 +1,15 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/61_thunder_callbacks.ipynb (unless otherwise specified). - -__all__ = ['unfreeze', 'freeze', 'DataFrameMetricsCallback', 'UnfreezeScheduler'] - -# Cell import pandas as pd from ipywidgets import Output -from typing import List, Dict +from typing import List import copy -import pytorch_lightning as pl -import torch +try: + import pytorch_lightning as pl +except ImportError as e: + raise ImportError("Please install pytorch-lightning first") +from forgebox.html import display from torch import nn -# Cell + def unfreeze(self): """unfreeze this module, and its sub modules""" for p in self.parameters(): @@ -23,9 +21,11 @@ def freeze(self): for p in self.parameters(): p.requires_grad = False + nn.Module.unfreeze = unfreeze nn.Module.freeze = freeze + class DataFrameMetricsCallback(pl.Callback): """ A metrics callback keep showing pandas dataframe @@ -55,24 +55,3 @@ def on_validation_epoch_end( pl_module.output.clear_output() with pl_module.output: display(pd.DataFrame(self.metrics).tail(10)) - - -def UnfreezeScheduler(frozen_epochs: int = 2): - assert hasattr(pl_module, "top_layers"), "Please define 'top_layers' attributes"+\ - " for pl_module, which will return a list of nn.Module object(s)" - class UnfreezeSchedulerCallback(pl.callbacks.Callback): - """ - Train the top layer for [frozen_epochs] epochs - then un freeze all - """ - - def on_epoch_start(self, trainer, pl_module): - epoch = trainer.current_epoch - - if epoch == 0: - pl_module.freeze() - for tl in pl_module.top_layers: - tl.unfreeze() - if epoch == frozen_epochs: - pl_module.unfreeze() - pl_module.base.embeddings.freeze() \ No newline at end of file diff --git a/forgebox/train.py b/forgebox/train.py deleted file mode 100644 index 7ee6477..0000000 --- a/forgebox/train.py +++ /dev/null @@ -1,259 +0,0 @@ -import os -from datetime import datetime -from tqdm import trange -from functools import reduce -import pandas as pd -from collections import namedtuple -from types import MethodType -from forgebox.utils import JUPYTER - -if JUPYTER: from tqdm import tqdm_notebook as tn - -TrainerBatch = namedtuple("TrainerBatch", ("epoch", "i", "data", "trainer")) - -class Trainer: - def __init__(self, train_data, train_len, val_data=None, val_len=None, batch_size=16, fg=None, - print_on=20, fields=None, is_log=True,batch_start_zg = True, - conn=None, modelName="model", tryName="try", callbacks=[], val_callbacks=[],jupyter = JUPYTER): - """ - A training iteration wraper - fields: the fields you choose to print out - is_log: writing a log? - - Training: - - write action function for a step of training, - assuming a generator will spit out tuple x,y,z in each: - then pass the function to object - - t=Trainer(...) - t.train(epochs = 30) - - @t.step_train - def action(batch): - x,y,z = batch.data - x,y,z = x.cuda(),y.cuda(),z.cuda() - - #optimizer is a global variable, or many different optimizers if you like - sgd.zero_grad() - adam.zero_grad() - - # model is a global variable, or many models if you like - y_ = model(x) - y2_ = model_2(z) - - ...... more param updating details here - - return {"loss":loss.item(),"acc":accuracy.item()} - - same work for validation:trainer.val_action = val_action - - conn: a sql table connection, (sqlalchemy). if assigned value, save the record in the designated sql database; - """ - self.batch_size = batch_size - self.conn = conn - self.fg = fg - self.modelName = modelName - self.tryName = tryName - self.train_data = train_data - self.train_len = train_len - self.val_data = val_data - self.val_len = val_len - self.print_on = print_on - self.jupyter = jupyter - - self.callbacks = callbacks - self.val_callbacks = val_callbacks - self.batch_start_zg = batch_start_zg - - self.before_train_batch_list = [] - self.before_val_batch_list = [] - - if self.val_data: - self.val_track = dict() - - self.track = dict() - self.fields = fields - self.is_log = is_log - - def one_batch(self): - if hasattr(self, "testgen") == False: - self.testgen = iter(self.train_data) - try: - return next(self.testgen) - except StopAsyncIteration: - self.testgen = iter(self.train_data) - return next(self.testgen) - - def progress(self, l): - return tn(range(l)) if self.jupyter else trange(l) - - def get_time(self): - return datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f") - - def train(self, epochs, name=None, log_addr=None): - """ - Train the model for some epochs - """ - if self.fg: - self.fg.new_train() - - for epoch in range(epochs): - self.track[epoch] = list() - self.run(epoch) - self.log(name = name,log_addr=log_addr) - - - def log(self, name, log_addr): - if self.is_log: - if name == None: - name = "torch_train_" + datetime.now().strftime("%y%m%d_%H%M%S") - if log_addr == None: - log_addr = ".log_%s" % (name) - - if log_addr[-1] != "/": log_addr += "/" - os.system("mkdir -p %s" % (log_addr)) - trn_track = pd.DataFrame(reduce((lambda x, y: x + y), list(self.track.values()))) - trn_track.to_csv(log_addr + "trn_" + datetime.now().strftime("%y_%m_%d__%H_%M_%S") + ".csv", - index=False) - - if self.val_len: - val_track = pd.DataFrame(reduce((lambda x, y: x + y), list(self.val_track.values()))) - val_track.to_csv(log_addr + "val_" + datetime.now().strftime("%y_%m_%d__%H_%M_%S") + ".csv", - index=False) - - def train_iteration(self, i, t): - self.i = i - self.data = next(self.train_gen) - - for f in self.before_train_batch_list: f() - - if self.batch_start_zg: self.opt.zero_all() - - if hasattr(self,"data_to_device"): self.data_to_device() - - ret = self.action() - ret.update({"epoch": self.epoch, - "iter": i, - "ts": self.get_time()}) - self.track[self.epoch].append(ret) - - if i % self.print_on == self.print_on - 1: - self.update_descrition(self.epoch, i, t) - - def val_action_wrap(self): - return self.val_action() - - def val_iteration(self, i ,val_t): - self.i = i - self.data = next(self.val_gen) - for f in self.before_val_batch_list: f() - - if hasattr(self, "val_data_to_device"): self.val_data_to_device() - - ret = self.val_action_wrap() - ret.update({"epoch": self.epoch, - "iter": i, - "ts": self.get_time()}) - self.val_track[self.epoch].append(ret) - self.update_descrition_val(self.epoch, i, val_t) - - def run(self, epoch): - """ - run for a single epoch - :param epoch: the epoch index - :return: - """ - t = self.progress(self.train_len) - - self.train_gen = iter(self.train_data) - self.epoch = epoch - - for i in t: - self.train_iteration(i,t) - - for cb_func in self.callbacks: - cb_func(record=self.track[epoch]) - - if self.val_len: - self.epoch = epoch - self.val_track[epoch] = list() - self.val_gen = iter(self.val_data) - - val_t = self.progress(self.val_len) - for i in val_t: - self.val_iteration(i, val_t) - - for v_cb_func in self.val_callbacks: - v_cb_func(record=self.val_track[epoch] ) - - def update_descrition(self, epoch, i, t): - window_df = pd.DataFrame(self.track[epoch][max(i - self.print_on, 0):i]) - - if self.conn: # if saving to a SQL database - window_df["split_"] = "train" - window_df["tryName"] = self.tryName + "_train" - window_df.to_sql("track_%s" % (self.modelName), con=self.conn, if_exists="append", index=False) - window_dict = dict(window_df.mean()) - del window_dict["epoch"] - del window_dict["iter"] - - desc = "⭐[ep_%s_i_%s]" % (epoch, i) - if self.jupyter: - t.set_postfix(window_dict) - else: - if self.fields != None: - desc += "✨".join(list("\t%s\t%.3f" % (k, v) for k, v in window_dict.items() if k in self.fields)) - else: - desc += "✨".join(list("\t%s\t%.3f" % (k, v) for k, v in window_dict.items())) - t.set_description(desc) - - def update_descrition_val(self, epoch, i, t): - if self.conn: # if saving to a SQL database - window_df = pd.DataFrame(self.val_track[epoch][max(i - self.print_on, 0):i]) - window_df["split_"] = "valid" - window_df["tryName"] = self.tryName + "_valid" - window_df.to_sql("track_%s" % (self.modelName), con=self.conn, if_exists="append", index=False) - window_dict = dict(pd.DataFrame(self.val_track[epoch]).mean()) - # print(pd.DataFrame(self.val_track[epoch])) - del window_dict["epoch"] - del window_dict["iter"] - - desc = "😎[val_ep_%s_i_%s]" % (epoch, i) - if JUPYTER: - t.set_postfix(window_dict) - else: - if self.fields != None: - desc += "😂".join(list("\t%s\t%.3f" % (k, v) for k, v in window_dict.items() if k in self.fields)) - else: - desc += "😂".join(list("\t%s\t%.3f" % (k, v) for k, v in window_dict.items())) - t.set_description(desc) - - def todataframe(self, dict_): - """return a dataframe on the train log dictionary""" - tracks = [] - for i in range(len(dict_)): - tracks += dict_[i] - - return pd.DataFrame(tracks) - - def step_train(self,f): - setattr(self, "action", MethodType(f, self)) - return f - - def step_val(self,f): - setattr(self, "val_action", MethodType(f, self)) - return f - - def step_extra(self, func_name): - """ - @t.step_extra("forward_pass") - def fp(self): - self.x = self.data.x.float() - self.y = self.datay.long() - self.y_ = model(self.x) - """ - def assign(f): - setattr(self,func_name, MethodType(f, self)) - return assign - diff --git a/forgebox/usuals.py b/forgebox/usuals.py deleted file mode 100644 index 7423073..0000000 --- a/forgebox/usuals.py +++ /dev/null @@ -1,10 +0,0 @@ -import pandas as pd -import numpy as np -import torch -from torch import nn -import os -import sys -import json -from PIL import Image -from pathlib import Path -import math diff --git a/forgebox/utils.py b/forgebox/utils.py deleted file mode 100644 index 39e7c6a..0000000 --- a/forgebox/utils.py +++ /dev/null @@ -1,16 +0,0 @@ -import os -def create_dir(path): - if not os.path.exists(path): - os.makedirs(path) - -def tell_jupyter(): - import __main__ as main - - try: - JUPYTER = True if main.get_ipython else False - except: - JUPYTER = False - - return JUPYTER - -JUPYTER = tell_jupyter() \ No newline at end of file diff --git a/forgebox/widgets.py b/forgebox/widgets.py index 7e6d5fd..ce27487 100644 --- a/forgebox/widgets.py +++ b/forgebox/widgets.py @@ -5,22 +5,22 @@ # Cell import pandas as pd -import numpy as np from .df import PandasDisplay -from .html import list_group, list_group_kv +from .html import list_group, list_group_kv, display from typing import Callable, List, Tuple, Set, Dict, Any from ipywidgets import ( IntSlider, FloatSlider, Text, Textarea, Layout, Output, HBox, VBox, Button, - Select, SelectMultiple, - Dropdown, Checkbox, - IntProgress, HTML, interact, interact_manual + Dropdown, + IntProgress, + HTML ) +import json + +def display_df(df): display(df) -# Cell -def display_df(df):display(df) -def search_box(df,columns,manual = False,max_rows = 10,callback = display_df): +def search_box(df, columns, manual=False, max_rows=10, callback=display_df): """ create a search box based on dataframe df: pandas dataframe @@ -31,42 +31,44 @@ def search_box(df,columns,manual = False,max_rows = 10,callback = display_df): callback: python callable, discribe the action you want to put on search result (a filtered dataframe), default is to display the dataframe """ - from ipywidgets import interact,interact_manual + from ipywidgets import interact, interact_manual from IPython.display import HTML intera = interact_manual if manual else interact @intera - def search(KeyWord = "",): + def search(KeyWord="",): for col in columns: result = df[col].fillna("NaN Value").str.contains(KeyWord) - if sum(result)>0: - with PandasDisplay(max_colwidth=0,max_rows=max_rows): - display(HTML(f"

    \"{KeyWord}\" matched on column:[{col}]

    ")) + if sum(result) > 0: + with PandasDisplay(max_colwidth=0, max_rows=max_rows): + display( + HTML(f"

    \"{KeyWord}\" matched on column:[{col}]

    ")) callback(df[result].head(max_rows)) return print(f"Nothing found on any column on keyword:{KeyWord}") return -# Cell -def paginate(df,page_len = 20): + +def paginate(df, page_len=20): """ Paginate dataframe in jupyter notebook interactively Like you can flip through the page """ - from ipywidgets import interact,interact_manual - from IPython.display import display,HTML + from ipywidgets import interact, interact_manual + from IPython.display import display, HTML pages = len(df)//page_len + @interact - def preview(page = (0,pages)): + def preview(page=(0, pages)): display(HTML(f"

    page:{page}/{pages}")) end = (page+1)*page_len display(df.head(end).tail(page_len)) -# Cell + def make_hboxes( *widgets, - sections: int=2 + sections: int = 2 ) -> List[HBox]: """ Make a list of HBox, with each hbox @@ -75,16 +77,17 @@ def make_hboxes( sections: int """ hbox_list = [] - hbox_inner=[] + hbox_inner = [] for idx, widget in enumerate(widgets): hbox_inner.append(widget) - if idx%sections==sections-1: + if idx % sections == sections-1: hbox_list.append(HBox(hbox_inner)) - hbox_inner=[] - if len(hbox_inner)>0: + hbox_inner = [] + if len(hbox_inner) > 0: hbox_list.append(HBox(hbox_inner)) return hbox_list + class SingleButton: """ A single button widget @@ -101,12 +104,13 @@ def makeup_some_sql( return f"select * from {table} limit {limit}" ``` """ + def __init__( self, - btn_text: str="Run", - btn_style: str="danger", - callback: Callable=lambda x:x, - sections: int=2, + btn_text: str = "Run", + btn_style: str = "danger", + callback: Callable = lambda x: x, + sections: int = 2, ): """ btn_text: str, text appears on the button @@ -118,8 +122,8 @@ def __init__( self.sections = sections def create_slider( - self, k: str, - anno: dict): + self, k: str, + anno: dict): """ create int or float slider widget """ @@ -147,7 +151,7 @@ def create_text(self, k, anno): create text area widget """ if "textarea" in anno: - layout = Layout(width="100%", height="auto" ) + layout = Layout(width="100%", height="auto") wi = Textarea(description=k, layout=layout) else: wi = Text(description=k) @@ -176,7 +180,7 @@ def anno_widgets(self): create_func = self.create_dropdown else: raise TypeError(f"type {atype} not found") - self.controls.update({k:create_func(k, anno)}) + self.controls.update({k: create_func(k, anno)}) def execute(self, btn): """ @@ -196,11 +200,12 @@ def __call__(self, f: Callable): def abc(...): ... """ - self.f=f + self.f = f self.name = f.__name__ self.anno_widgets() - def wrapper(*args,**kwargs): - rt = f(*args,**kwargs) + + def wrapper(*args, **kwargs): + rt = f(*args, **kwargs) self.callback(rt) return rt @@ -219,18 +224,21 @@ def wrapper(*args,**kwargs): return f # Cell + + class Labeler: """ An interactive tool labeling pandas dataframe row by row """ + def __init__( self, df: pd.DataFrame, options_col: str, - result_col: str="label", - show_callback: Callable=None, - auto_fill_in: bool=True + result_col: str = "label", + show_callback: Callable = None, + auto_fill_in: bool = True ): """ - df: pd.DataFrame, a dataframe prepared @@ -245,13 +253,13 @@ def __init__( self.options_col = options_col if auto_fill_in: - self.df.loc[:,self.result_col] = self.df[self.options_col]\ - .apply(lambda x:x[0] if len(x)==1 else None) + self.df.loc[:, self.result_col] = self.df[self.options_col]\ + .apply(lambda x: x[0] if len(x) == 1 else None) else: - self.df.loc[:,self.result_col] = [None,]*len(self.df) + self.df.loc[:, self.result_col] = [None, ]*len(self.df) self.out = Output() - show_dict = lambda idx,row:str(dict(row)) + def show_dict(idx, row): return str(dict(row)) self.show_callback = show_dict if show_callback is None else show_callback def get_progress_bar(self, idx) -> HBox: @@ -262,7 +270,7 @@ def get_progress_bar(self, idx) -> HBox: return HBox([ IntProgress(value=i, min=0, max=len(self.df)), HTML(f"{i+1}/{len(self.df)}") - ]) + ]) def button_box( self, @@ -274,9 +282,9 @@ def button_box( """ btns = [] for o in options: - btn = Button(description = o,) - btn.value=o - btn.idx=idx + btn = Button(description=o,) + btn.value = o + btn.idx = idx btn.on_click(self.choice_cb) btns.append(btn) return HBox(btns) @@ -285,18 +293,19 @@ def choice_cb(self, option): with self.out: self.df.loc[option.idx, self.result_col] = option.value try: - idx,row = next(self.gen) + idx, row = next(self.gen) except StopIteration as e: self.out.clear_output() display(self.get_progress_bar(self.df.index[-1])) display(HTML("

    All Done

    ")) - display(HTML("
    Thanks for all the labeling, now try self.df to see the result
    ")) + display( + HTML("
    Thanks for all the labeling, now try self.df to see the result
    ")) return - self.show_func(idx,row) + self.show_func(idx, row) def __iter__(self): for idx, row in self.df.iterrows(): - if (row[self.result_col] is None) and (len(row[self.options_col]))>1: + if (row[self.result_col] is None) and (len(row[self.options_col])) > 1: yield idx, row def __call__(self) -> None: @@ -311,13 +320,13 @@ def show_func(self, idx, row) -> None: self.out.clear_output() with self.out: display( - VBox([ - self.get_progress_bar(idx), - HTML(self.show_callback(idx, row)), - self.button_box(idx, row[self.options_col]) - ])) + VBox([ + self.get_progress_bar(idx), + HTML(self.show_callback(idx, row)), + self.button_box(idx, row[self.options_col]) + ])) + -# Cell total_width = Layout(width="100%") @@ -380,6 +389,7 @@ class EditableDict(VBox): You can add item to the dictionary Each added item has a remove button to remove such item """ + def __init__(self, data_dict: Dict[str, Any] = dict(), pretty_json: bool = True): super().__init__([], layout=total_width) self.pretty_json = pretty_json @@ -436,7 +446,7 @@ def __setitem__(self, k, v): self.create_line(k, v) def __add__(self, kv): - for k,v in kv.items(): + for k, v in kv.items(): self.create_line(k, v) return self @@ -444,9 +454,9 @@ def get_data(self) -> Dict[str, Any]: """ Return the data of this dict """ - return dict((x.key,x.data) for x in self.children) + return dict((x.key, x.data) for x in self.children) + -# Cell class LivingStep: """ A step interactive for StepByStep @@ -493,7 +503,7 @@ def __init__( self.footer: Output = Output() self.create_widget() - def rerun(self,**kwargs): + def rerun(self, **kwargs): """ Rerun the current step function """ @@ -534,7 +544,7 @@ def create_widget(self) -> None: ) # assign action to first button first_btn: Button = list(self.progress_btns.values())[0] - first_btn.click: Callable = self.to_page_action(0) + first_btn.click = self.to_page_action(0) self.progress_bar = HBox(list(self.progress_btns.values())) # assemble the entire widget @@ -580,14 +590,14 @@ def __getitem__(self, page_id): self.current: int = page_id key: str = self.step_keys[page_id] step: LivingStep = self.steps[key] - self.title.value: str = f"

    Step {page_id+1}: {key}

    " + self.title.value = f"

    Step {page_id+1}: {key}

    " self.page_output.clear_output() with self.page_output: display(step.output) if key not in self.execute_cache: rt = step(progress=self, **self.kwargs) - if hasattr(rt,"keys"): + if hasattr(rt, "keys"): self.kwargs(rt) self.execute_cache[key] = True @@ -632,4 +642,4 @@ def show_footer(self, func: Callable): def wrapper(*args, **kwargs): with self.footer: return func(*args, **kwargs) - return wrapper \ No newline at end of file + return wrapper diff --git a/forgebox/wildtree.py b/forgebox/wildtree.py index 5b08309..cc0fe10 100644 --- a/forgebox/wildtree.py +++ b/forgebox/wildtree.py @@ -1,15 +1,13 @@ -# AUTOGENERATED! DO NOT EDIT! File to edit: nbs/40_wild_tree_and_loss.ipynb (unless otherwise specified). - __all__ = ['cache', 'WildNode', 'WildEdge', 'WildTree', 'calc_weight', 'loss_package'] -# Cell + import pandas as pd import numpy as np from pathlib import Path from collections import Counter from typing import Callable, List, Dict -# Cell + def cache(f: Callable) -> Callable: """ cache for class property, use as decorator @@ -208,7 +206,7 @@ def __call__(self, a: str, b: str) -> pd.DataFrame: df['to_root'] = df.name.apply(lambda x:self[x].to_root) return df -# Cell + def calc_weight(x: np.array): """ Calculate the weight for BCELoss, diff --git a/nbs_hide/11_train.ipynb b/nbs_hide/11_train.ipynb deleted file mode 100644 index d2edc63..0000000 --- a/nbs_hide/11_train.ipynb +++ /dev/null @@ -1,989 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# PyTorch Train" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "# default_exp loops" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "# export\n", - "from forgebox.loop import Loop,Event,method4all,StorageCore,ProgressBar,Tolerate" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "import torch" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "def create_event(event_name):\n", - " class ProductEvent(Event):pass\n", - " \n", - " ProductEvent.__name__=event_name\n", - " return ProductEvent\n", - "\n", - "def events(*event_names):\n", - " return tuple(list(map(create_event,event_names)))" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "layer:>>>e1" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "events(\"e1\",\"e2\")[0]()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "class " - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loop layer e1 summary:\n", - "==================================================\n", - "🍰layer0.0\tlayer:>>>e1\n", - "\t[🐍func_name]\tafter_last_e1\n", - "\t[⛰doc]\t\n", - " Append new after_last callback for event:e1\n", - " Use this function as decorator\n", - " \n", - "\t[😝var]\tcls,f\n", - "\t[😜names]\tgetattr\n", - "\t...................................\n", - "\t[🐍func_name]\tbefore_1st_e1\n", - "\t[⛰doc]\t\n", - " Append new before_1st callback for event:e1\n", - " Use this function as decorator\n", - " \n", - "\t[😝var]\tcls,f\n", - "\t[😜names]\tgetattr\n", - "\t...................................\n", - "\t[🐍func_name]\ton_e1\n", - "\t[⛰doc]\t\n", - " Append new on callback for event:e1\n", - " Use this function as decorator\n", - " \n", - "\t[😝var]\tcls,f\n", - "\t[😜names]\tgetattr\n", - "\t...................................\n", - "--------------------------------------------------\n", - "==================================================\n", - "\n" - ] - } - ], - "source": [ - "l1.summary()" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "class DataLoop(Loop):\n", - " def __init__(self,dataloader=None):\n", - " super().__init__(iterable=dataloader)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [], - "source": [ - "from types import MethodType" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": {}, - "outputs": [], - "source": [ - "class LoopStack:\n", - " @classmethod\n", - " def from_Loops(cls,*Loops):\n", - " cls.Loops = dict()\n", - " for L in Loops:\n", - " setattr(cls,L.__name__,L)\n", - " cls.Loops.update({L.__name__:L})\n", - " def init(self,iterable=[]):\n", - " last = iterable\n", - " for k,L in self.Loops.items():\n", - " layer = L(last) \n", - " last = layer\n", - " self.layer = last\n", - " \n", - " setattr(cls,\"__init__\",MethodType(init,cls))\n", - " return cls\n", - " \n", - " def __getattr__(self,k):\n", - " return getattr(self.layer,k)\n", - " \n", - " def __repr__(self):\n", - " return f\"LoopStack with\\n\\t\"+\"\\n\\t\".join(self.Loops.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [], - "source": [ - "STANDARD_TRAIN_PROCESS = events(\"PREPROCESS\",\"FORWARD\",\"CALC_LOSS\",\"BACKWARD\",\"OPTIMIZING\",\"METRICS\")\n", - "STANDARD_EVAL_PROCESS = events(\"PREPROCESS\",\"EVAL_SCOPE\",\"FORWARD\",\"CALC_LOSS\",\"METRICS\")" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [], - "source": [ - "TrainLoop = LoopStack.from_Loops(DataLoop,\n", - " ProgressBar,\n", - " Tolerate,\n", - " *STANDARD_TRAIN_PROCESS)" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [], - "source": [ - "train_loop = TrainLoop(range(100))" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "LoopStack with\n", - "\tDataLoop\n", - "\tProgressBar\n", - "\tTolerate\n", - "\tPREPROCESS\n", - "\tFORWARD\n", - "\tCALC_LOSS\n", - "\tBACKWARD\n", - "\tOPTIMIZING\n", - "\tMETRICS" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "train_loop" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "563a7cade71f4a3185eeb96b7084e93e", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(IntProgress(value=0), HTML(value='')))" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "train_loop.run()" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loop layer opt_step summary:\n", - "==================================================\n", - "🍰layer0.0\tlayer:>>>DataLoop\n", - "--------------------------------------------------\n", - "🍰layer1.0\tlayer:>>>Progressb Bar\n", - "\t[🐍func_name]\tpgbar_data\n", - "\t[⛰doc]\t\n", - " update progress bar with python dictionary\n", - " data: python dictionary\n", - " \n", - "\t[😝var]\tself,data\n", - "\t[😜names]\tt,set_postfix\n", - "\t...................................\n", - "\t[🐍func_name]\tpgbar_description\n", - "\t[⛰doc]\t\n", - " update progress bar prefix with text string\n", - " \n", - "\t[😝var]\tself,text\n", - "\t[😜names]\tt,set_description_str\n", - "\t...................................\n", - "--------------------------------------------------\n", - "🍰layer2.0\tlayer:>>>Tolerate\n", - "\t[🐍func_name]\terror_list\n", - "\t[⛰doc]\t\n", - " A list of errors happend so far\n", - " \n", - "\t[😝var]\tself\n", - "\t[😜names]\terrors\n", - "\t...................................\n", - "--------------------------------------------------\n", - "🍰layer3.0\tlayer:>>>before_forward\n", - "\t[🐍func_name]\ton_before_forward\n", - "\t[⛰doc]\t\n", - " Excute callback for event:before_forward\n", - " \n", - "\t[😝var]\tself\n", - "\t[😜names]\t__call__\n", - "\t...................................\n", - "\t[🐍func_name]\tset_before_forward\n", - "\t[⛰doc]\t\n", - " Append new callback for event:before_forward\n", - " Use this function as decorator\n", - " \n", - "\t[😝var]\tself,f\n", - "\t[😜names]\ton\n", - "\t...................................\n", - "--------------------------------------------------\n", - "🍰layer4.0\tlayer:>>>forward\n", - "\t[🐍func_name]\ton_forward\n", - "\t[⛰doc]\t\n", - " Excute callback for event:forward\n", - " \n", - "\t[😝var]\tself\n", - "\t[😜names]\t__call__\n", - "\t...................................\n", - "\t[🐍func_name]\tset_forward\n", - "\t[⛰doc]\t\n", - " Append new callback for event:forward\n", - " Use this function as decorator\n", - " \n", - "\t[😝var]\tself,f\n", - "\t[😜names]\ton\n", - "\t...................................\n", - "--------------------------------------------------\n", - "🍰layer5.0\tlayer:>>>calc_loss\n", - "\t[🐍func_name]\ton_calc_loss\n", - "\t[⛰doc]\t\n", - " Excute callback for event:calc_loss\n", - " \n", - "\t[😝var]\tself\n", - "\t[😜names]\t__call__\n", - "\t...................................\n", - "\t[🐍func_name]\tset_calc_loss\n", - "\t[⛰doc]\t\n", - " Append new callback for event:calc_loss\n", - " Use this function as decorator\n", - " \n", - "\t[😝var]\tself,f\n", - "\t[😜names]\ton\n", - "\t...................................\n", - "--------------------------------------------------\n", - "🍰layer6.0\tlayer:>>>backward\n", - "\t[🐍func_name]\ton_backward\n", - "\t[⛰doc]\t\n", - " Excute callback for event:backward\n", - " \n", - "\t[😝var]\tself\n", - "\t[😜names]\t__call__\n", - "\t...................................\n", - "\t[🐍func_name]\tset_backward\n", - "\t[⛰doc]\t\n", - " Append new callback for event:backward\n", - " Use this function as decorator\n", - " \n", - "\t[😝var]\tself,f\n", - "\t[😜names]\ton\n", - "\t...................................\n", - "--------------------------------------------------\n", - "🍰layer7.0\tlayer:>>>opt_step\n", - "\t[🐍func_name]\ton_opt_step\n", - "\t[⛰doc]\t\n", - " Excute callback for event:opt_step\n", - " \n", - "\t[😝var]\tself\n", - "\t[😜names]\t__call__\n", - "\t...................................\n", - "\t[🐍func_name]\tset_opt_step\n", - "\t[⛰doc]\t\n", - " Append new callback for event:opt_step\n", - " Use this function as decorator\n", - " \n", - "\t[😝var]\tself,f\n", - "\t[😜names]\ton\n", - "\t...................................\n", - "--------------------------------------------------\n", - "==================================================\n", - "\n" - ] - } - ], - "source": [ - "train_loop.summary()" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "metadata": {}, - "outputs": [], - "source": [ - "@train_loop.layer.set_opt_step\n", - "def opt_step(self):\n", - " print(\"step\")" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "060a4c7f562b47849abc01e0b5597fb2", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(IntProgress(value=0), HTML(value='')))" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "step\n", - "\n" - ] - } - ], - "source": [ - "train_loop.run()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.4" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/settings.ini b/settings.ini index a58b086..f54a803 100644 --- a/settings.ini +++ b/settings.ini @@ -7,18 +7,15 @@ author = xiaochen(ray) zhang author_email = b2ray2c@gmail.com copyright = xiaochen(ray) zhang branch = master -version = 0.4.20 +version = 1.0.0 min_python = 3.6 +host = github audience = Developers language = English custom_sidebar = False license = apache2 status = 2 -nbs_path = nbs doc_path = docs -doc_host = https://raynardj.github.io -doc_baseurl = /forgebox/ -git_url = https://github.com/raynardj/forgebox/tree/master/ lib_path = forgebox -title = forgebox -host = github +title = ForgeBox +requirements = category>=0.1.0 jupyterlab_widgets ipywidgets pandas \ No newline at end of file diff --git a/setup.backup b/setup.backup deleted file mode 100644 index 40d12d2..0000000 --- a/setup.backup +++ /dev/null @@ -1,20 +0,0 @@ -from setuptools import setup -from setuptools import find_packages - -# data_files = [('etc', ['etc/forgebox.cfg'])] - -setup( - name="forgebox", - version="0.1.1", - author="raynardj", - author_email="raynard@rasenn.com", - description="Tools for managing machine learning", - packages = find_packages(), - include_package_data=True, - py_modules=['forgebox',], - # scripts = ['forge/bin/forge', 'forge/bin/forge_db',], - # package_data={'forge':['./forge/templates/*','./forge/static/*']}, - install_requires = [ - "tqdm>=4.25.0", - ], -) diff --git a/setup.py b/setup.py index 576fb6a..9364ca8 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,7 @@ -from pkg_resources import parse_version -from configparser import ConfigParser import setuptools +from configparser import ConfigParser +from pathlib import Path +from pkg_resources import parse_version assert parse_version(setuptools.__version__)>=parse_version('36.2') # note: all settings are in settings.ini; edit there, not here @@ -8,38 +9,64 @@ config.read('settings.ini') cfg = config['DEFAULT'] -cfg_keys = 'version description keywords author author_email'.split() -expected = cfg_keys + "lib_name user branch license status min_python audience language".split() -for o in expected: assert o in cfg, "missing expected setting: {}".format(o) -setup_cfg = {o:cfg[o] for o in cfg_keys} +cfg_keys = "version description keywords author author_email".split() +expected = ( + cfg_keys + + "lib_name user branch license status min_python audience language".split() +) + +statuses = [ + "1 - Planning", + "2 - Pre-Alpha", + "3 - Alpha", + "4 - Beta", + "5 - Production/Stable", + "6 - Mature", + "7 - Inactive", +] + +py_versions = ( + "2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8".split() +) + +for exp in expected: + assert exp in cfg, f"missing expected setting: {exp}" +setup_cfg = {k: cfg[k] for k in cfg_keys} + +requirements = cfg.get("requirements", "").split() +min_python = cfg["min_python"] +comp_version = py_versions[py_versions.index(min_python):] -licenses = { - 'apache2': ('Apache Software License 2.0','OSI Approved :: Apache Software License'), -} -statuses = [ '1 - Planning', '2 - Pre-Alpha', '3 - Alpha', - '4 - Beta', '5 - Production/Stable', '6 - Mature', '7 - Inactive' ] -py_versions = '2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8'.split() +with open('forgebox/__init__.py', 'r') as f: + lines = f.readlines() -requirements = cfg.get('requirements','').split() -lic = licenses[cfg['license']] -min_python = cfg['min_python'] +with open('forgebox/__init__.py', 'w') as f: + version = cfg["version"] + first_line = f'__version__ = "{version}"\n' + f.write(first_line) + for line in lines[1:]: + f.write(line) setuptools.setup( - name = cfg['lib_name'], - license = lic[0], - classifiers = [ - 'Development Status :: ' + statuses[int(cfg['status'])], - 'Intended Audience :: ' + cfg['audience'].title(), - 'License :: ' + lic[1], - 'Natural Language :: ' + cfg['language'].title(), - ] + ['Programming Language :: Python :: '+o for o in py_versions[py_versions.index(min_python):]], - url = 'https://github.com/{}/{}'.format(cfg['user'],cfg['lib_name']), - packages = setuptools.find_packages(), - include_package_data = True, - install_requires = requirements, - python_requires = '>=' + cfg['min_python'], - long_description = open('README.md').read(), - long_description_content_type = 'text/markdown', - zip_safe = False, - entry_points = { 'console_scripts': cfg.get('console_scripts','').split() }, - **setup_cfg) \ No newline at end of file + name=cfg["lib_name"], + license='GPLv3+', + version=cfg["version"], + classifiers=[ + "Development Status :: " + statuses[int(cfg["status"])], + "Intended Audience :: " + cfg["audience"].title(), + "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", + "Natural Language :: " + cfg["language"].title(), + ] + + [f"Programming Language :: Python :: {v}" for v in comp_version], + url=f"https://github.com/{cfg['user']}/forgebox", + packages=setuptools.find_packages(), + include_package_data=True, + install_requires=requirements, + python_requires=">=" + cfg["min_python"], + long_description=Path("README.md").read_text(encoding="utf-8"), + long_description_content_type="text/markdown", + project_urls={ + "Documentation": "https://github/raynardj/forgebox/", + "Tracker": "https://github.com/raynardj/forgebox/issues", + }, +) \ No newline at end of file diff --git a/test/import_test.py b/test/import_test.py new file mode 100644 index 0000000..ae3fb8b --- /dev/null +++ b/test/import_test.py @@ -0,0 +1,11 @@ +def test_import_things(): + from forgebox.imports import ( + pd, np, json + ) + assert hasattr(pd.DataFrame, "split") + assert hasattr(pd.DataFrame, "paginate") + +def test_import_category(): + from forgebox.category import ( + Category, MultiCategory, FastCategory, FastMultiCategory + ) \ No newline at end of file diff --git a/test/pipeline_test.py b/test/pipeline_test.py new file mode 100644 index 0000000..e5799b0 --- /dev/null +++ b/test/pipeline_test.py @@ -0,0 +1,87 @@ +from forgebox.cosine import CosineSearch +from forgebox.config import Config +from forgebox.files import file_detail +from forgebox.batcher import Batcher +from forgebox.imports import * + + +def test_batecher(): + batcher = Batcher([1, 2, 3, 4, 5], batch_size=2) + batches = list(batcher) + assert len(batches) == 3 + assert batches[0] == [1, 2] + assert batches[1] == [3, 4] + assert batches[2] == [5] + assert batcher.one_batch() == [1, 2] + + +def test_vc(): + df = pd.DataFrame(dict( + col1=["a", "b", "c", "a", "b", "c"], + col2=["a", "b", "c", "a", "b", "c"], + col3=["a", "b", "c", "a", "b", "c"] + )) + vc = df.vc("col1") + assert vc.iloc[0, 0] == 2 + + +def test_split(): + df = pd.DataFrame(dict( + col1=list(range(50)))) + train_df, valid_df = df.split() + assert len(train_df) > len(valid_df) + train_df, valid_df = df.split(.8) + assert len(train_df) < len(valid_df) + + +def test_column_order(): + df = pd.DataFrame(dict( + col1=["a", "b", "c", "a", "b", "c"], + col2=["a", "b", "c", "a", "b", "c"], + col3=["a", "b", "c", "a", "b", "c"] + )) + df = df.column_order("col2", "col1", "col3") + assert df.columns.tolist() == ["col2", "col1", "col3"] + + +def test_get_files(): + import os + p = Path(os.getcwd()) + test_dir = p/"test_dir" + test_dir.mkdir(exist_ok=True) + test_dir.joinpath("test_file.txt").touch() + test_dir.joinpath("test_file2.txt").touch() + test_dir.joinpath("test_file3.txt").touch() + test_dir.joinpath("test_file4.txt").touch() + df = file_detail(test_dir) + assert len(df) == 4 + assert df.file_type.iloc[0] == "txt" + assert df.file_type.iloc[1] == "txt" + assert df.file_type.iloc[2] == "txt" + assert df.file_type.iloc[3] == "txt" + assert df.parent.iloc[0] == "test_dir" + + # clear test_dir + + for file in df.path: + os.remove(file) + test_dir.rmdir() + + +def test_config(): + config = Config(a=1, b=2, c=[1, "2"]) + config.save("test_config.json") + config2 = Config.load("test_config.json") + assert config2.a == 1 + assert config2.b == 2 + assert config2.c == [1, "2"] + + +def test_cosine_search(): + base = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) + vec = np.array([4, 5, 2]) + vec2 = np.array([2, 9, 9]) + cos = CosineSearch(base) + assert (cos(vec) == [2, 1, 0]).all() + assert (cos(vec2) == [0, 1, 2]).all() + assert (cos.search(vec) == [2, 1 ,0]).all()
    - {% raw %} - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    from time import sleep
    -
    - -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    class Stuff[source]

    Stuff(name)

    -
    - -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    words = Stuff("model")
    -words["G"] = "generative_model"
    -words["D"] = "discriminative_model"
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    def to_device(single_model,device):
    -    print(f"{single_model} put to device:{device}")
    -    # single_model.to(device)
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    words(to_device)(2)
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    generative_model put to device:2
    -discriminative_model put to device:2
    -
    -
    -
    - -
    - - - -
    -
    {'G': None, 'D': None}
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    words("upper")()
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    {'G': 'GENERATIVE_MODEL', 'D': 'DISCRIMINATIVE_MODEL'}
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    words("__len__")()
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    {'G': 16, 'D': 20}
    -
    - -
    - -
    -
    - -
    -
    -
    -

    Both of the following syntax works

    - -
    -
    -
    -
    -
    - -
    -
    -
    words.G
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    'generative_model'
    -
    - -
    - -
    -
    - -
    -
    -
    -

    In real cases we can do

    -
    model("to")("cuda:1")
    -
    - -
    -
    -
    -
    -
    - -
    -
    -
    words(to_device)("cuda:1")
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    generative_model put to device:cuda:1
    -discriminative_model put to device:cuda:1
    -
    -
    -
    - -
    - - - -
    -
    {'G': None, 'D': None}
    -
    - -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    method4all[source]

    method4all(f)

    -
    -

    Use this function as a decorator, -The decorated function under Loop class can be used on outer layer

    - -
    - -
    - -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    class StorageCore[source]

    StorageCore(start_layer)

    -
    - -
    - -
    - -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    class Loop[source]

    Loop(iterable=[], name=None) :: list

    -
    -

    Basic loop class

    - -
    - -
    - -
    -
    - -
    -
    -
    -

    Loop-in-loop concept

    Loop and its inheriting descendants runs on iterable, incuding other [`Loop`](/forgebox/loop#Loop)

    - -
    -
    -
    -
    -
    - -
    -
    -
    l = Loop(range(5,10),name = "hahahha")
    -l
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    layer🍰hahahha
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    class Printer(Loop):
    -    def __call__(self):
    -        print(f"i_{self.core.i}",end="\t")
    -        print(self.core.element)
    -        
    -    def start_call(self):
    -        print(f"start of epoch {self.epoch}")
    -        
    -    def end_call(self):
    -        print(f"end of epoch {self.epoch}")
    -l2 = Printer(l)
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    l2.run()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    start of epoch 0
    -i_0	5
    -i_1	6
    -i_2	7
    -i_3	8
    -i_4	9
    -end of epoch 0
    -
    -
    -
    - -
    -
    - -
    -
    -
    -

    Progress bar

    -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    class ProgressBar[source]

    ProgressBar(iterable=[], jupyter=True, mininterval=1.0, leave=False) :: Loop

    -
    -

    Basic loop class

    - -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    from tqdm.notebook import tqdm,tqdm_notebook
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    pb = ProgressBar(Loop(range(5,10)),jupyter = True,leave=True)
    -pb.run()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -

    Downstream wraper

    A unique way to contain downstream task in a function, hence a good Error Handling mechanism

    -
    - -
    -
    -
    -
    -
    -

    In cases you don't want error stop the iteration, meanwhile taking down all the error message.

    - -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    error_tolerate[source]

    error_tolerate(downstream_func)

    -
    -

    downstream_func:Downstream function

    - -
    - -
    - -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    class Tolerate[source]

    Tolerate(iterable=[]) :: Loop

    -
    -

    Tolerate any error happened downstream -layer2 = Tolerate(upstream_iterable)

    -

    build downstream tasks

    layer3 = OtherApplication(layer2) -layer3.run()

    -

    show the happened error message

    layer3.error_list()

    - -
    - -
    - -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    class LambdaCall[source]

    LambdaCall(iterable=[], func='<lambda>', start_func='<lambda>', end_func='<lambda>') :: Loop

    -
    -

    Basic loop class

    - -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    l1 = ProgressBar(Loop(range(1,10)))
    -error_loop = LambdaCall(l1,func= lambda x:(5-x.element)**(-2))
    -
    - -
    -
    -
    - -
    -
    -
    -

    Running this will yield error

    - -
    -
    -
    -
    -
    -
    error_loop.run()
    -
    - -
    -
    -
    -
    -
    - -
    -
    -
    def error_on_purpose(x):
    -    if x.element>5:
    -        raise ValueError(f"value too small, {x.element}")
    -
    -l1 = ProgressBar(Loop(range(1,10)))
    -# add the tolerate layer in between
    -l2 = Tolerate(l1)
    -# tolerate can only tolerate the erorr on downstream
    -tolerated_loop = LambdaCall(l2,func=error_on_purpose,end_func=error_on_purpose)
    -l2.run()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    WARNING:5 errors
    -
    -
    -
    - -
    -
    - -
    -
    -
    -

    you can use error_list function to print all the happened error

    - -
    -
    -
    -
    -
    - -
    -
    -
    import pandas as pd
    -pd.DataFrame(l2.error_list())
    -
    - -
    -
    -
    - -
    -
    - -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    stageiepocherror
    0start_cb-10'StorageCore' object has no attribute 'element'
    1iter_cb50value too small, 6
    2iter_cb60value too small, 7
    3iter_cb70value too small, 8
    4iter_cb80value too small, 9
    5end_cb80value too small, 9
    -
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    l2.summary()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    Loop layer Tolerate summary:
    -==================================================
    -🍰layer0.0	layer🍰Loop
    ---------------------------------------------------
    -🍰layer1.0	layer🍰ProgressBar
    -	[🐍func_name]	pgbar_data
    -	[⛰doc]	
    -        update progress bar with python dictionary
    -        data: python dictionary
    -        
    -	[😝var]	self,data
    -	[😜names]	t,set_postfix
    -	...................................
    -	[🐍func_name]	pgbar_description
    -	[⛰doc]	
    -        update progress bar prefix with text string
    -        
    -	[😝var]	self,text
    -	[😜names]	t,set_description_str
    -	...................................
    ---------------------------------------------------
    -🍰layer2.0	layer🍰Tolerate
    -	[🐍func_name]	error_list
    -	[⛰doc]	
    -        A list of errors happend so far
    -        
    -	[😝var]	self
    -	[😜names]	errors
    -	...................................
    ---------------------------------------------------
    -🍰layer3.0	layer🍰Lambda<0x119422e30>
    ---------------------------------------------------
    -==================================================
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -

    You can search for the function documentation

    - -
    -
    -
    -
    -
    - -
    -
    -
    l2.search()
    -
    - -
    -
    -
    - -
    -
    -
    -

    Application upon progress bar

    The function pgbar_data is decorated under [`method4all`](/forgebox/loop#method4all), hence the function can be used else where

    - -
    -
    -
    -
    -
    - -
    -
    -
    from datetime import datetime
    -class Application(Loop):
    -    def __call__(self):
    -        # create some data
    -        loop_data = dict(epoch=self.epoch,i = self.i,
    -                         val = self.element,)
    -        # update data to progress bar
    -        self.pgbar_data(loop_data)
    -        self.pgbar_description(str(datetime.now().strftime("%H:%M:%S")))
    -
    -l3 = Application(ProgressBar(Loop(range(5,10)),jupyter=True,leave=True))
    -l3.run()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    - -
    -
    -
    l3.summary()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    Loop layer Application summary:
    -==================================================
    -🍰layer0.0	layer🍰Loop
    ---------------------------------------------------
    -🍰layer1.0	layer🍰ProgressBar
    -	[🐍func_name]	pgbar_data
    -	[⛰doc]	
    -        update progress bar with python dictionary
    -        data: python dictionary
    -        
    -	[😝var]	self,data
    -	[😜names]	t,set_postfix
    -	...................................
    -	[🐍func_name]	pgbar_description
    -	[⛰doc]	
    -        update progress bar prefix with text string
    -        
    -	[😝var]	self,text
    -	[😜names]	t,set_description_str
    -	...................................
    ---------------------------------------------------
    -🍰layer2.0	layer🍰Application
    ---------------------------------------------------
    -==================================================
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    l3.run()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -

    Event

    Event allows add-hoc callbacks to be created

    - -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    class Event[source]

    Event(iterable=[]) :: Loop

    -
    -

    An event is the landmark with in 1 iteration

    - -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    class ToString(Loop):
    -    def __call__(self,):
    -        self.core.element = f"variable_{self.i}"
    -
    -class ChangeString(Event):
    -    def __init__(self,iterable=[]):
    -        super().__init__(iterable=iterable)
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    def get_frame(li):
    -    layer1 = ProgressBar(Loop(li,"base"),leave=True)
    -    layer2 = ToString(layer1,)
    -    layer3 = ChangeString(layer2)
    -    # you can use this "on" syntax
    -    @layer3.ChangeString.on
    -    def trim(self):
    -        self.core.element = f"Var_{self.element}"
    -        
    -    # or this syntax
    -    @layer3.on_ChangeString
    -    def update(self):
    -        self.pgbar_description(self.element)
    -        
    -    @layer3.before_1st_ChangeString
    -    def print_start(self):
    -        """
    -        decorated
    -        """
    -        print(f"start_{self.epoch}_{self.i}")
    -        print(self.name)
    -    return layer3
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    l = get_frame(range(10))
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    l.core
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    {0.0: layer🍰base, 1.0: layer🍰ProgressBar, 2.0: layer🍰ToString, 3.0: event🌏ChangeString}
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    l.cbs
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    [layer🍰ON_ChangeString_1_trim,
    - layer🍰ON_ChangeString_2_update,
    - layer🍰BEFORE_1ST_ChangeString_3_print_start]
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    l.summary()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    Loop layer ChangeString summary:
    -==================================================
    -🍰layer0.0	layer🍰base
    ---------------------------------------------------
    -🍰layer1.0	layer🍰ProgressBar
    -	[🐍func_name]	pgbar_data
    -	[⛰doc]	
    -        update progress bar with python dictionary
    -        data: python dictionary
    -        
    -	[😝var]	self,data
    -	[😜names]	t,set_postfix
    -	...................................
    -	[🐍func_name]	pgbar_description
    -	[⛰doc]	
    -        update progress bar prefix with text string
    -        
    -	[😝var]	self,text
    -	[😜names]	t,set_description_str
    -	...................................
    ---------------------------------------------------
    -🍰layer2.0	layer🍰ToString
    ---------------------------------------------------
    -🍰layer3.0	event🌏ChangeString
    -	[🐍func_name]	after_last_ChangeString
    -	[⛰doc]	
    -            Append new after_last callback for event:ChangeString
    -            Use this function as decorator
    -        
    -	[😝var]	cls,f
    -	[😜names]	getattr
    -	...................................
    -	[🐍func_name]	before_1st_ChangeString
    -	[⛰doc]	
    -            Append new before_1st callback for event:ChangeString
    -            Use this function as decorator
    -        
    -	[😝var]	cls,f
    -	[😜names]	getattr
    -	...................................
    -	[🐍func_name]	every_end_ChangeString
    -	[⛰doc]	
    -            Append new every_end callback for event:ChangeString
    -            Use this function as decorator
    -        
    -	[😝var]	cls,f
    -	[😜names]	getattr
    -	...................................
    -	[🐍func_name]	every_start_ChangeString
    -	[⛰doc]	
    -            Append new every_start callback for event:ChangeString
    -            Use this function as decorator
    -        
    -	[😝var]	cls,f
    -	[😜names]	getattr
    -	...................................
    -	[🐍func_name]	on_ChangeString
    -	[⛰doc]	
    -            Append new on callback for event:ChangeString
    -            Use this function as decorator
    -        
    -	[😝var]	cls,f
    -	[😜names]	getattr
    -	...................................
    ---------------------------------------------------
    -==================================================
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    l.layers
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    [layer🍰base, layer🍰ProgressBar, layer🍰ToString, event🌏ChangeString]
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    l.run()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    layer = l.layers[0]
    -print(layer)
    -while layer.next_layer!=None:
    -    layer=layer.next_layer
    -    print(layer.start_call.__doc__)
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    layer🍰base
    -None
    -None
    -None
    -
    -
    -
    - -
    -
    - -
    -
    -
    -

    Parallel

    -
    -
    -
    -
    - -
    -
    -
    - -
    -
    -
    from math import sqrt
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    def heavy_calc(x):
    -    sleep(1)
    -    return sqrt(x)
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    %%time
    -list(map(heavy_calc,range(10)))
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    CPU times: user 933 µs, sys: 1.41 ms, total: 2.35 ms
    -Wall time: 10 s
    -
    -
    -
    - -
    - - - -
    -
    [0.0,
    - 1.0,
    - 1.4142135623730951,
    - 1.7320508075688772,
    - 2.0,
    - 2.23606797749979,
    - 2.449489742783178,
    - 2.6457513110645907,
    - 2.8284271247461903,
    - 3.0]
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    %%time
    -Parallel(n_jobs=5,)(delayed(heavy_calc)(i) for i in range(10))
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    CPU times: user 26.5 ms, sys: 21.8 ms, total: 48.3 ms
    -Wall time: 2.79 s
    -
    -
    -
    - -
    - - - -
    -
    [0.0,
    - 1.0,
    - 1.4142135623730951,
    - 1.7320508075688772,
    - 2.0,
    - 2.23606797749979,
    - 2.449489742783178,
    - 2.6457513110645907,
    - 2.8284271247461903,
    - 3.0]
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    def showstuff(*args):
    -    print(args)
    -    for i in args[0]:
    -        print(i)
    -showstuff(a for a in range(5))
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    (<generator object <genexpr> at 0x11b3761d0>,)
    -0
    -1
    -2
    -3
    -4
    -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    class MultiProc:
    -    def __init__(self,loop,n_jobs = 6):
    -        self.loop = loop
    -        self.n_jobs = n_jobs
    -        self.parallel = Parallel(n_jobs=n_jobs)
    -        
    -    def __enter__(self):
    -        loop = self.loop
    -        def one_epoch_parallel(loop):
    -            first = loop.layers[0]
    -            loop.refresh_i()
    -            first.start_callon()
    -            print(1)
    -            self.parallel(delayed(first.__call__)() for element in first)
    -            print(2)
    -            first.end_callon()
    -        self.old = loop.one_epoch
    -        setattr(loop,"one_epoch",MethodType(one_epoch_parallel,loop))
    -        return
    -    
    -    def __exit__(self,exc_type,exc_val,exc_tb):
    -        setattr(self.loop,"one_epoch",self.old)
    -        return 
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    class Calc(Loop):
    -    def __init__(self,iterable):
    -        super().__init__(iterable=iterable)
    -        
    -    def __call__(self):
    -        sleep(1)
    -        self.pgbar_data(dict(sqrt=sqrt(self.element)))
    -        
    -    def end_call(self):
    -        print("done")
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    basic_loop = ProgressBar(Loop(range(10)))
    -test_li = Calc(basic_loop)
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    %%time
    -test_li.run()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    done
    -CPU times: user 55.5 ms, sys: 8.47 ms, total: 64 ms
    -Wall time: 10.1 s
    -
    -
    -
    - -
    -
    - -
    -
    -
    -

    Chunkify for batch cutting

    -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    - - -
    -

    chunkify[source]

    chunkify(*iterables, bs=32)

    -
    - -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    chunkify(list(range(10)),list(range(10,20)),bs=3)
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    [([0, 1, 2], [10, 11, 12]),
    - ([3, 4, 5], [13, 14, 15]),
    - ([6, 7, 8], [16, 17, 18]),
    - ([9], [19])]
    -
    - -
    - -
    -
    - -
    - {% endraw %} -
  • I@jO^RS^9i38u`RbUTb2};cvJTdYZ}~q>AqLDgWI^)0l}MTR`Uss+Gq` zK&`zp=aWgBoqNu)26uNEV`hFUQT`Q0495~o9~*LzVU&)dIHZmtc|nyVRA=mk zmTp>-U>Z-RMTWra@>oaP!xHz$4i?!=aZgf#xPP1)fgz#V$n6AYYFer;nj|7k)B$!p z=?{bF1r~D8CaST=?+&3qh6GUtjI8gCNX2wrQs*bz=jW<~- zcn#o-$4ng!ySV@E02VdkVDZ61;_U0o4I!`KMQA!X{7eVz#Eay3QndUb%!gX&CBw$Y zdb!rZo^Ak$jY*8lCZdf10GH)E=f}s+c$K8ZwojH5P05HheTBBY|c9tC}6q76uMeiXG`9D)ZnjENqz8@F{=EM;I{xRZ(RbuY6FcXRA8( z)Y}dfycylrn&Gwd8aDDiesk4l_-71FJt8m(gUFCv=H3-U|B^Vg>(HXzC^gjKY$2aT zf$jR0@bWN^2lYa&bsc1caFhh?~>pN@Gxx|fR#!>gm{az>EMh6Pq)chyQ`Po-D z|d#rD~i~6 zIh4W>PUr_xPf7tk1!-7{ZEx!4Z{h>yFOP2{n*^J7uY6TDK({sX1P4lQ5nOCxojVy= zMQI%Z+i>)O?#`X}P;f)SeIqe&fkqYwSl1tN-irrb2paTG(s6z^{4qkb2JZ>G`X|fh z@{kz-fO90dRu1pBnXVp5k4Z>Ly2oTn znbP&4`eZaBf6ksb=rW{Tk0JcC+JNrdj4U+bzFcyMo?jBx+~5+nXNb|8Gv4>S`s+{~ zZ%|T9d%M2jL{qDDpcmwqx`bqyk0jI75NDsG5^iF;SuBl3pnJG7M`z*JSEz$=LB*S2 zvb5uK%5BDr+@ZPVrc(@kIeN1y2V{~f!Y?KTqW|Vw^*;@`_;JyC_90iBt=R&D-q&50 zP2GgRhG`;4ZlF3z*`v8~9XO>`xV)Y~8uxu5Wmf;nHT`JK%xItw3;6M-e0i@$2e1Kv zkp>F~NkaB#=;9=GfC}&~9rL}Qtd2Pnj%E(U~@atdQ+kr=y z0Me(-_slY5ruxvS(~!`^(X6V{Q-k}x0&{DBmUIQrm>T)*Ttc$!{@b1yl$3Io{Gkkg#IDE>g!y7ozs>?hvXZ2s(!#@C$XGGfktUFWu$P%a2QuKt41=8v z6KNHUlVBp~?fxSbLOI&Zbg6L|LMBCD zO)Gq^%G_36oFyeImJFv#Fm~V5c(%a;68zbg3zlPu02k75U@;x~m0a^nLr{yZk)4MG z-{o*o73cK~OYvU80dmnGyn{W}zu554A;F@ZCU@RXOHHqSEjgTE@QCBRL%Nl@ZP~wK zC2fr$ESBGxTv-&-2utA|D=iYd&88xp-LEmCa`7;TDbUxq;@g_Gy}u4DfaD<8{3i3U zol^tOHz&`qJ5Rq~;e>uyI8J7xWjolABShFvm9D~(k@}4otkVT-ZcjZ?{9y`Eh3|xy zKi`F6##8V>Yj$Q%mmO2|Z=bL&Nss5_n|ny7D&>_@6+r;7mp&?J?%x9a@(z&5IcpJq zq1P(FO4?hfsyznJ(W;iGFimZ;S>1l)OJvLkY2y6Nb<8i-S=iVH(fm=W_x4Qvzn~sy zerC(SYxx4YC9%6$joNrYDV7n19nQ)G$~5)v%1x>xPl z^dyFS5(~#|AeuKA$s3j)A4?%4`v1nl8=%*YV2mhBodM;y3%UOi!#|73FyMO4(aKW| zawC{ay_jxth%IJ3!+-LF*ccA{tKDq$h=W8G;Jo89?6;I zlwEcov?~?1nj9cIu}^|H7Ckn@!-CuVmp^9}gYOF4ZTBL$yO?;DtP>fi)Mc&);@jP2 zEbkl+LFiq?UJj%2*e?@`Y&!fk4OncwBw9Y<=&pPkF?D<24gi2SQLP?krWq zkB`FxU)cg|mtumpSd>V@7|TApn!tIe9nw*#sv!IXgwD7Rb}J zC!le&e|SwJ<|=s&!o8)hepy8=ME;RXfZ^)8?_%ki8o?b`5Eeq8>!U(sg<*{bN+8lZ z+4w%{V{FD^wxZ8(8pplXnS^P@GCwLTcnh+#1?s2dtCmxE>eTc+7^c@Rg@!k1&t|gm z-oC?bXx{TYhp(0D>Ori!(HRVs&Njc}8B=c|Drl(xfn3Cp`Vtv4-B{4z^;@e?GlhQQ z>*7^}EG@JF#Ii>*Xt74OXT7*m`_cc7D*4p$@nB9ou?(?o4C#7OoNuwZOtRjSqA912 zSH9!p=6af|EjLRXgWh9LqKDMMLTh{d=Ha-~AVchHjKTZcOaWGb-a6_JO!il|^z;@) zAj8Kk-n!JV?EIjj!Qr^LlPd!r|5Gzdb~G{=cz6!Rw1YnHafv@(7Jtre{=pbLu&nBgHe z5SAXg0I{u(?|=yBlNPOtwtIEFWf)Qm8{Ly$K9zf!x4Xn_6<-9PJTi1loOF=ime1uD z)BBg!4JRhHXN8UGkzCJIyWJg|sHVUMINe4D0IrNBHyl8{EMZI%_gZVs<{8-@hSpV7 zerADUP@k;B!&al5iJ;rt%+)k}8@m^MMT{q_9MgA08}oAW@qCm9=a8@Qk%*EP02EPP z|NLsKVT~;Dxcw%|CeUY4#muy3kn4V4?y18Ca$j6EtP`4r_Haw=P7OKfF9Ft%0}QMi_&g7mFT*=H*92>Ne=gkfr!s5PcWAuS zRRwzr-hZBHhVi@A4yas>M!qU(Zy*7VzfT~mcv-Wx5TX*$MtFFiyRzg30`D159vr{U z*lo@i;DKW=V-^o7(OU9ZR;fK;cLEY8!?ySm*IPgT{&Of7G4CA>>5{o2}nEjjc6Tl$otC<2*e*)+b?UHkwLNz#%%bc@aK_ zV^o}_qT_-vpXoXk+GzC>t9bJw;OL`>DvD1i|z`(2Q%KXbdRCu3)yH^-^X=$`H8rD?;YGo zkaZ>ht}#o8j=xul7V_W>f`{{!(=4mgi-KC<%{ce4yy_PvW5sVu6tkFnc+a-#8=XaK9v{||Oce00ww87r-HpX2 zh8XX}O&VL`NQ&UHWpte8wBU;yUglIwkgy>7jfF+%;&lR`cd&f3Oav&Oo_M?7K(6L~ z^-T-DpNNhjL(b%F@JUFsqJl4q)nJ#qZ1CU=&UJqthOXk>do0%;G$&qhw$$X0w53}i zt)cPWSIR|Dd}!ipar{PM4^(J0IIgg8d{Gulh*`5_T0773v<+hEWFqkEu+n;^af$CJ zK?nTSTWOZ{ySTi%wNBYjM;f0_eq<(AN3geq5(C7&6=<>Zwle%zbjjA9$Gj`kz1w-A z2fu!1)?V23EnEvA);?=lx=Lst4L4J%IuWGCHl^LsCI@Cdn_6iSpixG6JJL?+8rfzV z1$sS&cC>7MJ;}K+XAzbF{PH_cNJteeNNB!k7%m^RBWCMtyOuKCA-E3gPxqM(quUc^ zsvyJ>NO0w#;fnBb~;mt z@^6YYZft_R0=xkmEe(%y^I@p0&)OaXE?;kMItTqRhqK0J=WC~vu2&@!8$)b*m-FNA zdH)u-7Y<&|%~SAvY_TbqnN1u*GfP#JtF3b1`qnZ_(_SMz-?j8k9vmnb=w{Hhw(S|2 zKFLm0V!AIrIbq&87#z0i%t7OJxv`MO{wT`d7)A)3dbVhcN$zo(XS;y_nln|1?u+-t zB0sYN^Nm-x;+!>~c%FVe{z3$|V$yJBR5hHQ(ixmW_&{zXfJlWzy61~Gp7ID@7CIX;H~7#kdF z_e12@IZ`@LabNY3%wCE7L@IudRiCWq+R8`fSg<&wbB^8j*#q+|J?1rNsb_PSW|vt5$OPH^_>!b^J=#x$C| zZP>C1x(~FKVC)oW7hX6a^qC;%>cj>o7mtfEt-)r#R*0_fphCzcktF3Heah-SfYYHY zW6?KnqcqXP>3g?-WS`xy`3w}{Kk%2S?pPeps4R|r-!-km{1GwL(>4VuM`n4`JEoi3 z7JK_`>~!3^tnc=Y;(oZJ1V{K28{>ttrq!yR-h=TU(+OYlNZob~Y#Y}-F>wfh&Y-44 zMB*f;hO+PEi>&(Q6v-(mE&=v<)OodDBQ@uZTYtrTy9zs!ckhDQS=#|0HLp#a-hxR)sQuuq@t&{zn*3+2m3d?j9qVJ3kKYt zXvG#+c$Qr_VPjQQ#DYD;6Xx^a{LkNMRm7yk&h{B$uzU|6uLK}aKDsLHQ=a|k@O3-N zkIs5J$S>xn2}k5ywK;b$ved{KMYB7I zzBXP^aR6UJLQ@}}-`7Aqt!6^dutOXZs3S;yd26|e7 zkc-T`LOa`vrrL4K{Qb?x@$MkmeqWgM%1&K1#ZR0>9@re+#HOGQg__9$6clYU?M zf4KnDm*^iy;9R|CX8B=(wF*6gvQ#H!A!x|Fw!``FE=6^YTY3lPirr@&3fuKAcg`-) zM+)aB%7k?sjVzg&GM0fLba9E*-|rHrH}dCO!)SIB0h~c{qi0Wkkgwlx;@JM4I<$8sz;6^LuoBrp+wcIb-f#llQs2 z;tnC$|A1?pj+C3I>zpp?A|ebGf4A(9&`Kq|cv+%_ZHJ@a+|%8Xh2ApWNAd|I3!YVn z^4yhg9V?~h}wy=d*;-_$?h33N~mDfuf9##%902$e&B&R|f%{iyIBnGoFpB?Y7uH z{P6P1UB^Q*KbCY1+9liZ-2n^jJ-dHGICZ%TU$9_nW@_k`rDkRt8o}(vd z`@G00t#oF4O+!gL@_X%_)>sFLcQo9~ZEni5ZV(0(Z&!I$d$c|yxY)_Jd2d(}A`hZ^ zj$O?*#jVTWKWe3?5G9+LuMnRhh9hj$JFAqhJ6B=Ql5qAloF|s4y25rODk4uvZFUH9 zoV|`%vXf4=TvA4!%cT-HmNKdO&e+dL9yjs*txR}4*p?Sq-#%?>9p9a`xp)n3+_eN6 z9sYEc`!&8*{oJEO3m?7w994HPxgmP~{<~A^C3&n+pT_k^3t-3;A7SY zHWJtUo9L;4gQmE|*waB2Z%up07(z+dEZsx_5Xx2=ra#l2zRgHyZ`0b0Iq3@JYN3e0Am+!T8k;SKQH$@B`4&TylL|SaH~1u0r%1V&!=t#+wXWS|S13w3aDf}k!q~?YK83N@5*nvY-|1=K67w7BMLJS6 zaSuUeOc>z@LiFqJ{`Tg=A%nLe<_h_9%2@9l`;Xz_6&n$fVOsee_4!Mvnxso*n{2$T zX)s}0IqnhURgaxoY%+gmJQD26jrrGBp71TTx6B(*+{^SG1dx*a3+&j2nAW1^>)p)YS$_ZL^$4lw!8p;U?kP_B#xjm>dn(Z(@m9C1 zI9Ko&cQ0C|TB1t0;jlz)L|l_>vV;EDqIeSb8f_sZW@hD98IucA!JZQO5w!jovgmPY z%bWa(#F9jC3*Kym+H>KMo*+tZh-OcqFkYN1gOp$#jRh38yN+GKas?aml9^YYwns>8 zr0n3FeBThE+Fj0&Fv(0NIq;*PzhQgcbS7!{FD!Ls`16LK(5AJ+RaMG8&#>tKqQO1-M z98Jw~+!3RiSsI7wLmcqLRA0vz`M)6;aS@E8jMz3GU#U9&ea4Cr(y0b?M?!G@r0xkK zUwN4+gHg>2oh@dcO4@q3tU1!r(KWz|m;3y_?-C&XP^)-#ZS)-t=$2dQWDxKr)9BaG zq8+oWwqn8^KP`@cFPVVi9w?z*kJD;u ztZ!s_UPnh2t788EH#EERz3qto?!|HMc%kZKe|~qjL~P5Zm@w$wuwyb3g^sA8h>q^~ zg?FI3``WGps6?Nhw`?m3EPTsoVV);`C2f@~LuH4T26bZ@1`MTYO3wELovNm8<1`_` z@=vy6EsTG)Gz|f95Q+Ej!8gM6#DbS`(JEKx1 z?dSh=RfaAGS4%|ONmiw5&7iWYt?Ip?<^aoCCLxCoKlO%k^ag>FyOmeZK2ah1NYZ#VS7k*{YHpRqzvv<{^&n%Dhub1zXZNSy}d+}Bb zxHD3;rvgy7M2NAw9onqD%*cJM_Y!nf&YLlO$qq;#y!ajaSgf5anKk{gWg-*)C?)Ls zx%<=aJ3{!4kwfJ8KE3+3Ep6>kQbxRA_M-8xP7guBPNg0R7$(q+Q~F6&Hmm97Y(|Oj zT}LeN9bH=dQR~&rdpo>aEE@V$XkegRbq8#&VDHIQ<~rM!$xkE=__gWADpk71IrZ-J z{cgtn^m&c2d^bAy)Qg{Jl=QN8MnQuLvmeoxzfc6_jA29aGg-C(iws*p1YkPt6$f4I zZ;(RmNnGL7n$b{;iwN--MxD&i=X(7^9AL)r5_S2|rCSZLxUKs31?6VjL=8_SIia>5 zR!b*Txn7XlJA{K8L(#OOC(qh=y^|64Y4mReCcTbKW86^29 z1(?7t`9`7J&MS5kJ|1FKZ|<8Xgx^%-(JAnv0#|olUVk9oHlJy2?P5sp>m`1A(cEEA zq<}$0XPqC4DmOAK6H6@$87_SZ7jA!Y=-lEgT|)+@Q8{-Wv(1AF{jaR zj;K@$fk8Rr!s7Rp-PE8x<;+}5E|q>$wzNkLQI<4u07#+S^#%k{yPJ!}rcZY0sOjld zOnFCK6J&5ChNX*ITrqTJbyf_9oc9E>rNKK7~cZ> z4HamS%}Hua;_N}Wdsp-Ui#LJWEHguN8cA(;=7sNojMm!tk%Zqv_e$`r4HkMZ_n$>935BKJS5x?h)&DyynOto)_Sm|S?m3$Qq zc9ccyi?i+liwSV?-DKew;jPnD36owmi#i$>1d=Mmk6x8JRqU+5A2uqKtXi4RbRxAe zwU#t~ZAeg;Kcr%ej+LZQ;3fWZLDW+YHlP;4U6yNUV%CzCIJ$*=t7*$pMovZyp`0F9L zj?mDuWZAWX@xT+k^Vsh0*luyx5hU=eRy>?OGV+#Nb2DLT64YF;O5K=jo%_ydUGjJ3 zPlk`FBk7-VPYVpgB|f1RB;$bZaQ~cUoGybkjYvF-0jZE`p>0a0^6vkIDaOaC{Cv5; zQ+g8mYIXAM>(Hzgredugb)Zy>5G&U1hpp2kw8(E`1=XBFiZK=nRym^Fi7`4~nLp$6 zQPcCqjwKWhDzJ4F5?q;}$Ef}X!yliwU+(o)DdaUnToF4HBM@Eydj{UuAH1d#S)FdZXC|I8J39@ z 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 z zV_Yy)bS8mjQII*T#EeXrZ!`wQHY`H;bu$qPVQCSw3UjiI*c`7p>ZIwol`e(9;mkf| zArn_x9m{+B;mwKDX1-xMd3nYVDNNildF?zlZjB$)x){2r1M4dQNE zc>mE23dmP<{vd|@BRTA@u!@j8ww+{*6a!U^x=slsQGsaI*uV(p26)5P?cu7mqr3!f z>mJHmqt?{4wfXikCyh_7BlVB{%R?hjEBWbi#2!ZN4@p+#s!tEuA4YC~+3Xr*7_GJ

    - {% raw %} - -
    - -
    -
    -
    -

    FrogeBox Pipe

    A pandas dataframe pipeline

    This is a tutorial about tabular data processing pipeline

    - -
    -
    -
    -
    -
    - -
    -
    -
    import pandas as pd
    -import numpy as np
    -from pathlib import Path
    -import os
    -
    - -
    -
    -
    - -
    -
    -
    -

    Sample dataset: New York City Airbnb Open Data

    - -
    -
    -
    -
    -
    - -
    -
    -
    HOME = Path(os.environ["HOME"])/"data"
    -DATA = HOME/"AB_NYC_2019.csv"
    -
    - -
    -
    -
    - -
    -
    -
    -

    A preview on data set

    - -
    -
    -
    -
    -
    - -
    -
    -
    df = pd.read_csv(DATA)
    -
    -df.head()
    -
    - -
    -
    -
    - -
    -
    - -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    idnamehost_idhost_nameneighbourhood_groupneighbourhoodlatitudelongituderoom_typepriceminimum_nightsnumber_of_reviewslast_reviewreviews_per_monthcalculated_host_listings_countavailability_365
    02539Clean & quiet apt home by the park2787JohnBrooklynKensington40.64749-73.97237Private room149192018-10-190.216365
    12595Skylit Midtown Castle2845JenniferManhattanMidtown40.75362-73.98377Entire home/apt2251452019-05-210.382355
    23647THE VILLAGE OF HARLEM....NEW YORK !4632ElisabethManhattanHarlem40.80902-73.94190Private room15030NaNNaN1365
    33831Cozy Entire Floor of Brownstone4869LisaRoxanneBrooklynClinton Hill40.68514-73.95976Entire home/apt8912702019-07-054.641194
    45022Entire Apt: Spacious Studio/Loft by central park7192LauraManhattanEast Harlem40.79851-73.94399Entire home/apt801092018-11-190.1010
    -
    -
    - -
    - -
    -
    - -
    -
    -
    -

    DataFrame Pipeline

    -
    -
    -
    -
    -
    - -
    -
    -
    from forgebox.pipe import Node,colEdge
    -from forgebox.pipe.edge import capMinMaxEdge,eng_twt_tk,fillNaEdge
    -
    - -
    -
    -
    - -
    -
    -
    -

    Start node, a pandas dataframe

    - -
    -
    -
    -
    -
    - -
    -
    -
    start_node = Node(df)
    -
    - -
    -
    -
    - -
    -
    -
    -

    Column edges

    edge defines a method of processing data.

    -
      -
    • colEdge and its sub-class process column
    • -
    • frameEdge and its cub_class process a dataframe (multiple columns)
    • -
    - -
    -
    -
    -
    -
    - -
    -
    -
    cap_minmax_edge = capMinMaxEdge(max_ = 100)
    -fill_na_edge = fillNaEdge("")
    -
    - -
    -
    -
    - -
    -
    -
    -

    Nodes/Edges relationship mapping

      -
    • node1 ==edge1==> node2 :
        -
      • node2 = node1 | edge1
        -
        -
      • -
      -
    • -
    • node1 ==edge1==>edge2==> node2 :
        -
      • node2 = node1 | edge1 | edge2
        -
        -
      • -
      • node3 = node2 | edge3
        -
        -
      • -
      -
    • -
    -

    Relationship mapping with columns specified

      -
    • Specifying 1 column
        -
      • node2 = node1 | edge1%"column_1"
        -
        -
      • -
      -
    • -
    • Specifying multiple columns
        -
      • node2 = node1 | edge1*["column_2","column_3","column_4"]
        -
        -
      • -
      -
    • -
    - -
    -
    -
    -
    -
    -

    Setting the node/edge pipeline

    - -
    -
    -
    -
    -
    - -
    -
    -
    # clip minmax value on 1 column
    -# fill na to "", on 2 columns
    -# tokenize, on 2 columns
    -end_node = start_node|cap_minmax_edge %"number_of_reviews"\
    -                    |fill_na_edge *["name","room_type"]\
    -                    |eng_twt_tk*["name","room_type"]   
    -
    - -
    -
    -
    - -
    -
    -
    -

    Print out the pipeline layout

    - -
    -
    -
    -
    -
    - -
    -
    -
    end_node
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    <forge pipeline node>
    -	|cap min:None max:100
    -	|fillna_
    -	|En Tokenization
    -
    - -
    - -
    -
    - -
    -
    -
    -

    Excute the processing

    - -
    -
    -
    -
    -
    - -
    -
    -
    end_df = end_node.run()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    [df edge]:cap min:None max:100
    -[df edge]:fillna_
    -[df edge]:En Tokenization
    -
    -
    -
    - -
    -
    - -
    -
    -
    -

    Checking the processed data

    - -
    -
    -
    -
    -
    - -
    -
    -
    end_df.head()
    -
    - -
    -
    -
    - -
    -
    - -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    idnamehost_idhost_nameneighbourhood_groupneighbourhoodlatitudelongituderoom_typepriceminimum_nightsnumber_of_reviewslast_reviewreviews_per_monthcalculated_host_listings_countavailability_365
    02539[Clean, &, quiet, apt, home, by, the, park]2787JohnBrooklynKensington40.64749-73.97237[Private, room]149192018-10-190.216365
    12595[Skylit, Midtown, Castle]2845JenniferManhattanMidtown40.75362-73.98377[Entire, home, /, apt]2251452019-05-210.382355
    23647[THE, VILLAGE, OF, HARLEM, ..., NEW, YORK, !]4632ElisabethManhattanHarlem40.80902-73.94190[Private, room]15030NaNNaN1365
    33831[Cozy, Entire, Floor, of, Brownstone]4869LisaRoxanneBrooklynClinton Hill40.68514-73.95976[Entire, home, /, apt]8911002019-07-054.641194
    45022[Entire, Apt, :, Spacious, Studio, /, Loft, by...7192LauraManhattanEast Harlem40.79851-73.94399[Entire, home, /, apt]801092018-11-190.1010
    -
    -
    - -
    - -
    -
    - -
    -
    -
    -

    Working with bigger data

    There is often the cases when we have to deal with csv > 500m in size or a huge sql table.

    -

    Gladely, pandas offer a chunksize solution, so we can process huge structured data in batch(defined by the chunk size)

    - -
    -
    -
    -
    -
    - -
    -
    -
    from forgebox.pipe import chunkNode
    -from forgebox.pipe.edge import saveCSV, saveSQL
    -
    - -
    -
    -
    - -
    -
    -
    -

    saveCSV : saving file could be a part of the pipeline, we can follow that edge by saveSQL if we like

    - -
    -
    -
    -
    -
    - -
    -
    -
    start_node = chunkNode(pd.read_csv(DATA, chunksize=5000), verbose = 1)
    -
    -end_node = start_node|cap_minmax_edge %"number_of_reviews"\
    -                    |fill_na_edge *["name","room_type"]\
    -                    |eng_twt_tk*["name","room_type"]\
    -                    |saveCSV(HOME/"nyc_processed.csv")
    -
    - -
    -
    -
    - -
    -
    -
    -

    Pipeline layout summary

    - -
    -
    -
    -
    -
    - -
    -
    -
    end_node
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    <forge pipeline node>
    -	|cap min:None max:100
    -	|fillna_
    -	|En Tokenization
    -	|save to csv
    -
    - -
    - -
    -
    - -
    -
    -
    -

    Notice

    -
      -
    • run function that
        -
      • start with a chunkNode has no return,
      • -
      • start with a Node will ruturn the result dataframe.
      • -
      -
    • -
    • This feature is purposefully designed, assuming the result data could also be huge and not suitable to remain its entirety in RAM.
    • -
    - -
    -
    -
    -
    -
    -

    Excute the processing, if you are annoyed by the verbosity, set verbose=0

    - -
    -
    -
    -
    -
    - -
    -
    -
    end_node.run()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    [df edge]:cap min:None max:100
    -[df edge]:fillna_
    -[df edge]:En Tokenization
    -[df edge]:save to csv
    -[df edge]:cap min:None max:100
    -[df edge]:fillna_
    -[df edge]:En Tokenization
    -[df edge]:save to csv
    -[df edge]:cap min:None max:100
    -[df edge]:fillna_
    -[df edge]:En Tokenization
    -[df edge]:save to csv
    -[df edge]:cap min:None max:100
    -[df edge]:fillna_
    -[df edge]:En Tokenization
    -[df edge]:save to csv
    -[df edge]:cap min:None max:100
    -[df edge]:fillna_
    -[df edge]:En Tokenization
    -[df edge]:save to csv
    -[df edge]:cap min:None max:100
    -[df edge]:fillna_
    -[df edge]:En Tokenization
    -[df edge]:save to csv
    -[df edge]:cap min:None max:100
    -[df edge]:fillna_
    -[df edge]:En Tokenization
    -[df edge]:save to csv
    -[df edge]:cap min:None max:100
    -[df edge]:fillna_
    -[df edge]:En Tokenization
    -[df edge]:save to csv
    -[df edge]:cap min:None max:100
    -[df edge]:fillna_
    -[df edge]:En Tokenization
    -[df edge]:save to csv
    -[df edge]:cap min:None max:100
    -[df edge]:fillna_
    -[df edge]:En Tokenization
    -[df edge]:save to csv
    -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    !head -n3 {HOME/"nyc_processed.csv"}
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    0	2539	['Clean', '&', 'quiet', 'apt', 'home', 'by', 'the', 'park']	2787	John	Brooklyn	Kensington	40.647490000000005	-73.97237	['Private', 'room']	149	1	9	2018-10-19	0.21	6	365
    -1	2595	['Skylit', 'Midtown', 'Castle']	2845	Jennifer	Manhattan	Midtown	40.75362	-73.98376999999999	['Entire', 'home', '/', 'apt']	225	1	45	2019-05-21	0.38	2	355
    -2	3647	['THE', 'VILLAGE', 'OF', 'HARLEM', '...', 'NEW', 'YORK', '!']	4632	Elisabeth	Manhattan	Harlem	40.809020000000004	-73.9419	['Private', 'room']	150	3	0			1	365
    -
    -
    -
    - -
    -
    - -
    -
    -
    -

    Define a new edge

    Create a new edge

    -

    Define the processing function with the define decorator.

    -
      -
    • col is a pandas data series, the concept of column in pandas
    • -
    • In this case we use the apply function of data series, any decorated function would work as long as it return another data series
    • -
    - -
    -
    -
    -
    -
    - -
    -
    -
    lower_case = colEdge("lower case")
    -
    -
    -def lowerList(x):
    -    return list(str(i).lower() for i in x)
    -
    -@lower_case.define
    -def lower(col):
    -    return col.apply(lowerList)
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    # The DIYed edge will work on columns "name" and "room_type" after tokenization
    -df = pd.read_csv(DATA)
    -start_node = Node(df)
    -end_node = start_node|cap_minmax_edge %"number_of_reviews"\
    -                    |fill_na_edge *["name","room_type"]\
    -                    |eng_twt_tk*["name","room_type"]\
    -                    |lower_case*["name","room_type"]
    -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    end_node
    -
    - -
    -
    -
    - -
    -
    - -
    - - - -
    -
    <forge pipeline node>
    -	|cap min:None max:100
    -	|fillna_
    -	|En Tokenization
    -	|lower case
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    -
    -
    end_df = end_node.run()
    -end_df.head()
    -
    - -
    -
    -
    - -
    -
    - -
    - -
    -
    [df edge]:cap min:None max:100
    -[df edge]:fillna_
    -[df edge]:En Tokenization
    -[df edge]:lower case
    -
    -
    -
    - -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    idnamehost_idhost_nameneighbourhood_groupneighbourhoodlatitudelongituderoom_typepriceminimum_nightsnumber_of_reviewslast_reviewreviews_per_monthcalculated_host_listings_countavailability_365
    02539[clean, &, quiet, apt, home, by, the, park]2787JohnBrooklynKensington40.64749-73.97237[private, room]149192018-10-190.216365
    12595[skylit, midtown, castle]2845JenniferManhattanMidtown40.75362-73.98377[entire, home, /, apt]2251452019-05-210.382355
    23647[the, village, of, harlem, ..., new, york, !]4632ElisabethManhattanHarlem40.80902-73.94190[private, room]15030NaNNaN1365
    33831[cozy, entire, floor, of, brownstone]4869LisaRoxanneBrooklynClinton Hill40.68514-73.95976[entire, home, /, apt]8911002019-07-054.641194
    45022[entire, apt, :, spacious, studio, /, loft, by...7192LauraManhattanEast Harlem40.79851-73.94399[entire, home, /, apt]801092018-11-190.1010
    -
    -
    - -
    - -
    -
    - -
    - {% endraw %} -