Skip to main content

Python interface to the C++ community-edition of the cosmological Boltzmann code CLASS

Project description

CLASS: Cosmic Linear Anisotropy Solving System

Main authors: Julien Lesgourgues, Thomas Tram, Nils Schoeneberg

with several major inputs from other people, especially Benjamin Audren, Simon Prunet, Deanna Hooper, Maria Archidiacono, Karim Benabed, Thejs Brinckmann, Marius Millea, Simeon Bird, Samuel Brieden, Jesus Torrado, Miguel Zumalacarregui, Francesco Montanari, Jeppe Dakin, Emil Brinch Holm, etc.

For download and information, see class-code.net, original Github and this fork.

About this fork

In March 2020 a branch of the development version of CLASS v2.9 was started in order to start converting CLASS into C++. The reasons for doing this were many and are summarised below:

  • C++ is as fast as C, but it has many features that enables one to do more with fewer lines of code.
  • CLASS is often used through classy, a Python wrapper written in Cython. C++ allows a more seamless wrapping where e.g. exceptions can be thrown in C++ code and automatically handled in Cython/Python.
  • C++ allows automatic (and safe) allocation and deallocation of resources (memory) using constructors and destructors which can eliminate the possibility of memory leaks.
  • With C, there was always the possibility that a function was called while the corresponding module is in an incomplete state, often leading to segmentation fault. In CLASS++, if construction of a module fails, it is not possible to call its member methods.

Why not Rust, Julia, Go, or something else?

The primary reason for C++ is that it allowed/allows the conversion to be gradual. At the beginning, a GitHub Actions workflow was established that tested the observables computed in many models against the main branch before allowing a PR to merge. If a new code had been written, it would have required a more thorough validation in the end.

That said, the benefits of Rust compared to C++ are primarily in multithreaded code where race-conditions can be discovered at compile-time. An Einstein--Boltzmann code in Julia would be interesting, but it might be dificult to make it sufficiently fast using just-in-time compilation.

Regarding other languages, anyone are encouraged to write a new Einstein--Boltzmann solver!

Installation

To install CLASS for use exclusively through the Python wrapper classy, use one of the following options:

  1. Installation from PyPI:
pip install classy-community
  1. Installation from GitHub:
pip install 'classy-community @ git+https://github.com/AarhusCosmology/CLASSpp_public.git'

or

pip install 'classy-community @ git+https://github.com/AarhusCosmology/CLASSpp_public.git@5d8b27678fae945080080cdaeb3a40857fa49deb'

for a specific version. 3. Installation from sources:

git clone https://github.com/AarhusCosmology/CLASSpp_public
pip install .

On MacOS and Anaconda, the path to the archiver ar can be wrong. If you get an error, do

export AR=/usr/bin/ar

and try again.

Installing the command line application:

If you want to run CLASS from the command line, you need to clone the repository and build the executable using one of the following two options:

  1. Build using GNU Make:
make -j

Optionally modify the Makefile to specify compiler flags etc. 2. Build using Xcode command-line tools on MacOS:

xcodebuild -configuration Release SYMROOT=$PWD

or

xcodebuild -configuration Debug SYMROOT=$PWD

for the debug build. The executable class will be stored in ./Release/ and ./Debug/ respectively. Consider copying/moving it to the project root. 3. Build using Xcode GUI:
The code can be build, profiled and debugged using Xcode by opening the project file.

To check that the code runs, type:

./class explanatory.ini

The explanatory.ini file is THE reference input file, containing and explaining the use of all possible input parameters. We recommend to read it, to keep it unchanged (for future reference), and to create for your own purposes some shorter input files, containing only the input lines which are useful for you. Input files must have a *.ini extension.

If you want to play with the precision/speed of the code, you can use one of the provided precision files (e.g. cl_permille.pre) or modify one of them, and run with two input files, for instance:

./class test.ini cl_permille.pre

The files *.pre are suppposed to specify the precision parameters for which you don't want to keep default values. If you find it more convenient, you can pass these precision parameter values in your *.ini file instead of an additional *.pre file.

The automatically-generated documentation is located in

doc/manual/html/index.html
doc/manual/CLASS_manual.pdf

On top of that, if you wish to modify the code, you will find lots of comments directly in the files.

Plotting utility

There are two outdated plotting scripts that may however still be useful from time to time.One os for Python, CPU.py, (Class Plotting Utility), written by Benjamin Audren and Jesus Torrado. It can plot the Cl's, the P(k) or any other CLASS output, for one or several models, as well as their ratio or percentage difference. The syntax and list of available options is obtained by typing 'pyhton CPU.py -h'. The other is for MATLAB. To use it, once in MATLAB, type 'help plot_CLASS_output.m'

Bug tracking and contributing

If you discover a bug or have a nice idea for a feature that you would like to see, open an issue at https://github.com/AarhusCosmology/CLASSpp_public/issues. A bug report should provide clear instructions on how to reproduce the bug.

If you want to contribute to CLASS, make a fork of (https://github.com/AarhusCosmology/CLASSpp_public)[https://github.com/AarhusCosmology/CLASSpp_public]. Before submitting the PR, make sure that an issue exists which clearly explains the bug or feature that the PR aims to solve.

Using and citing the code

You can use CLASS freely, but it is expected that in your publications, you cite at least the paper CLASS II: Approximation schemes <http://arxiv.org/abs/1104.2933>. (See COPYING, LICENSE and AUTHORS for formal details.) Feel free to cite more CLASS papers!

@article{Blas:2011rf,
    author = "Blas, Diego and Lesgourgues, Julien and Tram, Thomas",
    title = "{The Cosmic Linear Anisotropy Solving System (CLASS) II: Approximation schemes}",
    eprint = "1104.2933",
    archivePrefix = "arXiv",
    primaryClass = "astro-ph.CO",
    reportNumber = "CERN-PH-TH-2011-082, LAPTH-010-11",
    doi = "10.1088/1475-7516/2011/07/034",
    journal = "JCAP",
    volume = "07",
    pages = "034",
    year = "2011"
}
@article{Lesgourgues:2011rh,
    author = "Lesgourgues, Julien and Tram, Thomas",
    title = "{The Cosmic Linear Anisotropy Solving System (CLASS) IV: efficient implementation of non-cold relics}",
    eprint = "1104.2935",
    archivePrefix = "arXiv",
    primaryClass = "astro-ph.CO",
    reportNumber = "CERN-PH-TH-2011-084, LAPTH-012-11",
    doi = "10.1088/1475-7516/2011/09/032",
    journal = "JCAP",
    volume = "09",
    pages = "032",
    year = "2011"
}

Naming conventions and code-style

We never explicitly defined a code-style for CLASS, but there is a set of implicit rules that we have mostly adhered to:

  • Indentation uses two spaces, no tabs.
  • All variable names are typeset using snake_case.
  • Defined constants _EXAMPLE_ use capital letters and has a starting and a trailing underscore.
  • There is empty space around comparison operators and binary operators + and -.
  • There is no empty space around binary operators * and /.
  • There is empty space after every comma ,.

The last three rules are not followed in all of the code-base, but they should be changed whenever a modification is neccessary. If-else statements are indented like this:

if (a == 0) {
  t = 1 + 1.0/2.0;
}
else {
  t = pow(1, a); 
}

We will need to add a few more rules to support classes and objects:

  • Names of classes, structs and enums are written in PascalCase.
  • Methods are also written in PascalCase.
  • Struct data members are written in snake_case.
  • Class data members are written in snake_case without a trailing underscore.
  • Constant data members (declared with the const specifier) are written as kDaysInAWeek.
  • Static, constant data members (declared static const ) are written as sDaysInAWeek.

These choices are inspired by Google's C++ style guide. The trailing _ on class data members is very important due to shadowing. Consider the following code:

class ClModule() {
  int lmax = 2500; 
  int GetEllMax()
}

int ClModule::GetEllMax() {
  int lmax = 2;
  return lmax;
}

In this case GetEllMax() returns 2 since the local lmax variable shadows the class member variable lmax . This can lead to unexpected behaviour, especially in large classes. A trailing underscore effectively protects against shadowing, and together with the syntax highlighting of the editor makes class variables easy to recognise in the code.

For structs, this is not a problem, since they should atmost contain a simple constructor and destructor. (Otherwise, the struct in question should be converted into a class.)

Scoped variables

One programming style which should be completely abandoned throughout the code-base is declaring a variable before it is needed and without initialising it. Since C99, this was not even neccessary to do in pure C, so that should have been avoided from the start. Here are a few examples trying to accomplish the same thing:

// Worst possible way!
double a_prime_over_a = 0.;
...
if (a > 0.5) {
  printf("a_prime_over_a = %.3e\n", a_prime_over_a);
}

In this case we have a variable a_prime_over_a which is initialised to the wrong value! We hope that somewhere during ... , we correct the value, but this is not very robust: perhaps we only overwrite it under certain conditions.

// Still not good!
double a_prime_over_a;
...
if (a > 0.5) {
  printf("a_prime_over_a = %.3e\n", a_prime_over_a);
}

In this example we are at least not initialising the variable to a wrong value. This means that we get a compiler warning (which we are grateful for, because it tells us that we are doing something stupid!) if we use it before we initialise it.

// Getting better!
double a_prime_over_a = a*H;
...
if (a > 0.5) {
  printf("a_prime_over_a = %.3e\n", a_prime_over_a);
}

Now a_prime_over_a has the correct value for its complete life-time. I cannot compile the code if I am using it before it is initialised, which is good.

// Best!
...
if (a > 0.5) {
  double a_prime_over_a = a*H;
  printf("a_prime_over_a = %.3e\n", a_prime_over_a);
}

This is the best solution: the life-time of the a_prime_over_a object is tied to the scope of the if-statement, so it cannot be changed from outside the if- statement. Furthermore, the code is much more readable, since the reader immediately sees the definition of a_prime_over_a. Thus, we shall adhere to the following rules:

  • Variables should always be initialised when they are declared, except if it is not possible.
  • Variables should be declared in as narrow a scope as possible.

A typical example of this is the counter inside if-statements:

int i = 123; // Not changed by loop
for (int i = 0; i < 10; ++i) {
  ... 
}

This way, the variable i is local to the for-loop, so it does not change the value of the variable i defined outside the loop.

The BaseModule class

There are some things that all modules (not including InputModule) have in common, and this is collected in the BaseModule class which all other modules inherit from. A BaseModule is initialised with an InputModulePtr, and upon construction it sets the usual pointers ppr, pba, etc. to point towards the "input structs" that are stored inside the InputModule.

class BaseModule {
public:
  BaseModule(InputModulePtr input_module)
  : ncdm_(input_module->ncdm_)
  , dr_(input_module->dr_)
  , ppr(&input_module->precision_)
  , pba(&input_module->background_)
  , pth(&input_module->thermodynamics_)
  , ppt(&input_module->perturbations_)
  , ppm(&input_module->primordial_)
  , pnl(&input_module->nonlinear_)
  , ptr(&input_module->transfers_)
  , psp(&input_module->spectra_)
  , ple(&input_module->lensing_)
  , pop(&input_module->output_) {
    input_module_ = std::move(input_module);
    error_message_[0] = '\n';
  }
  BaseModule(const BaseModule&) = delete;
  
  mutable ErrorMsg error_message_;
public:
  const std::shared_ptr<NonColdDarkMatter> ncdm_;
  const std::shared_ptr<DarkRadiation> dr_;
protected:
  InputModulePtr input_module_;

  const precision* const ppr;
  const background* const pba;
  const thermo* const pth;
  const perturbs* const ppt;
  const primordial* const ppm;
  const nonlinear* const pnl;
  const transfers* const ptr;
  const spectra* const psp;
  const lensing* const ple;
  const output* const pop;
};

There are a few things to note here: First, the BaseModule contains a shared pointer to the InputModule object, so all pointers are guaranteed to be valid for the life-time of the BaseModule. Second, the input pointers are declared with two const keywords. This means that the pointer address cannot be changed, and the content that the pointer points toward can also not be changed.

Once a module inherits from BaseModule, it inherits all these pointers to input structs, (pba, pth etc.). Thus, whenever we are inside a module method, we can simply write pba-> and error_mesage_, and we never need to pass those around as input arguments. This is a massive advantage compared to vanilla CLASS, and it simplifies writing new methods a lot. Note that we did not adhere to the _ notation for these members. The reason is that we found the names sufficiently cannonical to warrant the omission.

The Cosmology class

The full CLASS has become a Cosmology class. The main function reads:

int main(int argc, char **argv) {

  FileContent fc;
  ErrorMsg error_message;
  if (InputModule::file_content_from_arguments(argc, argv, fc, error_message) == _FAILURE_) {
    printf("\n\nError running input_init_from_arguments \n=>%s\n", error_message);
    return _FAILURE_;
  }

  Cosmology cosmology{fc};

  OutputModule output_module(cosmology.GetInputModule(),
                             cosmology.GetBackgroundModule(),
                             cosmology.GetThermodynamicsModule(),
                             cosmology.GetPerturbationsModule(),
                             cosmology.GetPrimordialModule(),
                             cosmology.GetNonlinearModule(),
                             cosmology.GetSpectraModule(),
                             cosmology.GetLensingModule());

  return _SUCCESS_;

The Cosmology class itself is defined as this:

class Cosmology {
public:
  Cosmology(FileContent& fc)
  : input_module_ptr_(InputModulePtr(new InputModule(fc))) {}
  Cosmology(std::unique_ptr<InputModule> input_module)
  : input_module_ptr_(std::move(input_module)) {}

  InputModulePtr& GetInputModule();
  BackgroundModulePtr& GetBackgroundModule();
  ThermodynamicsModulePtr& GetThermodynamicsModule();
  PerturbationsModulePtr& GetPerturbationsModule();
  PrimordialModulePtr& GetPrimordialModule();
  NonlinearModulePtr& GetNonlinearModule();
  TransferModulePtr& GetTransferModule();
  SpectraModulePtr& GetSpectraModule();
  LensingModulePtr& GetLensingModule();

private:
  InputModulePtr input_module_ptr_;
  BackgroundModulePtr background_module_ptr_;
  ThermodynamicsModulePtr thermodynamics_module_ptr_;
  PerturbationsModulePtr perturbations_module_ptr_;
  PrimordialModulePtr primordial_module_ptr_;
  NonlinearModulePtr nonlinear_module_ptr_;
  TransferModulePtr transfer_module_ptr_;
  SpectraModulePtr spectra_module_ptr_;
  LensingModulePtr lensing_module_ptr_;
};

There are two ways to construct a Cosmology class:

  1. By passing a reference to a FileContent struct.
  2. By passing a unique pointer to an input module.

The second way is useful when the input structure needs to be modified manually, which happens when we want to use non-default precision parameters during shooting.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

classy_community-23.2.0.tar.gz (803.9 kB view details)

Uploaded Source

Built Distributions

classy_community-23.2.0-cp312-cp312-win_amd64.whl (713.9 kB view details)

Uploaded CPython 3.12 Windows x86-64

classy_community-23.2.0-cp312-cp312-win32.whl (637.6 kB view details)

Uploaded CPython 3.12 Windows x86

classy_community-23.2.0-cp312-cp312-musllinux_1_1_x86_64.whl (5.8 MB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

classy_community-23.2.0-cp312-cp312-musllinux_1_1_i686.whl (5.6 MB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

classy_community-23.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

classy_community-23.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (5.0 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

classy_community-23.2.0-cp312-cp312-macosx_10_9_x86_64.whl (883.8 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

classy_community-23.2.0-cp311-cp311-win_amd64.whl (720.6 kB view details)

Uploaded CPython 3.11 Windows x86-64

classy_community-23.2.0-cp311-cp311-win32.whl (644.1 kB view details)

Uploaded CPython 3.11 Windows x86

classy_community-23.2.0-cp311-cp311-musllinux_1_1_x86_64.whl (6.0 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

classy_community-23.2.0-cp311-cp311-musllinux_1_1_i686.whl (5.7 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

classy_community-23.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.3 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

classy_community-23.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (5.1 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

classy_community-23.2.0-cp311-cp311-macosx_11_0_arm64.whl (738.8 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

classy_community-23.2.0-cp311-cp311-macosx_10_9_x86_64.whl (895.8 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

classy_community-23.2.0-cp310-cp310-win_amd64.whl (719.3 kB view details)

Uploaded CPython 3.10 Windows x86-64

classy_community-23.2.0-cp310-cp310-win32.whl (644.1 kB view details)

Uploaded CPython 3.10 Windows x86

classy_community-23.2.0-cp310-cp310-musllinux_1_1_x86_64.whl (5.8 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

classy_community-23.2.0-cp310-cp310-musllinux_1_1_i686.whl (5.6 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

classy_community-23.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

classy_community-23.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (5.0 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

classy_community-23.2.0-cp310-cp310-macosx_10_9_x86_64.whl (894.6 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

classy_community-23.2.0-cp39-cp39-win_amd64.whl (719.7 kB view details)

Uploaded CPython 3.9 Windows x86-64

classy_community-23.2.0-cp39-cp39-win32.whl (644.7 kB view details)

Uploaded CPython 3.9 Windows x86

classy_community-23.2.0-cp39-cp39-musllinux_1_1_x86_64.whl (5.8 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

classy_community-23.2.0-cp39-cp39-musllinux_1_1_i686.whl (5.6 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

classy_community-23.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

classy_community-23.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (5.0 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

classy_community-23.2.0-cp39-cp39-macosx_10_9_x86_64.whl (895.1 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

classy_community-23.2.0-cp38-cp38-win_amd64.whl (720.6 kB view details)

Uploaded CPython 3.8 Windows x86-64

classy_community-23.2.0-cp38-cp38-win32.whl (645.2 kB view details)

Uploaded CPython 3.8 Windows x86

classy_community-23.2.0-cp38-cp38-musllinux_1_1_x86_64.whl (5.9 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

classy_community-23.2.0-cp38-cp38-musllinux_1_1_i686.whl (5.7 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

classy_community-23.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.3 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

classy_community-23.2.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (5.1 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

classy_community-23.2.0-cp38-cp38-macosx_10_9_x86_64.whl (894.7 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

classy_community-23.2.0-cp37-cp37m-win_amd64.whl (717.6 kB view details)

Uploaded CPython 3.7m Windows x86-64

classy_community-23.2.0-cp37-cp37m-win32.whl (641.6 kB view details)

Uploaded CPython 3.7m Windows x86

classy_community-23.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

classy_community-23.2.0-cp37-cp37m-musllinux_1_1_i686.whl (5.5 MB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

classy_community-23.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

classy_community-23.2.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (4.9 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686

classy_community-23.2.0-cp37-cp37m-macosx_10_9_x86_64.whl (896.3 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

Details for the file classy_community-23.2.0.tar.gz.

File metadata

  • Download URL: classy_community-23.2.0.tar.gz
  • Upload date:
  • Size: 803.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.3

File hashes

Hashes for classy_community-23.2.0.tar.gz
Algorithm Hash digest
SHA256 763aee69f789442679d8647a992519743fa0e593e942c2de0a7ff2da072ef483
MD5 961d1aa8a8162b077196aba332b7b0ea
BLAKE2b-256 de9e35a843378264884a7441ad3187bfc6193d7c94dc67a16c4986d684af1944

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 93a029a3bb498b02383893ce36324bf9140f3a393c5ff3dc80ae96cbf728ac92
MD5 c73fd4b2842c0f8025264e1cd2cf8530
BLAKE2b-256 7646d1b6598cc6d91ae4854d568135b4c63d1697597d82f4b0a7ef295e9e90f3

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp312-cp312-win32.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 d4f8c0fb5e39b8167bdb88584b26fe95828a19e3de3e56f29fa505452a94ae23
MD5 100cc87315dea59df5d10d6beed76bd9
BLAKE2b-256 dac2e53a39281ea66045e50d93988043e774cfbce136973ccddeb00b88e9a43c

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp312-cp312-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 de3bb6d3d9bc908cb5f17752fad4edcc5c98e7b869b5238d55643b0d70bb5564
MD5 ddd9883647b0bb14d857b55227b47eea
BLAKE2b-256 0c447102e3202a45486d8ca30c80150f45b0f007220b2430620552d06e93613d

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp312-cp312-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp312-cp312-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 2cf2eeb1c0cf1a457151bccaf08ba349e2373bab284d815ea380f3a032bdad49
MD5 fd1146604fa2603150934a2bc126a93d
BLAKE2b-256 f69b737217bf3f360e5eec47871c5f6fa268320f95a1b413b6d15396039b0cd6

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 14d691da5c1aca83191dc487f3298fd537636324226016f7a81dee17ae298821
MD5 b03c498031aad2f692545d0d3d20fd5d
BLAKE2b-256 4d8083e323aa242daa227691d95c886c469c944362ac91e6dbf58e13906d87ca

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 a527b2dd809707d217d95684e5d3c97fe81fde020aa2981a1b659fb4d63273cd
MD5 9c74778b3adb06d40fd3ea2dd68029cc
BLAKE2b-256 d0f6cb29973c1bcafe6cc2b52c172ca1d3e7102853a228dd91d1c81f361fe620

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1ffe5be9db798a01de40685361355c2c9c7bc0a13b0a5fe1a193f600f7ae0b65
MD5 523bcb6ffc087379209dcde0fd5327f1
BLAKE2b-256 069c715299d79e7e177bb1ce5d5e1782331e635cac893e72024fdf4efb2791df

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6842de0295ac2dead82f2440a07d3cf12c05c4b977c20e4cf489c13e76eedc23
MD5 15e48c37808dfef7a610d749859f2753
BLAKE2b-256 a0f82de73f361caecc5eb145a03dc590289b69d09fd95ddc2889a99e4da8983d

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp311-cp311-win32.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 3f41690dbc045aef02cc7b6f52888dd50e2f3e316bdcf43175b0bda71b9ec9e4
MD5 7f97e1caed1f60203d243c8993584669
BLAKE2b-256 ccfa8e4ed435ca776593409bf48b42353ad74e04b074f26969ba282fc688729f

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 f8730faf79d5ef73dead0999d7f14b3c572070ce642f7e7f7e3e5462f6fc03da
MD5 9afd3e77329d5faff58f1a8b9e9cfc83
BLAKE2b-256 0cfe8055d72d39fc44a67470b8b20b412ccfe3dfcfbc925ac217bb99757a3f6e

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp311-cp311-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp311-cp311-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 6f21bcb1f8e8851e2b902262b458ef94cbc83e5affd2c31549a6ee36aa4269ff
MD5 3d55e683f5c0023439ad87a2df7e5b15
BLAKE2b-256 4329927c3e018675b83c4d257c5e55e9b2ce4953a3fb0b3295c4c10c0d613165

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4bb4cb1ba6324acda29cc7e91680db7381b55097952891fed2918e71f1adca9d
MD5 6fe1506edec9794eab2bb93835d81443
BLAKE2b-256 959915865ce8ecc61b3877c057824d44cbc28e75d15ea32381a0fbd4aa59c9f7

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 7454b11fe1d785d9d2f28479c58b6c3969927d9d86c6a424c930fa24578ee4c2
MD5 7b07c00c1bfd7250ffa5dd2f06e8ebd4
BLAKE2b-256 cd249ccb735e9a8e6b3b97f3f2d51d7f372c50550e094573fb643d8ea81933df

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d4fae24103ddd9927953fcaf339e25a7827094ee5c7992bc7f60ed3ae112d504
MD5 e0a010aaed558e1b7e7d494db4e18255
BLAKE2b-256 30df5ef099cd2f6e37eb17c04a83734129bd4f0e5beaf101076d1a7694495735

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6983584bec9d2fb25d315301b5842f98cf105150a381ac28c308c58ce35631ad
MD5 d98f623995c79d13f0022ae197a69c94
BLAKE2b-256 0cbc91f52b92e486181be804988af8bd634074bb20baa558f7ed91e2df94c1db

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e50317ad6f641e41c91a8e4cd1e28d0f040ade6005d026fff070c751b01bab05
MD5 8cdef38a5aab4dc156b80b9bba819126
BLAKE2b-256 c7a3ca1281e6a17d18d0798ad378a1258600c69c47ddd2017406d7e4717c1392

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp310-cp310-win32.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 10c4d03ce35f2090e2233b989fbc6c7aeeec7bc98418212a3055578930bc9078
MD5 8d0fb05c728e19fa81cef56e7bde9f3f
BLAKE2b-256 43d56774c9fde65d99f074a7783403ae4e5d07e13125144d51899a3f729cb4fc

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 ef5be7306a9ea9343e453716c3ccdef32cbf5960b3fd2b7f456afe63a5903c2f
MD5 80790842b3a4471ee2121148be303b5a
BLAKE2b-256 1ddf3f4bb1dca88d13ef8a2b6ab566d182e72772675df252b4f74a83fcd57686

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 9f2e2165ba6e9ece485da60f19ee91853bf7118e5a5a6ca18238f90195a3864c
MD5 30cf08540aa93de5532ffa9bd2ae461a
BLAKE2b-256 c73fea781659810d9b174ac401540949c6f74592c7f2384c25563cb1e9673e8b

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6afeda30b73e8edc23b9caf258f3de7659cd0bea4d6dec9e3bb2211c2092c2ef
MD5 eca0cb2295f712436745a26a2b43d785
BLAKE2b-256 e45cf26ef5365a667ccf4e19d01a268a5ba310c32d74ab26186a9489d97edf87

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 6a37b0fb78ba7241c9eb720ccf4b7aa71196a867c23e91b73b32076c856982b1
MD5 0243035187f625902b29990ec32ed90a
BLAKE2b-256 3cb778e42b576eaea3a77c9a4841348aaac04c9a31156c0408f9dd32001e398d

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 fc35ecca9354bb2994d58f5f73178c1296efbd85815f33afeb08ee347c9ae6a6
MD5 6389c32b2d3da69ef54b2fdfc9a1631b
BLAKE2b-256 fcafbf54aa8441ed2badefb86b5d6297d5663bd1c5fa2e12732c04680fc33a7b

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 98535792d355201d67bcf60ef26809363254b25eefafc1d78e3c86c34a7374be
MD5 9ceb725dca932d634af51366e0c4deab
BLAKE2b-256 9415600351293f27062e55c7b52494483e5251c09595ff840d3392462433f0de

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp39-cp39-win32.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 651232e5a3006876b12b4a8f2bb5534ef1091cffc31e253f08796140c87134b6
MD5 aeefae6c181f93c992e7f5d666a1452c
BLAKE2b-256 3d63d0fd93e0dca2a759923a49dec7a7d9647a03fd507eef90bd19410b56b660

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 f3a5a1c340dc70b78147da42d7b947c727a5332907dbc0bcb8d08c87ae5463e6
MD5 61f1f47ea5d25b3559e4bc3236e2b166
BLAKE2b-256 a1a7ca589e997f5c28601699c7a1cd6441934435e1813e451a00f1802bd21e34

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 1cdd91d91d89332dbdbf835e223d4ef34b0213b8f2130aec0ec53be1ad7b7712
MD5 e1d384e60d2f8e5b05d9a52eed7be410
BLAKE2b-256 dbd77ac4b0dec0eeac23ae1f98a2af8b71fce28ddfd3d6f7d820a1f7fcd463c4

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 62465cdffa0550ee9663e3c51531add1b74445e38132ff56daf5311f1cf44002
MD5 2525a837ad070e0bc8ffe456152e9595
BLAKE2b-256 9629cd06ec9508e4d5923a06713323cd864b1a8469f12a73ea43ff13eae9a921

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 8029d9d8cedb27853e7a45b44c872b96dfad8149c4d5774ef365985a4b6f2631
MD5 0a6dc7009f1be3637ca537d402feeab9
BLAKE2b-256 b6570abba33345b46806b65a45ef524435d355d1a2f05fa9f69d7cd838d6fbb7

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5640956f87b259b37a97469fbecdb98bc81fb743cefb6e7f42d674c9ecd79140
MD5 b2877f22f7a1c5e2e5f8802d7c42c92a
BLAKE2b-256 bffdd3154b913425cf8034ed389ef7c43e8413d487d1a56d19710c27267a4b8b

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 fda6a3b0836bc069d34edb56263fa6fbeb6b409baf1bc1dd21605263eeb0ae05
MD5 34f7bc09f251b8407e8232bbb45e1d8f
BLAKE2b-256 9a884b42da0d89e876df052aea5d1b998e16aaf72c7fe1546c5306606a96e371

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp38-cp38-win32.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 18cc7a4bb4e939920754dc06643c6157fc8e7bb0ab3360b5ad5e36341d65fed7
MD5 5de70c3efb097c691543439ed9eacfe9
BLAKE2b-256 7bc3617071b18ef4a1fe190ebf362da11f2d6209e161b164aaa9e846eff5bbf1

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 5af9c80612cbfbd134da1805db3a78c6298c6271d3cab5c7928ed48e7037030b
MD5 3f94d7aeb1641665d2c68c349334bd9c
BLAKE2b-256 af0b5d53d950f882c2aecdc3469f14de4e8ecc8bf9fe2795157ec924d438edc4

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 8f2ca4a3d6a26eab0f77211264929f974382686085e3dcf734a826c6b8bfca99
MD5 f7c7f098272f0e25744a360da29db3ec
BLAKE2b-256 a5f3ff568fc471a1393db86092fb59f95090ba8f860852a9059a983743ff226c

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0655935117d58251fb52c90d336b1d528e0c99041a321202e1e013f5b3496594
MD5 724ccbadc68ea249e170e91b07ca2648
BLAKE2b-256 bf0efb44c86ae94ff9f88fdbdce9b36d63b24610f13b943bc002f33bacb52987

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 32676d2dbf41b96f664a4ef3f4d5c5c02e4e266363a65645fc587d9d25fcb45b
MD5 2350ffea3a2c6442bafaf7c40fe2a8b2
BLAKE2b-256 15ec4dd4906c3c3306fc5f08272ebc9abe2eeb8accc9df37c8f53348b2cba9a0

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5520db908a822b0ddc71e5ce0287192a6d58e7050cce3aefa45b9e0afefabc6d
MD5 09628b0ab42a19a0a30aeaee5e1c4328
BLAKE2b-256 1cd1ea1d82ca0592ecfd8a1eab3e22714e55b3e631b8074fe0b6f87537322555

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp37-cp37m-win_amd64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 7607a558e1cdf551c6124caeb3e615e22226a9773d728cbc5a1283f264c9e544
MD5 031849b311f86c2b570ec1ff75f4c80d
BLAKE2b-256 d77cd6bf1dfd62fc98828a87678d93500522c3d1028b98fb59e3c8ffa6807ccb

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp37-cp37m-win32.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 02ecfb2bb15011a8d7e7e3f651f8ad200e750e2b40cddd9626c0b3c1a50cf9f3
MD5 5b007b48fad074de02fc304ead9dbbb7
BLAKE2b-256 1e8f6ffabe93d77d3b9dcf2ad006552fb1e7b5532fb40bdaf62d40bb00943222

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 2c1739fd0cb7455d1af665c86d99e33d5329cd87be12479ba4495c29480f9bf4
MD5 a1c0540e5ccbd0a502b70db5cd4547b3
BLAKE2b-256 73e5630f665d4f7b0f2ad3e234372bc383edb91d76fe8d2d18aa31010dfc946d

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp37-cp37m-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 fa7accab11c4c85eed73b1d23d0c4678f2f3a95502abdea0fc5d39c80ad73631
MD5 f1de6b05c207d767a1860075f5898413
BLAKE2b-256 662ee131fb9072fe5f25f079fc63f313bb8240926e2e4ab39a3d4805200f59be

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 13bd6bb46f13e345400e6783c015acaaaeb089c86f3c461be192ab2be250aea3
MD5 d75801b68a9674f5a8bfbfef3f694012
BLAKE2b-256 a3e753eab08cc29ef0fe8092d5c3e76682d5eb2e2d070fa74e5aceafbd5d37ef

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 946cdd34e936d395dee9951bd62c992d56f52de1947b06f6b85e34490b66f20c
MD5 0db89dacdbf9838f0d7b047db7f5a202
BLAKE2b-256 71b67a202a9805cd81cbdeea46f6a0638e411f35629814f99e8cc013051cfaa1

See more details on using hashes here.

File details

Details for the file classy_community-23.2.0-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for classy_community-23.2.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 27285a6d027588bea250aab93bbce6c018c54ace148d4e6a7805e9835742f7cd
MD5 bbaf85ec82544b9ca839c7d25d43810c
BLAKE2b-256 26f0de1adc3ff4824c5de1d58d2bb8d60907bd4b62515d8b5fd800cf2de93b8e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page