Skip to main content

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!

Installing the Python wrapper

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 .

Building

CLASS uses CMake. Quick start:

make class          # CLI binary ./class (thin shim around CMake)
make classy         # Python wrapper: pip install . + MontePython layout
make test           # C++ unit tests via CTest

or directly:

cmake -S . -B build/cmake && cmake --build build/cmake --parallel
pip install .       # Python wrapper (scikit-build-core)

For faster repeated Python installs with build dependencies preinstalled (cython, numpy, scikit-build-core): pip install --no-build-isolation .

IDE projects are generated, not committed:

cmake -S . -B build-xcode -G Xcode    # Xcode (run schemes are preconfigured
                                      # to run from the repo root with
                                      # explanatory.ini)

VS Code: install the CMake Tools extension; .vscode/settings.json already points it at build/cmake and sets the launch args/cwd.

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.

Documentation

The code and its tests are the authoritative description of behavior. Doxygen is maintained as a navigable reference for public interfaces and domain context; it is not a second specification of implementation details.

Keep an existing Doxygen comment when it is accurate, update it in the same change when its contract changes, and remove it when it only repeats the code. Add new Doxygen comments only when they capture information the code cannot reliably express: public API contracts, units, ownership or lifetime rules, invariants, numerical assumptions, or the rationale for a non-obvious algorithm. Do not add boilerplate comments for every function.

The generated manual is not committed except for the PDF release artifact. To build the HTML and LaTeX output locally, install Doxygen and Graphviz, then run:

rm -rf doc/manual/html doc/manual/latex
(cd doc/input && doxygen doxyconf)

The output is written below doc/manual/.

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. 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;
  InputModule::file_content_from_arguments(argc, argv, fc);

  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.

Metadata

Release files for classy-community 26.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for classy-community 26.0.0
File Size Uploaded Provenance Actions
classy_community-26.0.0.tar.gz 1.2 MB Without provenance Details for classy_community-26.0.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for classy-community 26.0.0
File Actions
classy_community-26.0.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details for classy_community-26.0.0-cp314-cp314-win_amd64.whl
classy_community-26.0.0-cp314-cp314-win32.whl CPython 3.14 CPython 3.14 Windows x86-32 Details for classy_community-26.0.0-cp314-cp314-win32.whl
classy_community-26.0.0-cp314-cp314-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ x86-64 Details for classy_community-26.0.0-cp314-cp314-musllinux_1_2_x86_64.whl
classy_community-26.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details for classy_community-26.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
classy_community-26.0.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details for classy_community-26.0.0-cp314-cp314-macosx_11_0_arm64.whl
classy_community-26.0.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for classy_community-26.0.0-cp313-cp313-win_amd64.whl
classy_community-26.0.0-cp313-cp313-win32.whl CPython 3.13 CPython 3.13 Windows x86-32 Details for classy_community-26.0.0-cp313-cp313-win32.whl
classy_community-26.0.0-cp313-cp313-musllinux_1_2_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-64 Details for classy_community-26.0.0-cp313-cp313-musllinux_1_2_x86_64.whl
classy_community-26.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details for classy_community-26.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
classy_community-26.0.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for classy_community-26.0.0-cp313-cp313-macosx_11_0_arm64.whl
classy_community-26.0.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for classy_community-26.0.0-cp312-cp312-win_amd64.whl
classy_community-26.0.0-cp312-cp312-win32.whl CPython 3.12 CPython 3.12 Windows x86-32 Details for classy_community-26.0.0-cp312-cp312-win32.whl
classy_community-26.0.0-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details for classy_community-26.0.0-cp312-cp312-musllinux_1_2_x86_64.whl
classy_community-26.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for classy_community-26.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
classy_community-26.0.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for classy_community-26.0.0-cp312-cp312-macosx_11_0_arm64.whl
classy_community-26.0.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for classy_community-26.0.0-cp311-cp311-win_amd64.whl
classy_community-26.0.0-cp311-cp311-win32.whl CPython 3.11 CPython 3.11 Windows x86-32 Details for classy_community-26.0.0-cp311-cp311-win32.whl
classy_community-26.0.0-cp311-cp311-musllinux_1_2_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-64 Details for classy_community-26.0.0-cp311-cp311-musllinux_1_2_x86_64.whl
classy_community-26.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for classy_community-26.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
classy_community-26.0.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for classy_community-26.0.0-cp311-cp311-macosx_11_0_arm64.whl
classy_community-26.0.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for classy_community-26.0.0-cp310-cp310-win_amd64.whl
classy_community-26.0.0-cp310-cp310-win32.whl CPython 3.10 CPython 3.10 Windows x86-32 Details for classy_community-26.0.0-cp310-cp310-win32.whl
classy_community-26.0.0-cp310-cp310-musllinux_1_2_x86_64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ x86-64 Details for classy_community-26.0.0-cp310-cp310-musllinux_1_2_x86_64.whl
classy_community-26.0.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for classy_community-26.0.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
classy_community-26.0.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details for classy_community-26.0.0-cp310-cp310-macosx_11_0_arm64.whl

Total release size: 36.6 MB

Release files / classy_community-26.0.0.tar.gz

Download URL classy_community-26.0.0.tar.gz
Size 1.2 MB
Tags Source
SHA-256 checksum
How to use checksums
910b59c7778cfc50c72d87a7ba422044f4080cd3c39aa4966621d08e51e0fe49
BLAKE2b-256 checksum
How to use checksums
784eaaad54dad099fc017c430b9148a84a102ea3cec31439bf7cae9da221e20d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp314-cp314-win_amd64.whl

Download URL classy_community-26.0.0-cp314-cp314-win_amd64.whl
Size 1.1 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
c94eac2763181a554e5cd7b971022a3e3a3a23b0a06180bdbf2776f868a86f1f
BLAKE2b-256 checksum
How to use checksums
809f167dc6c7722eb5e4ee51224740455c46a6ca84c0d91e57a07f2a2467a023
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp314-cp314-win32.whl

Download URL classy_community-26.0.0-cp314-cp314-win32.whl
Size 989.2 kB
Tags CPython 3.14 Windows x86-32
SHA-256 checksum
How to use checksums
c10492b848b58846ca39ad8f5a12f56edd2e1c469d559f59730c5db7d54b377f
BLAKE2b-256 checksum
How to use checksums
2244d64f35240a1c2f0ec916c7aab4332dbd483487432dc425b8816192f2b191
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp314-cp314-musllinux_1_2_x86_64.whl

Download URL classy_community-26.0.0-cp314-cp314-musllinux_1_2_x86_64.whl
Size 2.5 MB
Tags CPython 3.14 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
c9e3992c786ac4798261f168d7cc9c874594b16bd92fe71ae8f4b3a8d32ed01d
BLAKE2b-256 checksum
How to use checksums
77abfc06289237845b04e8ae3d65289406347838880ec79e384336eba5a6adac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL classy_community-26.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.4 MB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
e596a024db3bcbed0d7e86696a44471820201097c160addf1f839942f966e87e
BLAKE2b-256 checksum
How to use checksums
a7349b00d0a048198785ca0a22ae11dd02efa9dbf31d257be989c7db5ff5a606
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL classy_community-26.0.0-cp314-cp314-macosx_11_0_arm64.whl
Size 1.1 MB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
7a604bcf83f48a6406d91f769e485fb9caa19e8bfce28512fa0035dcb0baacf9
BLAKE2b-256 checksum
How to use checksums
0485ba4b4b31047b47cb40daa8f1925e550743fc4b2a851b618d4a9c8e3818d3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp313-cp313-win_amd64.whl

Download URL classy_community-26.0.0-cp313-cp313-win_amd64.whl
Size 1.1 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
65a922d050ca690566b7c6720f05beb27bd7fc7a15292ebd4c799ec3124576ae
BLAKE2b-256 checksum
How to use checksums
ed95dd47eed6b494ea3b3d01e854f05852a18f32c1d6ded1213b8f29a8ca61f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp313-cp313-win32.whl

Download URL classy_community-26.0.0-cp313-cp313-win32.whl
Size 969.2 kB
Tags CPython 3.13 Windows x86-32
SHA-256 checksum
How to use checksums
b1a71475033b5a41b2265ac27681bf9ce1897790e7807283150d0c7abe01063c
BLAKE2b-256 checksum
How to use checksums
116861de74d141e48489b8aa4e7f08f7167342701cec5db98c8b5be3ccd6ea64
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp313-cp313-musllinux_1_2_x86_64.whl

Download URL classy_community-26.0.0-cp313-cp313-musllinux_1_2_x86_64.whl
Size 2.5 MB
Tags CPython 3.13 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
199e15c6668004f2e6f463f22f18fe7a5d0e9c25603f100528ff269f860c3de4
BLAKE2b-256 checksum
How to use checksums
9e244597ad58888127da1fef75d1c840e96908d2aaf687dd5b3ffcf836de1113
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL classy_community-26.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.4 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
7e3c8801833634608dccab3ccfe4fb9641f11a4544f6bac7815ecf1b3eace167
BLAKE2b-256 checksum
How to use checksums
fe96dcc7c0ffcf06e328e70653493dfe6270230a3b22ba52bb63cca61eb3d3ce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL classy_community-26.0.0-cp313-cp313-macosx_11_0_arm64.whl
Size 1.1 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2242cb056e98aeeadd2aedde99f93b7d1beb5af5fba9a363539fde0d593a07b7
BLAKE2b-256 checksum
How to use checksums
02f973869963fa25a345160e11639e9ba5f5c9496a76b9d70236184c30346036
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp312-cp312-win_amd64.whl

Download URL classy_community-26.0.0-cp312-cp312-win_amd64.whl
Size 1.1 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
59a94cc42bd302c90cce5b7fe44540a553424dca3ac838105ab371bc6d28eac3
BLAKE2b-256 checksum
How to use checksums
2fd15cff05949a67626a1458936838ac1db53f48ac9a2ace926892914f52834f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp312-cp312-win32.whl

Download URL classy_community-26.0.0-cp312-cp312-win32.whl
Size 969.6 kB
Tags CPython 3.12 Windows x86-32
SHA-256 checksum
How to use checksums
e8a5646d207cce000ee107c8ab57cebe35f5fc2bbb6bbccaf86dbee997654986
BLAKE2b-256 checksum
How to use checksums
ca9707d365f925b428cdbd61680432cc7b6f9120fb228f6a0b85b8587f6afb80
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL classy_community-26.0.0-cp312-cp312-musllinux_1_2_x86_64.whl
Size 2.5 MB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
1fbebad9d080be57f1e91d94e4ddf6e8d1143ad41c195ef1d9d63ac5dfcad974
BLAKE2b-256 checksum
How to use checksums
b0711d4d46bae111e640c46c05f6ac85855db79ba42b171f28d1917726954e1d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL classy_community-26.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.4 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
955fb2dfcea53f54aae1efd8ba63935388251d8668329a967fe6a2d734a23813
BLAKE2b-256 checksum
How to use checksums
00a833b87c45d6654a1872e4fefcb0d7f5fba4f444ae90aa57e872b34000b7ec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL classy_community-26.0.0-cp312-cp312-macosx_11_0_arm64.whl
Size 1.1 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
07def4adbad97f23239abcb7a38e36ddb5f79ee48369b5e66e63c4de9ca84dbf
BLAKE2b-256 checksum
How to use checksums
d37e3ce57b3a55c7eb2077f35efa888644083bace0ffe8a4fdce179344232a78
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp311-cp311-win_amd64.whl

Download URL classy_community-26.0.0-cp311-cp311-win_amd64.whl
Size 1.1 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
6d4b8b4d833cd3352cd3a078afeeb1b2238177bfc331af6d91a70bbf6f910755
BLAKE2b-256 checksum
How to use checksums
ed962b02572fde53fcbbf904a0b1e4447a9cf90c9f18b10cd871863828026924
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp311-cp311-win32.whl

Download URL classy_community-26.0.0-cp311-cp311-win32.whl
Size 978.2 kB
Tags CPython 3.11 Windows x86-32
SHA-256 checksum
How to use checksums
d1d63b887585887ed8d79a5c91060cd0fb36678894cc821e5fc16ce16e21faee
BLAKE2b-256 checksum
How to use checksums
d47e9c795470a81a2fd7ec819f10fc5d450e22c39305403f86bf5b4dcc175aaa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp311-cp311-musllinux_1_2_x86_64.whl

Download URL classy_community-26.0.0-cp311-cp311-musllinux_1_2_x86_64.whl
Size 2.5 MB
Tags CPython 3.11 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
475c59376a2d851d5fa0ed36050d760934dffbfe4aeace908367452071df05fe
BLAKE2b-256 checksum
How to use checksums
e1868e68dfb4a686d6be04e77a410dd47cbbab2165bd75e7a53f86c185d53ede
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL classy_community-26.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.4 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
4c085e300cd13dfef035897395a981176d020d8c619faeefcad892b946195b0e
BLAKE2b-256 checksum
How to use checksums
03751f3a37cdd7ca10b4c1f430d81fd61c9f11b40994919f62905fa288d2359f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL classy_community-26.0.0-cp311-cp311-macosx_11_0_arm64.whl
Size 1.1 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2a4860b01cbd9a780f5dd57fcea33adb58bab5764e024565fef29d509a7fe5db
BLAKE2b-256 checksum
How to use checksums
dc0ef263476d6c0edd066030f67aa7017c4765ee2ee6431bbfd2f48ba033b3ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp310-cp310-win_amd64.whl

Download URL classy_community-26.0.0-cp310-cp310-win_amd64.whl
Size 1.1 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
c3c6f91924df711552047a6d7f2694d8f3ef8994464e822061e332c40edcbc3b
BLAKE2b-256 checksum
How to use checksums
a8d7988f488b1bf4eccf89c4931b1266b45d85fe62958bc2a561550fa47030af
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp310-cp310-win32.whl

Download URL classy_community-26.0.0-cp310-cp310-win32.whl
Size 982.9 kB
Tags CPython 3.10 Windows x86-32
SHA-256 checksum
How to use checksums
fd4eb3941f8f9f55727b314bfc1236cd056a030365cb9b4e861bd9ea64b411ab
BLAKE2b-256 checksum
How to use checksums
2ad6e88f315e775d5dedb121a761f715672c93104d31f762fbe319d87cafb5da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp310-cp310-musllinux_1_2_x86_64.whl

Download URL classy_community-26.0.0-cp310-cp310-musllinux_1_2_x86_64.whl
Size 2.5 MB
Tags CPython 3.10 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
04a8d660111655182a96c67ee5101186b404f9b15421f3093350ab86c5d9407e
BLAKE2b-256 checksum
How to use checksums
79adf041b9e55192dc2393f48e0461dd59b1374d623607b44a70e4f350074f52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL classy_community-26.0.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 1.5 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
79d341ce3b472a62e9f15d8f3123fc1c7a7704056a4fdbcac87b24436479b00e
BLAKE2b-256 checksum
How to use checksums
2c851505c10d0f5cb187d244fc51908257cd9f7f68d0c93b0b6c0617abb0479a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / classy_community-26.0.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL classy_community-26.0.0-cp310-cp310-macosx_11_0_arm64.whl
Size 1.1 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
490c732211a6ecab15500ee555605940269d1b9a8375b5ce2b6b683ea742f8f3
BLAKE2b-256 checksum
How to use checksums
c97e0d1e949eac9f12248190c25b4b51cbe270e41ac56a3f1d8349d9dbc7ccfb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Security for classy-community 26.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page