-
Notifications
You must be signed in to change notification settings - Fork 28
/
README.html
202 lines (202 loc) · 26.9 KB
/
README.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang xml:lang>
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>README</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
{ counter-reset: source-line 0; }
pre.numberSource code > span
{ position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
{ content: counter(source-line);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
color: #aaaaaa;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
div.sourceCode
{ }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code span.at { color: #7d9029; } /* Attribute */
code span.bn { color: #40a070; } /* BaseN */
code span.bu { } /* BuiltIn */
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code span.ch { color: #4070a0; } /* Char */
code span.cn { color: #880000; } /* Constant */
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
code span.dt { color: #902000; } /* DataType */
code span.dv { color: #40a070; } /* DecVal */
code span.er { color: #ff0000; font-weight: bold; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #40a070; } /* Float */
code span.fu { color: #06287e; } /* Function */
code span.im { } /* Import */
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
code span.op { color: #666666; } /* Operator */
code span.ot { color: #007020; } /* Other */
code span.pp { color: #bc7a00; } /* Preprocessor */
code span.sc { color: #4070a0; } /* SpecialChar */
code span.ss { color: #bb6688; } /* SpecialString */
code span.st { color: #4070a0; } /* String */
code span.va { color: #19177c; } /* Variable */
code span.vs { color: #4070a0; } /* VerbatimString */
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" href="data:text/css,%0Abody%20%7B%0A%2Dms%2Dtext%2Dsize%2Dadjust%3A%20100%25%3B%0A%2Dwebkit%2Dtext%2Dsize%2Dadjust%3A%20100%25%3B%0Aline%2Dheight%3A%201%2E5%3B%0Acolor%3A%20%2324292e%3B%0Afont%2Dfamily%3A%20%2Dapple%2Dsystem%2C%20system%2Dui%2C%20BlinkMacSystemFont%2C%20%22Segoe%20UI%22%2C%20Helvetica%2C%20Arial%2C%20sans%2Dserif%2C%20%22Apple%20Color%20Emoji%22%2C%20%22Segoe%20UI%20Emoji%22%2C%20%22Segoe%20UI%20Symbol%22%3B%0Afont%2Dsize%3A%2016px%3B%0Aline%2Dheight%3A%201%2E5%3B%0Aword%2Dwrap%3A%20break%2Dword%3B%0A%7D%0Abody%20%2Epl%2Dc%20%7B%0Acolor%3A%20%23969896%3B%0A%7D%0Abody%20%2Epl%2Dc1%2C%0Abody%20%2Epl%2Ds%20%2Epl%2Dv%20%7B%0Acolor%3A%20%230086b3%3B%0A%7D%0Abody%20%2Epl%2De%2C%0Abody%20%2Epl%2Den%20%7B%0Acolor%3A%20%23795da3%3B%0A%7D%0Abody%20%2Epl%2Dsmi%2C%0Abody%20%2Epl%2Ds%20%2Epl%2Ds1%20%7B%0Acolor%3A%20%23333%3B%0A%7D%0Abody%20%2Epl%2Dent%20%7B%0Acolor%3A%20%2363a35c%3B%0A%7D%0Abody%20%2Epl%2Dk%20%7B%0Acolor%3A%20%23a71d5d%3B%0A%7D%0Abody%20%2Epl%2Ds%2C%0Abody%20%2Epl%2Dpds%2C%0Abody%20%2Epl%2Ds%20%2Epl%2Dpse%20%2Epl%2Ds1%2C%0Abody%20%2Epl%2Dsr%2C%0Abody%20%2Epl%2Dsr%20%2Epl%2Dcce%2C%0Abody%20%2Epl%2Dsr%20%2Epl%2Dsre%2C%0Abody%20%2Epl%2Dsr%20%2Epl%2Dsra%20%7B%0Acolor%3A%20%23183691%3B%0A%7D%0Abody%20%2Epl%2Dv%2C%0Abody%20%2Epl%2Dsmw%20%7B%0Acolor%3A%20%23ed6a43%3B%0A%7D%0Abody%20%2Epl%2Dbu%20%7B%0Acolor%3A%20%23b52a1d%3B%0A%7D%0Abody%20%2Epl%2Dii%20%7B%0Acolor%3A%20%23f8f8f8%3B%0Abackground%2Dcolor%3A%20%23b52a1d%3B%0A%7D%0Abody%20%2Epl%2Dc2%20%7B%0Acolor%3A%20%23f8f8f8%3B%0Abackground%2Dcolor%3A%20%23b52a1d%3B%0A%7D%0Abody%20%2Epl%2Dc2%3A%3Abefore%20%7B%0Acontent%3A%20%22%5EM%22%3B%0A%7D%0Abody%20%2Epl%2Dsr%20%2Epl%2Dcce%20%7B%0Afont%2Dweight%3A%20bold%3B%0Acolor%3A%20%2363a35c%3B%0A%7D%0Abody%20%2Epl%2Dml%20%7B%0Acolor%3A%20%23693a17%3B%0A%7D%0Abody%20%2Epl%2Dmh%2C%0Abody%20%2Epl%2Dmh%20%2Epl%2Den%2C%0Abody%20%2Epl%2Dms%20%7B%0Afont%2Dweight%3A%20bold%3B%0Acolor%3A%20%231d3e81%3B%0A%7D%0Abody%20%2Epl%2Dmq%20%7B%0Acolor%3A%20%23008080%3B%0A%7D%0Abody%20%2Epl%2Dmi%20%7B%0Afont%2Dstyle%3A%20italic%3B%0Acolor%3A%20%23333%3B%0A%7D%0Abody%20%2Epl%2Dmb%20%7B%0Afont%2Dweight%3A%20bold%3B%0Acolor%3A%20%23333%3B%0A%7D%0Abody%20%2Epl%2Dmd%20%7B%0Acolor%3A%20%23bd2c00%3B%0Abackground%2Dcolor%3A%20%23ffecec%3B%0A%7D%0Abody%20%2Epl%2Dmi1%20%7B%0Acolor%3A%20%2355a532%3B%0Abackground%2Dcolor%3A%20%23eaffea%3B%0A%7D%0Abody%20%2Epl%2Dmc%20%7B%0Acolor%3A%20%23ef9700%3B%0Abackground%2Dcolor%3A%20%23ffe3b4%3B%0A%7D%0Abody%20%2Epl%2Dmi2%20%7B%0Acolor%3A%20%23d8d8d8%3B%0Abackground%2Dcolor%3A%20%23808080%3B%0A%7D%0Abody%20%2Epl%2Dmdr%20%7B%0Afont%2Dweight%3A%20bold%3B%0Acolor%3A%20%23795da3%3B%0A%7D%0Abody%20%2Epl%2Dmo%20%7B%0Acolor%3A%20%231d3e81%3B%0A%7D%0Abody%20%2Epl%2Dba%20%7B%0Acolor%3A%20%23595e62%3B%0A%7D%0Abody%20%2Epl%2Dsg%20%7B%0Acolor%3A%20%23c0c0c0%3B%0A%7D%0Abody%20%2Epl%2Dcorl%20%7B%0Atext%2Ddecoration%3A%20underline%3B%0Acolor%3A%20%23183691%3B%0A%7D%0Abody%20%2Eocticon%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Avertical%2Dalign%3A%20text%2Dtop%3B%0Afill%3A%20currentColor%3B%0A%7D%0Abody%20a%20%7B%0Abackground%2Dcolor%3A%20transparent%3B%0A%2Dwebkit%2Dtext%2Ddecoration%2Dskip%3A%20objects%3B%0A%7D%0Abody%20a%3Aactive%2C%0Abody%20a%3Ahover%20%7B%0Aoutline%2Dwidth%3A%200%3B%0A%7D%0Abody%20strong%20%7B%0Afont%2Dweight%3A%20inherit%3B%0A%7D%0Abody%20strong%20%7B%0Afont%2Dweight%3A%20bolder%3B%0A%7D%0Abody%20h1%20%7B%0Afont%2Dsize%3A%202em%3B%0Amargin%3A%200%2E67em%200%3B%0A%7D%0Abody%20img%20%7B%0Aborder%2Dstyle%3A%20none%3B%0A%7D%0Abody%20svg%3Anot%28%3Aroot%29%20%7B%0Aoverflow%3A%20hidden%3B%0A%7D%0Abody%20code%2C%0Abody%20kbd%2C%0Abody%20pre%20%7B%0Afont%2Dfamily%3A%20monospace%2C%20monospace%3B%0Afont%2Dsize%3A%201em%3B%0A%7D%0Abody%20hr%20%7B%0Abox%2Dsizing%3A%20content%2Dbox%3B%0Aheight%3A%200%3B%0Aoverflow%3A%20visible%3B%0A%7D%0Abody%20input%20%7B%0Afont%3A%20inherit%3B%0Amargin%3A%200%3B%0A%7D%0Abody%20input%20%7B%0Aoverflow%3A%20visible%3B%0A%7D%0Abody%20%5Btype%3D%22checkbox%22%5D%20%7B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0Apadding%3A%200%3B%0A%7D%0Abody%20%2A%20%7B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0A%7D%0Abody%20input%20%7B%0Afont%2Dfamily%3A%20inherit%3B%0Afont%2Dsize%3A%20inherit%3B%0Aline%2Dheight%3A%20inherit%3B%0A%7D%0Abody%20a%20%7B%0Acolor%3A%20%230366d6%3B%0Atext%2Ddecoration%3A%20none%3B%0A%7D%0Abody%20a%3Ahover%20%7B%0Atext%2Ddecoration%3A%20underline%3B%0A%7D%0Abody%20strong%20%7B%0Afont%2Dweight%3A%20600%3B%0A%7D%0Abody%20hr%20%7B%0Aheight%3A%200%3B%0Amargin%3A%2015px%200%3B%0Aoverflow%3A%20hidden%3B%0Abackground%3A%20transparent%3B%0Aborder%3A%200%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23dfe2e5%3B%0A%7D%0Abody%20hr%3A%3Abefore%20%7B%0Adisplay%3A%20table%3B%0Acontent%3A%20%22%22%3B%0A%7D%0Abody%20hr%3A%3Aafter%20%7B%0Adisplay%3A%20table%3B%0Aclear%3A%20both%3B%0Acontent%3A%20%22%22%3B%0A%7D%0Abody%20table%20%7B%0Aborder%2Dspacing%3A%200%3B%0Aborder%2Dcollapse%3A%20collapse%3B%0A%7D%0Abody%20td%2C%0Abody%20th%20%7B%0Apadding%3A%200%3B%0A%7D%0Abody%20h1%2C%0Abody%20h2%2C%0Abody%20h3%2C%0Abody%20h4%2C%0Abody%20h5%2C%0Abody%20h6%20%7B%0Amargin%2Dtop%3A%200%3B%0Amargin%2Dbottom%3A%200%3B%0A%7D%0Abody%20h1%20%7B%0Afont%2Dsize%3A%2032px%3B%0Afont%2Dweight%3A%20600%3B%0A%7D%0Abody%20h2%20%7B%0Afont%2Dsize%3A%2024px%3B%0Afont%2Dweight%3A%20600%3B%0A%7D%0Abody%20h3%20%7B%0Afont%2Dsize%3A%2020px%3B%0Afont%2Dweight%3A%20600%3B%0A%7D%0Abody%20h4%20%7B%0Afont%2Dsize%3A%2016px%3B%0Afont%2Dweight%3A%20600%3B%0A%7D%0Abody%20h5%20%7B%0Afont%2Dsize%3A%2014px%3B%0Afont%2Dweight%3A%20600%3B%0A%7D%0Abody%20h6%20%7B%0Afont%2Dsize%3A%2012px%3B%0Afont%2Dweight%3A%20600%3B%0A%7D%0Abody%20p%20%7B%0Amargin%2Dtop%3A%200%3B%0Amargin%2Dbottom%3A%2010px%3B%0A%7D%0Abody%20blockquote%20%7B%0Amargin%3A%200%3B%0A%7D%0Abody%20ul%2C%0Abody%20ol%20%7B%0Apadding%2Dleft%3A%200%3B%0Amargin%2Dtop%3A%200%3B%0Amargin%2Dbottom%3A%200%3B%0A%7D%0Abody%20ol%20ol%2C%0Abody%20ul%20ol%20%7B%0Alist%2Dstyle%2Dtype%3A%20lower%2Droman%3B%0A%7D%0Abody%20ul%20ul%20ol%2C%0Abody%20ul%20ol%20ol%2C%0Abody%20ol%20ul%20ol%2C%0Abody%20ol%20ol%20ol%20%7B%0Alist%2Dstyle%2Dtype%3A%20lower%2Dalpha%3B%0A%7D%0Abody%20dd%20%7B%0Amargin%2Dleft%3A%200%3B%0A%7D%0Abody%20code%20%7B%0Afont%2Dfamily%3A%20%22SFMono%2DRegular%22%2C%20Consolas%2C%20%22Liberation%20Mono%22%2C%20Menlo%2C%20Courier%2C%20monospace%3B%0Afont%2Dsize%3A%2012px%3B%0A%7D%0Abody%20pre%20%7B%0Amargin%2Dtop%3A%200%3B%0Amargin%2Dbottom%3A%200%3B%0Afont%3A%2012px%20%22SFMono%2DRegular%22%2C%20Consolas%2C%20%22Liberation%20Mono%22%2C%20Menlo%2C%20Courier%2C%20monospace%3B%0A%7D%0Abody%20%2Eocticon%20%7B%0Avertical%2Dalign%3A%20text%2Dbottom%3B%0A%7D%0Abody%20%2Epl%2D0%20%7B%0Apadding%2Dleft%3A%200%20%21important%3B%0A%7D%0Abody%20%2Epl%2D1%20%7B%0Apadding%2Dleft%3A%204px%20%21important%3B%0A%7D%0Abody%20%2Epl%2D2%20%7B%0Apadding%2Dleft%3A%208px%20%21important%3B%0A%7D%0Abody%20%2Epl%2D3%20%7B%0Apadding%2Dleft%3A%2016px%20%21important%3B%0A%7D%0Abody%20%2Epl%2D4%20%7B%0Apadding%2Dleft%3A%2024px%20%21important%3B%0A%7D%0Abody%20%2Epl%2D5%20%7B%0Apadding%2Dleft%3A%2032px%20%21important%3B%0A%7D%0Abody%20%2Epl%2D6%20%7B%0Apadding%2Dleft%3A%2040px%20%21important%3B%0A%7D%0Abody%3A%3Abefore%20%7B%0Adisplay%3A%20table%3B%0Acontent%3A%20%22%22%3B%0A%7D%0Abody%3A%3Aafter%20%7B%0Adisplay%3A%20table%3B%0Aclear%3A%20both%3B%0Acontent%3A%20%22%22%3B%0A%7D%0Abody%3E%2A%3Afirst%2Dchild%20%7B%0Amargin%2Dtop%3A%200%20%21important%3B%0A%7D%0Abody%3E%2A%3Alast%2Dchild%20%7B%0Amargin%2Dbottom%3A%200%20%21important%3B%0A%7D%0Abody%20a%3Anot%28%5Bhref%5D%29%20%7B%0Acolor%3A%20inherit%3B%0Atext%2Ddecoration%3A%20none%3B%0A%7D%0Abody%20%2Eanchor%20%7B%0Afloat%3A%20left%3B%0Apadding%2Dright%3A%204px%3B%0Amargin%2Dleft%3A%20%2D20px%3B%0Aline%2Dheight%3A%201%3B%0A%7D%0Abody%20%2Eanchor%3Afocus%20%7B%0Aoutline%3A%20none%3B%0A%7D%0Abody%20p%2C%0Abody%20blockquote%2C%0Abody%20ul%2C%0Abody%20ol%2C%0Abody%20dl%2C%0Abody%20table%2C%0Abody%20pre%20%7B%0Amargin%2Dtop%3A%200%3B%0Amargin%2Dbottom%3A%2016px%3B%0A%7D%0Abody%20hr%20%7B%0Aheight%3A%200%2E25em%3B%0Apadding%3A%200%3B%0Amargin%3A%2024px%200%3B%0Abackground%2Dcolor%3A%20%23e1e4e8%3B%0Aborder%3A%200%3B%0A%7D%0Abody%20blockquote%20%7B%0Apadding%3A%200%201em%3B%0Acolor%3A%20%236a737d%3B%0Aborder%2Dleft%3A%200%2E25em%20solid%20%23dfe2e5%3B%0A%7D%0Abody%20blockquote%3E%3Afirst%2Dchild%20%7B%0Amargin%2Dtop%3A%200%3B%0A%7D%0Abody%20blockquote%3E%3Alast%2Dchild%20%7B%0Amargin%2Dbottom%3A%200%3B%0A%7D%0Abody%20kbd%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Apadding%3A%203px%205px%3B%0Afont%2Dsize%3A%2011px%3B%0Aline%2Dheight%3A%2010px%3B%0Acolor%3A%20%23444d56%3B%0Avertical%2Dalign%3A%20middle%3B%0Abackground%2Dcolor%3A%20%23fafbfc%3B%0Aborder%3A%20solid%201px%20%23c6cbd1%3B%0Aborder%2Dbottom%2Dcolor%3A%20%23959da5%3B%0Aborder%2Dradius%3A%203px%3B%0Abox%2Dshadow%3A%20inset%200%20%2D1px%200%20%23959da5%3B%0A%7D%0Abody%20h1%2C%0Abody%20h2%2C%0Abody%20h3%2C%0Abody%20h4%2C%0Abody%20h5%2C%0Abody%20h6%20%7B%0Amargin%2Dtop%3A%2024px%3B%0Amargin%2Dbottom%3A%2016px%3B%0Afont%2Dweight%3A%20600%3B%0Aline%2Dheight%3A%201%2E25%3B%0A%7D%0Abody%20h1%20%2Eocticon%2Dlink%2C%0Abody%20h2%20%2Eocticon%2Dlink%2C%0Abody%20h3%20%2Eocticon%2Dlink%2C%0Abody%20h4%20%2Eocticon%2Dlink%2C%0Abody%20h5%20%2Eocticon%2Dlink%2C%0Abody%20h6%20%2Eocticon%2Dlink%20%7B%0Acolor%3A%20%231b1f23%3B%0Avertical%2Dalign%3A%20middle%3B%0Avisibility%3A%20hidden%3B%0A%7D%0Abody%20h1%3Ahover%20%2Eanchor%2C%0Abody%20h2%3Ahover%20%2Eanchor%2C%0Abody%20h3%3Ahover%20%2Eanchor%2C%0Abody%20h4%3Ahover%20%2Eanchor%2C%0Abody%20h5%3Ahover%20%2Eanchor%2C%0Abody%20h6%3Ahover%20%2Eanchor%20%7B%0Atext%2Ddecoration%3A%20none%3B%0A%7D%0Abody%20h1%3Ahover%20%2Eanchor%20%2Eocticon%2Dlink%2C%0Abody%20h2%3Ahover%20%2Eanchor%20%2Eocticon%2Dlink%2C%0Abody%20h3%3Ahover%20%2Eanchor%20%2Eocticon%2Dlink%2C%0Abody%20h4%3Ahover%20%2Eanchor%20%2Eocticon%2Dlink%2C%0Abody%20h5%3Ahover%20%2Eanchor%20%2Eocticon%2Dlink%2C%0Abody%20h6%3Ahover%20%2Eanchor%20%2Eocticon%2Dlink%20%7B%0Avisibility%3A%20visible%3B%0A%7D%0Abody%20h1%20%7B%0Apadding%2Dbottom%3A%200%2E3em%3B%0Afont%2Dsize%3A%202em%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23eaecef%3B%0A%7D%0Abody%20h2%20%7B%0Apadding%2Dbottom%3A%200%2E3em%3B%0Afont%2Dsize%3A%201%2E5em%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23eaecef%3B%0A%7D%0Abody%20h3%20%7B%0Afont%2Dsize%3A%201%2E25em%3B%0A%7D%0Abody%20h4%20%7B%0Afont%2Dsize%3A%201em%3B%0A%7D%0Abody%20h5%20%7B%0Afont%2Dsize%3A%200%2E875em%3B%0A%7D%0Abody%20h6%20%7B%0Afont%2Dsize%3A%200%2E85em%3B%0Acolor%3A%20%236a737d%3B%0A%7D%0Abody%20ul%2C%0Abody%20ol%20%7B%0Apadding%2Dleft%3A%202em%3B%0A%7D%0Abody%20ul%20ul%2C%0Abody%20ul%20ol%2C%0Abody%20ol%20ol%2C%0Abody%20ol%20ul%20%7B%0Amargin%2Dtop%3A%200%3B%0Amargin%2Dbottom%3A%200%3B%0A%7D%0Abody%20li%3Ep%20%7B%0Amargin%2Dtop%3A%2016px%3B%0A%7D%0Abody%20li%2Bli%20%7B%0Amargin%2Dtop%3A%200%2E25em%3B%0A%7D%0Abody%20dl%20%7B%0Apadding%3A%200%3B%0A%7D%0Abody%20dl%20dt%20%7B%0Apadding%3A%200%3B%0Amargin%2Dtop%3A%2016px%3B%0Afont%2Dsize%3A%201em%3B%0Afont%2Dstyle%3A%20italic%3B%0Afont%2Dweight%3A%20600%3B%0A%7D%0Abody%20dl%20dd%20%7B%0Apadding%3A%200%2016px%3B%0Amargin%2Dbottom%3A%2016px%3B%0A%7D%0Abody%20table%20%7B%0Adisplay%3A%20block%3B%0Awidth%3A%20100%25%3B%0Aoverflow%3A%20auto%3B%0A%7D%0Abody%20table%20th%20%7B%0Afont%2Dweight%3A%20600%3B%0A%7D%0Abody%20table%20th%2C%0Abody%20table%20td%20%7B%0Apadding%3A%206px%2013px%3B%0Aborder%3A%201px%20solid%20%23dfe2e5%3B%0A%7D%0Abody%20table%20tr%20%7B%0Abackground%2Dcolor%3A%20%23fff%3B%0Aborder%2Dtop%3A%201px%20solid%20%23c6cbd1%3B%0A%7D%0Abody%20table%20tr%3Anth%2Dchild%282n%29%20%7B%0Abackground%2Dcolor%3A%20%23f6f8fa%3B%0A%7D%0Abody%20img%20%7B%0Amax%2Dwidth%3A%20100%25%3B%0Abox%2Dsizing%3A%20content%2Dbox%3B%0Abackground%2Dcolor%3A%20%23fff%3B%0A%7D%0Abody%20code%20%7B%0Apadding%3A%200%3B%0Apadding%2Dtop%3A%200%2E2em%3B%0Apadding%2Dbottom%3A%200%2E2em%3B%0Amargin%3A%200%3B%0Afont%2Dsize%3A%2085%25%3B%0Abackground%2Dcolor%3A%20rgba%2827%2C31%2C35%2C0%2E05%29%3B%0Aborder%2Dradius%3A%203px%3B%0A%7D%0Abody%20code%3A%3Abefore%2C%0Abody%20code%3A%3Aafter%20%7B%0Aletter%2Dspacing%3A%20%2D0%2E2em%3B%0Acontent%3A%20%22%5C00a0%22%3B%0A%7D%0Abody%20pre%20%7B%0Aword%2Dwrap%3A%20normal%3B%0A%7D%0Abody%20pre%3Ecode%20%7B%0Apadding%3A%200%3B%0Amargin%3A%200%3B%0Afont%2Dsize%3A%20100%25%3B%0Aword%2Dbreak%3A%20normal%3B%0Awhite%2Dspace%3A%20pre%3B%0Abackground%3A%20transparent%3B%0Aborder%3A%200%3B%0A%7D%0Abody%20%2Ehighlight%20%7B%0Amargin%2Dbottom%3A%2016px%3B%0A%7D%0Abody%20%2Ehighlight%20pre%20%7B%0Amargin%2Dbottom%3A%200%3B%0Aword%2Dbreak%3A%20normal%3B%0A%7D%0Abody%20%2Ehighlight%20pre%2C%0Abody%20pre%20%7B%0Apadding%3A%2016px%3B%0Aoverflow%3A%20auto%3B%0Afont%2Dsize%3A%2085%25%3B%0Aline%2Dheight%3A%201%2E45%3B%0Abackground%2Dcolor%3A%20%23f6f8fa%3B%0Aborder%2Dradius%3A%203px%3B%0A%7D%0Abody%20pre%20code%20%7B%0Adisplay%3A%20inline%3B%0Amax%2Dwidth%3A%20auto%3B%0Apadding%3A%200%3B%0Amargin%3A%200%3B%0Aoverflow%3A%20visible%3B%0Aline%2Dheight%3A%20inherit%3B%0Aword%2Dwrap%3A%20normal%3B%0Abackground%2Dcolor%3A%20transparent%3B%0Aborder%3A%200%3B%0A%7D%0Abody%20pre%20code%3A%3Abefore%2C%0Abody%20pre%20code%3A%3Aafter%20%7B%0Acontent%3A%20normal%3B%0A%7D%0Abody%20%2Efull%2Dcommit%20%2Ebtn%2Doutline%3Anot%28%3Adisabled%29%3Ahover%20%7B%0Acolor%3A%20%23005cc5%3B%0Aborder%2Dcolor%3A%20%23005cc5%3B%0A%7D%0Abody%20kbd%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Apadding%3A%203px%205px%3B%0Afont%3A%2011px%20%22SFMono%2DRegular%22%2C%20Consolas%2C%20%22Liberation%20Mono%22%2C%20Menlo%2C%20Courier%2C%20monospace%3B%0Aline%2Dheight%3A%2010px%3B%0Acolor%3A%20%23444d56%3B%0Avertical%2Dalign%3A%20middle%3B%0Abackground%2Dcolor%3A%20%23fcfcfc%3B%0Aborder%3A%20solid%201px%20%23c6cbd1%3B%0Aborder%2Dbottom%2Dcolor%3A%20%23959da5%3B%0Aborder%2Dradius%3A%203px%3B%0Abox%2Dshadow%3A%20inset%200%20%2D1px%200%20%23959da5%3B%0A%7D%0Abody%20%3Achecked%2B%2Eradio%2Dlabel%20%7B%0Aposition%3A%20relative%3B%0Az%2Dindex%3A%201%3B%0Aborder%2Dcolor%3A%20%230366d6%3B%0A%7D%0Abody%20%2Etask%2Dlist%2Ditem%20%7B%0Alist%2Dstyle%2Dtype%3A%20none%3B%0A%7D%0Abody%20%2Etask%2Dlist%2Ditem%2B%2Etask%2Dlist%2Ditem%20%7B%0Amargin%2Dtop%3A%203px%3B%0A%7D%0Abody%20%2Etask%2Dlist%2Ditem%20input%20%7B%0Amargin%3A%200%200%2E2em%200%2E25em%20%2D1%2E6em%3B%0Avertical%2Dalign%3A%20middle%3B%0A%7D%0Abody%20hr%20%7B%0Aborder%2Dbottom%2Dcolor%3A%20%23eee%3B%0A%7D%0A" />
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<h1 id="shift-python">SHIFT Python</h1>
<h2 id="requirements">Requirements</h2>
<ul>
<li>Upgrade your operating system to the latest version. The installation instructions have been tested on the following systems:
<ul>
<li>macOS: macOS 11 Big Sur</li>
<li>Ubuntu: Ubuntu 20.04 LTS Focal Fossa</li>
<li>Windows: Windows 10</li>
</ul></li>
<li>Install <a href="https://www.jetbrains.com/pycharm">PyCharm Pro</a>. Use your Stevens email address to request a free student license (https://www.jetbrains.com/student).</li>
</ul>
<h2 id="installation">Installation</h2>
<h3 id="macos">macOS:</h3>
<ul>
<li>Download and install the latest version of <a href="https://www.anaconda.com/distribution/">Anaconda</a>.</li>
<li>Follow the instructions in <a href="https://github.com/hanlonlab/shift-python/wiki/SHIFT-Python-API">SHIFT Python API</a> to create a new environment and install all SHIFT packages.</li>
<li>Create a new project in PyCharm Pro:
<ul>
<li>Click <strong>PyCharm</strong> -> <strong>Preferences…</strong> -> <strong>Project: <em>Project Name</em></strong> -> <strong>Project Interpreter</strong>.</li>
<li>Click in the <strong>Project Interpreter</strong> bar and select <strong>Show All</strong> -> <strong><em>Plus Icon</em> (+)</strong> -> <strong>Conda Environment</strong>.</li>
<li>Select <strong>Existing environment</strong>. If you installed Anaconda with default settings, the <em>Interpreter</em> path should look something like <code>/Users/USERNAME/anaconda3/envs/shift/bin/python</code>.</li>
</ul></li>
<li>You are good to go! (You may also get started with <a href="#get-started-with-command-line">Command Line</a>.)</li>
</ul>
<h3 id="ubuntu">Ubuntu:</h3>
<ul>
<li>Download and install the latest version of <a href="https://www.anaconda.com/distribution/">Anaconda</a>.</li>
<li>Follow the instructions in <a href="https://github.com/hanlonlab/shift-python/wiki/SHIFT-Python-API">SHIFT Python API</a> to create a new environment and install all SHIFT packages.</li>
<li>Create a new project in PyCharm Pro:
<ul>
<li>Click <strong>File</strong> -> <strong>Settings…</strong> -> <strong>Project: <em>Project Name</em></strong> -> <strong>Project Interpreter</strong>.</li>
<li>Click in the <strong>Project Interpreter</strong> bar and select <strong>Show All</strong> -> <strong><em>Plus Icon</em> (+)</strong> -> <strong>Conda Environment</strong>.</li>
<li>Select <strong>Existing environment</strong>. If you installed Anaconda with default settings, the <em>Interpreter</em> path should look something like <code>/home/USERNAME/anaconda3/envs/shift/bin/python</code>.</li>
</ul></li>
<li>You are good to go! (You may also get started with <a href="#get-started-with-command-line">Command Line</a>.)</li>
</ul>
<h3 id="windows">Windows:</h3>
<ul>
<li>Install the Ubuntu subsystem using the <a href="https://docs.microsoft.com/en-us/windows/wsl/install-win10">Windows Subsystem for Linux Installation Guide for Windows 10</a>. After installation, you will find an Ubuntu icon in the Start menu. You can open an Ubuntu terminal by simply running this app.</li>
<li>Download and install the latest version of <a href="https://www.anaconda.com/distribution/">Anaconda</a>:
<ul>
<li>Please make sure you choose the Linux distribution.</li>
<li>You can browse files stored in Windows in the Ubuntu app under the <code>/mnt</code> folder. Thus, if you downloaded the Anaconda installation file to your desktop (<code>C:/Users/USERNAME/Desktop</code>), you will be able to find it in Ubuntu under <code>/mnt/c/Users/USERNAME/Desktop</code>.</li>
<li>Install Anaconda by opening the Ubuntu app and executing:</li>
</ul>
<div class="sourceCode" id="cb1"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="bu">cd</span> /mnt/c/Users/USERNAME/Desktop</span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="ex">./Anaconda3-yyyy.xx-Linux-x86_64.sh</span></span></code></pre></div></li>
<li>Follow the instructions in <a href="https://github.com/hanlonlab/shift-python/wiki/SHIFT-Python-API">SHIFT Python API</a> to create a new environment and install all SHIFT packages:
<ul>
<li>The last step (“In the Terminal”) must also be run from the Ubuntu app.</li>
</ul></li>
<li>Create a new project in PyCharm Pro:
<ul>
<li>Click <strong>File</strong> -> <strong>Settings…</strong> -> <strong>Project: <em>Project Name</em></strong> -> <strong>Project Interpreter</strong>.</li>
<li>Click in the <strong>Project Interpreter</strong> bar and select <strong>Show All</strong> -> <strong><em>Plus Icon</em> (+)</strong> -> <strong>WSL</strong>.</li>
<li>If you installed Anaconda with default settings, the <em>Interpreter</em> path should look something like <code>/home/USERNAME/anaconda3/envs/shift/bin/python</code>.</li>
</ul></li>
<li>You are good to go!</li>
</ul>
<h3 id="deprecated-docker-image">(Deprecated) Docker Image:</h3>
<ul>
<li>Step 01:
<ul>
<li>If you are using Windows 10, upgrade to Windows 10 Pro or Windows 10 Education:
<ul>
<li>Use your Stevens email address to login <a href="https://aka.ms/devtoolsforteaching">here</a> (IT confirms you should all have an account) or request an account from <a href="https://sit.teamdynamix.com/TDClient/Requests/ServiceDet?ID=19685">Stevens IT Helpdesk</a>.</li>
</ul></li>
</ul></li>
<li>Step 02:
<ul>
<li>Install <a href="https://www.docker.com/products/docker-desktop">Docker</a>. When you install Docker, make sure to choose <strong>Linux Containers</strong> and not <strong>Windows Containers</strong>:
<ul>
<li>For macOS, <a href="https://store.docker.com/editions/community/docker-ce-desktop-mac">Docker for macOS</a>.</li>
<li>For Windows, <a href="https://store.docker.com/editions/community/docker-ce-desktop-windows">Docker for Windows</a>.</li>
</ul></li>
<li>For Windows, if you store your file in a different drive location from <strong>C:/</strong>, then you will need to access the Docker preferences to add other Shared Folder locations, such as <strong>D:/</strong> or whatever.</li>
<li>Follow the online Docker installation instructions carefully and make sure to test the Docker installation.</li>
<li>NOTE: In some cases, you may need to enable virtualization on your computers.</li>
</ul></li>
<li>Step 03:
<ul>
<li>Download <code>shift_python-x.x.x-docker.zip</code>, the Docker Compose package from our <a href="https://github.com/hanlonlab/shift-python/releases">GitHub Release Page</a>.</li>
<li>Unzip the downloaded file to somewhere you like.</li>
<li>Access a terminal window on your computer. You may require admin privileges:
<ul>
<li>For macOS, Terminal.app.</li>
<li>For Windows, Powershell (run as administrator). NOTE: do not use PowerShell ISE.</li>
</ul></li>
</ul></li>
</ul>
<div class="sourceCode" id="cb2"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="bu">cd</span> [directory-you-unzipped-the-package]</span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="ex">docker-compose</span> build</span></code></pre></div>
<ul>
<li>If successful, you should see the Docker image named <code>shift-python_xxx_docker_anaconda3</code> by running:</li>
</ul>
<div class="sourceCode" id="cb3"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> images</span></code></pre></div>
<ul>
<li>Now you should be able to run the SHIFT Python Docker image by running:</li>
</ul>
<div class="sourceCode" id="cb4"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker-compose</span> up</span></code></pre></div>
<ul>
<li>Configure Docker as a remote interpreter in PyCharm Pro:
<ul>
<li>For Windows, follow the extra instructions in the <code>Prerequisites</code> session of this <a href="https://www.jetbrains.com/help/pycharm/using-docker-as-a-remote-interpreter.html">guide</a>.</li>
<li>Open an existing project, or create a completely new Python project in Pycharm Pro.</li>
<li>Follow the steps in the <code>Configuring Docker as a remote interpreter</code> session of this <a href="https://www.jetbrains.com/help/pycharm/using-docker-as-a-remote-interpreter.html">guide</a>.</li>
</ul></li>
<li>Installation finished!</li>
</ul>
<h2 id="get-started-with-command-line">Get Started with Command Line</h2>
<ul>
<li>Run <code>conda activate shift</code> to get into the <code>shift</code> environment. You need to do this every time you open a new shell (or you can add this command onto your <code>.bashrc</code> or <code>.bash_profile</code> file).</li>
<li>If you see <code>(shift)</code> in the beginning of your command line, that means you are in the right environment to run SHIFT.</li>
<li>Don’t forget to <code>import shift</code> when you use Python with SHIFT.</li>
</ul>
</body>
</html>