├── .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 | 
10 |
11 | ```
12 | # example 2
13 | graph samples/sine.csv --marker '' --xrange 0:500
14 | ```
15 |
16 | 
17 |
18 | ```
19 | # example 3
20 | graph samples/sine-cosine.csv --marker '' --style='-.,-' --ylabel 'y' --legend 'sin,cos'
21 | ```
22 |
23 | 
24 |
25 | ```
26 | # example 4
27 | graph samples/bar.csv --bar
28 | ```
29 |
30 | 
31 |
32 | ```
33 | # example 5
34 | graph samples/bar.csv --bar -y 2,3 --width 0.1 --ylabel 'Price ($)'
35 | ```
36 |
37 | 
38 |
39 | ```
40 | # example 6
41 | graph samples/avocado.csv -y 2 --resample 2W
42 | ```
43 |
44 | 
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 | 
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 | 
59 |
60 | ```
61 | # example 9
62 | graph samples/normal.csv --hist-perc --bins 15
63 | ```
64 |
65 | 
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 | 
27 |
28 | ```
29 | graph samples/normal.csv --hist -o hist.png
30 | ```
31 |
32 | 
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 | 
46 |
47 | ```
48 | graph samples/sine.csv --resample 125 -o sine-resample.png
49 | ```
50 |
51 | 
52 |
53 | ```
54 | graph samples/avocado.csv -x 'Date' -y 'AveragePrice' --resample 1W -o avocado-resample.png
55 | ```
56 |
57 | 
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 | [](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 | [](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
--------------------------------------------------------------------------------