add matplotlib and simple gradient colormaps
This commit is contained in:
@@ -1,10 +1,10 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "colorcet"
|
name = "colorcet"
|
||||||
version = "0.1.0"
|
version = "0.2.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
rust-version = "1.85.1"
|
rust-version = "1.85.1"
|
||||||
authors = ["Wim Pomp <w.pomp@nki.nl>"]
|
authors = ["Wim Pomp <w.pomp@nki.nl>"]
|
||||||
license = "CC-BY"
|
license = "CC-BY-4.0 AND PSF-2.0 AND MIT"
|
||||||
description = "Colorcet colormaps."
|
description = "Colorcet colormaps."
|
||||||
homepage = "https://github.com/wimpomp/colorcet"
|
homepage = "https://github.com/wimpomp/colorcet"
|
||||||
repository = "https://github.com/wimpomp/colorcet"
|
repository = "https://github.com/wimpomp/colorcet"
|
||||||
@@ -13,5 +13,7 @@ keywords = ["color", "colormap", "color-scales", "visualization", "gradient"]
|
|||||||
categories = ["graphics", "visualization"]
|
categories = ["graphics", "visualization"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
phf = { version = "0.12.1", features = ["macros"] }
|
colorgrad = "0.7.2"
|
||||||
|
num-traits = "0.2.19"
|
||||||
|
phf = { version = "0.13.1", features = ["macros"] }
|
||||||
thiserror = "2.0.16"
|
thiserror = "2.0.16"
|
||||||
263
LICENSE
263
LICENSE
@@ -1,250 +1,19 @@
|
|||||||
Creative Commons Attribution 4.0 International Public License (CC-BY)
|
Copyright (c) 2025 Wim Pomp
|
||||||
|
|
||||||
By exercising the Licensed Rights (defined below), You accept and agree
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
to be bound by the terms and conditions of this Creative Commons
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
Attribution 4.0 International Public License ("Public License"). To the
|
in the Software without restriction, including without limitation the rights
|
||||||
extent this Public License may be interpreted as a contract, You are
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
granted the Licensed Rights in consideration of Your acceptance of
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
these terms and conditions, and the Licensor grants You such rights in
|
furnished to do so, subject to the following conditions:
|
||||||
consideration of benefits the Licensor receives from making the
|
|
||||||
Licensed Material available under these terms and conditions.
|
|
||||||
|
|
||||||
Section 1 - Definitions.
|
The above copyright notice and this permission notice shall be included in all
|
||||||
a. Adapted Material means material subject to Copyright and Similar
|
copies or substantial portions of the Software.
|
||||||
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.
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
a. License grant.
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
1. Subject to the terms and conditions of this Public License,
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
the Licensor hereby grants You a worldwide, royalty-free,
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
non-sublicensable, non-exclusive, irrevocable license to
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
exercise the Licensed Rights in the Licensed Material to:
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
A. reproduce and Share the Licensed Material, in whole or in
|
SOFTWARE.
|
||||||
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.
|
|
||||||
250
LICENSE_colorcet
Normal file
250
LICENSE_colorcet
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.
|
||||||
99
LICENSE_matplotlib
Normal file
99
LICENSE_matplotlib
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
License agreement for matplotlib versions 1.3.0 and later
|
||||||
|
=========================================================
|
||||||
|
|
||||||
|
1. This LICENSE AGREEMENT is between the Matplotlib Development Team
|
||||||
|
("MDT"), and the Individual or Organization ("Licensee") accessing and
|
||||||
|
otherwise using matplotlib software in source or binary form and its
|
||||||
|
associated documentation.
|
||||||
|
|
||||||
|
2. Subject to the terms and conditions of this License Agreement, MDT
|
||||||
|
hereby grants Licensee a nonexclusive, royalty-free, world-wide license
|
||||||
|
to reproduce, analyze, test, perform and/or display publicly, prepare
|
||||||
|
derivative works, distribute, and otherwise use matplotlib
|
||||||
|
alone or in any derivative version, provided, however, that MDT's
|
||||||
|
License Agreement and MDT's notice of copyright, i.e., "Copyright (c)
|
||||||
|
2012- Matplotlib Development Team; All Rights Reserved" are retained in
|
||||||
|
matplotlib alone or in any derivative version prepared by
|
||||||
|
Licensee.
|
||||||
|
|
||||||
|
3. In the event Licensee prepares a derivative work that is based on or
|
||||||
|
incorporates matplotlib or any part thereof, and wants to
|
||||||
|
make the derivative work available to others as provided herein, then
|
||||||
|
Licensee hereby agrees to include in any such work a brief summary of
|
||||||
|
the changes made to matplotlib .
|
||||||
|
|
||||||
|
4. MDT is making matplotlib available to Licensee on an "AS
|
||||||
|
IS" basis. MDT MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
||||||
|
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, MDT MAKES NO AND
|
||||||
|
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||||
|
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF MATPLOTLIB
|
||||||
|
WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
|
||||||
|
|
||||||
|
5. MDT SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF MATPLOTLIB
|
||||||
|
FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING
|
||||||
|
MATPLOTLIB , OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF
|
||||||
|
THE POSSIBILITY THEREOF.
|
||||||
|
|
||||||
|
6. This License Agreement will automatically terminate upon a material
|
||||||
|
breach of its terms and conditions.
|
||||||
|
|
||||||
|
7. Nothing in this License Agreement shall be deemed to create any
|
||||||
|
relationship of agency, partnership, or joint venture between MDT and
|
||||||
|
Licensee. This License Agreement does not grant permission to use MDT
|
||||||
|
trademarks or trade name in a trademark sense to endorse or promote
|
||||||
|
products or services of Licensee, or any third party.
|
||||||
|
|
||||||
|
8. By copying, installing or otherwise using matplotlib ,
|
||||||
|
Licensee agrees to be bound by the terms and conditions of this License
|
||||||
|
Agreement.
|
||||||
|
|
||||||
|
License agreement for matplotlib versions prior to 1.3.0
|
||||||
|
========================================================
|
||||||
|
|
||||||
|
1. This LICENSE AGREEMENT is between John D. Hunter ("JDH"), and the
|
||||||
|
Individual or Organization ("Licensee") accessing and otherwise using
|
||||||
|
matplotlib software in source or binary form and its associated
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
2. Subject to the terms and conditions of this License Agreement, JDH
|
||||||
|
hereby grants Licensee a nonexclusive, royalty-free, world-wide license
|
||||||
|
to reproduce, analyze, test, perform and/or display publicly, prepare
|
||||||
|
derivative works, distribute, and otherwise use matplotlib
|
||||||
|
alone or in any derivative version, provided, however, that JDH's
|
||||||
|
License Agreement and JDH's notice of copyright, i.e., "Copyright (c)
|
||||||
|
2002-2011 John D. Hunter; All Rights Reserved" are retained in
|
||||||
|
matplotlib alone or in any derivative version prepared by
|
||||||
|
Licensee.
|
||||||
|
|
||||||
|
3. In the event Licensee prepares a derivative work that is based on or
|
||||||
|
incorporates matplotlib or any part thereof, and wants to
|
||||||
|
make the derivative work available to others as provided herein, then
|
||||||
|
Licensee hereby agrees to include in any such work a brief summary of
|
||||||
|
the changes made to matplotlib.
|
||||||
|
|
||||||
|
4. JDH is making matplotlib available to Licensee on an "AS
|
||||||
|
IS" basis. JDH MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
||||||
|
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, JDH MAKES NO AND
|
||||||
|
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||||
|
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF MATPLOTLIB
|
||||||
|
WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
|
||||||
|
|
||||||
|
5. JDH SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF MATPLOTLIB
|
||||||
|
FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING
|
||||||
|
MATPLOTLIB , OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF
|
||||||
|
THE POSSIBILITY THEREOF.
|
||||||
|
|
||||||
|
6. This License Agreement will automatically terminate upon a material
|
||||||
|
breach of its terms and conditions.
|
||||||
|
|
||||||
|
7. Nothing in this License Agreement shall be deemed to create any
|
||||||
|
relationship of agency, partnership, or joint venture between JDH and
|
||||||
|
Licensee. This License Agreement does not grant permission to use JDH
|
||||||
|
trademarks or trade name in a trademark sense to endorse or promote
|
||||||
|
products or services of Licensee, or any third party.
|
||||||
|
|
||||||
|
8. By copying, installing or otherwise using matplotlib,
|
||||||
|
Licensee agrees to be bound by the terms and conditions of this License
|
||||||
|
Agreement.
|
||||||
14
README.md
14
README.md
@@ -1,7 +1,11 @@
|
|||||||
# Colorcet
|
# Colorcet
|
||||||
Rust copy of Python library [colorcet](https://pypi.org/project/colorcet/).
|
Basically list of colormaps copied from [colorcet the python package](https://pypi.org/project/colorcet/),
|
||||||
[Colorcet](https://colorcet.com/) is a set of perceptually uniform colormaps.
|
also see the [colorcet website](https://colorcet.com/)
|
||||||
|
and [matplotlib](https://pypi.org/project/matplotlib/) together with some colormaps defined by a simple
|
||||||
|
gradient between black and a named or css color,
|
||||||
|
generated using [colorgrad](https://crates.io/crates/colorgrad).
|
||||||
|
|
||||||
|
Colormaps copied from [colorcet the python package](https://pypi.org/project/colorcet/) are licensed
|
||||||
|
under a [CC-BY license](LICENSE_colorcet), colormaps copied from
|
||||||
|
[matplotlib](https://pypi.org/project/matplotlib/) are licensed under [PSF license](LICENSE_matplotlib).
|
||||||
|
Code in this crate is licensed under a [MIT license](LICENSE).
|
||||||
|
|||||||
27485
__init__.py
27485
__init__.py
File diff suppressed because it is too large
Load Diff
@@ -1,18 +1,15 @@
|
|||||||
import colorcet
|
import colorcet
|
||||||
import re
|
import re
|
||||||
|
from matplotlib import colormaps
|
||||||
|
|
||||||
|
|
||||||
def parse_cmaps() -> list[str]:
|
def parse_cmaps() -> list[str]:
|
||||||
pat = re.compile(r"(\s|\[)(\d)(,\s|])")
|
|
||||||
s = []
|
s = []
|
||||||
for name in colorcet.all_original_names():
|
for name in colorcet.all_original_names():
|
||||||
cmap = getattr(colorcet, name)
|
cmap = getattr(colorcet, name)
|
||||||
if isinstance(cmap, list) and len(cmap) == 256 and isinstance(cmap[0], list):
|
if isinstance(cmap, list) and isinstance(cmap[0], list):
|
||||||
c = f"{cmap}"
|
c = f"&{[[float(i) for i in j] for j in cmap]}"
|
||||||
c = pat.sub(r"\1\2.0\3", c)
|
s.append(f" \"{name.lower()}\" => {c},\n")
|
||||||
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)
|
return sorted(s)
|
||||||
|
|
||||||
|
|
||||||
@@ -21,13 +18,24 @@ def parse_aliases() -> list[str]:
|
|||||||
s = []
|
s = []
|
||||||
for name in colorcet.all_original_names():
|
for name in colorcet.all_original_names():
|
||||||
for alias in pat.split(colorcet.get_aliases(name)):
|
for alias in pat.split(colorcet.get_aliases(name)):
|
||||||
s.append(f" \"{alias}\" => \"{name}\",\n")
|
s.append(f" \"{alias.lower()}\" => \"{name.lower()}\",\n")
|
||||||
return sorted(s)
|
return s
|
||||||
|
|
||||||
|
|
||||||
|
def parse_mpl_cmaps() -> list[str]:
|
||||||
|
s = []
|
||||||
|
for name in list(colormaps):
|
||||||
|
if not name.lower().startswith("cet") and not name.lower().endswith("_r"):
|
||||||
|
cmap = colormaps[name]
|
||||||
|
cmap = cmap(range(cmap.N))[:, :3].tolist()
|
||||||
|
c = f"&{[[float(i) for i in j] for j in cmap]}"
|
||||||
|
s.append(f" \"{name.lower()}\" => {c},\n")
|
||||||
|
return s
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
def main() -> None:
|
||||||
"""extract colormaps from the python package colorcet, run cargo fmt after"""
|
"""extract colormaps from the python package colorcet, run cargo fmt after"""
|
||||||
cmaps = parse_cmaps()
|
cmaps = parse_cmaps() + parse_mpl_cmaps()
|
||||||
aliases = parse_aliases()
|
aliases = parse_aliases()
|
||||||
|
|
||||||
with open("src/colormaps.rs", "w") as f:
|
with open("src/colormaps.rs", "w") as f:
|
||||||
@@ -35,15 +43,15 @@ def main() -> None:
|
|||||||
f.write("\n")
|
f.write("\n")
|
||||||
f.write("/// unique colormaps\n")
|
f.write("/// unique colormaps\n")
|
||||||
f.write("#[allow(clippy::approx_constant)]\n")
|
f.write("#[allow(clippy::approx_constant)]\n")
|
||||||
f.write("pub static COLOR_MAPS: phf::Map<&'static str, [[f64; 3]; 256]> = phf_map! {\n")
|
f.write("pub static COLOR_MAPS: phf::Map<&'static str, &[[f64; 3]]> = phf_map! {\n")
|
||||||
for i in cmaps:
|
for i in sorted(cmaps):
|
||||||
f.write(i)
|
f.write(i)
|
||||||
f.write("};\n")
|
f.write("};\n")
|
||||||
f.write("\n")
|
f.write("\n")
|
||||||
f.write("/// aliases to colormaps\n")
|
f.write("/// aliases to colormaps\n")
|
||||||
f.write("#[allow(clippy::approx_constant)]\n")
|
f.write("#[allow(clippy::approx_constant)]\n")
|
||||||
f.write("pub static ALIASES: phf::Map<&'static str, &'static str> = phf_map! {\n")
|
f.write("pub static ALIASES: phf::Map<&'static str, &'static str> = phf_map! {\n")
|
||||||
for i in aliases:
|
for i in sorted(aliases):
|
||||||
f.write(i)
|
f.write(i)
|
||||||
f.write("};")
|
f.write("};")
|
||||||
|
|
||||||
|
|||||||
444
src/colormaps.rs
444
src/colormaps.rs
File diff suppressed because one or more lines are too long
153
src/lib.rs
153
src/lib.rs
@@ -1,6 +1,15 @@
|
|||||||
|
//! Colorcet: a list of [colorcet](https://colorcet.com/),
|
||||||
|
//! [matplotlib](https://pypi.org/project/matplotlib/) and simple
|
||||||
|
//! gradient colormaps.
|
||||||
|
|
||||||
mod colormaps;
|
mod colormaps;
|
||||||
|
|
||||||
use std::ops::Sub;
|
use colorgrad::{
|
||||||
|
BasisGradient, CatmullRomGradient, Color, Gradient, GradientBuilder, GradientBuilderError,
|
||||||
|
LinearGradient,
|
||||||
|
};
|
||||||
|
use num_traits::{Bounded, Float, FromPrimitive, NumCast, PrimInt, ToPrimitive};
|
||||||
|
use std::str::FromStr;
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
#[derive(Error, Debug)]
|
#[derive(Error, Debug)]
|
||||||
@@ -9,52 +18,78 @@ pub enum ColorcetError {
|
|||||||
ColormapNotFound(String),
|
ColormapNotFound(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait Int: Sub + Sized {
|
/// Struct holding f64 values defining the colormap.
|
||||||
const MIN: Self;
|
///
|
||||||
const MAX: Self;
|
/// # Examples
|
||||||
}
|
/// ```
|
||||||
|
/// use colorcet::ColorMap;
|
||||||
macro_rules! impl_int {
|
/// use colorgrad::{LinearGradient, Color};
|
||||||
($($t:tt),+ $(,)?) => {
|
///
|
||||||
$(
|
/// let colormap: ColorMap = "glasbey".parse().unwrap();
|
||||||
impl Int for $t {
|
/// let vec_color: Vec<Color> = colormap.clone().try_into().unwrap();
|
||||||
const MIN: Self = $t::MIN;
|
/// let vec_css: Vec<String> = colormap.clone().try_into().unwrap();
|
||||||
const MAX: Self = $t::MAX;
|
/// let linear_gradient: LinearGradient = colormap.clone().try_into().unwrap();
|
||||||
}
|
/// let vec_float: Vec<[f64; 3]> = colormap.clone().get_rgb_float();
|
||||||
)*
|
/// let vec_int: Vec<[u8; 3]> = colormap.get_rgb_int();
|
||||||
};
|
/// ```
|
||||||
}
|
#[derive(Clone, Debug)]
|
||||||
|
pub struct ColorMap(Vec<[f64; 3]>);
|
||||||
impl_int!(
|
|
||||||
u8, i8, u16, i16, u32, i32, u64, i64, u128, i128, isize, usize
|
|
||||||
);
|
|
||||||
|
|
||||||
pub struct ColorMap([[f64; 3]; 256]);
|
|
||||||
|
|
||||||
impl ColorMap {
|
impl ColorMap {
|
||||||
/// get a vector of rgb values, scaled between 0.0 and 1.0
|
/// get a vector of rgb values, scaled between 0.0 and 1.0
|
||||||
pub fn get_colors_f64(&self) -> Vec<Vec<f64>> {
|
pub fn get_rgb_float<T>(&self) -> Vec<[T; 3]>
|
||||||
self.0.iter().map(|row| row.to_vec()).collect()
|
where
|
||||||
|
T: Float + NumCast,
|
||||||
|
{
|
||||||
|
self.0
|
||||||
|
.iter()
|
||||||
|
.map(|color| {
|
||||||
|
[
|
||||||
|
T::from(color[0]).unwrap(),
|
||||||
|
T::from(color[1]).unwrap(),
|
||||||
|
T::from(color[2]).unwrap(),
|
||||||
|
]
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// get a vector of rgb values, scaled between T::MIN and T::MAX
|
/// get a vector of rgb values, scaled between T::MIN and T::MAX
|
||||||
pub fn get_colors_int<T>(&self) -> Vec<Vec<T>>
|
pub fn get_rgb_int<T>(&self) -> Vec<[T; 3]>
|
||||||
where
|
where
|
||||||
T: Int + From<f64>,
|
T: Bounded + PrimInt + FromPrimitive + ToPrimitive,
|
||||||
f64: From<T>,
|
|
||||||
{
|
{
|
||||||
let a: f64 = T::MIN.into();
|
let a: f64 = T::min_value().to_f64().unwrap();
|
||||||
let b: f64 = T::MAX.into();
|
let b: f64 = T::max_value().to_f64().unwrap();
|
||||||
let c = b - a;
|
let c = b - a;
|
||||||
self.0
|
self.0
|
||||||
.iter()
|
.iter()
|
||||||
.map(|row| row.iter().map(|&i| ((i - a) / c).round().into()).collect())
|
.map(|color| {
|
||||||
|
[
|
||||||
|
T::from_f64(((color[0] - a) / c).round()).unwrap(),
|
||||||
|
T::from_f64(((color[1] - a) / c).round()).unwrap(),
|
||||||
|
T::from_f64(((color[2] - a) / c).round()).unwrap(),
|
||||||
|
]
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// get names of all colormaps defined in this crate
|
||||||
|
pub fn all_colormap_names() -> Vec<String> {
|
||||||
|
colormaps::ALIASES
|
||||||
|
.keys()
|
||||||
|
.chain(colormaps::COLOR_MAPS.keys())
|
||||||
|
.map(|k| k.to_string())
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// find a colorcet colormap by name, add _r to reverse the colormap
|
impl FromStr for ColorMap {
|
||||||
pub fn get_named_colormap(name: &str) -> Result<ColorMap, ColorcetError> {
|
type Err = ColorcetError;
|
||||||
|
|
||||||
|
/// find a colorcet colormap by name, add _r to reverse the colormap
|
||||||
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
|
let name = s.to_lowercase();
|
||||||
|
let name = name.as_str();
|
||||||
let (name0, reverse) = if let Some(name) = name.strip_suffix("_r") {
|
let (name0, reverse) = if let Some(name) = name.strip_suffix("_r") {
|
||||||
(name, true)
|
(name, true)
|
||||||
} else {
|
} else {
|
||||||
@@ -64,7 +99,20 @@ pub fn get_named_colormap(name: &str) -> Result<ColorMap, ColorcetError> {
|
|||||||
if let Some(&alias) = colormaps::ALIASES.get(name0)
|
if let Some(&alias) = colormaps::ALIASES.get(name0)
|
||||||
&& let Some(cmap) = colormaps::COLOR_MAPS.get(alias)
|
&& let Some(cmap) = colormaps::COLOR_MAPS.get(alias)
|
||||||
{
|
{
|
||||||
let mut cmap = cmap.to_owned();
|
let mut cmap = cmap.to_vec();
|
||||||
|
if reverse {
|
||||||
|
cmap.reverse();
|
||||||
|
}
|
||||||
|
Ok(ColorMap(cmap))
|
||||||
|
} else if let Ok(cmap) = GradientBuilder::new()
|
||||||
|
.html_colors(&["#000000", name0])
|
||||||
|
.build::<LinearGradient>()
|
||||||
|
{
|
||||||
|
let mut cmap: Vec<_> = cmap
|
||||||
|
.colors(256)
|
||||||
|
.into_iter()
|
||||||
|
.map(|c| [c.r as f64, c.g as f64, c.b as f64])
|
||||||
|
.collect();
|
||||||
if reverse {
|
if reverse {
|
||||||
cmap.reverse();
|
cmap.reverse();
|
||||||
}
|
}
|
||||||
@@ -72,4 +120,43 @@ pub fn get_named_colormap(name: &str) -> Result<ColorMap, ColorcetError> {
|
|||||||
} else {
|
} else {
|
||||||
Err(ColorcetError::ColormapNotFound(name.into()))
|
Err(ColorcetError::ColormapNotFound(name.into()))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<ColorMap> for Vec<Color> {
|
||||||
|
fn from(value: ColorMap) -> Self {
|
||||||
|
value
|
||||||
|
.get_rgb_float::<f32>()
|
||||||
|
.into_iter()
|
||||||
|
.map(|c| Color::from((c[0], c[1], c[2])))
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<ColorMap> for Vec<String> {
|
||||||
|
/// convert ColorMap into a Vec of css color strings
|
||||||
|
fn from(value: ColorMap) -> Self {
|
||||||
|
value
|
||||||
|
.get_rgb_float::<f32>()
|
||||||
|
.into_iter()
|
||||||
|
.map(|c| Color::from((c[0], c[1], c[2])).to_css_hex())
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! impl_to_gradient {
|
||||||
|
($($t:ty $(,)?)*) => {
|
||||||
|
$(
|
||||||
|
impl TryFrom<ColorMap> for $t {
|
||||||
|
type Error = GradientBuilderError;
|
||||||
|
|
||||||
|
fn try_from(value: ColorMap) -> Result<Self, Self::Error> {
|
||||||
|
let colors: Vec<Color> = value.into();
|
||||||
|
GradientBuilder::new().colors(&colors).build()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)*
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
impl_to_gradient!(LinearGradient, CatmullRomGradient, BasisGradient);
|
||||||
|
|||||||
Reference in New Issue
Block a user