├── .gitignore ├── EXAMPLES.md ├── OPTIONS.md ├── README.md ├── graph_cli ├── LICENSE ├── Makefile ├── README.md ├── graph_cli │ ├── __init__.py │ ├── graph.py │ ├── main.py │ └── options.py └── setup.py ├── samples ├── avocado.csv ├── bar.csv ├── cosine.csv ├── normal.csv ├── sine-cosine.csv └── sine.csv └── screenshots ├── avocado-resample.png ├── example-01.png ├── example-02.png ├── example-03.png ├── example-04.png ├── example-05.png ├── example-06.png ├── example-07.png ├── example-08.png ├── example-09.png ├── hist.png ├── sine-cosine.png ├── sine-resample.png └── sine.png /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | graph 3 | -------------------------------------------------------------------------------- /EXAMPLES.md: -------------------------------------------------------------------------------- 1 | # Examples 2 | An extended list of examples to demonstrate features and usage. 3 | 4 | ``` 5 | # example 1 6 | graph samples/sine.csv --marker '' --fill 7 | ``` 8 | 9 | ![example-01](screenshots/example-01.png) 10 | 11 | ``` 12 | # example 2 13 | graph samples/sine.csv --marker '' --xrange 0:500 14 | ``` 15 | 16 | ![example-02](screenshots/example-02.png) 17 | 18 | ``` 19 | # example 3 20 | graph samples/sine-cosine.csv --marker '' --style='-.,-' --ylabel 'y' --legend 'sin,cos' 21 | ``` 22 | 23 | ![example-03](screenshots/example-03.png) 24 | 25 | ``` 26 | # example 4 27 | graph samples/bar.csv --bar 28 | ``` 29 | 30 | ![example-04](screenshots/example-04.png) 31 | 32 | ``` 33 | # example 5 34 | graph samples/bar.csv --bar -y 2,3 --width 0.1 --ylabel 'Price ($)' 35 | ``` 36 | 37 | ![example-05](screenshots/example-05.png) 38 | 39 | ``` 40 | # example 6 41 | graph samples/avocado.csv -y 2 --resample 2W 42 | ``` 43 | 44 | ![example-06](screenshots/example-06.png) 45 | 46 | ``` 47 | # example 7 48 | graph samples/sine.csv -t '0:-0.08=start' -t '250=high' -t '500=mid' -t '750=low' -t '1000=end' --marker '' --xscale 250 --yscale 0.5 49 | ``` 50 | 51 | ![example-07](screenshots/example-07.png) 52 | 53 | ``` 54 | # example 8 55 | graph samples/sine-cosine.csv --marker '' --annotate '500=sin' --annotate '750=cos' --annotate '180:-0.8:90:-0.95=legend' 56 | ``` 57 | 58 | ![example-08](screenshots/example-08.png) 59 | 60 | ``` 61 | # example 9 62 | graph samples/normal.csv --hist-perc --bins 15 63 | ``` 64 | 65 | ![example-09](screenshots/example-09.png) 66 | -------------------------------------------------------------------------------- /OPTIONS.md: -------------------------------------------------------------------------------- 1 | # Options 2 | This document details each option in `graph-cli`. There are two "types" 3 | of options: global and line specific. Global options are attributes like the 4 | title or ylabel, and line specific options are attributes like width and style. 5 | 6 | ### General Notes 7 | These notes explain some features that might not be obvious. 8 | 9 | - All line specific options can be a comma separated list of values 10 | - Due to argparse quirks, options that need to start with `-` must be written using `--opt=val` (this includes negative values in ranges) 11 | - Example: `--style='-.'` 12 | - Example: `--yrange=-0.5:1.0` 13 | - The annotate flag will cycle through available lines if only xpos is specified 14 | - Example 8 in [EXAMPLES.md](EXAMPLES.md) shows this 15 | - Time formats use the [C standard format codes](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior) 16 | - `epoch` may be used as a special input-time format to interpret the column as seconds or milliseconds since [Unix epoch](https://en.wikipedia.org/wiki/Unix_time) 17 | 18 | ### Required Options 19 | 20 | | Option | Description | 21 | | ------ | ----------- | 22 | | CSV | the CSV file containing the data to graph. Use `-` to read from stdin. | 23 | 24 | ### Global Options 25 | These options persist across chains and are generally set only once. 26 | 27 | | Long | Short | Default | Description | 28 | | ----------- | ------------ | ------- | ----------- | 29 | | --xlabel | -X | match xcol | the x-axis label | 30 | | --xscale | | auto | the x-axis scaling | 31 | | --xrange | | auto | the x-axis window (min:max) | 32 | | --ylabel | -Y | match ycol | the y-axis label | 33 | | --yscale | | auto | the y-axis scaling | 34 | | --yrange | | auto | the y-axis window (min:max) | 35 | | --figsize | | 16x10 | figure dimensions (XxY) | 36 | | --title | -T | ylabel vs. xlabel | title of the graph | 37 | | --fontsize | | 18 | font size on graph | 38 | | --tick-fontsize | | 10 | font size of tick labels | 39 | | --label-fontsize | | 10 | label font size | 40 | | --xtick-fontsize | | 10 | font size of xtick labels | 41 | | --xtick-angle | | 0 | xtick label angle in degrees | 42 | | --xtick-align | | center | xtick label text alignment | 43 | | --xlabel-fontsize | | 10 | xlabel font size | 44 | | --ytick-fontsize | | 10 | font size of ytick labels | 45 | | --ytick-angle | | 0 | ytick label angle in degrees | 46 | | --ytick-align | | center | ytick label text alignment | 47 | | --ylabel-fontsize | | 10 | ylabel font size | 48 | | --grid | | -. | grid linestyle | 49 | | --no-grid | | false | disable grid | 50 | | --text | -t | | add text to the graph (xpos=text \| xpos:ypos=text) | 51 | | --annotate | -a | | add annotation (text and arrow) to the graph (xpos=text \| xpos:ycol=text \| xtext:ytext:xpos:ypos=text) | 52 | | --time-format-output | -F | auto | time format to use for the x-axis | 53 | | --no-tight | | false | disable tight layout | 54 | | --chain | -C | false | use this option to combine graphs into a single image | 55 | 56 | ### Line Specific Options 57 | These options are specific to each invocation of `graph-cli` and can be 58 | used to customize each line. Generally speaking, each of these options 59 | can be a comma separated list. 60 | 61 | | Long | Short | Default | Description | 62 | | ----------- | ------------ | ------- | ----------- | 63 | | --xcol | -x | 1 | the column number or name to use for the x-axis | 64 | | --ycol | -y | all other columns | the column number or name to use for the y-axis | 65 | | --legend | -l | match ycol | the label name for the legend | 66 | | --color | -c | auto | the color of the line | 67 | | --style | | auto | the style of the line | 68 | | --fill | | false | fill in beneath the lines | 69 | | --marker | -m | o | marker style of the data points | 70 | | --width | -w | line: 2, bar: 0.8 | line or bar width size | 71 | | --offset | | 0 | bar chart base offset | 72 | | --markersize | | 2 | marker (point) size | 73 | | --output | -o | | save the graph to a file | 74 | | --time-format-input | -f | auto | time format of timeseries column (this option can speed up processing of large datasets) | 75 | | --resample | -r | | resample values and take the mean (can be used with timeseries data as well) | 76 | | --resample-action | | mean | action to take when resampling (mean, median, etc.) See [docs](https://pandas.pydata.org/pandas-docs/stable/reference/resampling.html#computations-descriptive-stats) for a full list and description | 77 | | --sort | -s | false | sort by xcol values | 78 | | --bar | | false | create a bar graph | 79 | | --barh | | false | create a barh graph (horizontal bars) | 80 | | --bar-label | | false | label bars with their values | 81 | | --bar-format | | %g | format specifier for bar labels | 82 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # graph-cli 2 | 3 | A CLI utility to create graphs from CSV files. 4 | 5 | `graph-cli` is designed to be highly configurable for easy and detailed 6 | graph generation. It has many flags to acquire this detail and uses 7 | reasonable defaults to avoid bothering the user. It also leverages 8 | chaining, so you can create complex graphs from multiple CSV files. 9 | 10 | A full list of options can be found in [OPTIONS.md](OPTIONS.md). 11 | 12 | ## Installation 13 | 14 | ``` 15 | pip install graph-cli 16 | ``` 17 | 18 | ## Examples 19 | A few quick examples. For an extended list that further demonstrates 20 | features and usage, please view [EXAMPLES.md](EXAMPLES.md). 21 | 22 | ``` 23 | graph samples/sine.csv -o sine.png 24 | ``` 25 | 26 | ![sine](screenshots/sine.png) 27 | 28 | ``` 29 | graph samples/normal.csv --hist -o hist.png 30 | ``` 31 | 32 | ![hist](screenshots/hist.png) 33 | 34 | ``` 35 | graph samples/sine.csv --marker '' --chain | \ 36 | graph samples/cosine.csv --title 'sine and cosine' \ 37 | --ylabel '' --xscale 250 --marker '' -o sine-cosine.png 38 | ``` 39 | 40 | ``` 41 | graph samples/sine-cosine.csv --title 'sine and cosine' \ 42 | --ylabel '' --xscale 250 --marker '' -o sine-cosine.png 43 | ``` 44 | 45 | ![sine-cosine](screenshots/sine-cosine.png) 46 | 47 | ``` 48 | graph samples/sine.csv --resample 125 -o sine-resample.png 49 | ``` 50 | 51 | ![sine-resample](screenshots/sine-resample.png) 52 | 53 | ``` 54 | graph samples/avocado.csv -x 'Date' -y 'AveragePrice' --resample 1W -o avocado-resample.png 55 | ``` 56 | 57 | ![avocado-resample](screenshots/avocado-resample.png) 58 | 59 | ## Donate 60 | 61 | I develop this software in my spare time. If you find it useful, consider 62 | buying me a coffee! Thank you! 63 | 64 | [![ko-fi](https://www.ko-fi.com/img/donate_sm.png)](https://ko-fi.com/O5O0LAWC) 65 | -------------------------------------------------------------------------------- /graph_cli/LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . -------------------------------------------------------------------------------- /graph_cli/Makefile: -------------------------------------------------------------------------------- 1 | PROJECT = graph_cli 2 | PYTHON = python3 3 | 4 | .DEFAULT: build 5 | 6 | .PHONY: build 7 | build: setup.py $(PROJECT) 8 | $(PYTHON) setup.py sdist bdist_wheel 9 | 10 | dist: build 11 | 12 | .PHONY: test 13 | test: $(PROJECT) 14 | $(PYTHON) -m unittest discover tests 15 | 16 | .PHONY: install 17 | install: build 18 | sudo $(PYTHON) setup.py install --record .install-files 19 | 20 | .PHONY: uninstall 21 | uninstall: setup.py .install-files 22 | cat .install-files | xargs sudo rm -rf 23 | rm -f .install-files 24 | 25 | .PHONY: push 26 | push: dist 27 | twine upload dist/* 28 | 29 | .PHONY: push-test 30 | push-test: dist 31 | twine upload --repository-url https://test.pypi.org/legacy/ dist/* 32 | 33 | .PHONY: clean 34 | clean: 35 | rm -rf build dist *.egg-info $(PROJECT)/*.pyc 36 | -------------------------------------------------------------------------------- /graph_cli/README.md: -------------------------------------------------------------------------------- 1 | # graph-cli 2 | 3 | A CLI utility to create graphs from CSV files. 4 | 5 | `graph-cli` is designed to be highly configurable for easy and detailed 6 | graph generation. It has many flags to acquire this detail and uses 7 | reasonable defaults to avoid bothering the user. It also leverages 8 | chaining, so you can create complex graphs from multiple CSV files. 9 | 10 | Source: [mcastorina/graph-cli](https://github.com/mcastorina/graph-cli) 11 | 12 | ## Donate 13 | 14 | I develop this software in my spare time. If you find it useful, consider 15 | buying me a coffee! Thank you! 16 | 17 | [![ko-fi](https://www.ko-fi.com/img/donate_sm.png)](https://ko-fi.com/O5O0LAWC) 18 | -------------------------------------------------------------------------------- /graph_cli/graph_cli/__init__.py: -------------------------------------------------------------------------------- 1 | from . import main 2 | from . import graph 3 | from . import options 4 | 5 | name = "graph_cli" 6 | __all__ = ["main", "graph", "options"] 7 | -------------------------------------------------------------------------------- /graph_cli/graph_cli/graph.py: -------------------------------------------------------------------------------- 1 | from sys import stdin 2 | import sys 3 | # set default encoding to utf8 instead of ascii for python2 4 | if sys.version_info[0] == 2: 5 | reload(sys) 6 | sys.setdefaultencoding('utf8') 7 | 8 | import numpy as np 9 | import pickle 10 | from math import sin, cos, pi 11 | 12 | import pandas as pd 13 | import numpy as np 14 | import logging 15 | 16 | graph_global_fns = ['update_globals', 'dump', 'remove_global_flags'] 17 | 18 | class Graph: 19 | # static variables 20 | xlabel = None 21 | xscale = None 22 | xrange = None 23 | ylabel = None 24 | yscale = None 25 | yrange = None 26 | title = None 27 | figsize = None 28 | fontsize = None 29 | tick_fontsize = None 30 | label_fontsize = None 31 | xtick_fontsize = None 32 | ytick_fontsize = None 33 | xlabel_fontsize = None 34 | ylabel_fontsize = None 35 | no_grid = None 36 | grid = None 37 | grid_color = None 38 | grid_alpha = None 39 | grid_width = None 40 | text = None 41 | annotate = None 42 | xtick_angle = None 43 | ytick_angle = None 44 | xtick_align = None 45 | ytick_align = None 46 | exponent_range = None 47 | time_format_output = None 48 | no_tight = None 49 | def __init__(self): 50 | self.xcol = None 51 | self.ycol = None 52 | self.legend = None 53 | self.color = None 54 | self.style = None 55 | self.fill = None 56 | self.marker = None 57 | self.width = None 58 | self.offset = None 59 | self.markersize = None 60 | self.output = None 61 | self.time_format_input = None 62 | self.resample = None 63 | self.resample_action = None 64 | self.sort = None 65 | self.bar = None 66 | self.barh = None 67 | self.bar_label = None 68 | self.bar_format = None 69 | self.hist = None 70 | self.hist_perc = None 71 | self.bins = None 72 | self.bin_size = None 73 | self.timeseries = None 74 | def __str__(self): 75 | return str(self.__data__()) 76 | def __repr__(self): 77 | return self.__str__() 78 | def __data__(self): 79 | data = {'globals': {}, 'attributes': {}} 80 | for attr in [y for y in dir(Graph) 81 | if not (y.startswith('__') and y.endswith('__'))]: 82 | if attr in graph_global_fns: continue 83 | data['globals'][attr] = getattr(Graph, attr) 84 | for attr in [y for y in dir(self) 85 | if not (y.startswith('__') and y.endswith('__'))]: 86 | if attr in graph_global_fns: continue 87 | if attr in data['globals']: continue 88 | data['attributes'][attr] = getattr(self, attr) 89 | data['attributes']['xcol'] = str(data['attributes']['xcol']).split('\n')[-1] 90 | data['attributes']['ycol'] = str(data['attributes']['ycol']).split('\n')[-1] 91 | return data 92 | @staticmethod 93 | def update_globals(args): 94 | # first load previous pickled globals 95 | # loop through all attributes that don't start and end with '__' 96 | for attr in [y for y in dir(Graph) 97 | if not (y.startswith('__') and y.endswith('__'))]: 98 | if attr in graph_global_fns: continue 99 | if attr not in dir(args): continue 100 | val = getattr(args, attr) 101 | cur = getattr(Graph, attr) 102 | # if the attribute has already been set and index 1 103 | # (flag for user-set) is False, then update 104 | if cur is None: 105 | setattr(Graph, attr, val) 106 | if type(cur) is tuple and not cur[1]: 107 | setattr(Graph, attr, val) 108 | if type(cur) is tuple and cur[1] and type(val) is tuple and val[1]: 109 | # if list, append 110 | if type(val[0]) is list: 111 | val = (cur[0] + val[0], val[1]) 112 | setattr(Graph, attr, val) 113 | @staticmethod 114 | def dump(graphs): 115 | return (graphs, graphs[0].__data__()['globals']) 116 | @staticmethod 117 | def remove_global_flags(): 118 | for attr in [y for y in dir(Graph) 119 | if not (y.startswith('__') and y.endswith('__'))]: 120 | if attr in graph_global_fns: continue 121 | val = getattr(Graph, attr) 122 | if type(val) is tuple: 123 | setattr(Graph, attr, val[0]) 124 | 125 | def process_graph_def(g): 126 | g.timeseries = False 127 | try: 128 | # automatically convert to datetime 129 | # if time_format is specified or the column type is object 130 | if g.time_format_input is not None: 131 | if g.time_format_input == 'epoch': 132 | # try seconds first, if it fails, try milliseconds 133 | try: g.xcol = pd.to_datetime(g.xcol, unit='s') 134 | except: 135 | try: g.xcol = pd.to_datetime(g.xcol, unit='ms') 136 | except: 137 | logging.error('could not convert to epoch time format') 138 | sys.exit(1) 139 | else: 140 | g.xcol = pd.to_datetime(g.xcol, format=g.time_format_input) 141 | g.timeseries = True 142 | elif Graph.time_format_output[0] is not None: 143 | g.xcol = pd.to_datetime(g.xcol) 144 | g.timeseries = True 145 | elif (not (g.bar or g.barh)) and g.xcol.dtype == np.dtype('O'): 146 | g.xcol = pd.to_datetime(g.xcol) 147 | g.timeseries = True 148 | except: pass 149 | 150 | # sort 151 | if g.sort: 152 | df = pd.DataFrame({g.xcol.name: g.xcol, g.ycol.name: g.ycol}) 153 | df.sort_values(g.xcol.name, inplace=True) 154 | xcol, ycol = df[g.xcol.name], df[g.ycol.name] 155 | # resample 156 | if g.resample: 157 | df = pd.DataFrame({g.xcol.name: g.xcol, g.ycol.name: g.ycol}) 158 | try: 159 | if g.timeseries: 160 | df.set_index(g.xcol, inplace=True) 161 | # TODO: figure out what to do with NA 162 | df = df.resample(g.resample).agg({g.ycol.name: g.resample_action}).dropna() 163 | df.reset_index(inplace=True) 164 | else: 165 | x_min, x_max = df[g.xcol.name].min(), df[g.xcol.name].max() 166 | g.resample = float(g.resample) 167 | bins = np.linspace(x_min + g.resample/2, 168 | x_max - g.resample/2, 169 | int(float(x_max - x_min + g.resample)/g.resample)) 170 | df = df.groupby(np.digitize(df[g.xcol.name], bins)).agg({g.xcol.name: 'mean', g.ycol.name: g.resample_action}).dropna() 171 | except Exception as e: 172 | logging.error('Error: Could not resample. "%s"' % str(e)) 173 | exit(1) 174 | g.xcol, g.ycol = df[g.xcol.name], df[g.ycol.name] 175 | 176 | def get_graph_def(xcol, ycol, legend, color, style, fill, marker, width, 177 | offset, markersize, output, time_format_input, resample, resample_action, 178 | sort, bar, barh, bar_label, bar_format, hist, hist_perc, bins, bin_size): 179 | # get dict of args (must match Graph attribute names) 180 | from copy import copy 181 | kvs = copy(locals()) 182 | # build graph 183 | g = Graph() 184 | for attr, val in kvs.items(): 185 | setattr(g, attr, val) 186 | # apply functions in preparation of graphing 187 | process_graph_def(g) 188 | return g 189 | 190 | def get_graph_defs(args): 191 | graphs, globals = read_chain(args) 192 | class AttrDict(dict): 193 | def __init__(self, *args, **kwargs): 194 | super(AttrDict, self).__init__(*args, **kwargs) 195 | self.__dict__ = self 196 | Graph.update_globals(AttrDict(globals)) 197 | 198 | # zip together options.specific_attrs with default values 199 | # and generate graphs definitions 200 | for g in zip(args.xcol, args.ycol, args.legend, args.color, args.style, 201 | args.fill, args.marker, args.width, args.offset, args.markersize, 202 | args.output, args.time_format_input, args.resample, args.resample_action, 203 | args.sort, args.bar, args.barh, args.bar_label, args.bar_format, args.hist, 204 | args.hist_perc, args.bins, args.bin_size): 205 | graphs += [get_graph_def(*g)] 206 | 207 | return graphs 208 | 209 | def read_chain(args): 210 | chain = ([], {}) 211 | # read stdin for chained data and unpickle into chain array 212 | # check if stdin is not a terminal 213 | if stdin is not None and not stdin.isatty() and args.file != stdin: 214 | if sys.version_info[0] == 2: 215 | # handle reading from stdin for python2 216 | data = stdin.read() 217 | else: 218 | # TODO: what is the difference between stdin.buffer.read() and stdin.read() ? 219 | data = stdin.buffer.read() 220 | if len(data) > 0: 221 | chain = pickle.loads(data) 222 | 223 | # check our data is what we expect it to be 224 | # TODO: error handling 225 | assert(isinstance(chain, tuple)) 226 | assert(len(chain) == 2) 227 | assert(isinstance(chain[0], list)) 228 | assert(isinstance(chain[1], dict)) 229 | for link in chain[0]: 230 | assert(isinstance(link, Graph)) 231 | 232 | return chain 233 | 234 | def create_graph(graphs): 235 | import matplotlib 236 | if graphs[-1].output: 237 | # disables screen requirement for plotting 238 | # must be called before importing matplotlib.pyplot 239 | matplotlib.use('Agg') 240 | else: 241 | # sets backend to qt4 242 | # required for python2 243 | matplotlib.rcParams['backend'] = 'Qt5Agg' 244 | import matplotlib.pyplot as plt 245 | from matplotlib.ticker import PercentFormatter, ScalarFormatter, FixedFormatter 246 | from matplotlib.dates import DateFormatter 247 | 248 | # set global fontsize if any 249 | if Graph.fontsize[1]: 250 | plt.rcParams.update({'font.size': Graph.fontsize[0]}) 251 | if Graph.xlabel_fontsize[1] == False and Graph.label_fontsize[1] == True: 252 | Graph.xlabel_fontsize = (Graph.label_fontsize[0], False) 253 | if Graph.ylabel_fontsize[1] == False and Graph.label_fontsize[1] == True: 254 | Graph.ylabel_fontsize = (Graph.label_fontsize[0], False) 255 | if Graph.xtick_fontsize[1] == False and Graph.tick_fontsize[1] == True: 256 | Graph.xtick_fontsize = (Graph.tick_fontsize[0], False) 257 | if Graph.ytick_fontsize[1] == False and Graph.tick_fontsize[1] == True: 258 | Graph.ytick_fontsize = (Graph.tick_fontsize[0], False) 259 | 260 | # make Graph.global = (val, flag) just val 261 | Graph.remove_global_flags() 262 | 263 | # create figure 264 | fig, ax = plt.subplots(figsize=(Graph.figsize)) 265 | 266 | # iterate over graphs array 267 | for graph in graphs: 268 | if graph.bar: 269 | x = np.arange(len(graph.xcol)) 270 | ax.bar(x + graph.offset, graph.ycol, align='center', 271 | label=graph.legend, color=graph.color, width=graph.width) 272 | plt.xticks(x, graph.xcol) 273 | if Graph.time_format_output is not None: 274 | ticklabels = graph.xcol.dt.strftime(Graph.time_format_output) 275 | ax.xaxis.set_major_formatter(FixedFormatter(ticklabels)) 276 | if graph.bar_label: 277 | ax.bar_label(ax.containers[-1], label_type='edge', fmt=graph.bar_format) 278 | elif graph.barh: 279 | x = np.arange(len(graph.xcol)) 280 | ax.barh(x + graph.offset, graph.ycol, align='center', 281 | label=graph.legend, color=graph.color, height=graph.width) 282 | plt.yticks(x, graph.xcol) 283 | if Graph.time_format_output is not None: 284 | ticklabels = graph.xcol.dt.strftime(Graph.time_format_output) 285 | ax.yaxis.set_major_formatter(FixedFormatter(ticklabels)) 286 | if graph.bar_label: 287 | ax.bar_label(ax.containers[-1], label_type='edge', fmt=graph.bar_format) 288 | elif graph.hist or graph.hist_perc: 289 | bins = graph.bins 290 | if bins is None and graph.bin_size is None: 291 | # default: one bin for each 292 | bins = int((graph.ycol.max() - graph.ycol.min())) 293 | elif graph.bin_size: 294 | _min, _max, _bin = graph.ycol.min(), graph.ycol.max(), graph.bin_size 295 | bins = np.arange(_min - (_min % _bin), 296 | _max + (_bin - (_max % _bin)), _bin) 297 | weights = np.ones_like(graph.ycol) 298 | if graph.hist_perc: 299 | weights = weights * 100.0 / len(graph.ycol) 300 | ax.yaxis.set_major_formatter(PercentFormatter(xmax=100, decimals=1)) 301 | ax.hist(graph.ycol, bins=bins, weights=weights) 302 | else: 303 | l = ax.plot(graph.xcol, graph.ycol, label=graph.legend, 304 | marker=graph.marker, color=graph.color, linestyle=graph.style, 305 | linewidth=graph.width, markersize=graph.markersize)[0] 306 | yformat = ScalarFormatter(useOffset=False, useMathText=True) 307 | yformat.set_powerlimits(Graph.exponent_range) 308 | ax.yaxis.set_major_formatter(yformat) 309 | if not graph.timeseries: 310 | xformat = ScalarFormatter(useOffset=False, useMathText=True) 311 | xformat.set_powerlimits(Graph.exponent_range) 312 | ax.xaxis.set_major_formatter(xformat) 313 | elif graph.timeseries and Graph.time_format_output is not None: 314 | xformat = DateFormatter(Graph.time_format_output) 315 | ax.xaxis.set_major_formatter(xformat) 316 | if graph.fill: 317 | ax.fill_between(graph.xcol, graph.ycol, alpha=0.1, 318 | color=l.get_color()) 319 | if graph.output: 320 | apply_globals(plt, ax, graphs) 321 | plt.savefig(graph.output) 322 | elif graph == graphs[-1]: 323 | apply_globals(plt, ax, graphs) 324 | plt.show() 325 | 326 | def apply_globals(plt, ax, graphs): 327 | plt.xlabel(Graph.xlabel, fontsize=Graph.xlabel_fontsize) 328 | plt.ylabel(Graph.ylabel, fontsize=Graph.ylabel_fontsize) 329 | plt.title(Graph.title) 330 | plt.setp(ax.get_xticklabels(), fontsize=Graph.xtick_fontsize, 331 | rotation=Graph.xtick_angle, horizontalalignment=Graph.xtick_align) 332 | plt.setp(ax.get_yticklabels(), fontsize=Graph.ytick_fontsize, 333 | rotation=Graph.ytick_angle, verticalalignment=Graph.ytick_align) 334 | 335 | if Graph.xscale is not None: 336 | plt.xticks(np.arange(round(ax.get_xlim()[0] / Graph.xscale) * 337 | Graph.xscale, ax.get_xlim()[1], Graph.xscale)) 338 | if Graph.yscale is not None: 339 | plt.yticks(np.arange(round(ax.get_ylim()[0] / Graph.yscale) * 340 | Graph.yscale, ax.get_ylim()[1], Graph.yscale)) 341 | if Graph.xrange is not None: 342 | plt.xlim(*Graph.xrange) 343 | if Graph.yrange is not None: 344 | plt.ylim(*Graph.yrange) 345 | 346 | xcols = [g.xcol.name for g in graphs] 347 | ycols = [g.ycol.name for g in graphs] 348 | dfs = [pd.DataFrame({g.xcol.name: g.xcol, g.ycol.name: g.ycol}) for g in graphs] 349 | df = dfs[0] 350 | # TODO: this might cause issues with separate csv files with similar column names 351 | for frame in dfs[1:]: 352 | df = pd.merge(df, frame) 353 | 354 | # text 355 | for i in range(len(Graph.text)): 356 | xpos, ypos, msg = Graph.text[i] 357 | xpos = float(xpos) 358 | if ypos is None: 359 | # xpos 360 | # add ypos as the mean of all lines at that xpos 361 | ypos = get_ypos(df, xpos, zip(xcols, ycols)) 362 | Graph.text[i] = (xpos, float(ypos), msg) 363 | 364 | # annotate 365 | for i in range(len(Graph.annotate)): 366 | pos, textpos, msg = Graph.annotate[i] 367 | pos = (float(pos[0]), pos[1]) 368 | if pos[1] is None: 369 | # xpos 370 | # choose a ycol (cycle through all ycols) 371 | pos = (pos[0], ycols[i % len(ycols)]) 372 | if None in textpos: 373 | # xpos, ycol 374 | ycol = pos[1] 375 | # match xcol with ycol 376 | xcol = xcols[ycols.index(ycol)] 377 | # use slope when deciding where to put text 378 | slope = get_slope(df, xcol, ycol, xpos=pos[0]) 379 | # replace ycol with ypos 380 | ypos = (get_ypos(df, pos[0], [(xcol, ycol)]) + 381 | get_ofs(df, xcols, [ycol], mag=0.02, 382 | figsize=Graph.figsize)[1]) 383 | pos = (pos[0], float(ypos)) 384 | rad = pi/3 385 | if slope > 0: rad *= 2 386 | # choose xtext, ytext 387 | textpos = get_ofs(df, xcols, ycols, pos, mag=1.6, 388 | rad=rad, figsize=Graph.figsize) 389 | pos = tuple(map(float, pos)) 390 | textpos = tuple(map(float, textpos)) 391 | Graph.annotate[i] = (pos, textpos, msg) 392 | 393 | for xpos, ypos, text in Graph.text: 394 | ax.text(xpos, ypos, text) 395 | # TODO: make these configurable 396 | for pos, textpos, text in Graph.annotate: 397 | ax.annotate(text, xy=pos, xytext=textpos, arrowprops={ 398 | 'facecolor': 'black', 'shrink': 0.05, 399 | 'width': 2, 'headwidth': 8, 'headlength': 5 400 | }) 401 | 402 | if not Graph.no_grid: 403 | plt.grid(True, alpha=Graph.grid_alpha, linestyle=Graph.grid, 404 | color=Graph.grid_color, linewidth=Graph.grid_width) 405 | plt.legend() 406 | if not Graph.no_tight: 407 | plt.tight_layout() 408 | 409 | def get_ypos(df, xpos, xycols): 410 | pos = [] 411 | for xcol, ycol in xycols: 412 | df2 = df.copy() 413 | # minimize distance to xpos 414 | df2[xcol] = (df2[xcol] - xpos).pow(2) 415 | # get mean of all y positions 416 | pos += [df2.iloc[df2[xcol].idxmin()][ycol]] 417 | return 1.0 * sum(pos) / len(pos) 418 | 419 | def get_slope(df, xcol, ycol, xpos=0): 420 | df = df.copy() 421 | df['dx'] = df[xcol].diff() 422 | df['dy'] = df[ycol].diff() 423 | df[xcol] = (df[xcol] - xpos).pow(2) 424 | loc = df[xcol].idxmin() 425 | # get mean of all y positions 426 | return df.iloc[loc]['dy'] / df.iloc[loc]['dx'] 427 | 428 | def get_ofs(df, xcols, ycols, pos=(0, 0), mag=0.1, rad=pi/3, figsize=(16, 10)): 429 | # x / y scale is based off max and min values 430 | xrange = max(df[xcols].max()) - min(df[xcols].min()) 431 | yrange = max(df[ycols].max()) - min(df[ycols].min()) 432 | 433 | xscale = mag * xrange / figsize[0] 434 | yscale = mag * yrange / figsize[1] 435 | 436 | ofs = [xscale * cos(rad), 437 | yscale * sin(rad)] 438 | if pos is not None: 439 | ofs[0] += pos[0] 440 | ofs[1] += pos[1] 441 | return tuple(ofs) 442 | -------------------------------------------------------------------------------- /graph_cli/graph_cli/main.py: -------------------------------------------------------------------------------- 1 | from . import options 2 | import pickle 3 | from sys import stdout 4 | 5 | from .graph import Graph, get_graph_defs, create_graph 6 | 7 | def main(): 8 | args = options.parse_args() 9 | 10 | Graph.update_globals(args) 11 | graphs = get_graph_defs(args) 12 | 13 | if args.chain: 14 | data = Graph.dump(graphs) 15 | stdout.buffer.write(pickle.dumps(data)) 16 | else: 17 | create_graph(graphs) 18 | 19 | if __name__ == '__main__': 20 | main() 21 | -------------------------------------------------------------------------------- /graph_cli/graph_cli/options.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import textwrap 3 | import logging 4 | from sys import stdin, exit 5 | import pandas as pd 6 | import numpy as np 7 | import os 8 | 9 | # flags that can have multiple values 10 | specific_attrs = [ 11 | 'xcol', 'ycol', 'legend', 'color', 'style', 'marker', 'width', 12 | 'offset', 'markersize', 'time_format_input', 'resample', 'resample_action' 13 | ] 14 | 15 | def get_column_name(df, col): 16 | # find column named col 17 | # if it doesn't exist, see if col is a number 18 | if col in df.columns: 19 | return col 20 | try: return df.columns[int(col)-1] 21 | except ValueError: pass 22 | logging.info('Column "%s" not found, ignoring' % col) 23 | return None 24 | 25 | def validate_args(args): 26 | # convert comma separated args into lists (matches graph.get_graph_def) 27 | for opt in specific_attrs: 28 | val = getattr(args, opt) 29 | if val is not None: 30 | if type(val) is list: 31 | # when passing '--' the type becomes a list 32 | # TODO: investigate why this happens 33 | val = '--' 34 | setattr(args, opt, val.split(',')) 35 | 36 | # load df 37 | if args.file == '-': args.file = stdin 38 | elif not os.path.isfile(args.file): 39 | logging.error('%s: file not found' % args.file) 40 | exit(1) 41 | df = pd.read_csv(args.file) 42 | 43 | # get column names from integers 44 | args.xcol = [get_column_name(df, x) for x in args.xcol] 45 | if args.ycol is None: 46 | # ycol default is every column besides xcols 47 | ycols = [col for col in df.columns if col not in args.xcol] 48 | else: 49 | ycols = [get_column_name(df, y) for y in args.ycol] 50 | args.ycol = [ycol for ycol in ycols if ycol is not None] 51 | 52 | if sum([args.bar, args.barh, args.hist, args.hist_perc]) > 1: 53 | logging.error('--bar, --barh, --hist, and --hist-perc are mutually exclusive') 54 | exit(1) 55 | 56 | # check matplotlib version if bar_label is set 57 | if args.bar_label: 58 | import matplotlib 59 | if matplotlib.__version__ < '3.4.2': 60 | logging.warn('--bar-label is only supported in matplotlib >= v3.4.2') 61 | args.bar_label = False 62 | 63 | # make arguments all the same length 64 | # by filling in with default values 65 | fill_args(args) 66 | 67 | # fill in defaults for global arguments, mark as user-specified, 68 | # and convert types 69 | fill_global_args(args, df) 70 | 71 | # save actual data in xcol and ycol 72 | args.ycol = [df[ycol].copy() for ycol in args.ycol] 73 | args.xcol = [df[xcol].copy() for xcol in args.xcol] 74 | 75 | return args 76 | 77 | def fill_args(args): 78 | # TODO: is this reasonable? 79 | num_graphs = len(args.ycol) 80 | 81 | if args.width is None: 82 | if args.bar or args.barh: 83 | args.width = [0.8 / num_graphs] 84 | else: 85 | args.width = [2] 86 | 87 | if args.offset is None: 88 | if args.bar or args.barh: 89 | w = float(args.width[0])/2 90 | t = w * num_graphs 91 | args.offset = np.linspace(-t + w, t - w, num_graphs) 92 | else: 93 | args.offset = [0] 94 | 95 | # make x and y arrays the same length 96 | # usually the x value will be shorter than y 97 | # so repeat the last x value 98 | args.xcol = fill_list(args.xcol, [args.xcol[-1]], num_graphs) 99 | 100 | args.legend = fill_list(args.legend, args.ycol) 101 | args.color = fill_list(args.color, [None], length=num_graphs) 102 | args.style = fill_list(args.style, length=num_graphs) 103 | args.fill = fill_list([args.fill], length=num_graphs) 104 | args.marker = fill_list(args.marker, length=num_graphs) 105 | args.width = fill_list(args.width, length=num_graphs, map_fn=float) 106 | args.offset = fill_list(args.offset, length=num_graphs, map_fn=float) 107 | args.markersize = fill_list(args.markersize, length=num_graphs, map_fn=int) 108 | args.output = [args.output] * num_graphs 109 | args.time_format_input = fill_list(args.time_format_input, length=num_graphs) 110 | args.resample = fill_list(args.resample, length=num_graphs) 111 | args.resample_action = fill_list(args.resample_action, length=num_graphs) 112 | args.sort = fill_list([args.sort], length=num_graphs) 113 | args.bar = fill_list([args.bar], length=num_graphs) 114 | args.barh = fill_list([args.barh], length=num_graphs) 115 | args.bar_label = fill_list([args.bar_label], length=num_graphs) 116 | args.bar_format = fill_list([args.bar_format], length=num_graphs) 117 | args.hist = fill_list([args.hist], length=num_graphs) 118 | args.hist_perc = fill_list([args.hist_perc], length=num_graphs) 119 | args.bins = fill_list([args.bins], length=num_graphs, map_fn=lambda y: None if y is None else int(y)) 120 | args.bin_size = fill_list([args.bin_size], length=num_graphs, map_fn=lambda y: None if y is None else float(y)) 121 | 122 | def fill_global_args(args, df): 123 | # xlabel 124 | if args.xlabel is None: 125 | if any(args.hist + args.hist_perc): 126 | args.xlabel = (', '.join(args.ycol), False) 127 | else: 128 | args.xlabel = (', '.join(set(args.xcol)), False) 129 | else: 130 | args.xlabel = (args.xlabel, True) 131 | 132 | # xscale: default is None 133 | args.xscale = (args.xscale, args.xscale is not None) 134 | 135 | # xrange 136 | if args.xrange: 137 | vals = args.xrange.split(':') 138 | args.xrange = list(map(float, vals)) 139 | args.xrange = (args.xrange, True) 140 | else: 141 | args.xrange = (args.xrange, False) 142 | 143 | # ylabel 144 | if args.ylabel is None: 145 | if any(args.hist): 146 | args.ylabel = ('Count', False) 147 | elif any(args.hist_perc): 148 | args.ylabel = ('Percent', False) 149 | elif any(args.resample): 150 | ylabels = [] 151 | kv = { 152 | 'count': 'Count', 'nunique': 'Unique', 'max': 'Max', 'mean': 'Mean', 153 | 'median': 'Median', 'min': 'Min', 'prod': 'Product', 'sem': 'Mean Std Err', 154 | 'std': 'Std Dev', 'sum': 'Sum', 'var': 'Variance' 155 | } 156 | action = args.resample_action[0] 157 | if all(map(lambda y: y == action, args.resample_action)) and action in kv.keys(): 158 | # all actions are the same 159 | args.ylabel = (kv[action] + ' ' + ', '.join(args.ycol), False) 160 | else: 161 | # individually label each ylabel 162 | for action, ycol in zip(args.resample_action, args.ycol): 163 | if action in kv.keys(): 164 | ylabels += [kv[action] + ' ' + ycol] 165 | else: 166 | ylabels += [ycol] 167 | args.ylabel = (', '.join(ylabels), False) 168 | else: 169 | args.ylabel = (', '.join(args.ycol), False) 170 | else: 171 | args.ylabel = (args.ylabel, True) 172 | 173 | # swap labels if barh 174 | if any(args.barh): 175 | args.ylabel, args.xlabel = args.xlabel, args.ylabel 176 | 177 | # yscale: default is None 178 | args.yscale = (args.yscale, args.yscale is not None) 179 | 180 | # yrange 181 | if args.yrange: 182 | vals = args.yrange.split(':') 183 | args.yrange = list(map(float, vals)) 184 | args.yrange = (args.yrange, True) 185 | else: 186 | args.yrange = (args.yrange, False) 187 | 188 | # figsize 189 | args.figsize = (tuple(map(lambda y: float(y)/100, args.figsize.split('x'))), True) 190 | 191 | # title 192 | if not args.title: 193 | if any(args.hist + args.hist_perc): 194 | args.title = '%s Histogram' % args.xlabel[0] 195 | else: 196 | args.title = '%s vs %s' % (args.ylabel[0], args.xlabel[0]) 197 | args.title = (args.title, False) 198 | else: 199 | args.title = (args.title, True) 200 | 201 | # fontsize: default is already set 202 | args.fontsize = (args.fontsize, True) 203 | 204 | # tick-fontsize 205 | args.tick_fontsize = (args.tick_fontsize, args.tick_fontsize is not None) 206 | 207 | # label-fontsize 208 | args.label_fontsize = (args.label_fontsize, args.label_fontsize is not None) 209 | 210 | # xtick-fontsize 211 | args.xtick_fontsize = (args.xtick_fontsize, args.xtick_fontsize is not None) 212 | 213 | # xtick-angle 214 | if args.xtick_angle is None: 215 | args.xtick_angle = (0, False) 216 | else: 217 | args.xtick_angle = (args.xtick_angle % 360, True) 218 | 219 | # xtick-align 220 | if args.xtick_align is None: 221 | args.xtick_align = 'center' 222 | if args.xtick_angle[0] > 15: 223 | args.xtick_align = 'right' 224 | elif args.xtick_angle[0] > 285: 225 | args.xtick_align = 'left' 226 | args.xtick_align = (args.xtick_align, False) 227 | else: 228 | args.xtick_align = (args.xtick_align, True) 229 | 230 | # xlabel-fontsize 231 | args.xlabel_fontsize = (args.xlabel_fontsize, args.xlabel_fontsize is not None) 232 | 233 | # ytick-fontsize 234 | args.ytick_fontsize = (args.ytick_fontsize, args.ytick_fontsize is not None) 235 | 236 | # ytick-angle 237 | if args.ytick_angle is None: 238 | args.ytick_angle = (0, False) 239 | else: 240 | args.ytick_angle = (args.ytick_angle, True) 241 | 242 | # ytick-align 243 | if args.ytick_align is None: 244 | args.ytick_align = ('center', False) 245 | else: 246 | args.ytick_align = (args.ytick_align, True) 247 | 248 | # ylabel-fontsize 249 | args.ylabel_fontsize = (args.ylabel_fontsize, args.ylabel_fontsize is not None) 250 | 251 | # no-grid 252 | args.no_grid = (args.no_grid, args.no_grid) 253 | 254 | # grid 255 | if type(args.grid) is list: 256 | # args.grid is a list when you pass '--' 257 | # TODO: investigate why this happens 258 | args.grid = '--' 259 | args.grid = (args.grid, True) 260 | 261 | # grid-color 262 | args.grid_color = (args.grid_color, True) 263 | 264 | # grid-alpha 265 | args.grid_alpha = (args.grid_alpha, True) 266 | 267 | # grid-width 268 | args.grid_width = (args.grid_width, True) 269 | 270 | # text 271 | for i in range(len(args.text)): 272 | pos, msg = args.text[i].split('=', 1) 273 | pos = (pos.split(':') + [None])[:2] 274 | args.text[i] = (pos[0], pos[1], msg) 275 | args.text = (args.text, True) 276 | 277 | # annotate 278 | for i in range(len(args.annotate)): 279 | pos, msg = args.annotate[i].split('=', 1) 280 | pos = pos.split(':') 281 | if len(pos) == 1: 282 | # xpos 283 | xpos, ypos, xtext, ytext = pos + [None]*3 284 | elif len(pos) == 2: 285 | # xpos, ycol 286 | pos[1] = get_column_name(df, pos[1]) 287 | xpos, ypos, xtext, ytext = pos + [None]*2 288 | else: 289 | # xtext, ytext, xpos, ypos 290 | xtext, ytext, xpos, ypos = pos 291 | args.annotate[i] = ((xpos, ypos), (xtext, ytext), msg) 292 | args.annotate = (args.annotate, True) 293 | 294 | # exponent range 295 | args.exponent_range = (tuple(map(float, args.exponent_range.split(':'))), True) 296 | 297 | # output time format 298 | args.time_format_output = (args.time_format_output, args.time_format_output is not None) 299 | 300 | # no-tight 301 | args.no_tight = (args.no_tight, args.no_tight) 302 | 303 | # replace None in array with value from default_vals 304 | def fill_list(lst, default_vals=None, length=None, map_fn=None): 305 | if type(lst) is not list: 306 | try: lst = list(lst) 307 | except: lst = [] 308 | if default_vals is None: 309 | val = lst[0] if len(lst) >= 1 else None 310 | default_vals = [val] 311 | if not length: 312 | length = len(default_vals) 313 | lst += [None] * (length - len(lst)) 314 | for i in range(len(lst)): 315 | if lst[i] == None: 316 | lst[i] = default_vals[i % len(default_vals)] 317 | if map_fn: 318 | lst = list(map(map_fn, lst)) 319 | return lst 320 | 321 | def parse_args(): 322 | parser = argparse.ArgumentParser( 323 | description='Graph CSV data', 324 | formatter_class=argparse.RawDescriptionHelpFormatter, 325 | epilog=textwrap.dedent('''\ 326 | additional information: 327 | * all line specific options can be a comma separated list of values 328 | * option values starting with `-` must use `--opt=val` syntax 329 | * the annotate flag will cycle through available lines if only 330 | xpos is specified 331 | * time formats use the C standard format codes 332 | * `epoch` may be used as a special input-time format 333 | ''') 334 | ) 335 | 336 | # required arguments 337 | parser.add_argument('file', metavar='CSV', type=str, 338 | help='the CSV file to graph (- for stdin)') 339 | 340 | # graph specific values 341 | parser.add_argument('--xcol', '-x', metavar='COL', type=str, 342 | help='the column number or name to use for the x-axis (default: 1)', 343 | default='1') 344 | parser.add_argument('--ycol', '-y', metavar='COL', type=str, 345 | help='the column number or name to use for the y-axis (default: all other columns)', 346 | default=None) 347 | parser.add_argument('--legend', '-l', metavar='LEGEND', type=str, 348 | help='the label name for the legend (default: match ycol)') 349 | parser.add_argument('--color', '-c', metavar='COLOR', type=str, 350 | help='color of the graph (default: auto)') 351 | parser.add_argument('--style', metavar='STYLE', type=str, 352 | help='style of the lines') 353 | parser.add_argument('--fill', action='store_true', 354 | help='fill in beneath the lines') 355 | parser.add_argument('--marker', '-m', metavar='MARKER', type=str, default='o', 356 | help='marker style of the data points') 357 | parser.add_argument('--width', '-w', type=str, 358 | help='Line or bar width size') 359 | parser.add_argument('--offset', type=str, 360 | help='Bar chart base offset') 361 | parser.add_argument('--markersize', type=str, default='6', 362 | help='Marker (point) size') 363 | parser.add_argument('--output', '-o', metavar='FILE', type=str, 364 | help='save the graph to FILE') 365 | parser.add_argument('--time-format-input', '-f', metavar='FORMAT', 366 | help='time format of timeseries CSV column (using standard datetime values)') 367 | parser.add_argument('--time-format-output', '-F', metavar='FORMAT', 368 | help='display time format (using standard datetime values)') 369 | parser.add_argument('--resample', '-r', metavar='FREQ', 370 | help='resample values by FREQ and take the mean (default)') 371 | parser.add_argument('--resample-action', metavar='ACTION', default='mean', 372 | help='resample action to take (count | nunique | max | mean | median | min | sem | std | sum | var)') 373 | parser.add_argument('--sort', '-s', action='store_true', 374 | help='sort xcol values') 375 | parser.add_argument('--bar', action='store_true', 376 | help='create a bar graph') 377 | parser.add_argument('--barh', action='store_true', 378 | help='create a barh graph (horizontal bars)') 379 | parser.add_argument('--bar-label', action='store_true', 380 | help='label each bar with its value') 381 | parser.add_argument('--bar-format', metavar='FORMAT', default='%g', 382 | help='bar label format specifier') 383 | parser.add_argument('--hist', action='store_true', 384 | help='create a histogram from the y columns') 385 | parser.add_argument('--hist-perc', action='store_true', 386 | help='create a histogram from the y columns weighted to sum to 100%%') 387 | parser.add_argument('--bins', type=str, 388 | help='number of bins to use in the histogram (default: auto)') 389 | parser.add_argument('--bin-size', type=str, 390 | help='size of each bin to use in the histogram (default: auto)') 391 | 392 | # global values 393 | parser.add_argument('--xlabel', '-X', metavar='LABEL', type=str, 394 | help='the x-axis label (default: match xcol)') 395 | parser.add_argument('--xscale', metavar='SCALE', type=float, 396 | help='the x-axis scaling (default: auto)') 397 | parser.add_argument('--xrange', metavar='RANGE', type=str, 398 | help='the x-axis window (min:max) (default: auto)') 399 | parser.add_argument('--ylabel', '-Y', metavar='LABEL', type=str, 400 | help='the y-axis label (default: match ycol)') 401 | parser.add_argument('--yscale', metavar='SCALE', type=float, 402 | help='the y-axis scaling (default: auto)') 403 | parser.add_argument('--yrange', metavar='RANGE', type=str, 404 | help='the y-axis window (min:max) (default: auto)') 405 | parser.add_argument('--figsize', metavar='SIZE', type=str, 406 | help='size of the graph (XxY) (default: 800x500)', default='800x500') 407 | parser.add_argument('--title', '-T', metavar='TITLE', type=str, 408 | help='title of the graph (default: ylabel vs. xlabel)') 409 | parser.add_argument('--fontsize', type=int, default=18, 410 | help='font size') 411 | parser.add_argument('--tick-fontsize', type=int, 412 | help='tick font size') 413 | parser.add_argument('--label-fontsize', type=int, 414 | help='label font size') 415 | parser.add_argument('--xtick-fontsize', type=int, 416 | help='xtick font size') 417 | parser.add_argument('--xtick-angle', type=float, 418 | help='xtick label angle (degrees)') 419 | parser.add_argument('--xtick-align', type=str, 420 | help='xtick label text alignment') 421 | parser.add_argument('--xlabel-fontsize', type=int, 422 | help='xlabel font size') 423 | parser.add_argument('--ytick-fontsize', type=int, 424 | help='ytick font size') 425 | parser.add_argument('--ytick-angle', type=float, 426 | help='ytick label angle (degrees)') 427 | parser.add_argument('--ytick-align', type=str, 428 | help='ytick label text alignment') 429 | parser.add_argument('--ylabel-fontsize', type=int, 430 | help='ylabel font size') 431 | parser.add_argument('--no-grid', action='store_true', 432 | help='disable grid') 433 | parser.add_argument('--grid', type=str, default='-.', 434 | help='grid linestyle') 435 | parser.add_argument('--grid-color', type=str, default='gray', 436 | help='grid color') 437 | parser.add_argument('--grid-alpha', type=float, default=0.5, 438 | help='grid alpha') 439 | parser.add_argument('--grid-width', type=float, default=0.5, 440 | help='grid width') 441 | parser.add_argument('--text', '-t', type=str, action='append', default=[], 442 | help='add text to the graph (xpos=text | xpos:ypos=text)') 443 | parser.add_argument('--annotate', '-a', type=str, action='append', default=[], 444 | help='add annotation (text and arrow) to the graph '+ 445 | '(xpos=text | xpos:ycol=text | xtext:ytext:xpos:ypos=text)') 446 | parser.add_argument('--exponent-range', metavar='RANGE', type=str, 447 | help='the window of 10^n to 10^m where exponents will not be displayed (n:m) (default: -3:9)', 448 | default='-3:9') 449 | parser.add_argument('--no-tight', action='store_true', 450 | help='disable tight layout') 451 | parser.add_argument('--chain', '-C', action='store_true', 452 | help='use this option to combine graphs into a single image') 453 | parser.add_argument('--version', '-v', action='version', 454 | help='print version string', 455 | version='graph-cli v0.1.19') 456 | 457 | return validate_args(parser.parse_args()) 458 | -------------------------------------------------------------------------------- /graph_cli/setup.py: -------------------------------------------------------------------------------- 1 | import setuptools 2 | 3 | with open("README.md", "r") as fh: 4 | long_description = fh.read() 5 | 6 | setuptools.setup( 7 | name="graph_cli", 8 | # should match options.py version string 9 | version="0.1.19", 10 | author="miccah", 11 | author_email="m.castorina93@gmail.com", 12 | description="A CLI utility to create graphs from CSV files.", 13 | long_description=long_description, 14 | long_description_content_type="text/markdown", 15 | url="https://github.com/mcastorina/graph-cli", 16 | packages=setuptools.find_packages(), 17 | install_requires=[ 18 | "numpy", 19 | "pandas", 20 | "matplotlib", 21 | ], 22 | classifiers=[ 23 | "Programming Language :: Python :: 2.7", 24 | "Programming Language :: Python :: 3", 25 | "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", 26 | "Operating System :: OS Independent", 27 | ], 28 | entry_points={ 29 | 'console_scripts': [ 30 | 'graph=graph_cli:main.main', 31 | ], 32 | }, 33 | ) 34 | -------------------------------------------------------------------------------- /samples/bar.csv: -------------------------------------------------------------------------------- 1 | Item,2017 Price,2018 Price,2019 Price,2020 Price 2 | Apples,1.00,1.10,1.30,1.50 3 | Oranges,1.00,1.50,1.75,1.85 4 | Bananas,0.70,0.79,1.00,1.10 5 | Watermelon,4.25,5.00,5.30,5.50 6 | -------------------------------------------------------------------------------- /samples/cosine.csv: -------------------------------------------------------------------------------- 1 | x,cos(2πx/1000) 2 | 0,1.000000 3 | 1,0.999980 4 | 2,0.999921 5 | 3,0.999822 6 | 4,0.999684 7 | 5,0.999507 8 | 6,0.999289 9 | 7,0.999033 10 | 8,0.998737 11 | 9,0.998402 12 | 10,0.998027 13 | 11,0.997613 14 | 12,0.997159 15 | 13,0.996666 16 | 14,0.996134 17 | 15,0.995562 18 | 16,0.994951 19 | 17,0.994301 20 | 18,0.993611 21 | 19,0.992883 22 | 20,0.992115 23 | 21,0.991308 24 | 22,0.990461 25 | 23,0.989576 26 | 24,0.988652 27 | 25,0.987688 28 | 26,0.986686 29 | 27,0.985645 30 | 28,0.984564 31 | 29,0.983445 32 | 30,0.982287 33 | 31,0.981091 34 | 32,0.979855 35 | 33,0.978581 36 | 34,0.977268 37 | 35,0.975917 38 | 36,0.974527 39 | 37,0.973099 40 | 38,0.971632 41 | 39,0.970127 42 | 40,0.968583 43 | 41,0.967001 44 | 42,0.965382 45 | 43,0.963724 46 | 44,0.962028 47 | 45,0.960294 48 | 46,0.958522 49 | 47,0.956712 50 | 48,0.954865 51 | 49,0.952979 52 | 50,0.951057 53 | 51,0.949096 54 | 52,0.947098 55 | 53,0.945063 56 | 54,0.942991 57 | 55,0.940881 58 | 56,0.938734 59 | 57,0.936550 60 | 58,0.934329 61 | 59,0.932071 62 | 60,0.929776 63 | 61,0.927445 64 | 62,0.925077 65 | 63,0.922673 66 | 64,0.920232 67 | 65,0.917755 68 | 66,0.915241 69 | 67,0.912692 70 | 68,0.910106 71 | 69,0.907484 72 | 70,0.904827 73 | 71,0.902134 74 | 72,0.899405 75 | 73,0.896641 76 | 74,0.893841 77 | 75,0.891007 78 | 76,0.888136 79 | 77,0.885231 80 | 78,0.882291 81 | 79,0.879316 82 | 80,0.876307 83 | 81,0.873262 84 | 82,0.870184 85 | 83,0.867071 86 | 84,0.863923 87 | 85,0.860742 88 | 86,0.857527 89 | 87,0.854277 90 | 88,0.850994 91 | 89,0.847678 92 | 90,0.844328 93 | 91,0.840945 94 | 92,0.837528 95 | 93,0.834078 96 | 94,0.830596 97 | 95,0.827081 98 | 96,0.823533 99 | 97,0.819952 100 | 98,0.816339 101 | 99,0.812694 102 | 100,0.809017 103 | 101,0.805308 104 | 102,0.801567 105 | 103,0.797794 106 | 104,0.793990 107 | 105,0.790155 108 | 106,0.786288 109 | 107,0.782391 110 | 108,0.778462 111 | 109,0.774503 112 | 110,0.770513 113 | 111,0.766493 114 | 112,0.762443 115 | 113,0.758362 116 | 114,0.754251 117 | 115,0.750111 118 | 116,0.745941 119 | 117,0.741742 120 | 118,0.737513 121 | 119,0.733255 122 | 120,0.728969 123 | 121,0.724653 124 | 122,0.720309 125 | 123,0.715936 126 | 124,0.711536 127 | 125,0.707107 128 | 126,0.702650 129 | 127,0.698165 130 | 128,0.693653 131 | 129,0.689114 132 | 130,0.684547 133 | 131,0.679953 134 | 132,0.675333 135 | 133,0.670686 136 | 134,0.666012 137 | 135,0.661312 138 | 136,0.656586 139 | 137,0.651834 140 | 138,0.647056 141 | 139,0.642253 142 | 140,0.637424 143 | 141,0.632570 144 | 142,0.627691 145 | 143,0.622788 146 | 144,0.617860 147 | 145,0.612907 148 | 146,0.607930 149 | 147,0.602930 150 | 148,0.597905 151 | 149,0.592857 152 | 150,0.587785 153 | 151,0.582690 154 | 152,0.577573 155 | 153,0.572432 156 | 154,0.567269 157 | 155,0.562083 158 | 156,0.556876 159 | 157,0.551646 160 | 158,0.546394 161 | 159,0.541121 162 | 160,0.535827 163 | 161,0.530511 164 | 162,0.525175 165 | 163,0.519817 166 | 164,0.514440 167 | 165,0.509041 168 | 166,0.503623 169 | 167,0.498185 170 | 168,0.492727 171 | 169,0.487250 172 | 170,0.481754 173 | 171,0.476238 174 | 172,0.470704 175 | 173,0.465151 176 | 174,0.459580 177 | 175,0.453990 178 | 176,0.448383 179 | 177,0.442758 180 | 178,0.437116 181 | 179,0.431456 182 | 180,0.425779 183 | 181,0.420086 184 | 182,0.414376 185 | 183,0.408649 186 | 184,0.402906 187 | 185,0.397148 188 | 186,0.391374 189 | 187,0.385584 190 | 188,0.379779 191 | 189,0.373959 192 | 190,0.368125 193 | 191,0.362275 194 | 192,0.356412 195 | 193,0.350534 196 | 194,0.344643 197 | 195,0.338738 198 | 196,0.332820 199 | 197,0.326888 200 | 198,0.320944 201 | 199,0.314987 202 | 200,0.309017 203 | 201,0.303035 204 | 202,0.297042 205 | 203,0.291036 206 | 204,0.285019 207 | 205,0.278991 208 | 206,0.272952 209 | 207,0.266902 210 | 208,0.260842 211 | 209,0.254771 212 | 210,0.248690 213 | 211,0.242599 214 | 212,0.236499 215 | 213,0.230389 216 | 214,0.224271 217 | 215,0.218143 218 | 216,0.212007 219 | 217,0.205863 220 | 218,0.199710 221 | 219,0.193549 222 | 220,0.187381 223 | 221,0.181206 224 | 222,0.175023 225 | 223,0.168833 226 | 224,0.162637 227 | 225,0.156434 228 | 226,0.150226 229 | 227,0.144011 230 | 228,0.137790 231 | 229,0.131564 232 | 230,0.125333 233 | 231,0.119097 234 | 232,0.112856 235 | 233,0.106611 236 | 234,0.100362 237 | 235,0.094108 238 | 236,0.087851 239 | 237,0.081591 240 | 238,0.075327 241 | 239,0.069060 242 | 240,0.062791 243 | 241,0.056519 244 | 242,0.050244 245 | 243,0.043968 246 | 244,0.037690 247 | 245,0.031411 248 | 246,0.025130 249 | 247,0.018848 250 | 248,0.012566 251 | 249,0.006283 252 | 250,0.000000 253 | 251,-0.006283 254 | 252,-0.012566 255 | 253,-0.018848 256 | 254,-0.025130 257 | 255,-0.031411 258 | 256,-0.037690 259 | 257,-0.043968 260 | 258,-0.050244 261 | 259,-0.056519 262 | 260,-0.062791 263 | 261,-0.069060 264 | 262,-0.075327 265 | 263,-0.081591 266 | 264,-0.087851 267 | 265,-0.094108 268 | 266,-0.100362 269 | 267,-0.106611 270 | 268,-0.112856 271 | 269,-0.119097 272 | 270,-0.125333 273 | 271,-0.131564 274 | 272,-0.137790 275 | 273,-0.144011 276 | 274,-0.150226 277 | 275,-0.156434 278 | 276,-0.162637 279 | 277,-0.168833 280 | 278,-0.175023 281 | 279,-0.181206 282 | 280,-0.187381 283 | 281,-0.193549 284 | 282,-0.199710 285 | 283,-0.205863 286 | 284,-0.212007 287 | 285,-0.218143 288 | 286,-0.224271 289 | 287,-0.230389 290 | 288,-0.236499 291 | 289,-0.242599 292 | 290,-0.248690 293 | 291,-0.254771 294 | 292,-0.260842 295 | 293,-0.266902 296 | 294,-0.272952 297 | 295,-0.278991 298 | 296,-0.285019 299 | 297,-0.291036 300 | 298,-0.297042 301 | 299,-0.303035 302 | 300,-0.309017 303 | 301,-0.314987 304 | 302,-0.320944 305 | 303,-0.326888 306 | 304,-0.332820 307 | 305,-0.338738 308 | 306,-0.344643 309 | 307,-0.350534 310 | 308,-0.356412 311 | 309,-0.362275 312 | 310,-0.368125 313 | 311,-0.373959 314 | 312,-0.379779 315 | 313,-0.385584 316 | 314,-0.391374 317 | 315,-0.397148 318 | 316,-0.402906 319 | 317,-0.408649 320 | 318,-0.414376 321 | 319,-0.420086 322 | 320,-0.425779 323 | 321,-0.431456 324 | 322,-0.437116 325 | 323,-0.442758 326 | 324,-0.448383 327 | 325,-0.453990 328 | 326,-0.459580 329 | 327,-0.465151 330 | 328,-0.470704 331 | 329,-0.476238 332 | 330,-0.481754 333 | 331,-0.487250 334 | 332,-0.492727 335 | 333,-0.498185 336 | 334,-0.503623 337 | 335,-0.509041 338 | 336,-0.514440 339 | 337,-0.519817 340 | 338,-0.525175 341 | 339,-0.530511 342 | 340,-0.535827 343 | 341,-0.541121 344 | 342,-0.546394 345 | 343,-0.551646 346 | 344,-0.556876 347 | 345,-0.562083 348 | 346,-0.567269 349 | 347,-0.572432 350 | 348,-0.577573 351 | 349,-0.582690 352 | 350,-0.587785 353 | 351,-0.592857 354 | 352,-0.597905 355 | 353,-0.602930 356 | 354,-0.607930 357 | 355,-0.612907 358 | 356,-0.617860 359 | 357,-0.622788 360 | 358,-0.627691 361 | 359,-0.632570 362 | 360,-0.637424 363 | 361,-0.642253 364 | 362,-0.647056 365 | 363,-0.651834 366 | 364,-0.656586 367 | 365,-0.661312 368 | 366,-0.666012 369 | 367,-0.670686 370 | 368,-0.675333 371 | 369,-0.679953 372 | 370,-0.684547 373 | 371,-0.689114 374 | 372,-0.693653 375 | 373,-0.698165 376 | 374,-0.702650 377 | 375,-0.707107 378 | 376,-0.711536 379 | 377,-0.715936 380 | 378,-0.720309 381 | 379,-0.724653 382 | 380,-0.728969 383 | 381,-0.733255 384 | 382,-0.737513 385 | 383,-0.741742 386 | 384,-0.745941 387 | 385,-0.750111 388 | 386,-0.754251 389 | 387,-0.758362 390 | 388,-0.762443 391 | 389,-0.766493 392 | 390,-0.770513 393 | 391,-0.774503 394 | 392,-0.778462 395 | 393,-0.782391 396 | 394,-0.786288 397 | 395,-0.790155 398 | 396,-0.793990 399 | 397,-0.797794 400 | 398,-0.801567 401 | 399,-0.805308 402 | 400,-0.809017 403 | 401,-0.812694 404 | 402,-0.816339 405 | 403,-0.819952 406 | 404,-0.823533 407 | 405,-0.827081 408 | 406,-0.830596 409 | 407,-0.834078 410 | 408,-0.837528 411 | 409,-0.840945 412 | 410,-0.844328 413 | 411,-0.847678 414 | 412,-0.850994 415 | 413,-0.854277 416 | 414,-0.857527 417 | 415,-0.860742 418 | 416,-0.863923 419 | 417,-0.867071 420 | 418,-0.870184 421 | 419,-0.873262 422 | 420,-0.876307 423 | 421,-0.879316 424 | 422,-0.882291 425 | 423,-0.885231 426 | 424,-0.888136 427 | 425,-0.891007 428 | 426,-0.893841 429 | 427,-0.896641 430 | 428,-0.899405 431 | 429,-0.902134 432 | 430,-0.904827 433 | 431,-0.907484 434 | 432,-0.910106 435 | 433,-0.912692 436 | 434,-0.915241 437 | 435,-0.917755 438 | 436,-0.920232 439 | 437,-0.922673 440 | 438,-0.925077 441 | 439,-0.927445 442 | 440,-0.929776 443 | 441,-0.932071 444 | 442,-0.934329 445 | 443,-0.936550 446 | 444,-0.938734 447 | 445,-0.940881 448 | 446,-0.942991 449 | 447,-0.945063 450 | 448,-0.947098 451 | 449,-0.949096 452 | 450,-0.951057 453 | 451,-0.952979 454 | 452,-0.954865 455 | 453,-0.956712 456 | 454,-0.958522 457 | 455,-0.960294 458 | 456,-0.962028 459 | 457,-0.963724 460 | 458,-0.965382 461 | 459,-0.967001 462 | 460,-0.968583 463 | 461,-0.970127 464 | 462,-0.971632 465 | 463,-0.973099 466 | 464,-0.974527 467 | 465,-0.975917 468 | 466,-0.977268 469 | 467,-0.978581 470 | 468,-0.979855 471 | 469,-0.981091 472 | 470,-0.982287 473 | 471,-0.983445 474 | 472,-0.984564 475 | 473,-0.985645 476 | 474,-0.986686 477 | 475,-0.987688 478 | 476,-0.988652 479 | 477,-0.989576 480 | 478,-0.990461 481 | 479,-0.991308 482 | 480,-0.992115 483 | 481,-0.992883 484 | 482,-0.993611 485 | 483,-0.994301 486 | 484,-0.994951 487 | 485,-0.995562 488 | 486,-0.996134 489 | 487,-0.996666 490 | 488,-0.997159 491 | 489,-0.997613 492 | 490,-0.998027 493 | 491,-0.998402 494 | 492,-0.998737 495 | 493,-0.999033 496 | 494,-0.999289 497 | 495,-0.999507 498 | 496,-0.999684 499 | 497,-0.999822 500 | 498,-0.999921 501 | 499,-0.999980 502 | 500,-1.000000 503 | 501,-0.999980 504 | 502,-0.999921 505 | 503,-0.999822 506 | 504,-0.999684 507 | 505,-0.999507 508 | 506,-0.999289 509 | 507,-0.999033 510 | 508,-0.998737 511 | 509,-0.998402 512 | 510,-0.998027 513 | 511,-0.997613 514 | 512,-0.997159 515 | 513,-0.996666 516 | 514,-0.996134 517 | 515,-0.995562 518 | 516,-0.994951 519 | 517,-0.994301 520 | 518,-0.993611 521 | 519,-0.992883 522 | 520,-0.992115 523 | 521,-0.991308 524 | 522,-0.990461 525 | 523,-0.989576 526 | 524,-0.988652 527 | 525,-0.987688 528 | 526,-0.986686 529 | 527,-0.985645 530 | 528,-0.984564 531 | 529,-0.983445 532 | 530,-0.982287 533 | 531,-0.981091 534 | 532,-0.979855 535 | 533,-0.978581 536 | 534,-0.977268 537 | 535,-0.975917 538 | 536,-0.974527 539 | 537,-0.973099 540 | 538,-0.971632 541 | 539,-0.970127 542 | 540,-0.968583 543 | 541,-0.967001 544 | 542,-0.965382 545 | 543,-0.963724 546 | 544,-0.962028 547 | 545,-0.960294 548 | 546,-0.958522 549 | 547,-0.956712 550 | 548,-0.954865 551 | 549,-0.952979 552 | 550,-0.951057 553 | 551,-0.949096 554 | 552,-0.947098 555 | 553,-0.945063 556 | 554,-0.942991 557 | 555,-0.940881 558 | 556,-0.938734 559 | 557,-0.936550 560 | 558,-0.934329 561 | 559,-0.932071 562 | 560,-0.929776 563 | 561,-0.927445 564 | 562,-0.925077 565 | 563,-0.922673 566 | 564,-0.920232 567 | 565,-0.917755 568 | 566,-0.915241 569 | 567,-0.912692 570 | 568,-0.910106 571 | 569,-0.907484 572 | 570,-0.904827 573 | 571,-0.902134 574 | 572,-0.899405 575 | 573,-0.896641 576 | 574,-0.893841 577 | 575,-0.891007 578 | 576,-0.888136 579 | 577,-0.885231 580 | 578,-0.882291 581 | 579,-0.879316 582 | 580,-0.876307 583 | 581,-0.873262 584 | 582,-0.870184 585 | 583,-0.867071 586 | 584,-0.863923 587 | 585,-0.860742 588 | 586,-0.857527 589 | 587,-0.854277 590 | 588,-0.850994 591 | 589,-0.847678 592 | 590,-0.844328 593 | 591,-0.840945 594 | 592,-0.837528 595 | 593,-0.834078 596 | 594,-0.830596 597 | 595,-0.827081 598 | 596,-0.823533 599 | 597,-0.819952 600 | 598,-0.816339 601 | 599,-0.812694 602 | 600,-0.809017 603 | 601,-0.805308 604 | 602,-0.801567 605 | 603,-0.797794 606 | 604,-0.793990 607 | 605,-0.790155 608 | 606,-0.786288 609 | 607,-0.782391 610 | 608,-0.778462 611 | 609,-0.774503 612 | 610,-0.770513 613 | 611,-0.766493 614 | 612,-0.762443 615 | 613,-0.758362 616 | 614,-0.754251 617 | 615,-0.750111 618 | 616,-0.745941 619 | 617,-0.741742 620 | 618,-0.737513 621 | 619,-0.733255 622 | 620,-0.728969 623 | 621,-0.724653 624 | 622,-0.720309 625 | 623,-0.715936 626 | 624,-0.711536 627 | 625,-0.707107 628 | 626,-0.702650 629 | 627,-0.698165 630 | 628,-0.693653 631 | 629,-0.689114 632 | 630,-0.684547 633 | 631,-0.679953 634 | 632,-0.675333 635 | 633,-0.670686 636 | 634,-0.666012 637 | 635,-0.661312 638 | 636,-0.656586 639 | 637,-0.651834 640 | 638,-0.647056 641 | 639,-0.642253 642 | 640,-0.637424 643 | 641,-0.632570 644 | 642,-0.627691 645 | 643,-0.622788 646 | 644,-0.617860 647 | 645,-0.612907 648 | 646,-0.607930 649 | 647,-0.602930 650 | 648,-0.597905 651 | 649,-0.592857 652 | 650,-0.587785 653 | 651,-0.582690 654 | 652,-0.577573 655 | 653,-0.572432 656 | 654,-0.567269 657 | 655,-0.562083 658 | 656,-0.556876 659 | 657,-0.551646 660 | 658,-0.546394 661 | 659,-0.541121 662 | 660,-0.535827 663 | 661,-0.530511 664 | 662,-0.525175 665 | 663,-0.519817 666 | 664,-0.514440 667 | 665,-0.509041 668 | 666,-0.503623 669 | 667,-0.498185 670 | 668,-0.492727 671 | 669,-0.487250 672 | 670,-0.481754 673 | 671,-0.476238 674 | 672,-0.470704 675 | 673,-0.465151 676 | 674,-0.459580 677 | 675,-0.453990 678 | 676,-0.448383 679 | 677,-0.442758 680 | 678,-0.437116 681 | 679,-0.431456 682 | 680,-0.425779 683 | 681,-0.420086 684 | 682,-0.414376 685 | 683,-0.408649 686 | 684,-0.402906 687 | 685,-0.397148 688 | 686,-0.391374 689 | 687,-0.385584 690 | 688,-0.379779 691 | 689,-0.373959 692 | 690,-0.368125 693 | 691,-0.362275 694 | 692,-0.356412 695 | 693,-0.350534 696 | 694,-0.344643 697 | 695,-0.338738 698 | 696,-0.332820 699 | 697,-0.326888 700 | 698,-0.320944 701 | 699,-0.314987 702 | 700,-0.309017 703 | 701,-0.303035 704 | 702,-0.297042 705 | 703,-0.291036 706 | 704,-0.285019 707 | 705,-0.278991 708 | 706,-0.272952 709 | 707,-0.266902 710 | 708,-0.260842 711 | 709,-0.254771 712 | 710,-0.248690 713 | 711,-0.242599 714 | 712,-0.236499 715 | 713,-0.230389 716 | 714,-0.224271 717 | 715,-0.218143 718 | 716,-0.212007 719 | 717,-0.205863 720 | 718,-0.199710 721 | 719,-0.193549 722 | 720,-0.187381 723 | 721,-0.181206 724 | 722,-0.175023 725 | 723,-0.168833 726 | 724,-0.162637 727 | 725,-0.156434 728 | 726,-0.150226 729 | 727,-0.144011 730 | 728,-0.137790 731 | 729,-0.131564 732 | 730,-0.125333 733 | 731,-0.119097 734 | 732,-0.112856 735 | 733,-0.106611 736 | 734,-0.100362 737 | 735,-0.094108 738 | 736,-0.087851 739 | 737,-0.081591 740 | 738,-0.075327 741 | 739,-0.069060 742 | 740,-0.062791 743 | 741,-0.056519 744 | 742,-0.050244 745 | 743,-0.043968 746 | 744,-0.037690 747 | 745,-0.031411 748 | 746,-0.025130 749 | 747,-0.018848 750 | 748,-0.012566 751 | 749,-0.006283 752 | 750,-0.000000 753 | 751,0.006283 754 | 752,0.012566 755 | 753,0.018848 756 | 754,0.025130 757 | 755,0.031411 758 | 756,0.037690 759 | 757,0.043968 760 | 758,0.050244 761 | 759,0.056519 762 | 760,0.062791 763 | 761,0.069060 764 | 762,0.075327 765 | 763,0.081591 766 | 764,0.087851 767 | 765,0.094108 768 | 766,0.100362 769 | 767,0.106611 770 | 768,0.112856 771 | 769,0.119097 772 | 770,0.125333 773 | 771,0.131564 774 | 772,0.137790 775 | 773,0.144011 776 | 774,0.150226 777 | 775,0.156434 778 | 776,0.162637 779 | 777,0.168833 780 | 778,0.175023 781 | 779,0.181206 782 | 780,0.187381 783 | 781,0.193549 784 | 782,0.199710 785 | 783,0.205863 786 | 784,0.212007 787 | 785,0.218143 788 | 786,0.224271 789 | 787,0.230389 790 | 788,0.236499 791 | 789,0.242599 792 | 790,0.248690 793 | 791,0.254771 794 | 792,0.260842 795 | 793,0.266902 796 | 794,0.272952 797 | 795,0.278991 798 | 796,0.285019 799 | 797,0.291036 800 | 798,0.297042 801 | 799,0.303035 802 | 800,0.309017 803 | 801,0.314987 804 | 802,0.320944 805 | 803,0.326888 806 | 804,0.332820 807 | 805,0.338738 808 | 806,0.344643 809 | 807,0.350534 810 | 808,0.356412 811 | 809,0.362275 812 | 810,0.368125 813 | 811,0.373959 814 | 812,0.379779 815 | 813,0.385584 816 | 814,0.391374 817 | 815,0.397148 818 | 816,0.402906 819 | 817,0.408649 820 | 818,0.414376 821 | 819,0.420086 822 | 820,0.425779 823 | 821,0.431456 824 | 822,0.437116 825 | 823,0.442758 826 | 824,0.448383 827 | 825,0.453990 828 | 826,0.459580 829 | 827,0.465151 830 | 828,0.470704 831 | 829,0.476238 832 | 830,0.481754 833 | 831,0.487250 834 | 832,0.492727 835 | 833,0.498185 836 | 834,0.503623 837 | 835,0.509041 838 | 836,0.514440 839 | 837,0.519817 840 | 838,0.525175 841 | 839,0.530511 842 | 840,0.535827 843 | 841,0.541121 844 | 842,0.546394 845 | 843,0.551646 846 | 844,0.556876 847 | 845,0.562083 848 | 846,0.567269 849 | 847,0.572432 850 | 848,0.577573 851 | 849,0.582690 852 | 850,0.587785 853 | 851,0.592857 854 | 852,0.597905 855 | 853,0.602930 856 | 854,0.607930 857 | 855,0.612907 858 | 856,0.617860 859 | 857,0.622788 860 | 858,0.627691 861 | 859,0.632570 862 | 860,0.637424 863 | 861,0.642253 864 | 862,0.647056 865 | 863,0.651834 866 | 864,0.656586 867 | 865,0.661312 868 | 866,0.666012 869 | 867,0.670686 870 | 868,0.675333 871 | 869,0.679953 872 | 870,0.684547 873 | 871,0.689114 874 | 872,0.693653 875 | 873,0.698165 876 | 874,0.702650 877 | 875,0.707107 878 | 876,0.711536 879 | 877,0.715936 880 | 878,0.720309 881 | 879,0.724653 882 | 880,0.728969 883 | 881,0.733255 884 | 882,0.737513 885 | 883,0.741742 886 | 884,0.745941 887 | 885,0.750111 888 | 886,0.754251 889 | 887,0.758362 890 | 888,0.762443 891 | 889,0.766493 892 | 890,0.770513 893 | 891,0.774503 894 | 892,0.778462 895 | 893,0.782391 896 | 894,0.786288 897 | 895,0.790155 898 | 896,0.793990 899 | 897,0.797794 900 | 898,0.801567 901 | 899,0.805308 902 | 900,0.809017 903 | 901,0.812694 904 | 902,0.816339 905 | 903,0.819952 906 | 904,0.823533 907 | 905,0.827081 908 | 906,0.830596 909 | 907,0.834078 910 | 908,0.837528 911 | 909,0.840945 912 | 910,0.844328 913 | 911,0.847678 914 | 912,0.850994 915 | 913,0.854277 916 | 914,0.857527 917 | 915,0.860742 918 | 916,0.863923 919 | 917,0.867071 920 | 918,0.870184 921 | 919,0.873262 922 | 920,0.876307 923 | 921,0.879316 924 | 922,0.882291 925 | 923,0.885231 926 | 924,0.888136 927 | 925,0.891007 928 | 926,0.893841 929 | 927,0.896641 930 | 928,0.899405 931 | 929,0.902134 932 | 930,0.904827 933 | 931,0.907484 934 | 932,0.910106 935 | 933,0.912692 936 | 934,0.915241 937 | 935,0.917755 938 | 936,0.920232 939 | 937,0.922673 940 | 938,0.925077 941 | 939,0.927445 942 | 940,0.929776 943 | 941,0.932071 944 | 942,0.934329 945 | 943,0.936550 946 | 944,0.938734 947 | 945,0.940881 948 | 946,0.942991 949 | 947,0.945063 950 | 948,0.947098 951 | 949,0.949096 952 | 950,0.951057 953 | 951,0.952979 954 | 952,0.954865 955 | 953,0.956712 956 | 954,0.958522 957 | 955,0.960294 958 | 956,0.962028 959 | 957,0.963724 960 | 958,0.965382 961 | 959,0.967001 962 | 960,0.968583 963 | 961,0.970127 964 | 962,0.971632 965 | 963,0.973099 966 | 964,0.974527 967 | 965,0.975917 968 | 966,0.977268 969 | 967,0.978581 970 | 968,0.979855 971 | 969,0.981091 972 | 970,0.982287 973 | 971,0.983445 974 | 972,0.984564 975 | 973,0.985645 976 | 974,0.986686 977 | 975,0.987688 978 | 976,0.988652 979 | 977,0.989576 980 | 978,0.990461 981 | 979,0.991308 982 | 980,0.992115 983 | 981,0.992883 984 | 982,0.993611 985 | 983,0.994301 986 | 984,0.994951 987 | 985,0.995562 988 | 986,0.996134 989 | 987,0.996666 990 | 988,0.997159 991 | 989,0.997613 992 | 990,0.998027 993 | 991,0.998402 994 | 992,0.998737 995 | 993,0.999033 996 | 994,0.999289 997 | 995,0.999507 998 | 996,0.999684 999 | 997,0.999822 1000 | 998,0.999921 1001 | 999,0.999980 1002 | -------------------------------------------------------------------------------- /samples/normal.csv: -------------------------------------------------------------------------------- 1 | index,value 2 | 0,73 3 | 1,69 4 | 2,26 5 | 3,64 6 | 4,63 7 | 5,27 8 | 6,54 9 | 7,48 10 | 8,32 11 | 9,21 12 | 10,63 13 | 11,47 14 | 12,38 15 | 13,60 16 | 14,20 17 | 15,21 18 | 16,19 19 | 17,31 20 | 18,75 21 | 19,55 22 | 20,48 23 | 21,93 24 | 22,16 25 | 23,78 26 | 24,50 27 | 25,43 28 | 26,17 29 | 27,60 30 | 28,68 31 | 29,60 32 | 30,36 33 | 31,25 34 | 32,78 35 | 33,68 36 | 34,63 37 | 35,33 38 | 36,38 39 | 37,75 40 | 38,95 41 | 39,36 42 | 40,28 43 | 41,41 44 | 42,84 45 | 43,48 46 | 44,59 47 | 45,30 48 | 46,51 49 | 47,91 50 | 48,41 51 | 49,47 52 | 50,48 53 | 51,61 54 | 52,36 55 | 53,64 56 | 54,46 57 | 55,11 58 | 56,31 59 | 57,26 60 | 58,80 61 | 59,39 62 | 60,46 63 | 61,23 64 | 62,27 65 | 63,41 66 | 64,17 67 | 65,41 68 | 66,81 69 | 67,44 70 | 68,59 71 | 69,75 72 | 70,38 73 | 71,64 74 | 72,58 75 | 73,102 76 | 74,26 77 | 75,42 78 | 76,34 79 | 77,90 80 | 78,54 81 | 79,58 82 | 80,54 83 | 81,82 84 | 82,45 85 | 83,48 86 | 84,25 87 | 85,73 88 | 86,48 89 | 87,25 90 | 88,62 91 | 89,65 92 | 90,39 93 | 91,31 94 | 92,32 95 | 93,67 96 | 94,25 97 | 95,64 98 | 96,15 99 | 97,39 100 | 98,56 101 | 99,51 102 | 100,41 103 | 101,65 104 | 102,87 105 | 103,18 106 | 104,48 107 | 105,63 108 | 106,66 109 | 107,10 110 | 108,51 111 | 109,67 112 | 110,52 113 | 111,58 114 | 112,31 115 | 113,71 116 | 114,69 117 | 115,61 118 | 116,65 119 | 117,46 120 | 118,31 121 | 119,63 122 | 120,16 123 | 121,75 124 | 122,71 125 | 123,34 126 | 124,40 127 | 125,62 128 | 126,67 129 | 127,22 130 | 128,54 131 | 129,27 132 | 130,43 133 | 131,68 134 | 132,45 135 | 133,71 136 | 134,63 137 | 135,52 138 | 136,35 139 | 137,35 140 | 138,43 141 | 139,80 142 | 140,32 143 | 141,73 144 | 142,80 145 | 143,71 146 | 144,77 147 | 145,89 148 | 146,45 149 | 147,76 150 | 148,30 151 | 149,46 152 | 150,39 153 | 151,54 154 | 152,60 155 | 153,31 156 | 154,46 157 | 155,47 158 | 156,57 159 | 157,56 160 | 158,59 161 | 159,54 162 | 160,32 163 | 161,61 164 | 162,39 165 | 163,97 166 | 164,5 167 | 165,94 168 | 166,52 169 | 167,44 170 | 168,73 171 | 169,45 172 | 170,79 173 | 171,43 174 | 172,34 175 | 173,39 176 | 174,61 177 | 175,47 178 | 176,34 179 | 177,38 180 | 178,64 181 | 179,35 182 | 180,42 183 | 181,39 184 | 182,38 185 | 183,38 186 | 184,103 187 | 185,48 188 | 186,70 189 | 187,54 190 | 188,41 191 | 189,17 192 | 190,45 193 | 191,32 194 | 192,31 195 | 193,84 196 | 194,86 197 | 195,11 198 | 196,50 199 | 197,54 200 | 198,73 201 | 199,72 202 | 200,33 203 | 201,60 204 | 202,38 205 | 203,52 206 | 204,40 207 | 205,70 208 | 206,21 209 | 207,53 210 | 208,42 211 | 209,50 212 | 210,43 213 | 211,78 214 | 212,55 215 | 213,42 216 | 214,67 217 | 215,27 218 | 216,57 219 | 217,53 220 | 218,87 221 | 219,17 222 | 220,39 223 | 221,39 224 | 222,36 225 | 223,67 226 | 224,16 227 | 225,37 228 | 226,35 229 | 227,24 230 | 228,44 231 | 229,64 232 | 230,62 233 | 231,62 234 | 232,61 235 | 233,59 236 | 234,23 237 | 235,43 238 | 236,59 239 | 237,73 240 | 238,41 241 | 239,56 242 | 240,64 243 | 241,30 244 | 242,52 245 | 243,36 246 | 244,27 247 | 245,65 248 | 246,55 249 | 247,17 250 | 248,55 251 | 249,33 252 | 250,46 253 | 251,18 254 | 252,47 255 | 253,14 256 | 254,91 257 | 255,71 258 | 256,52 259 | 257,56 260 | 258,66 261 | 259,91 262 | 260,66 263 | 261,71 264 | 262,60 265 | 263,6 266 | 264,39 267 | 265,50 268 | 266,7 269 | 267,56 270 | 268,19 271 | 269,46 272 | 270,44 273 | 271,78 274 | 272,47 275 | 273,34 276 | 274,43 277 | 275,35 278 | 276,78 279 | 277,36 280 | 278,99 281 | 279,41 282 | 280,47 283 | 281,47 284 | 282,82 285 | 283,82 286 | 284,34 287 | 285,56 288 | 286,22 289 | 287,60 290 | 288,29 291 | 289,48 292 | 290,63 293 | 291,34 294 | 292,79 295 | 293,84 296 | 294,26 297 | 295,82 298 | 296,24 299 | 297,56 300 | 298,29 301 | 299,65 302 | 300,44 303 | 301,47 304 | 302,58 305 | 303,38 306 | 304,45 307 | 305,32 308 | 306,55 309 | 307,38 310 | 308,76 311 | 309,44 312 | 310,20 313 | 311,49 314 | 312,19 315 | 313,87 316 | 314,20 317 | 315,32 318 | 316,71 319 | 317,73 320 | 318,62 321 | 319,36 322 | 320,101 323 | 321,40 324 | 322,65 325 | 323,34 326 | 324,71 327 | 325,49 328 | 326,73 329 | 327,39 330 | 328,39 331 | 329,66 332 | 330,87 333 | 331,23 334 | 332,100 335 | 333,53 336 | 334,45 337 | 335,40 338 | 336,84 339 | 337,50 340 | 338,55 341 | 339,109 342 | 340,23 343 | 341,38 344 | 342,51 345 | 343,61 346 | 344,35 347 | 345,73 348 | 346,12 349 | 347,64 350 | 348,71 351 | 349,89 352 | 350,63 353 | 351,45 354 | 352,34 355 | 353,81 356 | 354,83 357 | 355,60 358 | 356,64 359 | 357,90 360 | 358,49 361 | 359,45 362 | 360,56 363 | 361,31 364 | 362,28 365 | 363,64 366 | 364,48 367 | 365,4 368 | 366,38 369 | 367,66 370 | 368,38 371 | 369,37 372 | 370,21 373 | 371,56 374 | 372,35 375 | 373,60 376 | 374,52 377 | 375,16 378 | 376,59 379 | 377,63 380 | 378,57 381 | 379,64 382 | 380,47 383 | 381,51 384 | 382,25 385 | 383,60 386 | 384,79 387 | 385,18 388 | 386,46 389 | 387,60 390 | 388,51 391 | 389,48 392 | 390,6 393 | 391,39 394 | 392,32 395 | 393,95 396 | 394,47 397 | 395,30 398 | 396,55 399 | 397,41 400 | 398,37 401 | 399,38 402 | 400,30 403 | 401,103 404 | 402,95 405 | 403,29 406 | 404,56 407 | 405,38 408 | 406,83 409 | 407,51 410 | 408,66 411 | 409,61 412 | 410,70 413 | 411,38 414 | 412,82 415 | 413,64 416 | 414,50 417 | 415,70 418 | 416,81 419 | 417,41 420 | 418,45 421 | 419,89 422 | 420,67 423 | 421,51 424 | 422,49 425 | 423,42 426 | 424,44 427 | 425,51 428 | 426,65 429 | 427,78 430 | 428,52 431 | 429,64 432 | 430,67 433 | 431,46 434 | 432,69 435 | 433,60 436 | 434,42 437 | 435,38 438 | 436,44 439 | 437,65 440 | 438,41 441 | 439,46 442 | 440,64 443 | 441,83 444 | 442,55 445 | 443,89 446 | 444,55 447 | 445,35 448 | 446,65 449 | 447,62 450 | 448,32 451 | 449,56 452 | 450,77 453 | 451,30 454 | 452,31 455 | 453,61 456 | 454,45 457 | 455,66 458 | 456,20 459 | 457,-12 460 | 458,71 461 | 459,11 462 | 460,51 463 | 461,29 464 | 462,59 465 | 463,71 466 | 464,43 467 | 465,56 468 | 466,87 469 | 467,34 470 | 468,53 471 | 469,40 472 | 470,70 473 | 471,40 474 | 472,43 475 | 473,42 476 | 474,57 477 | 475,67 478 | 476,50 479 | 477,79 480 | 478,58 481 | 479,56 482 | 480,48 483 | 481,48 484 | 482,63 485 | 483,69 486 | 484,49 487 | 485,80 488 | 486,32 489 | 487,26 490 | 488,8 491 | 489,47 492 | 490,13 493 | 491,40 494 | 492,44 495 | 493,50 496 | 494,54 497 | 495,29 498 | 496,44 499 | 497,55 500 | 498,63 501 | 499,15 502 | 500,52 503 | 501,53 504 | 502,72 505 | 503,85 506 | 504,25 507 | 505,39 508 | 506,80 509 | 507,57 510 | 508,38 511 | 509,47 512 | 510,31 513 | 511,74 514 | 512,57 515 | 513,63 516 | 514,36 517 | 515,32 518 | 516,43 519 | 517,39 520 | 518,26 521 | 519,50 522 | 520,88 523 | 521,42 524 | 522,70 525 | 523,61 526 | 524,72 527 | 525,24 528 | 526,66 529 | 527,50 530 | 528,72 531 | 529,84 532 | 530,81 533 | 531,17 534 | 532,60 535 | 533,60 536 | 534,25 537 | 535,35 538 | 536,23 539 | 537,79 540 | 538,58 541 | 539,52 542 | 540,101 543 | 541,55 544 | 542,47 545 | 543,40 546 | 544,53 547 | 545,39 548 | 546,26 549 | 547,63 550 | 548,52 551 | 549,49 552 | 550,53 553 | 551,18 554 | 552,35 555 | 553,68 556 | 554,46 557 | 555,76 558 | 556,91 559 | 557,57 560 | 558,36 561 | 559,38 562 | 560,35 563 | 561,49 564 | 562,48 565 | 563,15 566 | 564,88 567 | 565,63 568 | 566,61 569 | 567,30 570 | 568,80 571 | 569,38 572 | 570,50 573 | 571,66 574 | 572,72 575 | 573,8 576 | 574,69 577 | 575,57 578 | 576,41 579 | 577,27 580 | 578,43 581 | 579,40 582 | 580,27 583 | 581,59 584 | 582,60 585 | 583,53 586 | 584,51 587 | 585,61 588 | 586,44 589 | 587,62 590 | 588,20 591 | 589,38 592 | 590,42 593 | 591,65 594 | 592,58 595 | 593,42 596 | 594,15 597 | 595,43 598 | 596,34 599 | 597,70 600 | 598,70 601 | 599,33 602 | 600,55 603 | 601,25 604 | 602,47 605 | 603,68 606 | 604,41 607 | 605,68 608 | 606,52 609 | 607,46 610 | 608,39 611 | 609,49 612 | 610,60 613 | 611,46 614 | 612,34 615 | 613,41 616 | 614,40 617 | 615,54 618 | 616,39 619 | 617,82 620 | 618,80 621 | 619,57 622 | 620,45 623 | 621,-5 624 | 622,30 625 | 623,73 626 | 624,42 627 | 625,46 628 | 626,51 629 | 627,53 630 | 628,30 631 | 629,76 632 | 630,19 633 | 631,50 634 | 632,114 635 | 633,30 636 | 634,48 637 | 635,30 638 | 636,16 639 | 637,37 640 | 638,36 641 | 639,66 642 | 640,50 643 | 641,43 644 | 642,33 645 | 643,59 646 | 644,38 647 | 645,97 648 | 646,28 649 | 647,26 650 | 648,63 651 | 649,21 652 | 650,25 653 | 651,72 654 | 652,22 655 | 653,53 656 | 654,96 657 | 655,19 658 | 656,47 659 | 657,49 660 | 658,77 661 | 659,49 662 | 660,55 663 | 661,52 664 | 662,63 665 | 663,83 666 | 664,51 667 | 665,51 668 | 666,25 669 | 667,45 670 | 668,69 671 | 669,51 672 | 670,48 673 | 671,51 674 | 672,66 675 | 673,60 676 | 674,37 677 | 675,79 678 | 676,44 679 | 677,43 680 | 678,11 681 | 679,43 682 | 680,54 683 | 681,32 684 | 682,38 685 | 683,104 686 | 684,61 687 | 685,76 688 | 686,32 689 | 687,71 690 | 688,12 691 | 689,46 692 | 690,59 693 | 691,83 694 | 692,72 695 | 693,56 696 | 694,30 697 | 695,40 698 | 696,50 699 | 697,23 700 | 698,44 701 | 699,39 702 | 700,51 703 | 701,101 704 | 702,66 705 | 703,68 706 | 704,49 707 | 705,58 708 | 706,83 709 | 707,65 710 | 708,37 711 | 709,39 712 | 710,58 713 | 711,92 714 | 712,41 715 | 713,71 716 | 714,67 717 | 715,48 718 | 716,68 719 | 717,37 720 | 718,69 721 | 719,74 722 | 720,59 723 | 721,65 724 | 722,50 725 | 723,20 726 | 724,30 727 | 725,1 728 | 726,45 729 | 727,60 730 | 728,67 731 | 729,45 732 | 730,51 733 | 731,3 734 | 732,71 735 | 733,35 736 | 734,67 737 | 735,75 738 | 736,67 739 | 737,43 740 | 738,40 741 | 739,89 742 | 740,83 743 | 741,51 744 | 742,36 745 | 743,33 746 | 744,49 747 | 745,40 748 | 746,8 749 | 747,63 750 | 748,51 751 | 749,32 752 | 750,13 753 | 751,64 754 | 752,17 755 | 753,50 756 | 754,64 757 | 755,31 758 | 756,56 759 | 757,50 760 | 758,62 761 | 759,86 762 | 760,48 763 | 761,42 764 | 762,62 765 | 763,93 766 | 764,59 767 | 765,48 768 | 766,55 769 | 767,17 770 | 768,66 771 | 769,57 772 | 770,14 773 | 771,56 774 | 772,51 775 | 773,68 776 | 774,80 777 | 775,55 778 | 776,29 779 | 777,46 780 | 778,35 781 | 779,63 782 | 780,44 783 | 781,40 784 | 782,59 785 | 783,47 786 | 784,61 787 | 785,9 788 | 786,76 789 | 787,48 790 | 788,37 791 | 789,66 792 | 790,54 793 | 791,43 794 | 792,88 795 | 793,36 796 | 794,78 797 | 795,89 798 | 796,7 799 | 797,36 800 | 798,26 801 | 799,53 802 | 800,45 803 | 801,42 804 | 802,48 805 | 803,59 806 | 804,70 807 | 805,20 808 | 806,-16 809 | 807,36 810 | 808,38 811 | 809,66 812 | 810,0 813 | 811,38 814 | 812,53 815 | 813,77 816 | 814,80 817 | 815,19 818 | 816,44 819 | 817,4 820 | 818,61 821 | 819,59 822 | 820,36 823 | 821,85 824 | 822,62 825 | 823,66 826 | 824,46 827 | 825,55 828 | 826,42 829 | 827,18 830 | 828,40 831 | 829,82 832 | 830,29 833 | 831,26 834 | 832,60 835 | 833,55 836 | 834,41 837 | 835,52 838 | 836,35 839 | 837,36 840 | 838,93 841 | 839,49 842 | 840,56 843 | 841,39 844 | 842,65 845 | 843,31 846 | 844,40 847 | 845,14 848 | 846,85 849 | 847,87 850 | 848,27 851 | 849,54 852 | 850,32 853 | 851,8 854 | 852,54 855 | 853,82 856 | 854,7 857 | 855,41 858 | 856,71 859 | 857,40 860 | 858,40 861 | 859,56 862 | 860,36 863 | 861,50 864 | 862,8 865 | 863,84 866 | 864,82 867 | 865,49 868 | 866,58 869 | 867,98 870 | 868,61 871 | 869,24 872 | 870,27 873 | 871,64 874 | 872,37 875 | 873,68 876 | 874,65 877 | 875,22 878 | 876,61 879 | 877,42 880 | 878,51 881 | 879,16 882 | 880,78 883 | 881,56 884 | 882,47 885 | 883,55 886 | 884,62 887 | 885,25 888 | 886,87 889 | 887,22 890 | 888,35 891 | 889,73 892 | 890,86 893 | 891,54 894 | 892,45 895 | 893,40 896 | 894,35 897 | 895,36 898 | 896,34 899 | 897,80 900 | 898,60 901 | 899,33 902 | 900,71 903 | 901,67 904 | 902,79 905 | 903,53 906 | 904,24 907 | 905,52 908 | 906,13 909 | 907,35 910 | 908,17 911 | 909,37 912 | 910,72 913 | 911,50 914 | 912,63 915 | 913,32 916 | 914,78 917 | 915,34 918 | 916,39 919 | 917,17 920 | 918,28 921 | 919,82 922 | 920,66 923 | 921,65 924 | 922,68 925 | 923,37 926 | 924,65 927 | 925,53 928 | 926,55 929 | 927,41 930 | 928,67 931 | 929,52 932 | 930,30 933 | 931,28 934 | 932,40 935 | 933,59 936 | 934,82 937 | 935,82 938 | 936,11 939 | 937,54 940 | 938,91 941 | 939,40 942 | 940,32 943 | 941,71 944 | 942,58 945 | 943,64 946 | 944,49 947 | 945,76 948 | 946,70 949 | 947,90 950 | 948,48 951 | 949,47 952 | 950,80 953 | 951,38 954 | 952,40 955 | 953,41 956 | 954,45 957 | 955,41 958 | 956,37 959 | 957,54 960 | 958,73 961 | 959,83 962 | 960,31 963 | 961,19 964 | 962,42 965 | 963,50 966 | 964,57 967 | 965,63 968 | 966,53 969 | 967,27 970 | 968,59 971 | 969,58 972 | 970,43 973 | 971,14 974 | 972,91 975 | 973,80 976 | 974,66 977 | 975,58 978 | 976,27 979 | 977,47 980 | 978,55 981 | 979,51 982 | 980,67 983 | 981,51 984 | 982,38 985 | 983,27 986 | 984,25 987 | 985,72 988 | 986,71 989 | 987,31 990 | 988,63 991 | 989,61 992 | 990,37 993 | 991,37 994 | 992,42 995 | 993,21 996 | 994,80 997 | 995,57 998 | 996,37 999 | 997,5 1000 | 998,23 1001 | 999,55 1002 | -------------------------------------------------------------------------------- /samples/sine-cosine.csv: -------------------------------------------------------------------------------- 1 | x,sin(2πx/1000),cos(2πx/1000) 2 | 0,0.0,1.0 3 | 1,0.006283143965558951,0.99998 4 | 2,0.012566039883352607,0.999921 5 | 3,0.018848439715408172,0.999822 6 | 4,0.025130095443337483,0.999684 7 | 5,0.031410759078128285,0.9995069999999999 8 | 6,0.037690182669934534,0.999289 9 | 7,0.0439681183178649,0.999033 10 | 8,0.05024431817976956,0.9987370000000001 11 | 9,0.05651853448202453,0.998402 12 | 10,0.06279051952931337,0.998027 13 | 11,0.06906002571440578,0.997613 14 | 12,0.07532680552793272,0.997159 15 | 13,0.08159061156815756,0.9966659999999999 16 | 14,0.08785119655074318,0.996134 17 | 15,0.09410831331851433,0.9955620000000001 18 | 16,0.1003617148512149,0.994951 19 | 17,0.10661115427525993,0.994301 20 | 18,0.11285638487348168,0.993611 21 | 19,0.11909716009486973,0.992883 22 | 20,0.12533323356430426,0.992115 23 | 21,0.1315643590922825,0.991308 24 | 22,0.13779029068463805,0.990461 25 | 23,0.14401078255225214,0.989576 26 | 24,0.15022558912075706,0.9886520000000001 27 | 25,0.15643446504023087,0.9876879999999999 28 | 26,0.1626371651948836,0.9866860000000001 29 | 27,0.16883344471273387,0.9856450000000001 30 | 28,0.17502305897527606,0.984564 31 | 29,0.18120576362713736,0.9834450000000001 32 | 30,0.1873813145857246,0.9822870000000001 33 | 31,0.19354946805086026,0.9810909999999999 34 | 32,0.19970998051440705,0.9798549999999999 35 | 33,0.20586260876988133,0.9785809999999999 36 | 34,0.21200710992205465,0.977268 37 | 35,0.21814324139654254,0.975917 38 | 36,0.2242707609493812,0.974527 39 | 37,0.23038942667659054,0.9730989999999999 40 | 38,0.2364989970237247,0.9716319999999999 41 | 39,0.2425992307954074,0.9701270000000001 42 | 40,0.2486898871648548,0.968583 43 | 41,0.2547707256833821,0.967001 44 | 42,0.2608415062898969,0.965382 45 | 43,0.2669019893203756,0.963724 46 | 44,0.2729519355173252,0.9620280000000001 47 | 45,0.2789911060392293,0.9602940000000001 48 | 46,0.2850192624699761,0.958522 49 | 47,0.2910361668282718,0.9567120000000001 50 | 48,0.2970415815770349,0.954865 51 | 49,0.30303526963277394,0.9529790000000001 52 | 50,0.3090169943749474,0.9510569999999999 53 | 51,0.3149865196553048,0.9490959999999999 54 | 52,0.32094360980720954,0.947098 55 | 53,0.3268880296549425,0.9450629999999999 56 | 54,0.3328195445229866,0.942991 57 | 55,0.3387379202452914,0.940881 58 | 56,0.34464292317451706,0.9387340000000001 59 | 57,0.35053432019125896,0.93655 60 | 58,0.35641187871325075,0.9343290000000001 61 | 59,0.3622753667045456,0.9320709999999999 62 | 60,0.3681245526846779,0.929776 63 | 61,0.3739592057378005,0.9274450000000001 64 | 62,0.37977909552180106,0.925077 65 | 63,0.3855839922773965,0.922673 66 | 64,0.3913736668372024,0.9202319999999999 67 | 65,0.39714789063478056,0.9177549999999999 68 | 66,0.4029064357136625,0.915241 69 | 67,0.4086490747363489,0.9126920000000001 70 | 68,0.41437558099328414,0.910106 71 | 69,0.4200857284118063,0.9074840000000001 72 | 70,0.4257792915650727,0.904827 73 | 71,0.43145604568095897,0.902134 74 | 72,0.4371157666509329,0.8994049999999999 75 | 73,0.4427582310389015,0.896641 76 | 74,0.4483832160900322,0.893841 77 | 75,0.4539904997395468,0.891007 78 | 76,0.4595798606214878,0.888136 79 | 77,0.4651510780774583,0.885231 80 | 78,0.4707039321653325,0.8822909999999999 81 | 79,0.4762382036679391,0.879316 82 | 80,0.4817536741017153,0.876307 83 | 81,0.4872501257253323,0.8732620000000001 84 | 82,0.4927273415482915,0.8701840000000001 85 | 83,0.4981851053394909,0.8670709999999999 86 | 84,0.5036232016357608,0.863923 87 | 85,0.5090414157503713,0.860742 88 | 86,0.5144395337815064,0.857527 89 | 87,0.5198173426207094,0.8542770000000001 90 | 88,0.5251746299612956,0.850994 91 | 89,0.5305111843067339,0.847678 92 | 90,0.5358267949789967,0.8443280000000001 93 | 91,0.5411212521268758,0.840945 94 | 92,0.5463943467342691,0.837528 95 | 93,0.5516458706284302,0.8340780000000001 96 | 94,0.556875616488188,0.8305959999999999 97 | 95,0.5620833778521306,0.827081 98 | 96,0.5672689491267565,0.823533 99 | 97,0.5724321255945908,0.819952 100 | 98,0.5775727034222676,0.816339 101 | 99,0.5826904796685761,0.8126939999999999 102 | 100,0.5877852522924731,0.809017 103 | 101,0.5928568201610592,0.805308 104 | 102,0.5979049830575188,0.801567 105 | 103,0.6029295416890247,0.797794 106 | 104,0.6079302976946055,0.79399 107 | 105,0.6129070536529765,0.790155 108 | 106,0.6178596130903343,0.786288 109 | 107,0.6227877804881126,0.782391 110 | 108,0.6276913612907005,0.778462 111 | 109,0.6325701619131244,0.7745029999999999 112 | 110,0.6374239897486897,0.770513 113 | 111,0.6422526531765844,0.766493 114 | 112,0.6470559615694442,0.762443 115 | 113,0.6518337253008788,0.758362 116 | 114,0.6565857557529564,0.754251 117 | 115,0.6613118653236518,0.750111 118 | 116,0.6660118674342517,0.745941 119 | 117,0.6706855765367199,0.741742 120 | 118,0.6753328081210244,0.737513 121 | 119,0.6799533787224192,0.733255 122 | 120,0.6845471059286886,0.728969 123 | 121,0.6891138083873485,0.724653 124 | 122,0.693653305812805,0.720309 125 | 123,0.6981654189934726,0.715936 126 | 124,0.7026499697988492,0.711536 127 | 125,0.7071067811865475,0.7071069999999999 128 | 126,0.7115356772092853,0.70265 129 | 127,0.7159364830218311,0.6981649999999999 130 | 128,0.7203090248879069,0.693653 131 | 129,0.7246531301870466,0.689114 132 | 130,0.7289686274214114,0.684547 133 | 131,0.7332553462225601,0.679953 134 | 132,0.7375131173581739,0.675333 135 | 133,0.7417417727387392,0.670686 136 | 134,0.7459411454241821,0.6660119999999999 137 | 135,0.7501110696304595,0.661312 138 | 136,0.7542513807361038,0.656586 139 | 137,0.7583619152887219,0.651834 140 | 138,0.7624425110114479,0.6470560000000001 141 | 139,0.7664930068093498,0.642253 142 | 140,0.7705132427757893,0.637424 143 | 141,0.7745030601987338,0.63257 144 | 142,0.7784623015670235,0.627691 145 | 143,0.7823908105765881,0.622788 146 | 144,0.7862884321366189,0.6178600000000001 147 | 145,0.7901550123756903,0.612907 148 | 146,0.7939903986478353,0.60793 149 | 147,0.797794439538571,0.60293 150 | 148,0.8015669848708765,0.597905 151 | 149,0.805307885711122,0.592857 152 | 150,0.8090169943749475,0.587785 153 | 151,0.8126941644330942,0.5826899999999999 154 | 152,0.8163392507171839,0.577573 155 | 153,0.8199521093254524,0.5724319999999999 156 | 154,0.8235325976284275,0.5672689999999999 157 | 155,0.8270805742745618,0.562083 158 | 156,0.8305958991958126,0.556876 159 | 157,0.8340784336131711,0.551646 160 | 158,0.8375280400421418,0.5463939999999999 161 | 159,0.8409445822981692,0.541121 162 | 160,0.8443279255020151,0.535827 163 | 161,0.8476779360850831,0.530511 164 | 162,0.8509944817946918,0.525175 165 | 163,0.8542774316992952,0.519817 166 | 164,0.8575266561936522,0.51444 167 | 165,0.8607420270039435,0.509041 168 | 166,0.8639234171928354,0.5036229999999999 169 | 167,0.86707070116449,0.49818500000000004 170 | 168,0.8701837546695257,0.492727 171 | 169,0.8732624548099202,0.48725 172 | 170,0.8763066800438636,0.481754 173 | 171,0.8793163101905562,0.476238 174 | 172,0.8822912264349533,0.470704 175 | 173,0.8852313113324551,0.46515100000000004 176 | 174,0.8881364488135445,0.45958000000000004 177 | 175,0.8910065241883678,0.45398999999999995 178 | 176,0.8938414241512637,0.448383 179 | 177,0.8966410367852359,0.442758 180 | 178,0.8994052515663711,0.437116 181 | 179,0.9021339593682028,0.43145600000000006 182 | 180,0.9048270524660196,0.425779 183 | 181,0.9074844245411171,0.42008599999999996 184 | 182,0.9101059706849955,0.414376 185 | 183,0.9126915874035028,0.408649 186 | 184,0.9152411726209176,0.402906 187 | 185,0.917754625683981,0.397148 188 | 186,0.9202318473658704,0.391374 189 | 187,0.9226727398701148,0.38558400000000004 190 | 188,0.9250772068344579,0.379779 191 | 189,0.9274451533346614,0.37395900000000004 192 | 190,0.9297764858882516,0.368125 193 | 191,0.9320711124582108,0.362275 194 | 192,0.934328942456612,0.356412 195 | 193,0.9365498867481924,0.350534 196 | 194,0.938733857653874,0.344643 197 | 195,0.9408807689542256,0.338738 198 | 196,0.9429905358928644,0.33282 199 | 197,0.9450630751798048,0.326888 200 | 198,0.9470983049947445,0.320944 201 | 199,0.9490961449902946,0.31498699999999996 202 | 200,0.9510565162951536,0.309017 203 | 201,0.9529793415172187,0.303035 204 | 202,0.954864544746643,0.29704200000000003 205 | 203,0.9567120515588304,0.291036 206 | 204,0.9585217890173758,0.285019 207 | 205,0.9602936856769432,0.278991 208 | 206,0.9620276715860858,0.272952 209 | 207,0.9637236782900096,0.266902 210 | 208,0.965381638833274,0.260842 211 | 209,0.9670014877624351,0.254771 212 | 210,0.9685831611286312,0.24869000000000002 213 | 211,0.970126596490106,0.24259899999999998 214 | 212,0.971631732914674,0.236499 215 | 213,0.9730985109821264,0.23038899999999998 216 | 214,0.9745268727865772,0.224271 217 | 215,0.9759167619387472,0.21814299999999998 218 | 216,0.9772681235681936,0.21200700000000003 219 | 217,0.978580904325472,0.20586300000000002 220 | 218,0.9798550523842467,0.19971 221 | 219,0.981090517443334,0.193549 222 | 220,0.9822872507286888,0.187381 223 | 221,0.9834452049953296,0.181206 224 | 222,0.9845643345292052,0.175023 225 | 223,0.9856445951489979,0.16883299999999998 226 | 224,0.9866859442078679,0.16263699999999998 227 | 225,0.9876883405951378,0.156434 228 | 226,0.988651744737914,0.150226 229 | 227,0.9895761186026508,0.144011 230 | 228,0.9904614256966512,0.13779 231 | 229,0.9913076310695066,0.13156400000000001 232 | 230,0.992114701314478,0.125333 233 | 231,0.9928826045698136,0.11909700000000001 234 | 232,0.9936113105200084,0.112856 235 | 233,0.9943007903969988,0.10661099999999998 236 | 234,0.9949510169813002,0.100362 237 | 235,0.99556196460308,0.094108 238 | 236,0.9961336091431724,0.087851 239 | 237,0.99666592803403,0.081591 240 | 238,0.997158900260614,0.075327 241 | 239,0.9976125063612252,0.06906 242 | 240,0.9980267284282716,0.062791 243 | 241,0.998401550108975,0.05651900000000001 244 | 242,0.9987369566060176,0.050244 245 | 243,0.9990329346781248,0.043968 246 | 244,0.9992894726405892,0.037689999999999994 247 | 245,0.9995065603657316,0.031411 248 | 246,0.9996841892833,0.02513 249 | 247,0.9998223523808091,0.018848 250 | 248,0.999921044203816,0.012565999999999999 251 | 249,0.9999802608561372,0.0062829999999999995 252 | 250,1.0,0.0 253 | 251,0.9999802608561372,-0.0062829999999999995 254 | 252,0.999921044203816,-0.012565999999999999 255 | 253,0.9998223523808091,-0.018848 256 | 254,0.9996841892833,-0.02513 257 | 255,0.9995065603657316,-0.031411 258 | 256,0.9992894726405892,-0.037689999999999994 259 | 257,0.9990329346781248,-0.043968 260 | 258,0.9987369566060176,-0.050244 261 | 259,0.998401550108975,-0.05651900000000001 262 | 260,0.9980267284282716,-0.062791 263 | 261,0.9976125063612252,-0.06906 264 | 262,0.997158900260614,-0.075327 265 | 263,0.99666592803403,-0.081591 266 | 264,0.9961336091431724,-0.087851 267 | 265,0.99556196460308,-0.094108 268 | 266,0.9949510169813002,-0.100362 269 | 267,0.9943007903969988,-0.10661099999999998 270 | 268,0.9936113105200084,-0.112856 271 | 269,0.9928826045698136,-0.11909700000000001 272 | 270,0.992114701314478,-0.125333 273 | 271,0.9913076310695066,-0.13156400000000001 274 | 272,0.9904614256966512,-0.13779 275 | 273,0.9895761186026508,-0.144011 276 | 274,0.9886517447379141,-0.150226 277 | 275,0.9876883405951378,-0.156434 278 | 276,0.9866859442078679,-0.16263699999999998 279 | 277,0.9856445951489979,-0.16883299999999998 280 | 278,0.9845643345292054,-0.175023 281 | 279,0.9834452049953296,-0.181206 282 | 280,0.9822872507286888,-0.187381 283 | 281,0.981090517443334,-0.193549 284 | 282,0.9798550523842467,-0.19971 285 | 283,0.978580904325472,-0.20586300000000002 286 | 284,0.9772681235681936,-0.21200700000000003 287 | 285,0.9759167619387474,-0.21814299999999998 288 | 286,0.9745268727865772,-0.224271 289 | 287,0.9730985109821266,-0.23038899999999998 290 | 288,0.9716317329146741,-0.236499 291 | 289,0.9701265964901058,-0.24259899999999998 292 | 290,0.9685831611286312,-0.24869000000000002 293 | 291,0.9670014877624352,-0.254771 294 | 292,0.965381638833274,-0.260842 295 | 293,0.9637236782900098,-0.266902 296 | 294,0.962027671586086,-0.272952 297 | 295,0.9602936856769432,-0.278991 298 | 296,0.9585217890173761,-0.285019 299 | 297,0.9567120515588304,-0.291036 300 | 298,0.954864544746643,-0.29704200000000003 301 | 299,0.9529793415172187,-0.303035 302 | 300,0.9510565162951536,-0.309017 303 | 301,0.9490961449902946,-0.31498699999999996 304 | 302,0.9470983049947445,-0.320944 305 | 303,0.9450630751798048,-0.326888 306 | 304,0.9429905358928644,-0.33282 307 | 305,0.9408807689542256,-0.338738 308 | 306,0.938733857653874,-0.344643 309 | 307,0.9365498867481924,-0.350534 310 | 308,0.934328942456612,-0.356412 311 | 309,0.9320711124582108,-0.362275 312 | 310,0.9297764858882512,-0.368125 313 | 311,0.9274451533346614,-0.37395900000000004 314 | 312,0.9250772068344579,-0.379779 315 | 313,0.9226727398701148,-0.38558400000000004 316 | 314,0.9202318473658704,-0.391374 317 | 315,0.9177546256839813,-0.397148 318 | 316,0.9152411726209176,-0.402906 319 | 317,0.9126915874035028,-0.408649 320 | 318,0.9101059706849955,-0.414376 321 | 319,0.9074844245411168,-0.42008599999999996 322 | 320,0.9048270524660196,-0.425779 323 | 321,0.902133959368203,-0.43145600000000006 324 | 322,0.8994052515663712,-0.437116 325 | 323,0.896641036785236,-0.442758 326 | 324,0.8938414241512639,-0.448383 327 | 325,0.8910065241883679,-0.45398999999999995 328 | 326,0.8881364488135446,-0.45958000000000004 329 | 327,0.8852313113324553,-0.46515100000000004 330 | 328,0.8822912264349535,-0.470704 331 | 329,0.8793163101905562,-0.476238 332 | 330,0.8763066800438637,-0.481754 333 | 331,0.8732624548099203,-0.48725 334 | 332,0.8701837546695255,-0.492727 335 | 333,0.8670707011644901,-0.49818500000000004 336 | 334,0.8639234171928354,-0.5036229999999999 337 | 335,0.8607420270039436,-0.509041 338 | 336,0.8575266561936522,-0.51444 339 | 337,0.8542774316992954,-0.519817 340 | 338,0.8509944817946917,-0.525175 341 | 339,0.8476779360850834,-0.530511 342 | 340,0.8443279255020152,-0.535827 343 | 341,0.8409445822981692,-0.541121 344 | 342,0.8375280400421418,-0.5463939999999999 345 | 343,0.8340784336131712,-0.551646 346 | 344,0.8305958991958127,-0.556876 347 | 345,0.8270805742745617,-0.562083 348 | 346,0.8235325976284276,-0.5672689999999999 349 | 347,0.8199521093254523,-0.5724319999999999 350 | 348,0.816339250717184,-0.577573 351 | 349,0.8126941644330941,-0.5826899999999999 352 | 350,0.8090169943749475,-0.587785 353 | 351,0.805307885711122,-0.592857 354 | 352,0.8015669848708769,-0.597905 355 | 353,0.797794439538571,-0.60293 356 | 354,0.7939903986478353,-0.60793 357 | 355,0.7901550123756905,-0.612907 358 | 356,0.7862884321366188,-0.6178600000000001 359 | 357,0.7823908105765882,-0.622788 360 | 358,0.7784623015670235,-0.627691 361 | 359,0.7745030601987338,-0.63257 362 | 360,0.7705132427757893,-0.637424 363 | 361,0.7664930068093501,-0.642253 364 | 362,0.7624425110114478,-0.6470560000000001 365 | 363,0.7583619152887218,-0.651834 366 | 364,0.754251380736104,-0.656586 367 | 365,0.7501110696304594,-0.661312 368 | 366,0.7459411454241822,-0.6660119999999999 369 | 367,0.7417417727387392,-0.670686 370 | 368,0.7375131173581739,-0.675333 371 | 369,0.7332553462225601,-0.679953 372 | 370,0.7289686274214118,-0.684547 373 | 371,0.7246531301870466,-0.689114 374 | 372,0.7203090248879069,-0.693653 375 | 373,0.7159364830218313,-0.6981649999999999 376 | 374,0.7115356772092851,-0.70265 377 | 375,0.7071067811865476,-0.7071069999999999 378 | 376,0.7026499697988492,-0.711536 379 | 377,0.6981654189934726,-0.715936 380 | 378,0.6936533058128049,-0.720309 381 | 379,0.6891138083873487,-0.724653 382 | 380,0.6845471059286885,-0.728969 383 | 381,0.6799533787224193,-0.733255 384 | 382,0.6753328081210246,-0.737513 385 | 383,0.6706855765367201,-0.741742 386 | 384,0.6660118674342517,-0.745941 387 | 385,0.6613118653236518,-0.750111 388 | 386,0.6565857557529564,-0.754251 389 | 387,0.6518337253008787,-0.758362 390 | 388,0.6470559615694446,-0.762443 391 | 389,0.6422526531765842,-0.766493 392 | 390,0.6374239897486899,-0.770513 393 | 391,0.6325701619131245,-0.7745029999999999 394 | 392,0.6276913612907006,-0.778462 395 | 393,0.6227877804881126,-0.782391 396 | 394,0.6178596130903347,-0.786288 397 | 395,0.6129070536529764,-0.790155 398 | 396,0.6079302976946053,-0.79399 399 | 397,0.6029295416890249,-0.797794 400 | 398,0.5979049830575187,-0.801567 401 | 399,0.5928568201610593,-0.805308 402 | 400,0.5877852522924732,-0.809017 403 | 401,0.5826904796685761,-0.8126939999999999 404 | 402,0.5775727034222676,-0.816339 405 | 403,0.5724321255945912,-0.819952 406 | 404,0.5672689491267564,-0.823533 407 | 405,0.5620833778521308,-0.827081 408 | 406,0.5568756164881882,-0.8305959999999999 409 | 407,0.5516458706284301,-0.8340780000000001 410 | 408,0.5463943467342692,-0.837528 411 | 409,0.5411212521268759,-0.840945 412 | 410,0.5358267949789967,-0.8443280000000001 413 | 411,0.5305111843067339,-0.847678 414 | 412,0.525174629961296,-0.850994 415 | 413,0.5198173426207093,-0.8542770000000001 416 | 414,0.5144395337815066,-0.857527 417 | 415,0.5090414157503714,-0.860742 418 | 416,0.5036232016357606,-0.863923 419 | 417,0.4981851053394909,-0.8670709999999999 420 | 418,0.4927273415482916,-0.8701840000000001 421 | 419,0.4872501257253323,-0.8732620000000001 422 | 420,0.4817536741017152,-0.876307 423 | 421,0.4762382036679394,-0.879316 424 | 422,0.4707039321653324,-0.8822909999999999 425 | 423,0.4651510780774586,-0.885231 426 | 424,0.4595798606214879,-0.888136 427 | 425,0.4539904997395469,-0.891007 428 | 426,0.4483832160900323,-0.893841 429 | 427,0.4427582310389016,-0.896641 430 | 428,0.4371157666509329,-0.8994049999999999 431 | 429,0.4314560456809589,-0.902134 432 | 430,0.4257792915650729,-0.904827 433 | 431,0.4200857284118061,-0.9074840000000001 434 | 432,0.4143755809932843,-0.910106 435 | 433,0.4086490747363492,-0.9126920000000001 436 | 434,0.4029064357136628,-0.915241 437 | 435,0.3971478906347806,-0.9177549999999999 438 | 436,0.3913736668372028,-0.9202319999999999 439 | 437,0.3855839922773965,-0.922673 440 | 438,0.37977909552180106,-0.925077 441 | 439,0.3739592057378007,-0.9274450000000001 442 | 440,0.36812455268467775,-0.929776 443 | 441,0.3622753667045458,-0.9320709999999999 444 | 442,0.3564118787132508,-0.9343290000000001 445 | 443,0.35053432019125896,-0.93655 446 | 444,0.34464292317451706,-0.9387340000000001 447 | 445,0.33873792024529176,-0.940881 448 | 446,0.3328195445229865,-0.942991 449 | 447,0.32688802965494274,-0.9450629999999999 450 | 448,0.3209436098072097,-0.947098 451 | 449,0.3149865196553045,-0.9490959999999999 452 | 450,0.3090169943749475,-0.9510569999999999 453 | 451,0.30303526963277405,-0.9529790000000001 454 | 452,0.2970415815770349,-0.954865 455 | 453,0.29103616682827177,-0.9567120000000001 456 | 454,0.28501926246997644,-0.958522 457 | 455,0.2789911060392291,-0.9602940000000001 458 | 456,0.27295193551732544,-0.9620280000000001 459 | 457,0.2669019893203757,-0.963724 460 | 458,0.26084150628989705,-0.965382 461 | 459,0.2547707256833823,-0.967001 462 | 460,0.2486898871648548,-0.968583 463 | 461,0.2425992307954074,-0.9701270000000001 464 | 462,0.2364989970237246,-0.9716319999999999 465 | 463,0.2303894266765909,-0.9730989999999999 466 | 464,0.224270760949381,-0.974527 467 | 465,0.2181432413965428,-0.975917 468 | 466,0.2120071099220548,-0.977268 469 | 467,0.2058626087698814,-0.9785809999999999 470 | 468,0.19970998051440705,-0.9798549999999999 471 | 469,0.19354946805086068,-0.9810909999999999 472 | 470,0.18738131458572455,-0.9822870000000001 473 | 471,0.18120576362713725,-0.9834450000000001 474 | 472,0.1750230589752763,-0.984564 475 | 473,0.16883344471273365,-0.9856450000000001 476 | 474,0.16263716519488378,-0.9866860000000001 477 | 475,0.15643446504023098,-0.9876879999999999 478 | 476,0.15022558912075712,-0.9886520000000001 479 | 477,0.14401078255225214,-0.989576 480 | 478,0.13779029068463847,-0.990461 481 | 479,0.1315643590922824,-0.991308 482 | 480,0.12533323356430456,-0.992115 483 | 481,0.11909716009486998,-0.992883 484 | 482,0.11285638487348144,-0.993611 485 | 483,0.10661115427526004,-0.994301 486 | 484,0.10036171485121498,-0.994951 487 | 485,0.09410831331851437,-0.9955620000000001 488 | 486,0.08785119655074315,-0.996134 489 | 487,0.08159061156815793,-0.9966659999999999 490 | 488,0.0753268055279326,-0.997159 491 | 489,0.06906002571440606,-0.997613 492 | 490,0.06279051952931357,-0.998027 493 | 491,0.056518534482024235,-0.998402 494 | 492,0.05024431817976966,-0.9987370000000001 495 | 493,0.04396811831786495,-0.999033 496 | 494,0.03769018266993453,-0.999289 497 | 495,0.031410759078128236,-0.9995069999999999 498 | 496,0.025130095443337813,-0.999684 499 | 497,0.018848439715408016,-0.999822 500 | 498,0.012566039883352836,-0.999921 501 | 499,0.006283143965559127,-0.99998 502 | 500,1.2246467991473532e-16,-1.0 503 | 501,-0.006283143965558882,-0.99998 504 | 502,-0.012566039883352592,-0.999921 505 | 503,-0.018848439715408213,-0.999822 506 | 504,-0.02513009544333757,-0.999684 507 | 505,-0.031410759078127994,-0.9995069999999999 508 | 506,-0.037690182669934735,-0.999289 509 | 507,-0.043968118317864714,-0.999033 510 | 508,-0.05024431817976942,-0.9987370000000001 511 | 509,-0.056518534482024436,-0.998402 512 | 510,-0.06279051952931335,-0.998027 513 | 511,-0.06906002571440538,-0.997613 514 | 512,-0.07532680552793279,-0.997159 515 | 513,-0.08159061156815768,-0.9966659999999999 516 | 514,-0.0878511965507429,-0.996134 517 | 515,-0.09410831331851456,-0.9955620000000001 518 | 516,-0.10036171485121473,-0.994951 519 | 517,-0.1066111542752598,-0.994301 520 | 518,-0.11285638487348165,-0.993611 521 | 519,-0.11909716009486973,-0.992883 522 | 520,-0.12533323356430384,-0.992115 523 | 521,-0.13156435909228262,-0.991308 524 | 522,-0.13779029068463775,-0.990461 525 | 523,-0.14401078255225194,-0.989576 526 | 524,-0.1502255891207573,-0.9886520000000001 527 | 525,-0.15643446504023073,-0.9876879999999999 528 | 526,-0.16263716519488353,-0.9866860000000001 529 | 527,-0.16883344471273384,-0.9856450000000001 530 | 528,-0.1750230589752761,-0.984564 531 | 529,-0.18120576362713697,-0.9834450000000001 532 | 530,-0.1873813145857248,-0.9822870000000001 533 | 531,-0.19354946805085999,-0.9810909999999999 534 | 532,-0.19970998051440686,-0.9798549999999999 535 | 533,-0.2058626087698812,-0.9785809999999999 536 | 534,-0.21200710992205452,-0.977268 537 | 535,-0.2181432413965425,-0.975917 538 | 536,-0.2242707609493812,-0.974527 539 | 537,-0.23038942667659065,-0.9730989999999999 540 | 538,-0.2364989970237244,-0.9716319999999999 541 | 539,-0.2425992307954076,-0.9701270000000001 542 | 540,-0.24868988716485455,-0.968583 543 | 541,-0.254770725683382,-0.967001 544 | 542,-0.26084150628989683,-0.965382 545 | 543,-0.2669019893203755,-0.963724 546 | 544,-0.2729519355173252,-0.9620280000000001 547 | 545,-0.2789911060392293,-0.9602940000000001 548 | 546,-0.2850192624699762,-0.958522 549 | 547,-0.29103616682827155,-0.9567120000000001 550 | 548,-0.2970415815770351,-0.954865 551 | 549,-0.3030352696327738,-0.9529790000000001 552 | 550,-0.3090169943749473,-0.9510569999999999 553 | 551,-0.3149865196553047,-0.9490959999999999 554 | 552,-0.3209436098072095,-0.947098 555 | 553,-0.3268880296549421,-0.9450629999999999 556 | 554,-0.33281954452298673,-0.942991 557 | 555,-0.3387379202452915,-0.940881 558 | 556,-0.34464292317451684,-0.9387340000000001 559 | 557,-0.35053432019125924,-0.93655 560 | 558,-0.3564118787132506,-0.9343290000000001 561 | 559,-0.3622753667045456,-0.9320709999999999 562 | 560,-0.3681245526846779,-0.929776 563 | 561,-0.3739592057378005,-0.9274450000000001 564 | 562,-0.3797790955218007,-0.925077 565 | 563,-0.3855839922773967,-0.922673 566 | 564,-0.39137366683720215,-0.9202319999999999 567 | 565,-0.3971478906347804,-0.9177549999999999 568 | 566,-0.4029064357136629,-0.915241 569 | 567,-0.4086490747363489,-0.9126920000000001 570 | 568,-0.4143755809932841,-0.910106 571 | 569,-0.4200857284118063,-0.9074840000000001 572 | 570,-0.4257792915650727,-0.904827 573 | 571,-0.4314560456809586,-0.902134 574 | 572,-0.43711576665093305,-0.8994049999999999 575 | 573,-0.4427582310389013,-0.896641 576 | 574,-0.4483832160900321,-0.893841 577 | 575,-0.4539904997395467,-0.891007 578 | 576,-0.4595798606214878,-0.888136 579 | 577,-0.4651510780774583,-0.885231 580 | 578,-0.4707039321653326,-0.8822909999999999 581 | 579,-0.4762382036679392,-0.879316 582 | 580,-0.481753674101715,-0.876307 583 | 581,-0.4872501257253325,-0.8732620000000001 584 | 582,-0.4927273415482914,-0.8701840000000001 585 | 583,-0.4981851053394907,-0.8670709999999999 586 | 584,-0.5036232016357608,-0.863923 587 | 585,-0.5090414157503712,-0.860742 588 | 586,-0.5144395337815061,-0.857527 589 | 587,-0.5198173426207096,-0.8542770000000001 590 | 588,-0.5251746299612958,-0.850994 591 | 589,-0.5305111843067338,-0.847678 592 | 590,-0.5358267949789968,-0.8443280000000001 593 | 591,-0.5411212521268757,-0.840945 594 | 592,-0.546394346734269,-0.837528 595 | 593,-0.5516458706284302,-0.8340780000000001 596 | 594,-0.556875616488188,-0.8305959999999999 597 | 595,-0.5620833778521303,-0.827081 598 | 596,-0.5672689491267565,-0.823533 599 | 597,-0.5724321255945907,-0.819952 600 | 598,-0.5775727034222674,-0.816339 601 | 599,-0.5826904796685762,-0.8126939999999999 602 | 600,-0.587785252292473,-0.809017 603 | 601,-0.5928568201610591,-0.805308 604 | 602,-0.5979049830575188,-0.801567 605 | 603,-0.6029295416890247,-0.797794 606 | 604,-0.6079302976946049,-0.79399 607 | 605,-0.6129070536529766,-0.790155 608 | 606,-0.6178596130903341,-0.786288 609 | 607,-0.6227877804881123,-0.782391 610 | 608,-0.6276913612907004,-0.778462 611 | 609,-0.6325701619131243,-0.7745029999999999 612 | 610,-0.6374239897486896,-0.770513 613 | 611,-0.6422526531765844,-0.766493 614 | 612,-0.6470559615694443,-0.762443 615 | 613,-0.6518337253008785,-0.758362 616 | 614,-0.6565857557529565,-0.754251 617 | 615,-0.6613118653236517,-0.750111 618 | 616,-0.6660118674342514,-0.745941 619 | 617,-0.6706855765367199,-0.741742 620 | 618,-0.6753328081210244,-0.737513 621 | 619,-0.6799533787224192,-0.733255 622 | 620,-0.6845471059286887,-0.728969 623 | 621,-0.6891138083873485,-0.724653 624 | 622,-0.6936533058128047,-0.720309 625 | 623,-0.6981654189934728,-0.715936 626 | 624,-0.7026499697988491,-0.711536 627 | 625,-0.7071067811865475,-0.7071069999999999 628 | 626,-0.7115356772092852,-0.70265 629 | 627,-0.7159364830218311,-0.6981649999999999 630 | 628,-0.7203090248879066,-0.693653 631 | 629,-0.7246531301870467,-0.689114 632 | 630,-0.7289686274214116,-0.684547 633 | 631,-0.7332553462225598,-0.679953 634 | 632,-0.737513117358174,-0.675333 635 | 633,-0.7417417727387391,-0.670686 636 | 634,-0.7459411454241821,-0.6660119999999999 637 | 635,-0.7501110696304595,-0.661312 638 | 636,-0.7542513807361038,-0.656586 639 | 637,-0.7583619152887215,-0.651834 640 | 638,-0.7624425110114479,-0.6470560000000001 641 | 639,-0.7664930068093496,-0.642253 642 | 640,-0.7705132427757894,-0.637424 643 | 641,-0.7745030601987337,-0.63257 644 | 642,-0.7784623015670229,-0.627691 645 | 643,-0.7823908105765881,-0.622788 646 | 644,-0.7862884321366186,-0.6178600000000001 647 | 645,-0.7901550123756904,-0.612907 648 | 646,-0.7939903986478349,-0.60793 649 | 647,-0.7977944395385711,-0.60293 650 | 648,-0.8015669848708764,-0.597905 651 | 649,-0.8053078857111221,-0.592857 652 | 650,-0.8090169943749473,-0.587785 653 | 651,-0.8126941644330936,-0.5826899999999999 654 | 652,-0.8163392507171839,-0.577573 655 | 653,-0.8199521093254526,-0.5724319999999999 656 | 654,-0.8235325976284275,-0.5672689999999999 657 | 655,-0.8270805742745616,-0.562083 658 | 656,-0.8305958991958122,-0.556876 659 | 657,-0.8340784336131708,-0.551646 660 | 658,-0.8375280400421419,-0.5463939999999999 661 | 659,-0.8409445822981692,-0.541121 662 | 660,-0.8443279255020149,-0.535827 663 | 661,-0.8476779360850832,-0.530511 664 | 662,-0.8509944817946916,-0.525175 665 | 663,-0.8542774316992947,-0.519817 666 | 664,-0.8575266561936525,-0.51444 667 | 665,-0.8607420270039438,-0.509041 668 | 666,-0.8639234171928352,-0.5036229999999999 669 | 667,-0.8670707011644898,-0.49818500000000004 670 | 668,-0.8701837546695256,-0.492727 671 | 669,-0.8732624548099199,-0.48725 672 | 670,-0.8763066800438636,-0.481754 673 | 671,-0.8793163101905561,-0.476238 674 | 672,-0.8822912264349534,-0.470704 675 | 673,-0.8852313113324551,-0.46515100000000004 676 | 674,-0.8881364488135443,-0.45958000000000004 677 | 675,-0.8910065241883678,-0.45398999999999995 678 | 676,-0.8938414241512639,-0.448383 679 | 677,-0.8966410367852359,-0.442758 680 | 678,-0.8994052515663709,-0.437116 681 | 679,-0.9021339593682028,-0.43145600000000006 682 | 680,-0.9048270524660194,-0.425779 683 | 681,-0.9074844245411168,-0.42008599999999996 684 | 682,-0.9101059706849955,-0.414376 685 | 683,-0.9126915874035028,-0.408649 686 | 684,-0.9152411726209176,-0.402906 687 | 685,-0.9177546256839808,-0.397148 688 | 686,-0.9202318473658704,-0.391374 689 | 687,-0.9226727398701148,-0.38558400000000004 690 | 688,-0.9250772068344579,-0.379779 691 | 689,-0.9274451533346612,-0.37395900000000004 692 | 690,-0.9297764858882516,-0.368125 693 | 691,-0.9320711124582108,-0.362275 694 | 692,-0.9343289424566118,-0.356412 695 | 693,-0.9365498867481921,-0.350534 696 | 694,-0.9387338576538742,-0.344643 697 | 695,-0.9408807689542256,-0.338738 698 | 696,-0.9429905358928644,-0.33282 699 | 697,-0.9450630751798048,-0.326888 700 | 698,-0.9470983049947442,-0.320944 701 | 699,-0.9490961449902944,-0.31498699999999996 702 | 700,-0.9510565162951536,-0.309017 703 | 701,-0.9529793415172191,-0.303035 704 | 702,-0.954864544746643,-0.29704200000000003 705 | 703,-0.9567120515588304,-0.291036 706 | 704,-0.9585217890173756,-0.285019 707 | 705,-0.9602936856769431,-0.278991 708 | 706,-0.962027671586086,-0.272952 709 | 707,-0.9637236782900096,-0.266902 710 | 708,-0.9653816388332741,-0.260842 711 | 709,-0.9670014877624351,-0.254771 712 | 710,-0.968583161128631,-0.24869000000000002 713 | 711,-0.9701265964901056,-0.24259899999999998 714 | 712,-0.971631732914674,-0.236499 715 | 713,-0.9730985109821266,-0.23038899999999998 716 | 714,-0.9745268727865772,-0.224271 717 | 715,-0.9759167619387474,-0.21814299999999998 718 | 716,-0.9772681235681934,-0.21200700000000003 719 | 717,-0.9785809043254721,-0.20586300000000002 720 | 718,-0.9798550523842467,-0.19971 721 | 719,-0.9810905174433342,-0.193549 722 | 720,-0.9822872507286888,-0.187381 723 | 721,-0.9834452049953296,-0.181206 724 | 722,-0.9845643345292052,-0.175023 725 | 723,-0.985644595148998,-0.16883299999999998 726 | 724,-0.986685944207868,-0.16263699999999998 727 | 725,-0.9876883405951375,-0.156434 728 | 726,-0.988651744737914,-0.150226 729 | 727,-0.9895761186026508,-0.144011 730 | 728,-0.9904614256966512,-0.13779 731 | 729,-0.9913076310695064,-0.13156400000000001 732 | 730,-0.992114701314478,-0.125333 733 | 731,-0.9928826045698136,-0.11909700000000001 734 | 732,-0.9936113105200084,-0.112856 735 | 733,-0.9943007903969988,-0.10661099999999998 736 | 734,-0.9949510169813002,-0.100362 737 | 735,-0.99556196460308,-0.094108 738 | 736,-0.9961336091431724,-0.087851 739 | 737,-0.99666592803403,-0.081591 740 | 738,-0.997158900260614,-0.075327 741 | 739,-0.9976125063612252,-0.06906 742 | 740,-0.9980267284282716,-0.062791 743 | 741,-0.998401550108975,-0.05651900000000001 744 | 742,-0.9987369566060176,-0.050244 745 | 743,-0.9990329346781248,-0.043968 746 | 744,-0.9992894726405892,-0.037689999999999994 747 | 745,-0.9995065603657316,-0.031411 748 | 746,-0.9996841892833,-0.02513 749 | 747,-0.9998223523808091,-0.018848 750 | 748,-0.999921044203816,-0.012565999999999999 751 | 749,-0.9999802608561372,-0.0062829999999999995 752 | 750,-1.0,-0.0 753 | 751,-0.9999802608561372,0.0062829999999999995 754 | 752,-0.999921044203816,0.012565999999999999 755 | 753,-0.9998223523808091,0.018848 756 | 754,-0.9996841892833,0.02513 757 | 755,-0.9995065603657316,0.031411 758 | 756,-0.9992894726405892,0.037689999999999994 759 | 757,-0.9990329346781248,0.043968 760 | 758,-0.9987369566060176,0.050244 761 | 759,-0.998401550108975,0.05651900000000001 762 | 760,-0.9980267284282716,0.062791 763 | 761,-0.9976125063612252,0.06906 764 | 762,-0.997158900260614,0.075327 765 | 763,-0.99666592803403,0.081591 766 | 764,-0.9961336091431724,0.087851 767 | 765,-0.99556196460308,0.094108 768 | 766,-0.9949510169813002,0.100362 769 | 767,-0.9943007903969988,0.10661099999999998 770 | 768,-0.9936113105200084,0.112856 771 | 769,-0.9928826045698136,0.11909700000000001 772 | 770,-0.992114701314478,0.125333 773 | 771,-0.9913076310695066,0.13156400000000001 774 | 772,-0.9904614256966512,0.13779 775 | 773,-0.9895761186026509,0.144011 776 | 774,-0.9886517447379141,0.150226 777 | 775,-0.9876883405951378,0.156434 778 | 776,-0.986685944207868,0.16263699999999998 779 | 777,-0.9856445951489982,0.16883299999999998 780 | 778,-0.9845643345292052,0.175023 781 | 779,-0.9834452049953296,0.181206 782 | 780,-0.9822872507286888,0.187381 783 | 781,-0.981090517443334,0.193549 784 | 782,-0.9798550523842471,0.19971 785 | 783,-0.9785809043254724,0.20586300000000002 786 | 784,-0.9772681235681936,0.21200700000000003 787 | 785,-0.9759167619387472,0.21814299999999998 788 | 786,-0.9745268727865772,0.224271 789 | 787,-0.9730985109821266,0.23038899999999998 790 | 788,-0.971631732914674,0.236499 791 | 789,-0.970126596490106,0.24259899999999998 792 | 790,-0.9685831611286312,0.24869000000000002 793 | 791,-0.9670014877624352,0.254771 794 | 792,-0.9653816388332738,0.260842 795 | 793,-0.9637236782900096,0.266902 796 | 794,-0.962027671586086,0.272952 797 | 795,-0.9602936856769432,0.278991 798 | 796,-0.9585217890173756,0.285019 799 | 797,-0.9567120515588304,0.291036 800 | 798,-0.9548645447466432,0.29704200000000003 801 | 799,-0.9529793415172192,0.303035 802 | 800,-0.9510565162951536,0.309017 803 | 801,-0.9490961449902948,0.31498699999999996 804 | 802,-0.9470983049947445,0.320944 805 | 803,-0.9450630751798048,0.326888 806 | 804,-0.9429905358928644,0.33282 807 | 805,-0.9408807689542256,0.338738 808 | 806,-0.9387338576538744,0.344643 809 | 807,-0.9365498867481924,0.350534 810 | 808,-0.934328942456612,0.356412 811 | 809,-0.9320711124582112,0.362275 812 | 810,-0.9297764858882516,0.368125 813 | 811,-0.9274451533346614,0.37395900000000004 814 | 812,-0.9250772068344584,0.379779 815 | 813,-0.9226727398701152,0.38558400000000004 816 | 814,-0.9202318473658702,0.391374 817 | 815,-0.917754625683981,0.397148 818 | 816,-0.9152411726209176,0.402906 819 | 817,-0.9126915874035032,0.408649 820 | 818,-0.9101059706849958,0.414376 821 | 819,-0.9074844245411172,0.42008599999999996 822 | 820,-0.9048270524660196,0.425779 823 | 821,-0.9021339593682032,0.43145600000000006 824 | 822,-0.8994052515663711,0.437116 825 | 823,-0.896641036785236,0.442758 826 | 824,-0.8938414241512641,0.448383 827 | 825,-0.8910065241883679,0.45398999999999995 828 | 826,-0.8881364488135444,0.45958000000000004 829 | 827,-0.8852313113324553,0.46515100000000004 830 | 828,-0.8822912264349535,0.470704 831 | 829,-0.8793163101905562,0.476238 832 | 830,-0.8763066800438638,0.481754 833 | 831,-0.8732624548099205,0.48725 834 | 832,-0.8701837546695254,0.492727 835 | 833,-0.8670707011644899,0.49818500000000004 836 | 834,-0.8639234171928354,0.5036229999999999 837 | 835,-0.8607420270039441,0.509041 838 | 836,-0.8575266561936523,0.51444 839 | 837,-0.8542774316992954,0.519817 840 | 838,-0.8509944817946918,0.525175 841 | 839,-0.8476779360850835,0.530511 842 | 840,-0.8443279255020151,0.535827 843 | 841,-0.8409445822981693,0.541121 844 | 842,-0.8375280400421421,0.5463939999999999 845 | 843,-0.8340784336131712,0.551646 846 | 844,-0.8305958991958124,0.556876 847 | 845,-0.8270805742745618,0.562083 848 | 846,-0.8235325976284277,0.5672689999999999 849 | 847,-0.8199521093254523,0.5724319999999999 850 | 848,-0.8163392507171842,0.577573 851 | 849,-0.8126941644330944,0.5826899999999999 852 | 850,-0.8090169943749476,0.587785 853 | 851,-0.8053078857111218,0.592857 854 | 852,-0.8015669848708766,0.597905 855 | 853,-0.7977944395385713,0.60293 856 | 854,-0.7939903986478353,0.60793 857 | 855,-0.7901550123756906,0.612907 858 | 856,-0.7862884321366188,0.6178600000000001 859 | 857,-0.7823908105765883,0.622788 860 | 858,-0.7784623015670233,0.627691 861 | 859,-0.7745030601987339,0.63257 862 | 860,-0.7705132427757896,0.637424 863 | 861,-0.7664930068093505,0.642253 864 | 862,-0.7624425110114476,0.6470560000000001 865 | 863,-0.7583619152887218,0.651834 866 | 864,-0.7542513807361041,0.656586 867 | 865,-0.7501110696304595,0.661312 868 | 866,-0.7459411454241823,0.6660119999999999 869 | 867,-0.7417417727387396,0.670686 870 | 868,-0.737513117358174,0.675333 871 | 869,-0.7332553462225597,0.679953 872 | 870,-0.7289686274214116,0.684547 873 | 871,-0.7246531301870469,0.689114 874 | 872,-0.7203090248879075,0.693653 875 | 873,-0.7159364830218314,0.6981649999999999 876 | 874,-0.7115356772092852,0.70265 877 | 875,-0.7071067811865477,0.7071069999999999 878 | 876,-0.702649969798849,0.711536 879 | 877,-0.6981654189934727,0.715936 880 | 878,-0.6936533058128054,0.720309 881 | 879,-0.6891138083873491,0.724653 882 | 880,-0.6845471059286883,0.728969 883 | 881,-0.6799533787224191,0.733255 884 | 882,-0.6753328081210247,0.737513 885 | 883,-0.6706855765367206,0.741742 886 | 884,-0.6660118674342518,0.745941 887 | 885,-0.6613118653236523,0.750111 888 | 886,-0.6565857557529565,0.754251 889 | 887,-0.6518337253008785,0.758362 890 | 888,-0.6470559615694443,0.762443 891 | 889,-0.6422526531765846,0.766493 892 | 890,-0.6374239897486903,0.770513 893 | 891,-0.6325701619131247,0.7745029999999999 894 | 892,-0.6276913612907002,0.778462 895 | 893,-0.6227877804881127,0.782391 896 | 894,-0.6178596130903348,0.786288 897 | 895,-0.6129070536529765,0.790155 898 | 896,-0.6079302976946057,0.79399 899 | 897,-0.6029295416890254,0.797794 900 | 898,-0.5979049830575184,0.801567 901 | 899,-0.5928568201610591,0.805308 902 | 900,-0.5877852522924734,0.809017 903 | 901,-0.5826904796685766,0.8126939999999999 904 | 902,-0.5775727034222677,0.816339 905 | 903,-0.5724321255945913,0.819952 906 | 904,-0.5672689491267565,0.823533 907 | 905,-0.5620833778521309,0.827081 908 | 906,-0.556875616488188,0.8305959999999999 909 | 907,-0.5516458706284305,0.8340780000000001 910 | 908,-0.5463943467342697,0.837528 911 | 909,-0.541121252126876,0.840945 912 | 910,-0.5358267949789963,0.8443280000000001 913 | 911,-0.5305111843067342,0.847678 914 | 912,-0.5251746299612962,0.850994 915 | 913,-0.5198173426207094,0.8542770000000001 916 | 914,-0.5144395337815068,0.857527 917 | 915,-0.509041415750372,0.860742 918 | 916,-0.5036232016357609,0.863923 919 | 917,-0.4981851053394906,0.8670709999999999 920 | 918,-0.4927273415482917,0.8701840000000001 921 | 919,-0.4872501257253328,0.8732620000000001 922 | 920,-0.4817536741017153,0.876307 923 | 921,-0.4762382036679395,0.879316 924 | 922,-0.4707039321653325,0.8822909999999999 925 | 923,-0.4651510780774586,0.885231 926 | 924,-0.4595798606214877,0.888136 927 | 925,-0.453990499739547,0.891007 928 | 926,-0.4483832160900328,0.893841 929 | 927,-0.4427582310389024,0.896641 930 | 928,-0.43711576665093255,0.8994049999999999 931 | 929,-0.43145604568095897,0.902134 932 | 930,-0.425779291565073,0.904827 933 | 931,-0.4200857284118062,0.9074840000000001 934 | 932,-0.4143755809932844,0.910106 935 | 933,-0.4086490747363497,0.9126920000000001 936 | 934,-0.4029064357136629,0.915241 937 | 935,-0.3971478906347803,0.9177549999999999 938 | 936,-0.3913736668372025,0.9202319999999999 939 | 937,-0.3855839922773971,0.922673 940 | 938,-0.3797790955218019,0.925077 941 | 939,-0.3739592057378008,0.9274450000000001 942 | 940,-0.36812455268467786,0.929776 943 | 941,-0.3622753667045459,0.9320709999999999 944 | 942,-0.3564118787132505,0.9343290000000001 945 | 943,-0.3505343201912592,0.93655 946 | 944,-0.3446429231745176,0.9387340000000001 947 | 945,-0.33873792024529226,0.940881 948 | 946,-0.33281954452298623,0.942991 949 | 947,-0.3268880296549424,0.9450629999999999 950 | 948,-0.3209436098072098,0.947098 951 | 949,-0.3149865196553055,0.9490959999999999 952 | 950,-0.3090169943749477,0.9510569999999999 953 | 951,-0.3030352696327745,0.9529790000000001 954 | 952,-0.29704158157703503,0.954865 955 | 953,-0.2910361668282715,0.9567120000000001 956 | 954,-0.28501926246997616,0.958522 957 | 955,-0.2789911060392297,0.9602940000000001 958 | 956,-0.27295193551732605,0.9620280000000001 959 | 957,-0.26690198932037584,0.963724 960 | 958,-0.2608415062898968,0.965382 961 | 959,-0.2547707256833824,0.967001 962 | 960,-0.2486898871648553,0.968583 963 | 961,-0.2425992307954075,0.9701270000000001 964 | 962,-0.23649899702372515,0.9716319999999999 965 | 963,-0.23038942667659146,0.9730989999999999 966 | 964,-0.2242707609493807,0.974527 967 | 965,-0.21814324139654245,0.975917 968 | 966,-0.2120071099220549,0.977268 969 | 967,-0.205862608769882,0.9785809999999999 970 | 968,-0.1997099805144072,0.9798549999999999 971 | 969,-0.1935494680508608,0.9810909999999999 972 | 970,-0.18738131458572468,0.9822870000000001 973 | 971,-0.18120576362713686,0.9834450000000001 974 | 972,-0.175023058975276,0.984564 975 | 973,-0.1688334447127342,0.9856450000000001 976 | 974,-0.16263716519488433,0.9866860000000001 977 | 975,-0.15643446504023112,0.9876879999999999 978 | 976,-0.1502255891207568,0.9886520000000001 979 | 977,-0.1440107825522523,0.989576 980 | 978,-0.13779029068463858,0.990461 981 | 979,-0.13156435909228253,0.991308 982 | 980,-0.12533323356430465,0.992115 983 | 981,-0.11909716009487055,0.992883 984 | 982,-0.11285638487348112,0.993611 985 | 983,-0.10661115427525973,0.994301 986 | 984,-0.10036171485121508,0.994951 987 | 985,-0.09410831331851492,0.9955620000000001 988 | 986,-0.08785119655074328,0.996134 989 | 987,-0.08159061156815804,0.9966659999999999 990 | 988,-0.07532680552793272,0.997159 991 | 989,-0.06906002571440617,0.997613 992 | 990,-0.06279051952931326,0.998027 993 | 991,-0.0565185344820248,0.998402 994 | 992,-0.050244318179770216,0.9987370000000001 995 | 993,-0.04396811831786508,0.999033 996 | 994,-0.03769018266993422,0.999289 997 | 995,-0.03141075907812836,0.9995069999999999 998 | 996,-0.025130095443337937,0.999684 999 | 997,-0.018848439715408137,0.999822 1000 | 998,-0.01256603988335296,0.999921 1001 | 999,-0.0062831439655596935,0.99998 1002 | -------------------------------------------------------------------------------- /samples/sine.csv: -------------------------------------------------------------------------------- 1 | x,sin(2πx/1000) 2 | 0,0.0 3 | 1,0.006283143965558951 4 | 2,0.012566039883352607 5 | 3,0.018848439715408175 6 | 4,0.02513009544333748 7 | 5,0.03141075907812829 8 | 6,0.03769018266993454 9 | 7,0.0439681183178649 10 | 8,0.050244318179769556 11 | 9,0.05651853448202453 12 | 10,0.06279051952931337 13 | 11,0.06906002571440578 14 | 12,0.07532680552793272 15 | 13,0.08159061156815756 16 | 14,0.08785119655074317 17 | 15,0.09410831331851431 18 | 16,0.1003617148512149 19 | 17,0.10661115427525991 20 | 18,0.11285638487348168 21 | 19,0.11909716009486973 22 | 20,0.12533323356430426 23 | 21,0.1315643590922825 24 | 22,0.13779029068463805 25 | 23,0.14401078255225216 26 | 24,0.15022558912075706 27 | 25,0.15643446504023087 28 | 26,0.1626371651948836 29 | 27,0.16883344471273387 30 | 28,0.17502305897527604 31 | 29,0.18120576362713736 32 | 30,0.1873813145857246 33 | 31,0.19354946805086023 34 | 32,0.19970998051440703 35 | 33,0.20586260876988133 36 | 34,0.21200710992205463 37 | 35,0.21814324139654254 38 | 36,0.22427076094938117 39 | 37,0.23038942667659057 40 | 38,0.23649899702372468 41 | 39,0.2425992307954074 42 | 40,0.2486898871648548 43 | 41,0.2547707256833821 44 | 42,0.26084150628989694 45 | 43,0.26690198932037557 46 | 44,0.27295193551732516 47 | 45,0.2789911060392293 48 | 46,0.2850192624699761 49 | 47,0.2910361668282718 50 | 48,0.2970415815770349 51 | 49,0.30303526963277394 52 | 50,0.3090169943749474 53 | 51,0.3149865196553048 54 | 52,0.32094360980720954 55 | 53,0.32688802965494246 56 | 54,0.3328195445229866 57 | 55,0.3387379202452914 58 | 56,0.34464292317451706 59 | 57,0.35053432019125896 60 | 58,0.35641187871325075 61 | 59,0.36227536670454563 62 | 60,0.3681245526846779 63 | 61,0.37395920573780045 64 | 62,0.37977909552180106 65 | 63,0.38558399227739654 66 | 64,0.3913736668372024 67 | 65,0.39714789063478056 68 | 66,0.40290643571366264 69 | 67,0.40864907473634904 70 | 68,0.41437558099328414 71 | 69,0.42008572841180625 72 | 70,0.42577929156507266 73 | 71,0.43145604568095897 74 | 72,0.4371157666509329 75 | 73,0.4427582310389015 76 | 74,0.44838321609003223 77 | 75,0.45399049973954675 78 | 76,0.4595798606214878 79 | 77,0.4651510780774583 80 | 78,0.4707039321653325 81 | 79,0.4762382036679391 82 | 80,0.4817536741017153 83 | 81,0.4872501257253323 84 | 82,0.4927273415482915 85 | 83,0.4981851053394909 86 | 84,0.5036232016357608 87 | 85,0.5090414157503713 88 | 86,0.5144395337815064 89 | 87,0.5198173426207094 90 | 88,0.5251746299612956 91 | 89,0.530511184306734 92 | 90,0.5358267949789967 93 | 91,0.5411212521268758 94 | 92,0.5463943467342691 95 | 93,0.5516458706284302 96 | 94,0.556875616488188 97 | 95,0.5620833778521306 98 | 96,0.5672689491267565 99 | 97,0.5724321255945908 100 | 98,0.5775727034222676 101 | 99,0.5826904796685761 102 | 100,0.5877852522924731 103 | 101,0.5928568201610592 104 | 102,0.5979049830575188 105 | 103,0.6029295416890247 106 | 104,0.6079302976946055 107 | 105,0.6129070536529765 108 | 106,0.6178596130903343 109 | 107,0.6227877804881126 110 | 108,0.6276913612907005 111 | 109,0.6325701619131244 112 | 110,0.6374239897486897 113 | 111,0.6422526531765844 114 | 112,0.6470559615694442 115 | 113,0.6518337253008788 116 | 114,0.6565857557529564 117 | 115,0.6613118653236518 118 | 116,0.6660118674342517 119 | 117,0.67068557653672 120 | 118,0.6753328081210244 121 | 119,0.6799533787224192 122 | 120,0.6845471059286886 123 | 121,0.6891138083873485 124 | 122,0.693653305812805 125 | 123,0.6981654189934726 126 | 124,0.7026499697988492 127 | 125,0.7071067811865475 128 | 126,0.7115356772092853 129 | 127,0.7159364830218311 130 | 128,0.7203090248879069 131 | 129,0.7246531301870466 132 | 130,0.7289686274214114 133 | 131,0.7332553462225601 134 | 132,0.7375131173581739 135 | 133,0.7417417727387392 136 | 134,0.7459411454241821 137 | 135,0.7501110696304595 138 | 136,0.7542513807361038 139 | 137,0.7583619152887219 140 | 138,0.7624425110114479 141 | 139,0.7664930068093498 142 | 140,0.7705132427757893 143 | 141,0.7745030601987338 144 | 142,0.7784623015670235 145 | 143,0.7823908105765881 146 | 144,0.7862884321366189 147 | 145,0.7901550123756903 148 | 146,0.7939903986478353 149 | 147,0.797794439538571 150 | 148,0.8015669848708765 151 | 149,0.805307885711122 152 | 150,0.8090169943749475 153 | 151,0.812694164433094 154 | 152,0.8163392507171839 155 | 153,0.8199521093254524 156 | 154,0.8235325976284275 157 | 155,0.8270805742745618 158 | 156,0.8305958991958126 159 | 157,0.8340784336131711 160 | 158,0.8375280400421418 161 | 159,0.840944582298169 162 | 160,0.8443279255020151 163 | 161,0.8476779360850831 164 | 162,0.8509944817946918 165 | 163,0.8542774316992952 166 | 164,0.8575266561936522 167 | 165,0.8607420270039435 168 | 166,0.8639234171928354 169 | 167,0.86707070116449 170 | 168,0.8701837546695257 171 | 169,0.8732624548099202 172 | 170,0.8763066800438636 173 | 171,0.8793163101905562 174 | 172,0.8822912264349533 175 | 173,0.8852313113324551 176 | 174,0.8881364488135445 177 | 175,0.8910065241883678 178 | 176,0.8938414241512637 179 | 177,0.8966410367852359 180 | 178,0.8994052515663711 181 | 179,0.9021339593682028 182 | 180,0.9048270524660196 183 | 181,0.907484424541117 184 | 182,0.9101059706849957 185 | 183,0.9126915874035028 186 | 184,0.9152411726209175 187 | 185,0.917754625683981 188 | 186,0.9202318473658703 189 | 187,0.9226727398701149 190 | 188,0.925077206834458 191 | 189,0.9274451533346614 192 | 190,0.9297764858882515 193 | 191,0.932071112458211 194 | 192,0.934328942456612 195 | 193,0.9365498867481924 196 | 194,0.9387338576538741 197 | 195,0.9408807689542255 198 | 196,0.9429905358928644 199 | 197,0.9450630751798048 200 | 198,0.9470983049947443 201 | 199,0.9490961449902946 202 | 200,0.9510565162951535 203 | 201,0.9529793415172189 204 | 202,0.954864544746643 205 | 203,0.9567120515588304 206 | 204,0.9585217890173758 207 | 205,0.9602936856769431 208 | 206,0.9620276715860858 209 | 207,0.9637236782900097 210 | 208,0.9653816388332739 211 | 209,0.967001487762435 212 | 210,0.9685831611286311 213 | 211,0.9701265964901059 214 | 212,0.9716317329146739 215 | 213,0.9730985109821265 216 | 214,0.9745268727865771 217 | 215,0.9759167619387473 218 | 216,0.9772681235681935 219 | 217,0.9785809043254721 220 | 218,0.9798550523842469 221 | 219,0.9810905174433341 222 | 220,0.9822872507286887 223 | 221,0.9834452049953297 224 | 222,0.9845643345292053 225 | 223,0.985644595148998 226 | 224,0.986685944207868 227 | 225,0.9876883405951378 228 | 226,0.9886517447379141 229 | 227,0.9895761186026509 230 | 228,0.9904614256966512 231 | 229,0.9913076310695066 232 | 230,0.9921147013144779 233 | 231,0.9928826045698137 234 | 232,0.9936113105200084 235 | 233,0.9943007903969989 236 | 234,0.9949510169813002 237 | 235,0.99556196460308 238 | 236,0.9961336091431725 239 | 237,0.9966659280340299 240 | 238,0.9971589002606139 241 | 239,0.9976125063612252 242 | 240,0.9980267284282716 243 | 241,0.998401550108975 244 | 242,0.9987369566060175 245 | 243,0.9990329346781247 246 | 244,0.9992894726405892 247 | 245,0.9995065603657316 248 | 246,0.9996841892832999 249 | 247,0.999822352380809 250 | 248,0.9999210442038161 251 | 249,0.9999802608561371 252 | 250,1.0 253 | 251,0.9999802608561371 254 | 252,0.9999210442038161 255 | 253,0.999822352380809 256 | 254,0.9996841892832999 257 | 255,0.9995065603657316 258 | 256,0.9992894726405892 259 | 257,0.9990329346781247 260 | 258,0.9987369566060175 261 | 259,0.998401550108975 262 | 260,0.9980267284282716 263 | 261,0.9976125063612252 264 | 262,0.9971589002606139 265 | 263,0.9966659280340299 266 | 264,0.9961336091431725 267 | 265,0.99556196460308 268 | 266,0.9949510169813002 269 | 267,0.9943007903969989 270 | 268,0.9936113105200084 271 | 269,0.9928826045698137 272 | 270,0.9921147013144779 273 | 271,0.9913076310695066 274 | 272,0.9904614256966512 275 | 273,0.9895761186026509 276 | 274,0.988651744737914 277 | 275,0.9876883405951378 278 | 276,0.986685944207868 279 | 277,0.985644595148998 280 | 278,0.9845643345292054 281 | 279,0.9834452049953297 282 | 280,0.9822872507286887 283 | 281,0.9810905174433341 284 | 282,0.9798550523842469 285 | 283,0.9785809043254721 286 | 284,0.9772681235681935 287 | 285,0.9759167619387474 288 | 286,0.9745268727865771 289 | 287,0.9730985109821266 290 | 288,0.971631732914674 291 | 289,0.9701265964901058 292 | 290,0.9685831611286312 293 | 291,0.9670014877624351 294 | 292,0.9653816388332739 295 | 293,0.9637236782900098 296 | 294,0.9620276715860859 297 | 295,0.9602936856769431 298 | 296,0.958521789017376 299 | 297,0.9567120515588304 300 | 298,0.954864544746643 301 | 299,0.9529793415172189 302 | 300,0.9510565162951536 303 | 301,0.9490961449902946 304 | 302,0.9470983049947443 305 | 303,0.9450630751798049 306 | 304,0.9429905358928645 307 | 305,0.9408807689542255 308 | 306,0.9387338576538741 309 | 307,0.9365498867481923 310 | 308,0.9343289424566121 311 | 309,0.932071112458211 312 | 310,0.9297764858882513 313 | 311,0.9274451533346614 314 | 312,0.925077206834458 315 | 313,0.9226727398701149 316 | 314,0.9202318473658704 317 | 315,0.9177546256839811 318 | 316,0.9152411726209175 319 | 317,0.9126915874035029 320 | 318,0.9101059706849957 321 | 319,0.9074844245411169 322 | 320,0.9048270524660195 323 | 321,0.902133959368203 324 | 322,0.8994052515663712 325 | 323,0.896641036785236 326 | 324,0.8938414241512639 327 | 325,0.8910065241883679 328 | 326,0.8881364488135446 329 | 327,0.8852313113324553 330 | 328,0.8822912264349535 331 | 329,0.8793163101905562 332 | 330,0.8763066800438637 333 | 331,0.8732624548099203 334 | 332,0.8701837546695255 335 | 333,0.8670707011644901 336 | 334,0.8639234171928354 337 | 335,0.8607420270039436 338 | 336,0.8575266561936522 339 | 337,0.8542774316992954 340 | 338,0.8509944817946917 341 | 339,0.8476779360850834 342 | 340,0.8443279255020152 343 | 341,0.8409445822981692 344 | 342,0.8375280400421418 345 | 343,0.8340784336131712 346 | 344,0.8305958991958127 347 | 345,0.8270805742745617 348 | 346,0.8235325976284276 349 | 347,0.8199521093254523 350 | 348,0.816339250717184 351 | 349,0.8126941644330941 352 | 350,0.8090169943749475 353 | 351,0.805307885711122 354 | 352,0.8015669848708769 355 | 353,0.797794439538571 356 | 354,0.7939903986478353 357 | 355,0.7901550123756905 358 | 356,0.7862884321366188 359 | 357,0.7823908105765882 360 | 358,0.7784623015670235 361 | 359,0.7745030601987338 362 | 360,0.7705132427757893 363 | 361,0.7664930068093501 364 | 362,0.7624425110114478 365 | 363,0.7583619152887218 366 | 364,0.754251380736104 367 | 365,0.7501110696304594 368 | 366,0.7459411454241822 369 | 367,0.7417417727387392 370 | 368,0.7375131173581739 371 | 369,0.73325534622256 372 | 370,0.7289686274214118 373 | 371,0.7246531301870466 374 | 372,0.720309024887907 375 | 373,0.7159364830218313 376 | 374,0.7115356772092851 377 | 375,0.7071067811865476 378 | 376,0.7026499697988492 379 | 377,0.6981654189934726 380 | 378,0.6936533058128049 381 | 379,0.6891138083873487 382 | 380,0.6845471059286885 383 | 381,0.6799533787224193 384 | 382,0.6753328081210246 385 | 383,0.6706855765367201 386 | 384,0.6660118674342517 387 | 385,0.6613118653236518 388 | 386,0.6565857557529564 389 | 387,0.6518337253008787 390 | 388,0.6470559615694446 391 | 389,0.6422526531765842 392 | 390,0.6374239897486899 393 | 391,0.6325701619131245 394 | 392,0.6276913612907006 395 | 393,0.6227877804881126 396 | 394,0.6178596130903347 397 | 395,0.6129070536529764 398 | 396,0.6079302976946053 399 | 397,0.6029295416890249 400 | 398,0.5979049830575187 401 | 399,0.5928568201610593 402 | 400,0.5877852522924732 403 | 401,0.5826904796685761 404 | 402,0.5775727034222676 405 | 403,0.5724321255945912 406 | 404,0.5672689491267564 407 | 405,0.5620833778521308 408 | 406,0.5568756164881882 409 | 407,0.55164587062843 410 | 408,0.5463943467342692 411 | 409,0.5411212521268759 412 | 410,0.5358267949789967 413 | 411,0.530511184306734 414 | 412,0.525174629961296 415 | 413,0.5198173426207093 416 | 414,0.5144395337815066 417 | 415,0.5090414157503714 418 | 416,0.5036232016357606 419 | 417,0.4981851053394909 420 | 418,0.4927273415482916 421 | 419,0.4872501257253323 422 | 420,0.4817536741017152 423 | 421,0.4762382036679394 424 | 422,0.4707039321653324 425 | 423,0.46515107807745854 426 | 424,0.459579860621488 427 | 425,0.45399049973954686 428 | 426,0.4483832160900323 429 | 427,0.44275823103890155 430 | 428,0.4371157666509329 431 | 429,0.43145604568095886 432 | 430,0.4257792915650729 433 | 431,0.4200857284118061 434 | 432,0.4143755809932843 435 | 433,0.40864907473634915 436 | 434,0.40290643571366275 437 | 435,0.3971478906347806 438 | 436,0.3913736668372028 439 | 437,0.3855839922773965 440 | 438,0.379779095521801 441 | 439,0.37395920573780067 442 | 440,0.36812455268467775 443 | 441,0.3622753667045458 444 | 442,0.3564118787132508 445 | 443,0.350534320191259 446 | 444,0.34464292317451706 447 | 445,0.33873792024529176 448 | 446,0.3328195445229865 449 | 447,0.32688802965494274 450 | 448,0.3209436098072097 451 | 449,0.31498651965530455 452 | 450,0.3090169943749475 453 | 451,0.30303526963277405 454 | 452,0.2970415815770349 455 | 453,0.29103616682827177 456 | 454,0.28501926246997644 457 | 455,0.2789911060392291 458 | 456,0.27295193551732544 459 | 457,0.26690198932037573 460 | 458,0.26084150628989705 461 | 459,0.25477072568338227 462 | 460,0.24868988716485482 463 | 461,0.2425992307954074 464 | 462,0.2364989970237246 465 | 463,0.23038942667659087 466 | 464,0.224270760949381 467 | 465,0.21814324139654276 468 | 466,0.2120071099220548 469 | 467,0.2058626087698814 470 | 468,0.19970998051440705 471 | 469,0.19354946805086068 472 | 470,0.18738131458572457 473 | 471,0.18120576362713725 474 | 472,0.1750230589752763 475 | 473,0.16883344471273365 476 | 474,0.16263716519488378 477 | 475,0.15643446504023098 478 | 476,0.15022558912075712 479 | 477,0.14401078255225216 480 | 478,0.13779029068463847 481 | 479,0.1315643590922824 482 | 480,0.12533323356430454 483 | 481,0.11909716009486998 484 | 482,0.11285638487348143 485 | 483,0.10661115427526005 486 | 484,0.10036171485121498 487 | 485,0.09410831331851435 488 | 486,0.08785119655074315 489 | 487,0.08159061156815792 490 | 488,0.0753268055279326 491 | 489,0.06906002571440606 492 | 490,0.06279051952931358 493 | 491,0.056518534482024235 494 | 492,0.05024431817976966 495 | 493,0.04396811831786495 496 | 494,0.037690182669934534 497 | 495,0.031410759078128236 498 | 496,0.025130095443337813 499 | 497,0.018848439715408016 500 | 498,0.012566039883352836 501 | 499,0.006283143965559127 502 | 500,1.2246467991473532e-16 503 | 501,-0.006283143965558882 504 | 502,-0.012566039883352592 505 | 503,-0.018848439715408213 506 | 504,-0.02513009544333757 507 | 505,-0.031410759078127994 508 | 506,-0.037690182669934735 509 | 507,-0.04396811831786471 510 | 508,-0.05024431817976942 511 | 509,-0.056518534482024436 512 | 510,-0.06279051952931335 513 | 511,-0.06906002571440538 514 | 512,-0.07532680552793279 515 | 513,-0.08159061156815768 516 | 514,-0.0878511965507429 517 | 515,-0.09410831331851455 518 | 516,-0.10036171485121473 519 | 517,-0.1066111542752598 520 | 518,-0.11285638487348164 521 | 519,-0.11909716009486973 522 | 520,-0.12533323356430384 523 | 521,-0.13156435909228262 524 | 522,-0.13779029068463777 525 | 523,-0.14401078255225194 526 | 524,-0.1502255891207573 527 | 525,-0.15643446504023073 528 | 526,-0.16263716519488353 529 | 527,-0.16883344471273384 530 | 528,-0.1750230589752761 531 | 529,-0.181205763627137 532 | 530,-0.18738131458572477 533 | 531,-0.19354946805086 534 | 532,-0.19970998051440683 535 | 533,-0.2058626087698812 536 | 534,-0.21200710992205454 537 | 535,-0.2181432413965425 538 | 536,-0.2242707609493812 539 | 537,-0.23038942667659065 540 | 538,-0.23649899702372437 541 | 539,-0.2425992307954076 542 | 540,-0.24868988716485457 543 | 541,-0.254770725683382 544 | 542,-0.26084150628989683 545 | 543,-0.2669019893203755 546 | 544,-0.2729519355173252 547 | 545,-0.2789911060392293 548 | 546,-0.2850192624699762 549 | 547,-0.29103616682827155 550 | 548,-0.2970415815770351 551 | 549,-0.3030352696327738 552 | 550,-0.3090169943749473 553 | 551,-0.3149865196553047 554 | 552,-0.3209436098072095 555 | 553,-0.32688802965494207 556 | 554,-0.33281954452298673 557 | 555,-0.3387379202452915 558 | 556,-0.34464292317451684 559 | 557,-0.35053432019125924 560 | 558,-0.3564118787132506 561 | 559,-0.3622753667045456 562 | 560,-0.3681245526846779 563 | 561,-0.37395920573780045 564 | 562,-0.3797790955218007 565 | 563,-0.38558399227739665 566 | 564,-0.39137366683720215 567 | 565,-0.3971478906347804 568 | 566,-0.4029064357136629 569 | 567,-0.4086490747363489 570 | 568,-0.4143755809932841 571 | 569,-0.42008572841180625 572 | 570,-0.42577929156507266 573 | 571,-0.43145604568095863 574 | 572,-0.43711576665093305 575 | 573,-0.44275823103890133 576 | 574,-0.44838321609003207 577 | 575,-0.4539904997395467 578 | 576,-0.45957986062148776 579 | 577,-0.4651510780774583 580 | 578,-0.4707039321653326 581 | 579,-0.4762382036679392 582 | 580,-0.481753674101715 583 | 581,-0.4872501257253325 584 | 582,-0.4927273415482914 585 | 583,-0.4981851053394907 586 | 584,-0.5036232016357608 587 | 585,-0.5090414157503712 588 | 586,-0.5144395337815061 589 | 587,-0.5198173426207096 590 | 588,-0.5251746299612958 591 | 589,-0.5305111843067338 592 | 590,-0.5358267949789968 593 | 591,-0.5411212521268757 594 | 592,-0.546394346734269 595 | 593,-0.5516458706284302 596 | 594,-0.556875616488188 597 | 595,-0.5620833778521303 598 | 596,-0.5672689491267565 599 | 597,-0.5724321255945907 600 | 598,-0.5775727034222674 601 | 599,-0.5826904796685762 602 | 600,-0.587785252292473 603 | 601,-0.5928568201610591 604 | 602,-0.5979049830575188 605 | 603,-0.6029295416890247 606 | 604,-0.607930297694605 607 | 605,-0.6129070536529766 608 | 606,-0.6178596130903341 609 | 607,-0.6227877804881123 610 | 608,-0.6276913612907004 611 | 609,-0.6325701619131243 612 | 610,-0.6374239897486896 613 | 611,-0.6422526531765844 614 | 612,-0.6470559615694443 615 | 613,-0.6518337253008785 616 | 614,-0.6565857557529565 617 | 615,-0.6613118653236517 618 | 616,-0.6660118674342514 619 | 617,-0.6706855765367199 620 | 618,-0.6753328081210244 621 | 619,-0.6799533787224192 622 | 620,-0.6845471059286887 623 | 621,-0.6891138083873485 624 | 622,-0.6936533058128047 625 | 623,-0.6981654189934728 626 | 624,-0.7026499697988491 627 | 625,-0.7071067811865475 628 | 626,-0.7115356772092852 629 | 627,-0.7159364830218311 630 | 628,-0.7203090248879066 631 | 629,-0.7246531301870467 632 | 630,-0.7289686274214116 633 | 631,-0.7332553462225598 634 | 632,-0.737513117358174 635 | 633,-0.7417417727387391 636 | 634,-0.7459411454241821 637 | 635,-0.7501110696304595 638 | 636,-0.7542513807361038 639 | 637,-0.7583619152887215 640 | 638,-0.7624425110114479 641 | 639,-0.7664930068093496 642 | 640,-0.7705132427757894 643 | 641,-0.7745030601987337 644 | 642,-0.778462301567023 645 | 643,-0.7823908105765881 646 | 644,-0.7862884321366186 647 | 645,-0.7901550123756904 648 | 646,-0.793990398647835 649 | 647,-0.7977944395385711 650 | 648,-0.8015669848708764 651 | 649,-0.8053078857111221 652 | 650,-0.8090169943749473 653 | 651,-0.8126941644330936 654 | 652,-0.8163392507171839 655 | 653,-0.8199521093254526 656 | 654,-0.8235325976284275 657 | 655,-0.8270805742745616 658 | 656,-0.8305958991958122 659 | 657,-0.834078433613171 660 | 658,-0.8375280400421419 661 | 659,-0.840944582298169 662 | 660,-0.8443279255020149 663 | 661,-0.8476779360850832 664 | 662,-0.8509944817946916 665 | 663,-0.8542774316992947 666 | 664,-0.8575266561936525 667 | 665,-0.8607420270039438 668 | 666,-0.8639234171928352 669 | 667,-0.8670707011644898 670 | 668,-0.8701837546695256 671 | 669,-0.8732624548099199 672 | 670,-0.8763066800438636 673 | 671,-0.8793163101905561 674 | 672,-0.8822912264349534 675 | 673,-0.8852313113324551 676 | 674,-0.8881364488135443 677 | 675,-0.8910065241883678 678 | 676,-0.8938414241512639 679 | 677,-0.8966410367852359 680 | 678,-0.8994052515663709 681 | 679,-0.9021339593682028 682 | 680,-0.9048270524660194 683 | 681,-0.9074844245411167 684 | 682,-0.9101059706849955 685 | 683,-0.9126915874035029 686 | 684,-0.9152411726209175 687 | 685,-0.9177546256839809 688 | 686,-0.9202318473658704 689 | 687,-0.9226727398701147 690 | 688,-0.925077206834458 691 | 689,-0.9274451533346612 692 | 690,-0.9297764858882515 693 | 691,-0.9320711124582108 694 | 692,-0.9343289424566118 695 | 693,-0.936549886748192 696 | 694,-0.9387338576538742 697 | 695,-0.9408807689542255 698 | 696,-0.9429905358928643 699 | 697,-0.9450630751798049 700 | 698,-0.9470983049947442 701 | 699,-0.9490961449902944 702 | 700,-0.9510565162951535 703 | 701,-0.952979341517219 704 | 702,-0.954864544746643 705 | 703,-0.9567120515588303 706 | 704,-0.9585217890173756 707 | 705,-0.960293685676943 708 | 706,-0.9620276715860859 709 | 707,-0.9637236782900096 710 | 708,-0.965381638833274 711 | 709,-0.967001487762435 712 | 710,-0.968583161128631 713 | 711,-0.9701265964901056 714 | 712,-0.9716317329146741 715 | 713,-0.9730985109821266 716 | 714,-0.9745268727865771 717 | 715,-0.9759167619387474 718 | 716,-0.9772681235681934 719 | 717,-0.978580904325472 720 | 718,-0.9798550523842469 721 | 719,-0.9810905174433342 722 | 720,-0.9822872507286887 723 | 721,-0.9834452049953296 724 | 722,-0.9845643345292052 725 | 723,-0.9856445951489979 726 | 724,-0.9866859442078681 727 | 725,-0.9876883405951377 728 | 726,-0.9886517447379141 729 | 727,-0.9895761186026509 730 | 728,-0.9904614256966512 731 | 729,-0.9913076310695065 732 | 730,-0.9921147013144779 733 | 731,-0.9928826045698137 734 | 732,-0.9936113105200084 735 | 733,-0.9943007903969988 736 | 734,-0.9949510169813002 737 | 735,-0.99556196460308 738 | 736,-0.9961336091431725 739 | 737,-0.9966659280340299 740 | 738,-0.9971589002606139 741 | 739,-0.9976125063612252 742 | 740,-0.9980267284282716 743 | 741,-0.998401550108975 744 | 742,-0.9987369566060175 745 | 743,-0.9990329346781247 746 | 744,-0.9992894726405892 747 | 745,-0.9995065603657316 748 | 746,-0.9996841892832999 749 | 747,-0.999822352380809 750 | 748,-0.9999210442038161 751 | 749,-0.9999802608561371 752 | 750,-1.0 753 | 751,-0.9999802608561371 754 | 752,-0.9999210442038161 755 | 753,-0.999822352380809 756 | 754,-0.9996841892832999 757 | 755,-0.9995065603657316 758 | 756,-0.9992894726405892 759 | 757,-0.9990329346781247 760 | 758,-0.9987369566060176 761 | 759,-0.998401550108975 762 | 760,-0.9980267284282716 763 | 761,-0.9976125063612252 764 | 762,-0.9971589002606139 765 | 763,-0.9966659280340299 766 | 764,-0.9961336091431725 767 | 765,-0.9955619646030801 768 | 766,-0.9949510169813002 769 | 767,-0.9943007903969988 770 | 768,-0.9936113105200084 771 | 769,-0.9928826045698137 772 | 770,-0.9921147013144779 773 | 771,-0.9913076310695066 774 | 772,-0.9904614256966512 775 | 773,-0.989576118602651 776 | 774,-0.988651744737914 777 | 775,-0.9876883405951378 778 | 776,-0.9866859442078681 779 | 777,-0.9856445951489982 780 | 778,-0.9845643345292053 781 | 779,-0.9834452049953297 782 | 780,-0.9822872507286887 783 | 781,-0.9810905174433341 784 | 782,-0.979855052384247 785 | 783,-0.9785809043254723 786 | 784,-0.9772681235681935 787 | 785,-0.9759167619387473 788 | 786,-0.9745268727865771 789 | 787,-0.9730985109821266 790 | 788,-0.9716317329146741 791 | 789,-0.9701265964901059 792 | 790,-0.9685831611286311 793 | 791,-0.9670014877624351 794 | 792,-0.9653816388332738 795 | 793,-0.9637236782900097 796 | 794,-0.962027671586086 797 | 795,-0.9602936856769433 798 | 796,-0.9585217890173757 799 | 797,-0.9567120515588304 800 | 798,-0.9548645447466431 801 | 799,-0.9529793415172191 802 | 800,-0.9510565162951536 803 | 801,-0.9490961449902948 804 | 802,-0.9470983049947443 805 | 803,-0.9450630751798047 806 | 804,-0.9429905358928644 807 | 805,-0.9408807689542256 808 | 806,-0.9387338576538744 809 | 807,-0.9365498867481924 810 | 808,-0.934328942456612 811 | 809,-0.9320711124582111 812 | 810,-0.9297764858882516 813 | 811,-0.9274451533346614 814 | 812,-0.9250772068344583 815 | 813,-0.9226727398701151 816 | 814,-0.9202318473658702 817 | 815,-0.917754625683981 818 | 816,-0.9152411726209176 819 | 817,-0.9126915874035031 820 | 818,-0.9101059706849958 821 | 819,-0.9074844245411171 822 | 820,-0.9048270524660196 823 | 821,-0.9021339593682031 824 | 822,-0.899405251566371 825 | 823,-0.896641036785236 826 | 824,-0.8938414241512641 827 | 825,-0.8910065241883679 828 | 826,-0.8881364488135444 829 | 827,-0.8852313113324553 830 | 828,-0.8822912264349535 831 | 829,-0.8793163101905562 832 | 830,-0.8763066800438638 833 | 831,-0.8732624548099205 834 | 832,-0.8701837546695254 835 | 833,-0.8670707011644899 836 | 834,-0.8639234171928354 837 | 835,-0.860742027003944 838 | 836,-0.8575266561936523 839 | 837,-0.8542774316992954 840 | 838,-0.8509944817946918 841 | 839,-0.8476779360850835 842 | 840,-0.844327925502015 843 | 841,-0.8409445822981693 844 | 842,-0.8375280400421421 845 | 843,-0.8340784336131712 846 | 844,-0.8305958991958124 847 | 845,-0.8270805742745618 848 | 846,-0.8235325976284277 849 | 847,-0.8199521093254523 850 | 848,-0.8163392507171842 851 | 849,-0.8126941644330944 852 | 850,-0.8090169943749476 853 | 851,-0.8053078857111218 854 | 852,-0.8015669848708766 855 | 853,-0.7977944395385713 856 | 854,-0.7939903986478353 857 | 855,-0.7901550123756906 858 | 856,-0.7862884321366188 859 | 857,-0.7823908105765883 860 | 858,-0.7784623015670233 861 | 859,-0.7745030601987339 862 | 860,-0.7705132427757896 863 | 861,-0.7664930068093505 864 | 862,-0.7624425110114476 865 | 863,-0.7583619152887218 866 | 864,-0.7542513807361041 867 | 865,-0.7501110696304595 868 | 866,-0.7459411454241823 869 | 867,-0.7417417727387396 870 | 868,-0.737513117358174 871 | 869,-0.7332553462225597 872 | 870,-0.7289686274214116 873 | 871,-0.7246531301870469 874 | 872,-0.7203090248879075 875 | 873,-0.7159364830218314 876 | 874,-0.7115356772092852 877 | 875,-0.7071067811865477 878 | 876,-0.702649969798849 879 | 877,-0.6981654189934727 880 | 878,-0.6936533058128054 881 | 879,-0.6891138083873491 882 | 880,-0.6845471059286883 883 | 881,-0.6799533787224191 884 | 882,-0.6753328081210247 885 | 883,-0.6706855765367206 886 | 884,-0.6660118674342518 887 | 885,-0.6613118653236523 888 | 886,-0.6565857557529565 889 | 887,-0.6518337253008785 890 | 888,-0.6470559615694443 891 | 889,-0.6422526531765846 892 | 890,-0.6374239897486903 893 | 891,-0.6325701619131247 894 | 892,-0.6276913612907002 895 | 893,-0.6227877804881127 896 | 894,-0.6178596130903348 897 | 895,-0.6129070536529765 898 | 896,-0.6079302976946057 899 | 897,-0.6029295416890254 900 | 898,-0.5979049830575184 901 | 899,-0.5928568201610591 902 | 900,-0.5877852522924734 903 | 901,-0.5826904796685766 904 | 902,-0.5775727034222677 905 | 903,-0.5724321255945913 906 | 904,-0.5672689491267565 907 | 905,-0.5620833778521309 908 | 906,-0.556875616488188 909 | 907,-0.5516458706284305 910 | 908,-0.5463943467342697 911 | 909,-0.541121252126876 912 | 910,-0.5358267949789963 913 | 911,-0.5305111843067342 914 | 912,-0.5251746299612962 915 | 913,-0.5198173426207094 916 | 914,-0.5144395337815068 917 | 915,-0.509041415750372 918 | 916,-0.503623201635761 919 | 917,-0.4981851053394906 920 | 918,-0.4927273415482917 921 | 919,-0.48725012572533277 922 | 920,-0.4817536741017153 923 | 921,-0.4762382036679395 924 | 922,-0.4707039321653325 925 | 923,-0.46515107807745865 926 | 924,-0.4595798606214877 927 | 925,-0.45399049973954697 928 | 926,-0.4483832160900328 929 | 927,-0.44275823103890244 930 | 928,-0.43711576665093255 931 | 929,-0.43145604568095897 932 | 930,-0.425779291565073 933 | 931,-0.4200857284118062 934 | 932,-0.4143755809932844 935 | 933,-0.4086490747363497 936 | 934,-0.40290643571366286 937 | 935,-0.39714789063478034 938 | 936,-0.3913736668372025 939 | 937,-0.385583992277397 940 | 938,-0.3797790955218019 941 | 939,-0.3739592057378008 942 | 940,-0.36812455268467786 943 | 941,-0.3622753667045459 944 | 942,-0.3564118787132505 945 | 943,-0.3505343201912592 946 | 944,-0.34464292317451756 947 | 945,-0.33873792024529226 948 | 946,-0.33281954452298623 949 | 947,-0.3268880296549424 950 | 948,-0.3209436098072098 951 | 949,-0.3149865196553055 952 | 950,-0.3090169943749477 953 | 951,-0.30303526963277455 954 | 952,-0.29704158157703503 955 | 953,-0.2910361668282715 956 | 954,-0.28501926246997616 957 | 955,-0.27899110603922966 958 | 956,-0.272951935517326 959 | 957,-0.26690198932037584 960 | 958,-0.2608415062898968 961 | 959,-0.2547707256833824 962 | 960,-0.24868988716485535 963 | 961,-0.24259923079540752 964 | 962,-0.23649899702372515 965 | 963,-0.23038942667659143 966 | 964,-0.2242707609493807 967 | 965,-0.21814324139654243 968 | 966,-0.2120071099220549 969 | 967,-0.20586260876988197 970 | 968,-0.1997099805144072 971 | 969,-0.19354946805086082 972 | 970,-0.18738131458572468 973 | 971,-0.18120576362713692 974 | 972,-0.175023058975276 975 | 973,-0.1688334447127342 976 | 974,-0.16263716519488433 977 | 975,-0.15643446504023112 978 | 976,-0.1502255891207568 979 | 977,-0.1440107825522523 980 | 978,-0.13779029068463858 981 | 979,-0.13156435909228253 982 | 980,-0.12533323356430465 983 | 981,-0.11909716009487054 984 | 982,-0.11285638487348111 985 | 983,-0.10661115427525973 986 | 984,-0.10036171485121509 987 | 985,-0.09410831331851491 988 | 986,-0.08785119655074328 989 | 987,-0.08159061156815804 990 | 988,-0.07532680552793272 991 | 989,-0.06906002571440618 992 | 990,-0.06279051952931326 993 | 991,-0.056518534482024804 994 | 992,-0.05024431817977022 995 | 993,-0.043968118317865075 996 | 994,-0.037690182669934215 997 | 995,-0.03141075907812836 998 | 996,-0.025130095443337937 999 | 997,-0.018848439715408137 1000 | 998,-0.01256603988335296 1001 | 999,-0.0062831439655596935 1002 | -------------------------------------------------------------------------------- /screenshots/avocado-resample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcastorina/graph-cli/25c4f6346e46a6811ee5d47e04f4db907b03701a/screenshots/avocado-resample.png -------------------------------------------------------------------------------- /screenshots/example-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcastorina/graph-cli/25c4f6346e46a6811ee5d47e04f4db907b03701a/screenshots/example-01.png -------------------------------------------------------------------------------- /screenshots/example-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcastorina/graph-cli/25c4f6346e46a6811ee5d47e04f4db907b03701a/screenshots/example-02.png -------------------------------------------------------------------------------- /screenshots/example-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcastorina/graph-cli/25c4f6346e46a6811ee5d47e04f4db907b03701a/screenshots/example-03.png -------------------------------------------------------------------------------- /screenshots/example-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcastorina/graph-cli/25c4f6346e46a6811ee5d47e04f4db907b03701a/screenshots/example-04.png -------------------------------------------------------------------------------- /screenshots/example-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcastorina/graph-cli/25c4f6346e46a6811ee5d47e04f4db907b03701a/screenshots/example-05.png -------------------------------------------------------------------------------- /screenshots/example-06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcastorina/graph-cli/25c4f6346e46a6811ee5d47e04f4db907b03701a/screenshots/example-06.png -------------------------------------------------------------------------------- /screenshots/example-07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcastorina/graph-cli/25c4f6346e46a6811ee5d47e04f4db907b03701a/screenshots/example-07.png -------------------------------------------------------------------------------- /screenshots/example-08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcastorina/graph-cli/25c4f6346e46a6811ee5d47e04f4db907b03701a/screenshots/example-08.png -------------------------------------------------------------------------------- /screenshots/example-09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcastorina/graph-cli/25c4f6346e46a6811ee5d47e04f4db907b03701a/screenshots/example-09.png -------------------------------------------------------------------------------- /screenshots/hist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcastorina/graph-cli/25c4f6346e46a6811ee5d47e04f4db907b03701a/screenshots/hist.png -------------------------------------------------------------------------------- /screenshots/sine-cosine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcastorina/graph-cli/25c4f6346e46a6811ee5d47e04f4db907b03701a/screenshots/sine-cosine.png -------------------------------------------------------------------------------- /screenshots/sine-resample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcastorina/graph-cli/25c4f6346e46a6811ee5d47e04f4db907b03701a/screenshots/sine-resample.png -------------------------------------------------------------------------------- /screenshots/sine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcastorina/graph-cli/25c4f6346e46a6811ee5d47e04f4db907b03701a/screenshots/sine.png --------------------------------------------------------------------------------