aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAshish SHUKLA <ashish@FreeBSD.org>2022-03-13 09:44:03 +0000
committerAshish SHUKLA <ashish@FreeBSD.org>2022-03-13 09:47:04 +0000
commit7138104c3d1097f7a68dfe64367a1e89f6d2a33f (patch)
treed139772284932eb5de1fc9976900d8e20036f9b9
parent28a8f6962140c5686cd87f255d69de777eaefa62 (diff)
downloadports-7138104c3d1097f7a68dfe64367a1e89f6d2a33f.tar.gz
ports-7138104c3d1097f7a68dfe64367a1e89f6d2a33f.zip
math/savage: New Port: Primitive computer algebra system
Savage is a new computer algebra system written from scratch in pure Rust. Its goals are correctness, simplicity, and usability, in that order. Features: - Arbitrary-precision integer, rational, and complex arithmetic - Input, simplification, and evaluation of symbolic expressions - First-class support for vectors and matrices, with coefficients being arbitrary expressions - REPL with syntax and bracket highlighting, persistent history, and automatic multi-line input - Macro-based system for defining functions with metadata and automatic type checking - Usable as a library from any Rust program WWW: https://github.com/p-e-w/savage
-rw-r--r--math/Makefile1
-rw-r--r--math/savage/Makefile112
-rw-r--r--math/savage/distinfo179
-rw-r--r--math/savage/pkg-descr17
4 files changed, 309 insertions, 0 deletions
diff --git a/math/Makefile b/math/Makefile
index 411a27be730d..0707bcc29c00 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -996,6 +996,7 @@
SUBDIR += rumur
SUBDIR += saga
SUBDIR += sage
+ SUBDIR += savage
SUBDIR += sc
SUBDIR += sc-im
SUBDIR += scalapack
diff --git a/math/savage/Makefile b/math/savage/Makefile
new file mode 100644
index 000000000000..ae27f049654f
--- /dev/null
+++ b/math/savage/Makefile
@@ -0,0 +1,112 @@
+PORTNAME= savage
+DISTVERSIONPREFIX= v
+DISTVERSION= 0.2.0
+CATEGORIES= math
+
+MAINTAINER= ashish@FreeBSD.org
+COMMENT= Primitive computer algebra system
+
+LICENSE= AGPLv3+
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+USES= cargo
+USE_GITHUB= yes
+GH_ACCOUNT= p-e-w
+CARGO_CARGOTOML= ${WRKSRC}/savage/Cargo.toml
+CARGO_INSTALL_PATH= ./savage
+CARGO_CRATES= ahash-0.3.8 \
+ aho-corasick-0.7.18 \
+ ansi_term-0.12.1 \
+ approx-0.5.0 \
+ autocfg-1.0.1 \
+ bitflags-1.2.1 \
+ bytemuck-1.7.2 \
+ cc-1.0.72 \
+ cfg-if-1.0.0 \
+ chumsky-0.8.0 \
+ clipboard-win-4.2.2 \
+ const-random-0.1.13 \
+ const-random-macro-0.1.13 \
+ crunchy-0.2.2 \
+ darling-0.13.1 \
+ darling_core-0.13.1 \
+ darling_macro-0.13.1 \
+ derivative-2.2.0 \
+ directories-4.0.1 \
+ dirs-next-2.0.0 \
+ dirs-sys-0.3.6 \
+ dirs-sys-next-0.1.2 \
+ endian-type-0.1.2 \
+ error-code-2.3.0 \
+ fd-lock-3.0.1 \
+ fnv-1.0.7 \
+ getrandom-0.2.3 \
+ hamming-0.1.3 \
+ ident_case-1.0.1 \
+ lazy_static-1.4.0 \
+ libc-0.2.107 \
+ log-0.4.14 \
+ matrixmultiply-0.3.1 \
+ memchr-2.4.1 \
+ memoffset-0.6.4 \
+ nalgebra-0.29.0 \
+ nalgebra-macros-0.1.0 \
+ nibble_vec-0.1.0 \
+ nix-0.22.2 \
+ num-0.4.0 \
+ num-bigint-0.4.3 \
+ num-complex-0.4.0 \
+ num-integer-0.1.44 \
+ num-iter-0.1.42 \
+ num-rational-0.4.0 \
+ num-traits-0.2.14 \
+ paste-1.0.6 \
+ permutohedron-0.2.4 \
+ primal-0.3.0 \
+ primal-bit-0.3.0 \
+ primal-check-0.3.1 \
+ primal-estimate-0.3.1 \
+ primal-sieve-0.3.2 \
+ proc-macro-hack-0.5.19 \
+ proc-macro2-1.0.36 \
+ quote-1.0.14 \
+ radix_trie-0.2.1 \
+ rawpointer-0.2.1 \
+ redox_syscall-0.2.10 \
+ redox_users-0.4.0 \
+ regex-1.5.4 \
+ regex-syntax-0.6.25 \
+ rustyline-9.0.0 \
+ rustyline-derive-0.6.0 \
+ safe_arch-0.6.0 \
+ scopeguard-1.1.0 \
+ simba-0.6.0 \
+ smallvec-1.7.0 \
+ str-buf-1.0.5 \
+ strsim-0.10.0 \
+ syn-1.0.85 \
+ tiny-keccak-2.0.2 \
+ typenum-1.14.0 \
+ unicode-segmentation-1.8.0 \
+ unicode-width-0.1.9 \
+ unicode-xid-0.2.2 \
+ utf8parse-0.2.0 \
+ wasi-0.10.2+wasi-snapshot-preview1 \
+ wide-0.7.1 \
+ winapi-0.3.9 \
+ winapi-i686-pc-windows-gnu-0.4.0 \
+ winapi-x86_64-pc-windows-gnu-0.4.0 \
+ windows-sys-0.28.0 \
+ windows_aarch64_msvc-0.28.0 \
+ windows_i686_gnu-0.28.0 \
+ windows_i686_msvc-0.28.0 \
+ windows_x86_64_gnu-0.28.0 \
+ windows_x86_64_msvc-0.28.0
+PLIST_FILES= bin/savage \
+ ${DOCSDIR_REL}/README.md
+
+post-install:
+ @${MKDIR} ${STAGEDIR}${DOCSDIR}
+ (cd ${WRKSRC} && ${INSTALL_DATA} README.md ${STAGEDIR}${DOCSDIR})
+
+.include <bsd.port.mk>
diff --git a/math/savage/distinfo b/math/savage/distinfo
new file mode 100644
index 000000000000..0be8658bf77d
--- /dev/null
+++ b/math/savage/distinfo
@@ -0,0 +1,179 @@
+TIMESTAMP = 1647156572
+SHA256 (rust/crates/ahash-0.3.8.crate) = e8fd72866655d1904d6b0997d0b07ba561047d070fbe29de039031c641b61217
+SIZE (rust/crates/ahash-0.3.8.crate) = 28650
+SHA256 (rust/crates/aho-corasick-0.7.18.crate) = 1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f
+SIZE (rust/crates/aho-corasick-0.7.18.crate) = 112923
+SHA256 (rust/crates/ansi_term-0.12.1.crate) = d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2
+SIZE (rust/crates/ansi_term-0.12.1.crate) = 24838
+SHA256 (rust/crates/approx-0.5.0.crate) = 072df7202e63b127ab55acfe16ce97013d5b97bf160489336d3f1840fd78e99e
+SIZE (rust/crates/approx-0.5.0.crate) = 14359
+SHA256 (rust/crates/autocfg-1.0.1.crate) = cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a
+SIZE (rust/crates/autocfg-1.0.1.crate) = 12908
+SHA256 (rust/crates/bitflags-1.2.1.crate) = cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693
+SIZE (rust/crates/bitflags-1.2.1.crate) = 16745
+SHA256 (rust/crates/bytemuck-1.7.2.crate) = 72957246c41db82b8ef88a5486143830adeb8227ef9837740bdec67724cf2c5b
+SIZE (rust/crates/bytemuck-1.7.2.crate) = 27489
+SHA256 (rust/crates/cc-1.0.72.crate) = 22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee
+SIZE (rust/crates/cc-1.0.72.crate) = 57495
+SHA256 (rust/crates/cfg-if-1.0.0.crate) = baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd
+SIZE (rust/crates/cfg-if-1.0.0.crate) = 7934
+SHA256 (rust/crates/chumsky-0.8.0.crate) = 8d02796e4586c6c41aeb68eae9bfb4558a522c35f1430c14b40136c3706e09e4
+SIZE (rust/crates/chumsky-0.8.0.crate) = 65390
+SHA256 (rust/crates/clipboard-win-4.2.2.crate) = 3db8340083d28acb43451166543b98c838299b7e0863621be53a338adceea0ed
+SIZE (rust/crates/clipboard-win-4.2.2.crate) = 12188
+SHA256 (rust/crates/const-random-0.1.13.crate) = f590d95d011aa80b063ffe3253422ed5aa462af4e9867d43ce8337562bac77c4
+SIZE (rust/crates/const-random-0.1.13.crate) = 6646
+SHA256 (rust/crates/const-random-macro-0.1.13.crate) = 615f6e27d000a2bffbc7f2f6a8669179378fa27ee4d0a509e985dfc0a7defb40
+SIZE (rust/crates/const-random-macro-0.1.13.crate) = 6359
+SHA256 (rust/crates/crunchy-0.2.2.crate) = 7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7
+SIZE (rust/crates/crunchy-0.2.2.crate) = 2995
+SHA256 (rust/crates/darling-0.13.1.crate) = d0d720b8683f8dd83c65155f0530560cba68cd2bf395f6513a483caee57ff7f4
+SIZE (rust/crates/darling-0.13.1.crate) = 20097
+SHA256 (rust/crates/darling_core-0.13.1.crate) = 7a340f241d2ceed1deb47ae36c4144b2707ec7dd0b649f894cb39bb595986324
+SIZE (rust/crates/darling_core-0.13.1.crate) = 50847
+SHA256 (rust/crates/darling_macro-0.13.1.crate) = 72c41b3b7352feb3211a0d743dc5700a4e3b60f51bd2b368892d1e0f9a95f44b
+SIZE (rust/crates/darling_macro-0.13.1.crate) = 1910
+SHA256 (rust/crates/derivative-2.2.0.crate) = fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b
+SIZE (rust/crates/derivative-2.2.0.crate) = 48076
+SHA256 (rust/crates/directories-4.0.1.crate) = f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210
+SIZE (rust/crates/directories-4.0.1.crate) = 16040
+SHA256 (rust/crates/dirs-next-2.0.0.crate) = b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1
+SIZE (rust/crates/dirs-next-2.0.0.crate) = 11689
+SHA256 (rust/crates/dirs-sys-0.3.6.crate) = 03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780
+SIZE (rust/crates/dirs-sys-0.3.6.crate) = 10626
+SHA256 (rust/crates/dirs-sys-next-0.1.2.crate) = 4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d
+SIZE (rust/crates/dirs-sys-next-0.1.2.crate) = 10681
+SHA256 (rust/crates/endian-type-0.1.2.crate) = c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d
+SIZE (rust/crates/endian-type-0.1.2.crate) = 2340
+SHA256 (rust/crates/error-code-2.3.0.crate) = b5115567ac25674e0043e472be13d14e537f37ea8aa4bdc4aef0c89add1db1ff
+SIZE (rust/crates/error-code-2.3.0.crate) = 5327
+SHA256 (rust/crates/fd-lock-3.0.1.crate) = cfc110fe50727d46a428eed832df40affe9bf74d077cac1bf3f2718e823f14c5
+SIZE (rust/crates/fd-lock-3.0.1.crate) = 13187
+SHA256 (rust/crates/fnv-1.0.7.crate) = 3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1
+SIZE (rust/crates/fnv-1.0.7.crate) = 11266
+SHA256 (rust/crates/getrandom-0.2.3.crate) = 7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753
+SIZE (rust/crates/getrandom-0.2.3.crate) = 26261
+SHA256 (rust/crates/hamming-0.1.3.crate) = 65043da274378d68241eb9a8f8f8aa54e349136f7b8e12f63e3ef44043cc30e1
+SIZE (rust/crates/hamming-0.1.3.crate) = 9898
+SHA256 (rust/crates/ident_case-1.0.1.crate) = b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39
+SIZE (rust/crates/ident_case-1.0.1.crate) = 3492
+SHA256 (rust/crates/lazy_static-1.4.0.crate) = e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646
+SIZE (rust/crates/lazy_static-1.4.0.crate) = 10443
+SHA256 (rust/crates/libc-0.2.107.crate) = fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219
+SIZE (rust/crates/libc-0.2.107.crate) = 554639
+SHA256 (rust/crates/log-0.4.14.crate) = 51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710
+SIZE (rust/crates/log-0.4.14.crate) = 34582
+SHA256 (rust/crates/matrixmultiply-0.3.1.crate) = 5a8a15b776d9dfaecd44b03c5828c2199cddff5247215858aac14624f8d6b741
+SIZE (rust/crates/matrixmultiply-0.3.1.crate) = 40550
+SHA256 (rust/crates/memchr-2.4.1.crate) = 308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a
+SIZE (rust/crates/memchr-2.4.1.crate) = 64977
+SHA256 (rust/crates/memoffset-0.6.4.crate) = 59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9
+SIZE (rust/crates/memoffset-0.6.4.crate) = 7664
+SHA256 (rust/crates/nalgebra-0.29.0.crate) = d506eb7e08d6329505faa8a3a00a5dcc6de9f76e0c77e4b75763ae3c770831ff
+SIZE (rust/crates/nalgebra-0.29.0.crate) = 344585
+SHA256 (rust/crates/nalgebra-macros-0.1.0.crate) = 01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218
+SIZE (rust/crates/nalgebra-macros-0.1.0.crate) = 5758
+SHA256 (rust/crates/nibble_vec-0.1.0.crate) = 77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43
+SIZE (rust/crates/nibble_vec-0.1.0.crate) = 11796
+SHA256 (rust/crates/nix-0.22.2.crate) = d3bb9a13fa32bc5aeb64150cd3f32d6cf4c748f8f8a417cce5d2eb976a8370ba
+SIZE (rust/crates/nix-0.22.2.crate) = 227371
+SHA256 (rust/crates/num-0.4.0.crate) = 43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606
+SIZE (rust/crates/num-0.4.0.crate) = 9490
+SHA256 (rust/crates/num-bigint-0.4.3.crate) = f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f
+SIZE (rust/crates/num-bigint-0.4.3.crate) = 97799
+SHA256 (rust/crates/num-complex-0.4.0.crate) = 26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085
+SIZE (rust/crates/num-complex-0.4.0.crate) = 24805
+SHA256 (rust/crates/num-integer-0.1.44.crate) = d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db
+SIZE (rust/crates/num-integer-0.1.44.crate) = 22216
+SHA256 (rust/crates/num-iter-0.1.42.crate) = b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59
+SIZE (rust/crates/num-iter-0.1.42.crate) = 10450
+SHA256 (rust/crates/num-rational-0.4.0.crate) = d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a
+SIZE (rust/crates/num-rational-0.4.0.crate) = 26428
+SHA256 (rust/crates/num-traits-0.2.14.crate) = 9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290
+SIZE (rust/crates/num-traits-0.2.14.crate) = 45476
+SHA256 (rust/crates/paste-1.0.6.crate) = 0744126afe1a6dd7f394cb50a716dbe086cb06e255e53d8d0185d82828358fb5
+SIZE (rust/crates/paste-1.0.6.crate) = 17808
+SHA256 (rust/crates/permutohedron-0.2.4.crate) = b687ff7b5da449d39e418ad391e5e08da53ec334903ddbb921db208908fc372c
+SIZE (rust/crates/permutohedron-0.2.4.crate) = 11090
+SHA256 (rust/crates/primal-0.3.0.crate) = 7bf9e0aea92a2e2a931fafb1b5d4c6e438197bbca4943a9984b3327fb8e3b5d0
+SIZE (rust/crates/primal-0.3.0.crate) = 17959
+SHA256 (rust/crates/primal-bit-0.3.0.crate) = 2837edc85364907810b0ec880f1010dab1a9cc6e75bacb3655c7fd22e125ec1b
+SIZE (rust/crates/primal-bit-0.3.0.crate) = 6588
+SHA256 (rust/crates/primal-check-0.3.1.crate) = 01419cee72c1a1ca944554e23d83e483e1bccf378753344e881de28b5487511d
+SIZE (rust/crates/primal-check-0.3.1.crate) = 4602
+SHA256 (rust/crates/primal-estimate-0.3.1.crate) = 12e07b550a7cbfcaa567bcd28042919548016ad615b5731633fa5239992d853f
+SIZE (rust/crates/primal-estimate-0.3.1.crate) = 5901
+SHA256 (rust/crates/primal-sieve-0.3.2.crate) = 70534ba41dd05a43504de90bd27437442aa4a0067187e3c09725d14b0ada4e5b
+SIZE (rust/crates/primal-sieve-0.3.2.crate) = 41972
+SHA256 (rust/crates/proc-macro-hack-0.5.19.crate) = dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5
+SIZE (rust/crates/proc-macro-hack-0.5.19.crate) = 15556
+SHA256 (rust/crates/proc-macro2-1.0.36.crate) = c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029
+SIZE (rust/crates/proc-macro2-1.0.36.crate) = 41411
+SHA256 (rust/crates/quote-1.0.14.crate) = 47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d
+SIZE (rust/crates/quote-1.0.14.crate) = 27252
+SHA256 (rust/crates/radix_trie-0.2.1.crate) = c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd
+SIZE (rust/crates/radix_trie-0.2.1.crate) = 251366
+SHA256 (rust/crates/rawpointer-0.2.1.crate) = 60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3
+SIZE (rust/crates/rawpointer-0.2.1.crate) = 7490
+SHA256 (rust/crates/redox_syscall-0.2.10.crate) = 8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff
+SIZE (rust/crates/redox_syscall-0.2.10.crate) = 23582
+SHA256 (rust/crates/redox_users-0.4.0.crate) = 528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64
+SIZE (rust/crates/redox_users-0.4.0.crate) = 13023
+SHA256 (rust/crates/regex-1.5.4.crate) = d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461
+SIZE (rust/crates/regex-1.5.4.crate) = 236581
+SHA256 (rust/crates/regex-syntax-0.6.25.crate) = f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b
+SIZE (rust/crates/regex-syntax-0.6.25.crate) = 293293
+SHA256 (rust/crates/rustyline-9.0.0.crate) = 790487c3881a63489ae77126f57048b42d62d3b2bafbf37453ea19eedb6340d6
+SIZE (rust/crates/rustyline-9.0.0.crate) = 98953
+SHA256 (rust/crates/rustyline-derive-0.6.0.crate) = bb35a55ab810b5c0fe31606fe9b47d1354e4dc519bec0a102655f78ea2b38057
+SIZE (rust/crates/rustyline-derive-0.6.0.crate) = 1409
+SHA256 (rust/crates/safe_arch-0.6.0.crate) = 794821e4ccb0d9f979512f9c1973480123f9bd62a90d74ab0f9426fcf8f4a529
+SIZE (rust/crates/safe_arch-0.6.0.crate) = 72016
+SHA256 (rust/crates/scopeguard-1.1.0.crate) = d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd
+SIZE (rust/crates/scopeguard-1.1.0.crate) = 11470
+SHA256 (rust/crates/simba-0.6.0.crate) = f0b7840f121a46d63066ee7a99fc81dcabbc6105e437cae43528cea199b5a05f
+SIZE (rust/crates/simba-0.6.0.crate) = 49252
+SHA256 (rust/crates/smallvec-1.7.0.crate) = 1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309
+SIZE (rust/crates/smallvec-1.7.0.crate) = 27459
+SHA256 (rust/crates/str-buf-1.0.5.crate) = d44a3643b4ff9caf57abcee9c2c621d6c03d9135e0d8b589bd9afb5992cb176a
+SIZE (rust/crates/str-buf-1.0.5.crate) = 3852
+SHA256 (rust/crates/strsim-0.10.0.crate) = 73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623
+SIZE (rust/crates/strsim-0.10.0.crate) = 11355
+SHA256 (rust/crates/syn-1.0.85.crate) = a684ac3dcd8913827e18cd09a68384ee66c1de24157e3c556c9ab16d85695fb7
+SIZE (rust/crates/syn-1.0.85.crate) = 235056
+SHA256 (rust/crates/tiny-keccak-2.0.2.crate) = 2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237
+SIZE (rust/crates/tiny-keccak-2.0.2.crate) = 20129
+SHA256 (rust/crates/typenum-1.14.0.crate) = b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec
+SIZE (rust/crates/typenum-1.14.0.crate) = 40518
+SHA256 (rust/crates/unicode-segmentation-1.8.0.crate) = 8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b
+SIZE (rust/crates/unicode-segmentation-1.8.0.crate) = 94011
+SHA256 (rust/crates/unicode-width-0.1.9.crate) = 3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973
+SIZE (rust/crates/unicode-width-0.1.9.crate) = 16745
+SHA256 (rust/crates/unicode-xid-0.2.2.crate) = 8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3
+SIZE (rust/crates/unicode-xid-0.2.2.crate) = 14955
+SHA256 (rust/crates/utf8parse-0.2.0.crate) = 936e4b492acfd135421d8dca4b1aa80a7bfc26e702ef3af710e0752684df5372
+SIZE (rust/crates/utf8parse-0.2.0.crate) = 13392
+SHA256 (rust/crates/wasi-0.10.2+wasi-snapshot-preview1.crate) = fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6
+SIZE (rust/crates/wasi-0.10.2+wasi-snapshot-preview1.crate) = 27505
+SHA256 (rust/crates/wide-0.7.1.crate) = d2f2548e954f6619da26c140d020e99e59a2ca872a11f1e6250b829e8c96c893
+SIZE (rust/crates/wide-0.7.1.crate) = 69799
+SHA256 (rust/crates/winapi-0.3.9.crate) = 5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419
+SIZE (rust/crates/winapi-0.3.9.crate) = 1200382
+SHA256 (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6
+SIZE (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = 2918815
+SHA256 (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f
+SIZE (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 2947998
+SHA256 (rust/crates/windows-sys-0.28.0.crate) = 82ca39602d5cbfa692c4b67e3bcbb2751477355141c1ed434c94da4186836ff6
+SIZE (rust/crates/windows-sys-0.28.0.crate) = 3075898
+SHA256 (rust/crates/windows_aarch64_msvc-0.28.0.crate) = 52695a41e536859d5308cc613b4a022261a274390b25bd29dfff4bf08505f3c2
+SIZE (rust/crates/windows_aarch64_msvc-0.28.0.crate) = 669636
+SHA256 (rust/crates/windows_i686_gnu-0.28.0.crate) = f54725ac23affef038fecb177de6c9bf065787c2f432f79e3c373da92f3e1d8a
+SIZE (rust/crates/windows_i686_gnu-0.28.0.crate) = 774446
+SHA256 (rust/crates/windows_i686_msvc-0.28.0.crate) = 51d5158a43cc43623c0729d1ad6647e62fa384a3d135fd15108d37c683461f64
+SIZE (rust/crates/windows_i686_msvc-0.28.0.crate) = 732280
+SHA256 (rust/crates/windows_x86_64_gnu-0.28.0.crate) = bc31f409f565611535130cfe7ee8e6655d3fa99c1c61013981e491921b5ce954
+SIZE (rust/crates/windows_x86_64_gnu-0.28.0.crate) = 743221
+SHA256 (rust/crates/windows_x86_64_msvc-0.28.0.crate) = 3f2b8c7cbd3bfdddd9ab98769f9746a7fad1bca236554cd032b78d768bc0e89f
+SIZE (rust/crates/windows_x86_64_msvc-0.28.0.crate) = 668950
+SHA256 (p-e-w-savage-v0.2.0_GH0.tar.gz) = 1ff34ad03d60cb5db45d4b0c7ee7d2a8a01b796a95d09f2451666d987d6c60f3
+SIZE (p-e-w-savage-v0.2.0_GH0.tar.gz) = 44945
diff --git a/math/savage/pkg-descr b/math/savage/pkg-descr
new file mode 100644
index 000000000000..ef13539bc6f2
--- /dev/null
+++ b/math/savage/pkg-descr
@@ -0,0 +1,17 @@
+Savage is a new computer algebra system written from scratch in pure
+Rust. Its goals are correctness, simplicity, and usability, in that
+order.
+
+Features:
+
+ - Arbitrary-precision integer, rational, and complex arithmetic
+ - Input, simplification, and evaluation of symbolic expressions
+ - First-class support for vectors and matrices, with coefficients
+ being arbitrary expressions
+ - REPL with syntax and bracket highlighting, persistent history,
+ and automatic multi-line input
+ - Macro-based system for defining functions with metadata and
+ automatic type checking
+ - Usable as a library from any Rust program
+
+WWW: https://github.com/p-e-w/savage