first commit
This commit is contained in:
75
.gitignore
vendored
Normal file
75
.gitignore
vendored
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
/target
|
||||||
|
/Cargo.lock
|
||||||
|
|
||||||
|
# Byte-compiled / optimized / DLL files
|
||||||
|
__pycache__/
|
||||||
|
.pytest_cache/
|
||||||
|
*.py[cod]
|
||||||
|
|
||||||
|
# C extensions
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Distribution / packaging
|
||||||
|
.Python
|
||||||
|
.venv/
|
||||||
|
env/
|
||||||
|
bin/
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
include/
|
||||||
|
man/
|
||||||
|
venv/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
|
||||||
|
# Installer logs
|
||||||
|
pip-log.txt
|
||||||
|
pip-delete-this-directory.txt
|
||||||
|
pip-selfcheck.json
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
.coverage
|
||||||
|
.cache
|
||||||
|
nosetests.xml
|
||||||
|
coverage.xml
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
*.mo
|
||||||
|
|
||||||
|
# Mr Developer
|
||||||
|
.mr.developer.cfg
|
||||||
|
.project
|
||||||
|
.pydevproject
|
||||||
|
|
||||||
|
# Rope
|
||||||
|
.ropeproject
|
||||||
|
|
||||||
|
# Django stuff:
|
||||||
|
*.log
|
||||||
|
*.pot
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Sphinx documentation
|
||||||
|
docs/_build/
|
||||||
|
|
||||||
|
# PyCharm
|
||||||
|
.idea/
|
||||||
|
|
||||||
|
# VSCode
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
# Pyenv
|
||||||
|
.python-version
|
||||||
|
|
||||||
|
/tests/files/*
|
||||||
17
Cargo.toml
Normal file
17
Cargo.toml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[package]
|
||||||
|
name = "colorcet"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2024"
|
||||||
|
rust-version = "1.85.1"
|
||||||
|
authors = ["Wim Pomp <w.pomp@nki.nl>"]
|
||||||
|
license = "BB-CY"
|
||||||
|
description = "Colorcet colormaps."
|
||||||
|
homepage = "https://github.com/wimpomp/colorcet"
|
||||||
|
repository = "https://github.com/wimpomp/colorcet"
|
||||||
|
readme = "README.md"
|
||||||
|
keywords = ["color", "colormap", "color-scales", "visualization", "gradient"]
|
||||||
|
categories = ["graphics", "visualization"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
phf = { version = "0.12.1", features = ["macros"] }
|
||||||
|
thiserror = "2.0.16"
|
||||||
250
LICENSE
Normal file
250
LICENSE
Normal file
@@ -0,0 +1,250 @@
|
|||||||
|
Creative Commons Attribution 4.0 International Public License (CC-BY)
|
||||||
|
|
||||||
|
By exercising the Licensed Rights (defined below), You accept and agree
|
||||||
|
to be bound by the terms and conditions of this Creative Commons
|
||||||
|
Attribution 4.0 International Public License ("Public License"). To the
|
||||||
|
extent this Public License may be interpreted as a contract, You are
|
||||||
|
granted the Licensed Rights in consideration of Your acceptance of
|
||||||
|
these terms and conditions, and the Licensor grants You such rights in
|
||||||
|
consideration of benefits the Licensor receives from making the
|
||||||
|
Licensed Material available under these terms and conditions.
|
||||||
|
|
||||||
|
Section 1 - Definitions.
|
||||||
|
a. Adapted Material means material subject to Copyright and Similar
|
||||||
|
Rights that is derived from or based upon the Licensed Material and
|
||||||
|
in which the Licensed Material is translated, altered, arranged,
|
||||||
|
transformed, or otherwise modified in a manner requiring permission
|
||||||
|
under the Copyright and Similar Rights held by the Licensor. For
|
||||||
|
purposes of this Public License, where the Licensed Material is a
|
||||||
|
musical work, performance, or sound recording, Adapted Material is
|
||||||
|
always produced where the Licensed Material is synched in timed
|
||||||
|
relation with a moving image.
|
||||||
|
b. Adapter's License means the license You apply to Your Copyright and
|
||||||
|
Similar Rights in Your contributions to Adapted Material in
|
||||||
|
accordance with the terms and conditions of this Public License.
|
||||||
|
c. Copyright and Similar Rights means copyright and/or similar rights
|
||||||
|
closely related to copyright including, without limitation,
|
||||||
|
performance, broadcast, sound recording, and Sui Generis Database
|
||||||
|
Rights, without regard to how the rights are labeled or
|
||||||
|
categorized. For purposes of this Public License, the rights
|
||||||
|
specified in Section [5]2(b)(1)-(2) are not Copyright and Similar
|
||||||
|
Rights.
|
||||||
|
d. Effective Technological Measures means those measures that, in the
|
||||||
|
absence of proper authority, may not be circumvented under laws
|
||||||
|
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||||
|
Treaty adopted on December 20, 1996, and/or similar international
|
||||||
|
agreements.
|
||||||
|
e. Exceptions and Limitations means fair use, fair dealing, and/or any
|
||||||
|
other exception or limitation to Copyright and Similar Rights that
|
||||||
|
applies to Your use of the Licensed Material.
|
||||||
|
f. Licensed Material means the artistic or literary work, database, or
|
||||||
|
other material to which the Licensor applied this Public License.
|
||||||
|
g. Licensed Rights means the rights granted to You subject to the
|
||||||
|
terms and conditions of this Public License, which are limited to
|
||||||
|
all Copyright and Similar Rights that apply to Your use of the
|
||||||
|
Licensed Material and that the Licensor has authority to license.
|
||||||
|
h. Licensor means the individual(s) or entity(ies) granting rights
|
||||||
|
under this Public License.
|
||||||
|
i. Share means to provide material to the public by any means or
|
||||||
|
process that requires permission under the Licensed Rights, such as
|
||||||
|
reproduction, public display, public performance, distribution,
|
||||||
|
dissemination, communication, or importation, and to make material
|
||||||
|
available to the public including in ways that members of the
|
||||||
|
public may access the material from a place and at a time
|
||||||
|
individually chosen by them.
|
||||||
|
j. Sui Generis Database Rights means rights other than copyright
|
||||||
|
resulting from Directive 96/9/EC of the European Parliament and of
|
||||||
|
the Council of 11 March 1996 on the legal protection of databases,
|
||||||
|
as amended and/or succeeded, as well as other essentially
|
||||||
|
equivalent rights anywhere in the world.
|
||||||
|
k. You means the individual or entity exercising the Licensed Rights
|
||||||
|
under this Public License. Your has a corresponding meaning.
|
||||||
|
|
||||||
|
Section 2 - Scope.
|
||||||
|
a. License grant.
|
||||||
|
1. Subject to the terms and conditions of this Public License,
|
||||||
|
the Licensor hereby grants You a worldwide, royalty-free,
|
||||||
|
non-sublicensable, non-exclusive, irrevocable license to
|
||||||
|
exercise the Licensed Rights in the Licensed Material to:
|
||||||
|
A. reproduce and Share the Licensed Material, in whole or in
|
||||||
|
part; and
|
||||||
|
B. produce, reproduce, and Share Adapted Material.
|
||||||
|
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||||
|
Exceptions and Limitations apply to Your use, this Public
|
||||||
|
License does not apply, and You do not need to comply with its
|
||||||
|
terms and conditions.
|
||||||
|
3. Term. The term of this Public License is specified in Section
|
||||||
|
[6]6(a).
|
||||||
|
4. Media and formats; technical modifications allowed. The
|
||||||
|
Licensor authorizes You to exercise the Licensed Rights in all
|
||||||
|
media and formats whether now known or hereafter created, and
|
||||||
|
to make technical modifications necessary to do so. The
|
||||||
|
Licensor waives and/or agrees not to assert any right or
|
||||||
|
authority to forbid You from making technical modifications
|
||||||
|
necessary to exercise the Licensed Rights, including technical
|
||||||
|
modifications necessary to circumvent Effective Technological
|
||||||
|
Measures. For purposes of this Public License, simply making
|
||||||
|
modifications authorized by this Section [7]2(a)(4) never
|
||||||
|
produces Adapted Material.
|
||||||
|
5. Downstream recipients.
|
||||||
|
A. Offer from the Licensor - Licensed Material. Every
|
||||||
|
recipient of the Licensed Material automatically receives
|
||||||
|
an offer from the Licensor to exercise the Licensed
|
||||||
|
Rights under the terms and conditions of this Public
|
||||||
|
License.
|
||||||
|
B. No downstream restrictions. You may not offer or impose
|
||||||
|
any additional or different terms or conditions on, or
|
||||||
|
apply any Effective Technological Measures to, the
|
||||||
|
Licensed Material if doing so restricts exercise of the
|
||||||
|
Licensed Rights by any recipient of the Licensed
|
||||||
|
Material.
|
||||||
|
6. No endorsement. Nothing in this Public License constitutes or
|
||||||
|
may be construed as permission to assert or imply that You
|
||||||
|
are, or that Your use of the Licensed Material is, connected
|
||||||
|
with, or sponsored, endorsed, or granted official status by,
|
||||||
|
the Licensor or others designated to receive attribution as
|
||||||
|
provided in Section [8]3(a)(1)(A)(i).
|
||||||
|
b. Other rights.
|
||||||
|
1. Moral rights, such as the right of integrity, are not licensed
|
||||||
|
under this Public License, nor are publicity, privacy, and/or
|
||||||
|
other similar personality rights; however, to the extent
|
||||||
|
possible, the Licensor waives and/or agrees not to assert any
|
||||||
|
such rights held by the Licensor to the limited extent
|
||||||
|
necessary to allow You to exercise the Licensed Rights, but
|
||||||
|
not otherwise.
|
||||||
|
2. Patent and trademark rights are not licensed under this Public
|
||||||
|
License.
|
||||||
|
3. To the extent possible, the Licensor waives any right to
|
||||||
|
collect royalties from You for the exercise of the Licensed
|
||||||
|
Rights, whether directly or through a collecting society under
|
||||||
|
any voluntary or waivable statutory or compulsory licensing
|
||||||
|
scheme. In all other cases the Licensor expressly reserves any
|
||||||
|
right to collect such royalties.
|
||||||
|
|
||||||
|
Section 3 - License Conditions.
|
||||||
|
|
||||||
|
Your exercise of the Licensed Rights is expressly made subject to the
|
||||||
|
following conditions.
|
||||||
|
a. Attribution.
|
||||||
|
1. If You Share the Licensed Material (including in modified
|
||||||
|
form), You must:
|
||||||
|
A. retain the following if it is supplied by the Licensor
|
||||||
|
with the Licensed Material:
|
||||||
|
i. identification of the creator(s) of the Licensed
|
||||||
|
Material and any others designated to receive
|
||||||
|
attribution, in any reasonable manner requested by
|
||||||
|
the Licensor (including by pseudonym if designated);
|
||||||
|
ii. a copyright notice;
|
||||||
|
iii. a notice that refers to this Public License;
|
||||||
|
iv. a notice that refers to the disclaimer of
|
||||||
|
warranties;
|
||||||
|
v. a URI or hyperlink to the Licensed Material to the
|
||||||
|
extent reasonably practicable;
|
||||||
|
B. indicate if You modified the Licensed Material and retain
|
||||||
|
an indication of any previous modifications; and
|
||||||
|
C. indicate the Licensed Material is licensed under this
|
||||||
|
Public License, and include the text of, or the URI or
|
||||||
|
hyperlink to, this Public License.
|
||||||
|
2. You may satisfy the conditions in Section [9]3(a)(1) in any
|
||||||
|
reasonable manner based on the medium, means, and context in
|
||||||
|
which You Share the Licensed Material. For example, it may be
|
||||||
|
reasonable to satisfy the conditions by providing a URI or
|
||||||
|
hyperlink to a resource that includes the required
|
||||||
|
information.
|
||||||
|
3. If requested by the Licensor, You must remove any of the
|
||||||
|
information required by Section [10]3(a)(1)(A) to the extent
|
||||||
|
reasonably practicable.
|
||||||
|
4. If You Share Adapted Material You produce, the Adapter's
|
||||||
|
License You apply must not prevent recipients of the Adapted
|
||||||
|
Material from complying with this Public License.
|
||||||
|
|
||||||
|
Section 4 - Sui Generis Database Rights.
|
||||||
|
|
||||||
|
Where the Licensed Rights include Sui Generis Database Rights that
|
||||||
|
apply to Your use of the Licensed Material:
|
||||||
|
a. for the avoidance of doubt, Section [11]2(a)(1) grants You the
|
||||||
|
right to extract, reuse, reproduce, and Share all or a substantial
|
||||||
|
portion of the contents of the database;
|
||||||
|
b. if You include all or a substantial portion of the database
|
||||||
|
contents in a database in which You have Sui Generis Database
|
||||||
|
Rights, then the database in which You have Sui Generis Database
|
||||||
|
Rights (but not its individual contents) is Adapted Material; and
|
||||||
|
c. You must comply with the conditions in Section [12]3(a) if You
|
||||||
|
Share all or a substantial portion of the contents of the database.
|
||||||
|
|
||||||
|
For the avoidance of doubt, this Section [13]4 supplements and does not
|
||||||
|
replace Your obligations under this Public License where the Licensed
|
||||||
|
Rights include other Copyright and Similar Rights.
|
||||||
|
|
||||||
|
Section 5 - Disclaimer of Warranties and Limitation of Liability.
|
||||||
|
a. Unless otherwise separately undertaken by the Licensor, to the
|
||||||
|
extent possible, the Licensor offers the Licensed Material as-is
|
||||||
|
and as-available, and makes no representations or warranties of any
|
||||||
|
kind concerning the Licensed Material, whether express, implied,
|
||||||
|
statutory, or other. This includes, without limitation, warranties
|
||||||
|
of title, merchantability, fitness for a particular purpose,
|
||||||
|
non-infringement, absence of latent or other defects, accuracy, or
|
||||||
|
the presence or absence of errors, whether or not known or
|
||||||
|
discoverable. Where disclaimers of warranties are not allowed in
|
||||||
|
full or in part, this disclaimer may not apply to You.
|
||||||
|
b. To the extent possible, in no event will the Licensor be liable to
|
||||||
|
You on any legal theory (including, without limitation, negligence)
|
||||||
|
or otherwise for any direct, special, indirect, incidental,
|
||||||
|
consequential, punitive, exemplary, or other losses, costs,
|
||||||
|
expenses, or damages arising out of this Public License or use of
|
||||||
|
the Licensed Material, even if the Licensor has been advised of the
|
||||||
|
possibility of such losses, costs, expenses, or damages. Where a
|
||||||
|
limitation of liability is not allowed in full or in part, this
|
||||||
|
limitation may not apply to You.
|
||||||
|
|
||||||
|
c. The disclaimer of warranties and limitation of liability provided
|
||||||
|
above shall be interpreted in a manner that, to the extent
|
||||||
|
possible, most closely approximates an absolute disclaimer and
|
||||||
|
waiver of all liability.
|
||||||
|
|
||||||
|
Section 6 - Term and Termination.
|
||||||
|
a. This Public License applies for the term of the Copyright and
|
||||||
|
Similar Rights licensed here. However, if You fail to comply with
|
||||||
|
this Public License, then Your rights under this Public License
|
||||||
|
terminate automatically.
|
||||||
|
b. Where Your right to use the Licensed Material has terminated under
|
||||||
|
Section [14]6(a), it reinstates:
|
||||||
|
1. automatically as of the date the violation is cured, provided
|
||||||
|
it is cured within 30 days of Your discovery of the violation;
|
||||||
|
or
|
||||||
|
2. upon express reinstatement by the Licensor.
|
||||||
|
For the avoidance of doubt, this Section [15]6(b) does not affect
|
||||||
|
any right the Licensor may have to seek remedies for Your
|
||||||
|
violations of this Public License.
|
||||||
|
c. For the avoidance of doubt, the Licensor may also offer the
|
||||||
|
Licensed Material under separate terms or conditions or stop
|
||||||
|
distributing the Licensed Material at any time; however, doing so
|
||||||
|
will not terminate this Public License.
|
||||||
|
d. Sections [16]1, [17]5, [18]6, [19]7, and [20]8 survive termination
|
||||||
|
of this Public License.
|
||||||
|
|
||||||
|
Section 7 - Other Terms and Conditions.
|
||||||
|
a. The Licensor shall not be bound by any additional or different
|
||||||
|
terms or conditions communicated by You unless expressly agreed.
|
||||||
|
b. Any arrangements, understandings, or agreements regarding the
|
||||||
|
Licensed Material not stated herein are separate from and
|
||||||
|
independent of the terms and conditions of this Public License.
|
||||||
|
|
||||||
|
Section 8 - Interpretation.
|
||||||
|
a. For the avoidance of doubt, this Public License does not, and shall
|
||||||
|
not be interpreted to, reduce, limit, restrict, or impose
|
||||||
|
conditions on any use of the Licensed Material that could lawfully
|
||||||
|
be made without permission under this Public License.
|
||||||
|
b. To the extent possible, if any provision of this Public License is
|
||||||
|
deemed unenforceable, it shall be automatically reformed to the
|
||||||
|
minimum extent necessary to make it enforceable. If the provision
|
||||||
|
cannot be reformed, it shall be severed from this Public License
|
||||||
|
without affecting the enforceability of the remaining terms and
|
||||||
|
conditions.
|
||||||
|
c. No term or condition of this Public License will be waived and no
|
||||||
|
failure to comply consented to unless expressly agreed to by the
|
||||||
|
Licensor.
|
||||||
|
d. Nothing in this Public License constitutes or may be interpreted as
|
||||||
|
a limitation upon, or waiver of, any privileges and immunities that
|
||||||
|
apply to the Licensor or You, including from the legal processes of
|
||||||
|
any jurisdiction or authority.
|
||||||
7
README.md
Normal file
7
README.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# Colorcet
|
||||||
|
Rust copy of Python library [colorcet](https://pypi.org/project/colorcet/).
|
||||||
|
[Colorcet](https://colorcet.com/) is a set of perceptually uniform colormaps.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
27485
__init__.py
Normal file
27485
__init__.py
Normal file
File diff suppressed because it is too large
Load Diff
52
copy_from_colorcet.py
Normal file
52
copy_from_colorcet.py
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
import colorcet
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
def parse_cmaps() -> list[str]:
|
||||||
|
pat = re.compile(r"(\s|\[)(\d)(,\s|])")
|
||||||
|
s = []
|
||||||
|
for name in colorcet.all_original_names():
|
||||||
|
cmap = getattr(colorcet, name)
|
||||||
|
if isinstance(cmap, list) and len(cmap) == 256 and isinstance(cmap[0], list):
|
||||||
|
c = f"{cmap}"
|
||||||
|
c = pat.sub(r"\1\2.0\3", c)
|
||||||
|
c = pat.sub(r"\1\2.0\3", c)
|
||||||
|
c = pat.sub(r"\1\2.0\3", c)
|
||||||
|
s.append(f" \"{name}\" => {c},\n")
|
||||||
|
return sorted(s)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_aliases() -> list[str]:
|
||||||
|
pat = re.compile(r",\s+")
|
||||||
|
s = []
|
||||||
|
for name in colorcet.all_original_names():
|
||||||
|
for alias in pat.split(colorcet.get_aliases(name)):
|
||||||
|
s.append(f" \"{alias}\" => \"{name}\",\n")
|
||||||
|
return sorted(s)
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
"""extract colormaps from the python package colorcet, run cargo fmt after"""
|
||||||
|
cmaps = parse_cmaps()
|
||||||
|
aliases = parse_aliases()
|
||||||
|
|
||||||
|
with open("src/colormaps.rs", "w") as f:
|
||||||
|
f.write("use phf::phf_map;\n")
|
||||||
|
f.write("\n")
|
||||||
|
f.write("/// unique colormaps\n")
|
||||||
|
f.write("#[allow(clippy::approx_constant)]\n")
|
||||||
|
f.write("pub static COLOR_MAPS: phf::Map<&'static str, [[f64; 3]; 256]> = phf_map! {\n")
|
||||||
|
for i in cmaps:
|
||||||
|
f.write(i)
|
||||||
|
f.write("};\n")
|
||||||
|
f.write("\n")
|
||||||
|
f.write("/// aliases to colormaps\n")
|
||||||
|
f.write("#[allow(clippy::approx_constant)]\n")
|
||||||
|
f.write("pub static ALIASES: phf::Map<&'static str, &'static str> = phf_map! {\n")
|
||||||
|
for i in aliases:
|
||||||
|
f.write(i)
|
||||||
|
f.write("};")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
320
src/colormaps.rs
Normal file
320
src/colormaps.rs
Normal file
File diff suppressed because one or more lines are too long
75
src/lib.rs
Normal file
75
src/lib.rs
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
mod colormaps;
|
||||||
|
|
||||||
|
use std::ops::Sub;
|
||||||
|
use thiserror::Error;
|
||||||
|
|
||||||
|
#[derive(Error, Debug)]
|
||||||
|
pub enum ColorcetError {
|
||||||
|
#[error("no colormap with name {0} known")]
|
||||||
|
ColormapNotFound(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait Int: Sub + Sized {
|
||||||
|
const MIN: Self;
|
||||||
|
const MAX: Self;
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! impl_int {
|
||||||
|
($($t:tt),+ $(,)?) => {
|
||||||
|
$(
|
||||||
|
impl Int for $t {
|
||||||
|
const MIN: Self = $t::MIN;
|
||||||
|
const MAX: Self = $t::MAX;
|
||||||
|
}
|
||||||
|
)*
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
impl_int!(
|
||||||
|
u8, i8, u16, i16, u32, i32, u64, i64, u128, i128, isize, usize
|
||||||
|
);
|
||||||
|
|
||||||
|
pub struct ColorMap([[f64; 3]; 256]);
|
||||||
|
|
||||||
|
impl ColorMap {
|
||||||
|
/// get a vector of rgb values, scaled between 0.0 and 1.0
|
||||||
|
pub fn get_colors_f64(&self) -> Vec<Vec<f64>> {
|
||||||
|
self.0.iter().map(|row| row.to_vec()).collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// get a vector of rgb values, scaled between T::MIN and T::MAX
|
||||||
|
pub fn get_colors_int<T>(&self) -> Vec<Vec<T>>
|
||||||
|
where
|
||||||
|
T: Int + From<f64>,
|
||||||
|
f64: From<T>,
|
||||||
|
{
|
||||||
|
let a: f64 = T::MIN.into();
|
||||||
|
let b: f64 = T::MAX.into();
|
||||||
|
let c = b - a;
|
||||||
|
self.0
|
||||||
|
.iter()
|
||||||
|
.map(|row| row.iter().map(|&i| ((i - a) / c).round().into()).collect())
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// find a colorcet colormap by name, add _r to reverse the colormap
|
||||||
|
pub fn get_named_colormap(name: &str) -> Result<ColorMap, ColorcetError> {
|
||||||
|
let (name0, reverse) = if let Some(name) = name.strip_suffix("_r") {
|
||||||
|
(name, true)
|
||||||
|
} else {
|
||||||
|
(name, false)
|
||||||
|
};
|
||||||
|
|
||||||
|
if let Some(&alias) = colormaps::ALIASES.get(name0)
|
||||||
|
&& let Some(cmap) = colormaps::COLOR_MAPS.get(alias)
|
||||||
|
{
|
||||||
|
let mut cmap = cmap.to_owned();
|
||||||
|
if reverse {
|
||||||
|
cmap.reverse();
|
||||||
|
}
|
||||||
|
Ok(ColorMap(cmap))
|
||||||
|
} else {
|
||||||
|
Err(ColorcetError::ColormapNotFound(name.into()))
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user