Code Monkey home page Code Monkey logo

graphest's Introduction

banner image

Graphest

Graphest is a graphing calculator that can faithfully plot arbitrary mathematical relations.

Getting Started

Download the app (available for both macOS and Windows), and try plotting some of the example relations.

cover image

Features

  • Plot arbitrary equations/inequalities
  • Never gives an incorrect result; if you find any relation plotted incorrectly, please report it here
  • Cartesian and polar coordinates
  • Parametric relations
  • Full interactivity
  • Extensive set of mathematical functions

Algorithm

Graphest aims to provide a modern, open-source and extensible alternative to GrafEq™ [Ped].

The following algorithms in [Tup01] are implemented: 1.1–3.2, 3.3 (partially), 3.4.1–3.4.3, 3.4.5 (partially).

graphest's People

Contributors

dependabot-preview[bot] avatar dependabot[bot] avatar unageek avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

motoyang

graphest's Issues

💡 Ideas

Graphing Engine

  • Efficient algorithm for common parametric relations: x = f(t) && y = g(t) && P(t)
  • Efficient algorithm for explicit relations: y = f(x) && P(x) or x = f(y) && P(y)
  • Regression testing of graphs
  • Evaluate constant relations only once, without subdivisions
  • Make block::MIN_K smaller
  • Port to Windows
  • Add (U+2212) as an alias for -
  • Add , , and ¬ as aliases for &&, ||, and !, respectively
  • Conditional/piecewise expressions
  • Complex functions
  • Integer parameters
  • Add source locations to AST nodes for better error messages
  • Revise the definition of the exponentiation of real numbers x^y to match exp(y ln(x)).
    • The domain would be (y ∈ ℤ ∧ x ≠ 0) ∨ (y ∈ ℤ ∧ y ≥ 1) ∨ (x ≥ 0 ∧ y > 0) ∨ x > 0.
    • Keep the current definition with a different syntax, such as x^^y?
    • Leave both 0^0 and 0^^0 undefined for the best consistency.
      • ^ (real) is a subset of ^ (complex) and ^^.
  • Lazy evaluation of conditional expressions (if)
  • Migrate to Rust 2021
  • Transform polynomials into Horner form
  • Shorthand for chained if (flattened arguments?)
  • User-defined "macros" (generic constants/functions)
    • Use := for definitions
  • Terser syntax?
  • Exact handling of more numbers in Real?
    • Algebraic numbers
    • Transcendental numbers (sin(π/2) = 1, etc.)
    • Try Calcium

App

  • Use Slate in RelationInput
  • Automatically add/delete closing brackets while typing
  • Assign the same ID to relations that are mapped to the same AST
  • Exporting graphs as an image
    • Anti-aliasing can be done by supersampling + dilation (for preserving the stroke thickness).
    • The graphs of some relations such as y = ⌊x⌋ may look worse than now when low-level supersampling is used. On the other hand, high-level supersampling cannot be incorporated in real-time rendering. So anti-aliasing involving resampling would be an option only for exporting graphs.
  • Setting pen size for exporting
  • Setting pen size for displaying
  • Saving/loading graphs
  • Dark mode?
  • Place the symbols button near the input cursor
  • Support for fractional DPI scaling (125%, 150%, etc.)
  • Draw the axes/grids in the exported image
  • Framed layout
  • Saving/loading settings
  • Interactive parameters?
  • Make RAM/CPU usage configurable
  • Use mdBook for the user guide, and split the documentation of each function into its own page?

Website?

  • Gallery page

Is internet connection necessary?

Hi. I am on a Windows machine, so I am not sure if this also happens to the MacOS build.
It appears that internet connection is required for the software to boot up.

Steps to reproduce:

  1. Install while having a firewall that blocks all connections by default (installing offline should also have the same effect)
  2. Start graphest

graphest will spawn ~3 processes but no gui window is shown. The problem cannot be reproduced if internet connection is allowed once. Afterward everything just seems to work, even after an offline reinstall.

It also appears that graphest will keep sending network requests despite there is no apparent need to do so.

Are there any features that require internet connections?

My graphest isn't graphing at all

Hello! I installed graphest and the graphs aren't showing up at all! I tried any function and they still don't show up. I don't know what the problem is. I'm on windows 11, and when i tried to install it it blocked it from installing. Am I missing a file? I also read the readme file and nothing about my problem was addressed

Improve performance of dilation with large kernels

Input

A graph g (Image::<Ternary>) and a kernel ker (Image::<bool>).

Output

The dilated graph g_out (Image::<Ternary>).

Algorithm

  1. Decompose g into two images:
    g_t ← true pixels mapped to 1 and the others to 0,
    g_u ← uncertain pixels mapped to 1 and the others to 0.
  2. Apply FFT to g_t, g_u, and ker.
  3. g_tg_tker,
    g_ug_uker.
  4. Apply IFFT to g_t and g_u.
  5. g_out ← non-zero pixels of g_t mapped to true, other non-zero pixels of g_u mapped to uncertain, and the others set to false.
    Note that the non-zero test may require some threshold.

PNG output with a transparent background?

Congratulations on the 1.0.0 release!

I was wondering if the PNG output can have a transparent background. This can be very useful when showing the graphs against a color background (such as in a poster).

I have a feeling that this won’t be easy due to supersample anti-aliasing. Currently, it’s mixing the function’s color with white. But how would one go about mixing the function’s color with transparency? I have no idea…

Add branch map to `DecSignSet`

The problem

The following relation is plotted as two gray (incomplete) lines around y = ±π:

y = atan2(-2^-1075, -1)

NOTE: 2^-1075 is the half of the smallest positive subnormal number, so -2^-1075 is interpreted as an interval [-2^-1074, 0].

While this graph is incomplete, it should be able to complete plotting relations such as:

Actual Expected Relation
-1 < atan2(-2^-1075, -1) < 1
atan2(-2^-1075, -1) < -1 || 1 < atan2(-2^-1075, -1)

But the current implementation cannot. This is because branch map is lost in DecSignSet.

Possible solution

To address this issue, we should add BranchMap per sign to DecSignSet. However, this change will significantly increase the size of the struct:

size_of align_of
DecSignSet (current) 2 1
DecSignSet (proposed) 32 8
TupperIntervalSet 112 16
TupperIntervalSet w/ smallvec/union enabled 96 16

Inversion of condition (?)

This is awesome software, thanks!

I'm running on Ubuntu 20.04. I didn't realize there was a docs/build.md, so I first built graph via cargo build, which worked fine; I used your instructions to install node etc. and run, and it all works. Maybe you could put a link to docs/build.md in your root README.md? [edit: whoops, now I see there is a link!]

I was experimenting with the logical connectives, and I think something isn't quite right. This is fine:

image

but when I combine the two expressions with "&&" I get this:

image

If I logically invert the first condition I get this:

image

Am I missing something?

`TupperIntervalSet` must keep track of the minimum Decoration

In the current version (1bc8bb8), sqrt({[-1,-1]_def, [1,1]_def}) is evaluated to {[1,1]_def}, which should instead be {[1,1]_trv}. This is because the empty interval returned by sqrt([-1,-1]_def) is discarded by TupperIntervalSet.insert().

Reproducing command line

cargo r "y<sqrt(floor(-x/100))"

Expected output

graph

Actual output

graph

Plotting failed possibly due to script bug

Step to reproduce:

  1. Run Graphest.exe

Result:
The initial "y=sin(x)" does not plot.

Error message:
"Uncaught (in promise) Error" revealed in Dev Tools:
image
The error turns out to be at column 1996451 in bundle.js:
image

Alternative way of reproducing
Step to reproduce:

  1. Click inputbox of the formula to make it focused
  2. Hit "Enter"

Result:
Plotting failed. Does not plot anything.

Error message:
Exception stack is revealed in Dev Tools:
image
The top of the stack turns out to be at column 1997727 in bundle.js:
image

Version:
1.3.3 for windows

Platform:
Windows 10 22H2

Build failed on Archlinux

I am going to build your project on Archlinux. But your docs only write Ubuntu, so I followed these steps:

sudo pacman -S curl git clang m4 gtk3 nss nodejs npm rust
git clone https://github.com/unageek/graphest.git
cd graphest
npm install
chmod -R a+x node_modules \\ [1]
npm start

and then I got:

(base) [firestar@Archlinux graphest]$ npm start

> [email protected] start
> cross-env-shell NODE_ENV=development npm run build && electron .


> [email protected] build
> npm-run-all build:*


> [email protected] build:app
> webpack

ERROR in ./node_modules/bignumber.js/bignumber.mjs 2602:35
Module parse failed: Unexpected token (2602:35)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
|    */
|   P.toFraction = function (md) {
>     var d, d0, d1, d2, e, exp, n, n

ERROR in /home/firestar/graphest/src/common/bignumber.ts
./src/common/bignumber.ts 1:26-40
[tsl] ERROR in /home/firestar/graphest/src/common/bignumber.ts(1,27)
      TS7016: Could not find a declaration file for module 'bignumber.js'. '/home/firestar/graphest/node_modules/bignumber.js/bignumber.js' implicitly has an 'any' type.
  Try `npm i --save-dev @types/bignumber.js` if it exists or add a new declaration (.d.ts) file containing `declare module 'bignumber.js';`

ERROR in /home/firestar/graphest/src/common/bignumber.ts
./src/common/bignumber.ts 3:15-29
[tsl] ERROR in /home/firestar/graphest/src/common/bignumber.ts(3,16)
      TS2665: Invalid module name in augmentation. Module 'bignumber.js' resolves to an untyped module at '/home/firestar/graphest/node_modules/bignumber.js/bignumber.js', which cannot be augmented.

ERROR in /home/firestar/graphest/src/main/main.ts
./src/main/main.ts 16:28-46
[tsl] ERROR in /home/firestar/graphest/src/main/main.ts(16,29)
      TS7016: Could not find a declaration file for module 'electron-updater'. '/home/firestar/graphest/node_modules/electron-updater/out/main.js' implicitly has an 'any' type.
  Try `npm i --save-dev @types/electron-updater` if it exists or add a new declaration (.d.ts) file containing `declare module 'electron-updater';`

webpack compiled with 4 errors

ERROR in /home/firestar/graphest/src/common/bignumber.ts
1:26-40
[tsl] ERROR in /home/firestar/graphest/src/common/bignumber.ts(1,27)
      TS7016: Could not find a declaration file for module 'bignumber.js'. '/home/firestar/graphest/node_modules/bignumber.js/bignumber.js' implicitly has an 'any' type.
  Try `npm i --save-dev @types/bignumber.js` if it exists or add a new declaration (.d.ts) file containing `declare module 'bignumber.js';`

ERROR in /home/firestar/graphest/src/common/bignumber.ts
3:15-29
[tsl] ERROR in /home/firestar/graphest/src/common/bignumber.ts(3,16)
      TS2665: Invalid module name in augmentation. Module 'bignumber.js' resolves to an untyped module at '/home/firestar/graphest/node_modules/bignumber.js/bignumber.js', which cannot be augmented.

ERROR in /home/firestar/graphest/src/main/main.ts
16:28-46
[tsl] ERROR in /home/firestar/graphest/src/main/main.ts(16,29)
      TS7016: Could not find a declaration file for module 'electron-updater'. '/home/firestar/graphest/node_modules/electron-updater/out/main.js' implicitly has an 'any' type.
  Try `npm i --save-dev @types/electron-updater` if it exists or add a new declaration (.d.ts) file containing `declare module 'electron-updater';`

webpack compiled with 3 errors

ERROR in ./node_modules/@fontsource/noto-sans/400.css (./node_modules/css-loader/dist/cjs.js!./node_modules/@fontsource/noto-sans/400.css) 5:36-111
Module not found: Error: Can't resolve './files/noto-sans-cyrillic-ext-400-normal.woff2' in '/home/firestar/graphest/node_modules/@fontsource/noto-sans'

ERROR in ./node_modules/@fontsource/noto-sans/400.css (./node_modules/css-loader/dist/cjs.js!./node_modules/@fontsource/noto-sans/400.css) 6:36-110
Module not found: Error: Can't resolve './files/noto-sans-cyrillic-ext-400-normal.woff' in '/home/firestar/graphest/node_modules/@fontsource/noto-sans'

ERROR in ./node_modules/@fontsource/noto-sans/400.css (./node_modules/css-loader/dist/cjs.js!./node_modules/@fontsource/noto-sans/400.css) 7:36-107
Module not found: Error: Can't resolve './files/noto-sans-cyrillic-400-normal.woff2' in '/home/firestar/graphest/node_modules/@fontsource/noto-sans'

ERROR in ./node_modules/@fontsource/noto-sans/400.css (./node_modules/css-loader/dist/cjs.js!./node_modules/@fontsource/noto-sans/400.css) 9:36-109
Module not found: Error: Can't resolve './files/noto-sans-devanagari-400-normal.woff2' in '/home/firestar/graphest/node_modules/@fontsource/noto-sans'

ERROR in ./node_modules/@fontsource/noto-sans/400.css (./node_modules/css-loader/dist/cjs.js!./node_modules/@fontsource/noto-sans/400.css) 10:36-108
Module not found: Error: Can't resolve './files/noto-sans-devanagari-400-normal.woff' in '/home/firestar/graphest/node_modules/@fontsource/noto-sans'

ERROR in ./node_modules/@fontsource/noto-sans/400.css (./node_modules/css-loader/dist/cjs.js!./node_modules/@fontsource/noto-sans/400.css) 11:36-108
Module not found: Error: Can't resolve './files/noto-sans-greek-ext-400-normal.woff2' in '/home/firestar/graphest/node_modules/@fontsource/noto-sans'

ERROR in ./node_modules/@fontsource/noto-sans/400.css (./node_modules/css-loader/dist/cjs.js!./node_modules/@fontsource/noto-sans/400.css) 12:36-107
Module not found: Error: Can't resolve './files/noto-sans-greek-ext-400-normal.woff' in '/home/firestar/graphest/node_modules/@fontsource/noto-sans'

ERROR in ./node_modules/@fontsource/noto-sans/400.css (./node_modules/css-loader/dist/cjs.js!./node_modules/@fontsource/noto-sans/400.css) 13:36-104
Module not found: Error: Can't resolve './files/noto-sans-greek-400-normal.woff2' in '/home/firestar/graphest/node_modules/@fontsource/noto-sans'

ERROR in ./node_modules/@fontsource/noto-sans/400.css (./node_modules/css-loader/dist/cjs.js!./node_modules/@fontsource/noto-sans/400.css) 14:36-103
Module not found: Error: Can't resolve './files/noto-sans-greek-400-normal.woff' in '/home/firestar/graphest/node_modules/@fontsource/noto-sans'

ERROR in ./node_modules/@fontsource/noto-sans/400.css (./node_modules/css-loader/dist/cjs.js!./node_modules/@fontsource/noto-sans/400.css) 15:37-110
Module not found: Error: Can't resolve './files/noto-sans-vietnamese-400-normal.woff2' in '/home/firestar/graphest/node_modules/@fontsource/noto-sans'

ERROR in ./node_modules/@fontsource/noto-sans/400.css (./node_modules/css-loader/dist/cjs.js!./node_modules/@fontsource/noto-sans/400.css) 16:37-109
Module not found: Error: Can't resolve './files/noto-sans-vietnamese-400-normal.woff' in '/home/firestar/graphest/node_modules/@fontsource/noto-sans'

ERROR in ./node_modules/@fontsource/noto-sans/400.css (./node_modules/css-loader/dist/cjs.js!./node_modules/@fontsource/noto-sans/400.css) 17:37-109
Module not found: Error: Can't resolve './files/noto-sans-latin-ext-400-normal.woff2' in '/home/firestar/graphest/node_modules/@fontsource/noto-sans'

ERROR in ./node_modules/@fontsource/noto-sans/400.css (./node_modules/css-loader/dist/cjs.js!./node_modules/@fontsource/noto-sans/400.css) 18:37-108
Module not found: Error: Can't resolve './files/noto-sans-latin-ext-400-normal.woff' in '/home/firestar/graphest/node_modules/@fontsource/noto-sans'

ERROR in ./node_modules/@fontsource/noto-sans/400.css (./node_modules/css-loader/dist/cjs.js!./node_modules/@fontsource/noto-sans/400.css) 19:37-105
Module not found: Error: Can't resolve './files/noto-sans-latin-400-normal.woff2' in '/home/firestar/graphest/node_modules/@fontsource/noto-sans'

ERROR in ./node_modules/@fontsource/noto-sans/400.css (./node_modules/css-loader/dist/cjs.js!./node_modules/@fontsource/noto-sans/400.css) 20:37-104
Module not found: Error: Can't resolve './files/noto-sans-latin-400-normal.woff' in '/home/firestar/graphest/node_modules/@fontsource/noto-sans'

ERROR in ./node_modules/bignumber.js/bignumber.mjs 2602:35
Module parse failed: Unexpected token (2602:35)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
|    */
|   P.toFraction = function (md) {
>     var d, d0, d1, d2, e, exp, n, n

ERROR in /home/firestar/graphest/src/common/bignumber.ts
./src/common/bignumber.ts 1:26-40
[tsl] ERROR in /home/firestar/graphest/src/common/bignumber.ts(1,27)
      TS7016: Could not find a declaration file for module 'bignumber.js'. '/home/firestar/graphest/node_modules/bignumber.js/bignumber.js' implicitly has an 'any' type.
  Try `npm i --save-dev @types/bignumber.js` if it exists or add a new declaration (.d.ts) file containing `declare module 'bignumber.js';`

ERROR in /home/firestar/graphest/src/common/bignumber.ts
./src/common/bignumber.ts 3:15-29
[tsl] ERROR in /home/firestar/graphest/src/common/bignumber.ts(3,16)
      TS2665: Invalid module name in augmentation. Module 'bignumber.js' resolves to an untyped module at '/home/firestar/graphest/node_modules/bignumber.js/bignumber.js', which cannot be augmented.

ERROR in /home/firestar/graphest/src/main/main.ts
16:28-46
[tsl] ERROR in /home/firestar/graphest/src/main/main.ts(16,29)
      TS7016: Could not find a declaration file for module 'electron-updater'. '/home/firestar/graphest/node_modules/electron-updater/out/main.js' implicitly has an 'any' type.
  Try `npm i --save-dev @types/electron-updater` if it exists or add a new declaration (.d.ts) file containing `declare module 'electron-updater';`

webpack compiled with 19 errors
ERROR: "build:app" exited with 1.

[1] https://stackoverflow.com/questions/54831494/sh-1-cross-env-permission-denied-on-laravel-mix

High-quality rendering of graphs

No anti-aliasing

cargo r --bin graph --release -- -s 1024 1024 -- "y = sin(exp(x))" 

3x3 SSAA

cargo r --bin graph --release -- -s 3072 3072 \
--pad-left 1 --pad-right 1 --pad-bottom 1 --pad-top 1 \
--dilate "1,1,1;1,1,1;1,1,1" \
-- "y = sin(exp(x))" 

→ Crop each side of the image by 1px, and resize it by 1/3.

convert graph.png -shave 1x1 -filter triangle -resize 1024x1024 graph2.png

5x5 SSAA

cargo r --bin graph --release -- -s 5120 5120 \
--pad-left 2 --pad-right 2 --pad-bottom 2 --pad-top 2 \
--dilate "0,1,1,1,0;1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;0,1,1,1,0" \
-- "y = sin(exp(x))" 

→ Crop each side of the image by 2px, and resize it by 1/5.

convert graph.png -shave 2x2 -filter triangle -resize 1024x1024 graph2.png

7x7 SSAA

cargo r --bin graph --release -- -s 7168 7168 \
--pad-left 3 --pad-right 3 --pad-bottom 3 --pad-top 3 \
--dilate "0,0,1,1,1,0,0;0,1,1,1,1,1,0;1,1,1,1,1,1,1;1,1,1,1,1,1,1;1,1,1,1,1,1,1;0,1,1,1,1,1,0;0,0,1,1,1,0,0" \
-- "y = sin(exp(x))" 

→ Crop each side of the image by 3px, and resize it by 1/7.

convert graph.png -shave 3x3 -filter triangle -resize 1024x1024 graph2.png

9x9 SSAA

cargo r --bin graph --release -- -s 9216 9216 \
--pad-left 4 --pad-right 4 --pad-bottom 4 --pad-top 4 \
--dilate "0,0,1,1,1,1,1,0,0;0,1,1,1,1,1,1,1,0;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;0,1,1,1,1,1,1,1,0;0,0,1,1,1,1,1,0,0" \
-- "y = sin(exp(x))" 

→ Crop each side of the image by 4px, and resize it by 1/9.

convert graph.png -shave 4x4 -filter triangle -resize 1024x1024 graph2.png

graph2

The dilation kernels are obtained by Mathematica's DiskMatrix[1], DiskMatrix[2], etc.

`cp` doesn't work on `build:rust` in linux build from source

Summary

npm start builds the webpack + rust code properly but gives the error

cp: cannot stat 'target/release/{compose,concatenate,graph}': No such file or directory
ERROR: "build:rust" exited with 1.

After running npx electron ., the UI works, but the backend doesn't, so no graphs appear in the viewport

Workaround

npm run build; cp target/release/{compose,concatenate,graph} dist/ && npx electron .

Details

Clean build after rm -rfing target and dist directories:

● ~/graphest$ npm run start

> [email protected] start
> cross-env-shell NODE_ENV=development npm run build && electron .


> [email protected] build
> npm-run-all build:*


> [email protected] build:app
> webpack

webpack compiled successfully

webpack compiled successfully

webpack compiled successfully

> [email protected] build:rust
> cargo build --release && mkdirp dist && rm -f dist/{compose,concatenate,graph} && cp target/release/{compose,concatenate,graph} dist/

   Compiling autocfg v1.0.1
   Compiling libc v0.2.101
   Compiling memchr v2.4.1
// (more compiles omitted)
   Compiling inari v0.15.0
   Compiling graphest-fftw-sys v0.1.0 (/home/jared/graphest/rust/graphest-fftw-sys)
   Compiling graphest-arb-sys v0.5.0 (/home/jared/graphest/rust/graphest-arb-sys)
   Compiling graphest v1.2.1 (/home/jared/graphest/rust)
    Finished release [optimized] target(s) in 1m 38s
cp: cannot stat 'target/release/{compose,concatenate,graph}': No such file or directory
ERROR: "build:rust" exited with 1.
● ~/graphest$ ls target/release/{compose,concatenate,graph}
target/release/compose  target/release/concatenate  target/release/graph

The webpack and UI works; I can run npx electron . to get the full UI. But nothing shows on the plot; the backend doesn't work

APPIMAGE env is not defined, current application is not an AppImage
checkForUpdatesAndNotify called, downloadPromise is null
Error occurred in handler for 'request-relation': TypeError: Cannot read properties of undefined (reading 'match')
    at /home/jared/graphest/dist/main.js:72181:45
    at process.processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async node:electron/js2c/browser_init:189:563
Error occurred in handler for 'request-relation': TypeError: Cannot read properties of undefined (reading 'match')
    at /home/jared/graphest/dist/main.js:72181:45
    at process.processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async node:electron/js2c/browser_init:189:563

Fix attempt

Changing the one line in package.json to

    "build:rust": "cargo build --release && mkdirp dist && rm -f dist/{compose,concatenate,graph} && sleep 1 && cp target/release/{compose,concatenate,graph} dist/",

does not work

System

● ~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.4 LTS
Release:	20.04
Codename:	focal
● ~$ rustc --version
rustc 1.61.0 (fe5b13d68 2022-05-18)
● ~$ node --version
v16.15.1
● ~$ npm --version
8.11.0

Odd roots of negative values

Graphing y = x^(1/3) does not take the real root for negative values of x.
Another example: graphing y = (-1)^x does not plot two lines of pixels (due to the graph resolution not being infinite) at y = 1 and y = -1 as GrafEq does.

Perhaps there could be an option to toggle this behavior?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.