PKG-INFO 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777
  1. Metadata-Version: 2.1
  2. Name: tabulate
  3. Version: 0.8.9
  4. Summary: Pretty-print tabular data
  5. Home-page: https://github.com/astanin/python-tabulate
  6. Author: Sergey Astanin
  7. Author-email: s.astanin@gmail.com
  8. License: MIT
  9. Description: python-tabulate
  10. ===============
  11. Pretty-print tabular data in Python, a library and a command-line
  12. utility.
  13. The main use cases of the library are:
  14. - printing small tables without hassle: just one function call,
  15. formatting is guided by the data itself
  16. - authoring tabular data for lightweight plain-text markup: multiple
  17. output formats suitable for further editing or transformation
  18. - readable presentation of mixed textual and numeric data: smart
  19. column alignment, configurable number formatting, alignment by a
  20. decimal point
  21. Installation
  22. ------------
  23. To install the Python library and the command line utility, run:
  24. pip install tabulate
  25. The command line utility will be installed as `tabulate` to `bin` on
  26. Linux (e.g. `/usr/bin`); or as `tabulate.exe` to `Scripts` in your
  27. Python installation on Windows (e.g.
  28. `C:\Python27\Scripts\tabulate.exe`).
  29. You may consider installing the library only for the current user:
  30. pip install tabulate --user
  31. In this case the command line utility will be installed to
  32. `~/.local/bin/tabulate` on Linux and to
  33. `%APPDATA%\Python\Scripts\tabulate.exe` on Windows.
  34. To install just the library on Unix-like operating systems:
  35. TABULATE_INSTALL=lib-only pip install tabulate
  36. On Windows:
  37. set TABULATE_INSTALL=lib-only
  38. pip install tabulate
  39. The module provides just one function, `tabulate`, which takes a list of
  40. lists or another tabular data type as the first argument, and outputs a
  41. nicely formatted plain-text table:
  42. >>> from tabulate import tabulate
  43. >>> table = [["Sun",696000,1989100000],["Earth",6371,5973.6],
  44. ... ["Moon",1737,73.5],["Mars",3390,641.85]]
  45. >>> print(tabulate(table))
  46. ----- ------ -------------
  47. Sun 696000 1.9891e+09
  48. Earth 6371 5973.6
  49. Moon 1737 73.5
  50. Mars 3390 641.85
  51. ----- ------ -------------
  52. The following tabular data types are supported:
  53. - list of lists or another iterable of iterables
  54. - list or another iterable of dicts (keys as columns)
  55. - dict of iterables (keys as columns)
  56. - two-dimensional NumPy array
  57. - NumPy record arrays (names as columns)
  58. - pandas.DataFrame
  59. Examples in this file use Python2. Tabulate supports Python3 too.
  60. ### Headers
  61. The second optional argument named `headers` defines a list of column
  62. headers to be used:
  63. >>> print(tabulate(table, headers=["Planet","R (km)", "mass (x 10^29 kg)"]))
  64. Planet R (km) mass (x 10^29 kg)
  65. -------- -------- -------------------
  66. Sun 696000 1.9891e+09
  67. Earth 6371 5973.6
  68. Moon 1737 73.5
  69. Mars 3390 641.85
  70. If `headers="firstrow"`, then the first row of data is used:
  71. >>> print(tabulate([["Name","Age"],["Alice",24],["Bob",19]],
  72. ... headers="firstrow"))
  73. Name Age
  74. ------ -----
  75. Alice 24
  76. Bob 19
  77. If `headers="keys"`, then the keys of a dictionary/dataframe, or column
  78. indices are used. It also works for NumPy record arrays and lists of
  79. dictionaries or named tuples:
  80. >>> print(tabulate({"Name": ["Alice", "Bob"],
  81. ... "Age": [24, 19]}, headers="keys"))
  82. Age Name
  83. ----- ------
  84. 24 Alice
  85. 19 Bob
  86. ### Row Indices
  87. By default, only pandas.DataFrame tables have an additional column
  88. called row index. To add a similar column to any other type of table,
  89. pass `showindex="always"` or `showindex=True` argument to `tabulate()`.
  90. To suppress row indices for all types of data, pass `showindex="never"`
  91. or `showindex=False`. To add a custom row index column, pass
  92. `showindex=rowIDs`, where `rowIDs` is some iterable:
  93. >>> print(tabulate([["F",24],["M",19]], showindex="always"))
  94. - - --
  95. 0 F 24
  96. 1 M 19
  97. - - --
  98. ### Table format
  99. There is more than one way to format a table in plain text. The third
  100. optional argument named `tablefmt` defines how the table is formatted.
  101. Supported table formats are:
  102. - "plain"
  103. - "simple"
  104. - "github"
  105. - "grid"
  106. - "fancy\_grid"
  107. - "pipe"
  108. - "orgtbl"
  109. - "jira"
  110. - "presto"
  111. - "pretty"
  112. - "psql"
  113. - "rst"
  114. - "mediawiki"
  115. - "moinmoin"
  116. - "youtrack"
  117. - "html"
  118. - "unsafehtml"
  119. - "latex"
  120. - "latex\_raw"
  121. - "latex\_booktabs"
  122. - "latex\_longtable"
  123. - "textile"
  124. - "tsv"
  125. `plain` tables do not use any pseudo-graphics to draw lines:
  126. >>> table = [["spam",42],["eggs",451],["bacon",0]]
  127. >>> headers = ["item", "qty"]
  128. >>> print(tabulate(table, headers, tablefmt="plain"))
  129. item qty
  130. spam 42
  131. eggs 451
  132. bacon 0
  133. `simple` is the default format (the default may change in future
  134. versions). It corresponds to `simple_tables` in [Pandoc Markdown
  135. extensions](http://johnmacfarlane.net/pandoc/README.html#tables):
  136. >>> print(tabulate(table, headers, tablefmt="simple"))
  137. item qty
  138. ------ -----
  139. spam 42
  140. eggs 451
  141. bacon 0
  142. `github` follows the conventions of GitHub flavored Markdown. It
  143. corresponds to the `pipe` format without alignment colons:
  144. >>> print(tabulate(table, headers, tablefmt="github"))
  145. | item | qty |
  146. |--------|-------|
  147. | spam | 42 |
  148. | eggs | 451 |
  149. | bacon | 0 |
  150. `grid` is like tables formatted by Emacs'
  151. [table.el](http://table.sourceforge.net/) package. It corresponds to
  152. `grid_tables` in Pandoc Markdown extensions:
  153. >>> print(tabulate(table, headers, tablefmt="grid"))
  154. +--------+-------+
  155. | item | qty |
  156. +========+=======+
  157. | spam | 42 |
  158. +--------+-------+
  159. | eggs | 451 |
  160. +--------+-------+
  161. | bacon | 0 |
  162. +--------+-------+
  163. `fancy_grid` draws a grid using box-drawing characters:
  164. >>> print(tabulate(table, headers, tablefmt="fancy_grid"))
  165. ╒════════╤═══════╕
  166. │ item │ qty │
  167. ╞════════╪═══════╡
  168. │ spam │ 42 │
  169. ├────────┼───────┤
  170. │ eggs │ 451 │
  171. ├────────┼───────┤
  172. │ bacon │ 0 │
  173. ╘════════╧═══════╛
  174. `presto` is like tables formatted by Presto cli:
  175. >>> print(tabulate(table, headers, tablefmt="presto"))
  176. item | qty
  177. --------+-------
  178. spam | 42
  179. eggs | 451
  180. bacon | 0
  181. `pretty` attempts to be close to the format emitted by the PrettyTables
  182. library:
  183. >>> print(tabulate(table, headers, tablefmt="pretty"))
  184. +-------+-----+
  185. | item | qty |
  186. +-------+-----+
  187. | spam | 42 |
  188. | eggs | 451 |
  189. | bacon | 0 |
  190. +-------+-----+
  191. `psql` is like tables formatted by Postgres' psql cli:
  192. >>> print(tabulate(table, headers, tablefmt="psql"))
  193. +--------+-------+
  194. | item | qty |
  195. |--------+-------|
  196. | spam | 42 |
  197. | eggs | 451 |
  198. | bacon | 0 |
  199. +--------+-------+
  200. `pipe` follows the conventions of [PHP Markdown
  201. Extra](http://michelf.ca/projects/php-markdown/extra/#table) extension.
  202. It corresponds to `pipe_tables` in Pandoc. This format uses colons to
  203. indicate column alignment:
  204. >>> print(tabulate(table, headers, tablefmt="pipe"))
  205. | item | qty |
  206. |:-------|------:|
  207. | spam | 42 |
  208. | eggs | 451 |
  209. | bacon | 0 |
  210. `orgtbl` follows the conventions of Emacs
  211. [org-mode](http://orgmode.org/manual/Tables.html), and is editable also
  212. in the minor orgtbl-mode. Hence its name:
  213. >>> print(tabulate(table, headers, tablefmt="orgtbl"))
  214. | item | qty |
  215. |--------+-------|
  216. | spam | 42 |
  217. | eggs | 451 |
  218. | bacon | 0 |
  219. `jira` follows the conventions of Atlassian Jira markup language:
  220. >>> print(tabulate(table, headers, tablefmt="jira"))
  221. || item || qty ||
  222. | spam | 42 |
  223. | eggs | 451 |
  224. | bacon | 0 |
  225. `rst` formats data like a simple table of the
  226. [reStructuredText](http://docutils.sourceforge.net/docs/user/rst/quickref.html#tables)
  227. format:
  228. >>> print(tabulate(table, headers, tablefmt="rst"))
  229. ====== =====
  230. item qty
  231. ====== =====
  232. spam 42
  233. eggs 451
  234. bacon 0
  235. ====== =====
  236. `mediawiki` format produces a table markup used in
  237. [Wikipedia](http://www.mediawiki.org/wiki/Help:Tables) and on other
  238. MediaWiki-based sites:
  239. >>> print(tabulate(table, headers, tablefmt="mediawiki"))
  240. {| class="wikitable" style="text-align: left;"
  241. |+ <!-- caption -->
  242. |-
  243. ! item !! align="right"| qty
  244. |-
  245. | spam || align="right"| 42
  246. |-
  247. | eggs || align="right"| 451
  248. |-
  249. | bacon || align="right"| 0
  250. |}
  251. `moinmoin` format produces a table markup used in
  252. [MoinMoin](https://moinmo.in/) wikis:
  253. >>> print(tabulate(table, headers, tablefmt="moinmoin"))
  254. || ''' item ''' || ''' quantity ''' ||
  255. || spam || 41.999 ||
  256. || eggs || 451 ||
  257. || bacon || ||
  258. `youtrack` format produces a table markup used in Youtrack tickets:
  259. >>> print(tabulate(table, headers, tablefmt="youtrack"))
  260. || item || quantity ||
  261. | spam | 41.999 |
  262. | eggs | 451 |
  263. | bacon | |
  264. `textile` format produces a table markup used in
  265. [Textile](http://redcloth.org/hobix.com/textile/) format:
  266. >>> print(tabulate(table, headers, tablefmt="textile"))
  267. |_. item |_. qty |
  268. |<. spam |>. 42 |
  269. |<. eggs |>. 451 |
  270. |<. bacon |>. 0 |
  271. `html` produces standard HTML markup as an html.escape'd str
  272. with a ._repr_html_ method so that Jupyter Lab and Notebook display the HTML
  273. and a .str property so that the raw HTML remains accessible.
  274. `unsafehtml` table format can be used if an unescaped HTML is required:
  275. >>> print(tabulate(table, headers, tablefmt="html"))
  276. <table>
  277. <tbody>
  278. <tr><th>item </th><th style="text-align: right;"> qty</th></tr>
  279. <tr><td>spam </td><td style="text-align: right;"> 42</td></tr>
  280. <tr><td>eggs </td><td style="text-align: right;"> 451</td></tr>
  281. <tr><td>bacon </td><td style="text-align: right;"> 0</td></tr>
  282. </tbody>
  283. </table>
  284. `latex` format creates a `tabular` environment for LaTeX markup,
  285. replacing special characters like `_` or `\` to their LaTeX
  286. correspondents:
  287. >>> print(tabulate(table, headers, tablefmt="latex"))
  288. \begin{tabular}{lr}
  289. \hline
  290. item & qty \\
  291. \hline
  292. spam & 42 \\
  293. eggs & 451 \\
  294. bacon & 0 \\
  295. \hline
  296. \end{tabular}
  297. `latex_raw` behaves like `latex` but does not escape LaTeX commands and
  298. special characters.
  299. `latex_booktabs` creates a `tabular` environment for LaTeX markup using
  300. spacing and style from the `booktabs` package.
  301. `latex_longtable` creates a table that can stretch along multiple pages,
  302. using the `longtable` package.
  303. ### Column alignment
  304. `tabulate` is smart about column alignment. It detects columns which
  305. contain only numbers, and aligns them by a decimal point (or flushes
  306. them to the right if they appear to be integers). Text columns are
  307. flushed to the left.
  308. You can override the default alignment with `numalign` and `stralign`
  309. named arguments. Possible column alignments are: `right`, `center`,
  310. `left`, `decimal` (only for numbers), and `None` (to disable alignment).
  311. Aligning by a decimal point works best when you need to compare numbers
  312. at a glance:
  313. >>> print(tabulate([[1.2345],[123.45],[12.345],[12345],[1234.5]]))
  314. ----------
  315. 1.2345
  316. 123.45
  317. 12.345
  318. 12345
  319. 1234.5
  320. ----------
  321. Compare this with a more common right alignment:
  322. >>> print(tabulate([[1.2345],[123.45],[12.345],[12345],[1234.5]], numalign="right"))
  323. ------
  324. 1.2345
  325. 123.45
  326. 12.345
  327. 12345
  328. 1234.5
  329. ------
  330. For `tabulate`, anything which can be parsed as a number is a number.
  331. Even numbers represented as strings are aligned properly. This feature
  332. comes in handy when reading a mixed table of text and numbers from a
  333. file:
  334. >>> import csv ; from StringIO import StringIO
  335. >>> table = list(csv.reader(StringIO("spam, 42\neggs, 451\n")))
  336. >>> table
  337. [['spam', ' 42'], ['eggs', ' 451']]
  338. >>> print(tabulate(table))
  339. ---- ----
  340. spam 42
  341. eggs 451
  342. ---- ----
  343. To disable this feature use `disable_numparse=True`.
  344. >>> print(tabulate.tabulate([["Ver1", "18.0"], ["Ver2","19.2"]], tablefmt="simple", disable_numparse=True))
  345. ---- ----
  346. Ver1 18.0
  347. Ver2 19.2
  348. ---- ----
  349. ### Custom column alignment
  350. `tabulate` allows a custom column alignment to override the above. The
  351. `colalign` argument can be a list or a tuple of `stralign` named
  352. arguments. Possible column alignments are: `right`, `center`, `left`,
  353. `decimal` (only for numbers), and `None` (to disable alignment).
  354. Omitting an alignment uses the default. For example:
  355. >>> print(tabulate([["one", "two"], ["three", "four"]], colalign=("right",))
  356. ----- ----
  357. one two
  358. three four
  359. ----- ----
  360. ### Number formatting
  361. `tabulate` allows to define custom number formatting applied to all
  362. columns of decimal numbers. Use `floatfmt` named argument:
  363. >>> print(tabulate([["pi",3.141593],["e",2.718282]], floatfmt=".4f"))
  364. -- ------
  365. pi 3.1416
  366. e 2.7183
  367. -- ------
  368. `floatfmt` argument can be a list or a tuple of format strings, one per
  369. column, in which case every column may have different number formatting:
  370. >>> print(tabulate([[0.12345, 0.12345, 0.12345]], floatfmt=(".1f", ".3f")))
  371. --- ----- -------
  372. 0.1 0.123 0.12345
  373. --- ----- -------
  374. ### Text formatting
  375. By default, `tabulate` removes leading and trailing whitespace from text
  376. columns. To disable whitespace removal, set the global module-level flag
  377. `PRESERVE_WHITESPACE`:
  378. import tabulate
  379. tabulate.PRESERVE_WHITESPACE = True
  380. ### Wide (fullwidth CJK) symbols
  381. To properly align tables which contain wide characters (typically
  382. fullwidth glyphs from Chinese, Japanese or Korean languages), the user
  383. should install `wcwidth` library. To install it together with
  384. `tabulate`:
  385. pip install tabulate[widechars]
  386. Wide character support is enabled automatically if `wcwidth` library is
  387. already installed. To disable wide characters support without
  388. uninstalling `wcwidth`, set the global module-level flag
  389. `WIDE_CHARS_MODE`:
  390. import tabulate
  391. tabulate.WIDE_CHARS_MODE = False
  392. ### Multiline cells
  393. Most table formats support multiline cell text (text containing newline
  394. characters). The newline characters are honored as line break
  395. characters.
  396. Multiline cells are supported for data rows and for header rows.
  397. Further automatic line breaks are not inserted. Of course, some output
  398. formats such as latex or html handle automatic formatting of the cell
  399. content on their own, but for those that don't, the newline characters
  400. in the input cell text are the only means to break a line in cell text.
  401. Note that some output formats (e.g. simple, or plain) do not represent
  402. row delimiters, so that the representation of multiline cells in such
  403. formats may be ambiguous to the reader.
  404. The following examples of formatted output use the following table with
  405. a multiline cell, and headers with a multiline cell:
  406. >>> table = [["eggs",451],["more\nspam",42]]
  407. >>> headers = ["item\nname", "qty"]
  408. `plain` tables:
  409. >>> print(tabulate(table, headers, tablefmt="plain"))
  410. item qty
  411. name
  412. eggs 451
  413. more 42
  414. spam
  415. `simple` tables:
  416. >>> print(tabulate(table, headers, tablefmt="simple"))
  417. item qty
  418. name
  419. ------ -----
  420. eggs 451
  421. more 42
  422. spam
  423. `grid` tables:
  424. >>> print(tabulate(table, headers, tablefmt="grid"))
  425. +--------+-------+
  426. | item | qty |
  427. | name | |
  428. +========+=======+
  429. | eggs | 451 |
  430. +--------+-------+
  431. | more | 42 |
  432. | spam | |
  433. +--------+-------+
  434. `fancy_grid` tables:
  435. >>> print(tabulate(table, headers, tablefmt="fancy_grid"))
  436. ╒════════╤═══════╕
  437. │ item │ qty │
  438. │ name │ │
  439. ╞════════╪═══════╡
  440. │ eggs │ 451 │
  441. ├────────┼───────┤
  442. │ more │ 42 │
  443. │ spam │ │
  444. ╘════════╧═══════╛
  445. `pipe` tables:
  446. >>> print(tabulate(table, headers, tablefmt="pipe"))
  447. | item | qty |
  448. | name | |
  449. |:-------|------:|
  450. | eggs | 451 |
  451. | more | 42 |
  452. | spam | |
  453. `orgtbl` tables:
  454. >>> print(tabulate(table, headers, tablefmt="orgtbl"))
  455. | item | qty |
  456. | name | |
  457. |--------+-------|
  458. | eggs | 451 |
  459. | more | 42 |
  460. | spam | |
  461. `jira` tables:
  462. >>> print(tabulate(table, headers, tablefmt="jira"))
  463. | item | qty |
  464. | name | |
  465. |:-------|------:|
  466. | eggs | 451 |
  467. | more | 42 |
  468. | spam | |
  469. `presto` tables:
  470. >>> print(tabulate(table, headers, tablefmt="presto"))
  471. item | qty
  472. name |
  473. --------+-------
  474. eggs | 451
  475. more | 42
  476. spam |
  477. `pretty` tables:
  478. >>> print(tabulate(table, headers, tablefmt="pretty"))
  479. +------+-----+
  480. | item | qty |
  481. | name | |
  482. +------+-----+
  483. | eggs | 451 |
  484. | more | 42 |
  485. | spam | |
  486. +------+-----+
  487. `psql` tables:
  488. >>> print(tabulate(table, headers, tablefmt="psql"))
  489. +--------+-------+
  490. | item | qty |
  491. | name | |
  492. |--------+-------|
  493. | eggs | 451 |
  494. | more | 42 |
  495. | spam | |
  496. +--------+-------+
  497. `rst` tables:
  498. >>> print(tabulate(table, headers, tablefmt="rst"))
  499. ====== =====
  500. item qty
  501. name
  502. ====== =====
  503. eggs 451
  504. more 42
  505. spam
  506. ====== =====
  507. Multiline cells are not well supported for the other table formats.
  508. Usage of the command line utility
  509. ---------------------------------
  510. Usage: tabulate [options] [FILE ...]
  511. FILE a filename of the file with tabular data;
  512. if "-" or missing, read data from stdin.
  513. Options:
  514. -h, --help show this message
  515. -1, --header use the first row of data as a table header
  516. -o FILE, --output FILE print table to FILE (default: stdout)
  517. -s REGEXP, --sep REGEXP use a custom column separator (default: whitespace)
  518. -F FPFMT, --float FPFMT floating point number format (default: g)
  519. -f FMT, --format FMT set output table format; supported formats:
  520. plain, simple, github, grid, fancy_grid, pipe,
  521. orgtbl, rst, mediawiki, html, latex, latex_raw,
  522. latex_booktabs, latex_longtable, tsv
  523. (default: simple)
  524. Performance considerations
  525. --------------------------
  526. Such features as decimal point alignment and trying to parse everything
  527. as a number imply that `tabulate`:
  528. - has to "guess" how to print a particular tabular data type
  529. - needs to keep the entire table in-memory
  530. - has to "transpose" the table twice
  531. - does much more work than it may appear
  532. It may not be suitable for serializing really big tables (but who's
  533. going to do that, anyway?) or printing tables in performance sensitive
  534. applications. `tabulate` is about two orders of magnitude slower than
  535. simply joining lists of values with a tab, comma, or other separator.
  536. At the same time, `tabulate` is comparable to other table
  537. pretty-printers. Given a 10x10 table (a list of lists) of mixed text and
  538. numeric data, `tabulate` appears to be slower than `asciitable`, and
  539. faster than `PrettyTable` and `texttable` The following mini-benchmark
  540. was run in Python 3.8.3 in Windows 10 x64:
  541. ================================= ========== ===========
  542. Table formatter time, μs rel. time
  543. ================================= ========== ===========
  544. csv to StringIO 12.5 1.0
  545. join with tabs and newlines 15.6 1.3
  546. asciitable (0.8.0) 191.4 15.4
  547. tabulate (0.8.9) 472.8 38.0
  548. tabulate (0.8.9, WIDE_CHARS_MODE) 789.6 63.4
  549. PrettyTable (0.7.2) 879.1 70.6
  550. texttable (1.6.2) 1352.2 108.6
  551. ================================= ========== ===========
  552. Version history
  553. ---------------
  554. The full version history can be found at the [changelog](https://github.com/astanin/python-tabulate/blob/master/CHANGELOG).
  555. How to contribute
  556. -----------------
  557. Contributions should include tests and an explanation for the changes
  558. they propose. Documentation (examples, docstrings, README.md) should be
  559. updated accordingly.
  560. This project uses [pytest](https://docs.pytest.org/) testing
  561. framework and [tox](https://tox.readthedocs.io/) to automate testing in
  562. different environments. Add tests to one of the files in the `test/`
  563. folder.
  564. To run tests on all supported Python versions, make sure all Python
  565. interpreters, `pytest` and `tox` are installed, then run `tox` in the root
  566. of the project source tree.
  567. On Linux `tox` expects to find executables like `python2.6`,
  568. `python2.7`, `python3.4` etc. On Windows it looks for
  569. `C:\Python26\python.exe`, `C:\Python27\python.exe` and
  570. `C:\Python34\python.exe` respectively.
  571. To test only some Python environments, use `-e` option. For example, to
  572. test only against Python 2.7 and Python 3.8, run:
  573. tox -e py27,py38
  574. in the root of the project source tree.
  575. To enable NumPy and Pandas tests, run:
  576. tox -e py27-extra,py38-extra
  577. (this may take a long time the first time, because NumPy and Pandas will
  578. have to be installed in the new virtual environments)
  579. To fix code formatting:
  580. tox -e lint
  581. See `tox.ini` file to learn how to use to test
  582. individual Python versions.
  583. Contributors
  584. ------------
  585. Sergey Astanin, Pau Tallada Crespí, Erwin Marsi, Mik Kocikowski, Bill
  586. Ryder, Zach Dwiel, Frederik Rietdijk, Philipp Bogensberger, Greg
  587. (anonymous), Stefan Tatschner, Emiel van Miltenburg, Brandon Bennett,
  588. Amjith Ramanujam, Jan Schulz, Simon Percivall, Javier Santacruz
  589. López-Cepero, Sam Denton, Alexey Ziyangirov, acaird, Cesar Sanchez,
  590. naught101, John Vandenberg, Zack Dever, Christian Clauss, Benjamin
  591. Maier, Andy MacKinlay, Thomas Roten, Jue Wang, Joe King, Samuel Phan,
  592. Nick Satterly, Daniel Robbins, Dmitry B, Lars Butler, Andreas Maier,
  593. Dick Marinus, Sébastien Celles, Yago González, Andrew Gaul, Wim Glenn,
  594. Jean Michel Rouly, Tim Gates, John Vandenberg, Sorin Sbarnea,
  595. Wes Turner, Andrew Tija, Marco Gorelli, Sean McGinnis, danja100,
  596. endolith, Dominic Davis-Foster, pavlocat, Daniel Aslau, paulc,
  597. Felix Yan, Shane Loretz, Frank Busse, Harsh Singh, Derek Weitzel,
  598. Vladimir Vrzić, 서승우 (chrd5273), Georgy Frolov, Christian Cwienk,
  599. Bart Broere, Vilhelm Prytz.
  600. Platform: UNKNOWN
  601. Classifier: Development Status :: 4 - Beta
  602. Classifier: License :: OSI Approved :: MIT License
  603. Classifier: Operating System :: OS Independent
  604. Classifier: Programming Language :: Python :: 2
  605. Classifier: Programming Language :: Python :: 2.7
  606. Classifier: Programming Language :: Python :: 3
  607. Classifier: Programming Language :: Python :: 3.5
  608. Classifier: Programming Language :: Python :: 3.6
  609. Classifier: Programming Language :: Python :: 3.7
  610. Classifier: Programming Language :: Python :: 3.8
  611. Classifier: Programming Language :: Python :: 3.9
  612. Classifier: Topic :: Software Development :: Libraries
  613. Description-Content-Type: text/markdown
  614. Provides-Extra: widechars