Skip to main content

gersemi

Status License: MPL 2.0 Ruff

A formatter to make your CMake code the real treasure.

Installation

You can install gersemi from PyPI:

pip3 install gersemi

Usage

usage: gersemi [-c] [-i] [--diff] [--print-config {minimal,verbose,default}] [--version]
               [-h] [-l INTEGER] [--indent (INTEGER | tabs)] [--safe]
               [--definitions src [src ...]]
               [--list-expansion {favour-inlining,favour-expansion}]
               [--warn-about-unknown-commands] [--disable-formatting]
               [--extensions extension-name-or-path [extension-name-or-path ...]]
               [--sort-order {case-sensitive,case-insensitive}] [-q] [--color]
               [-w (INTEGER | max)] [--cache] [--cache-dir CACHE_DIR]
               [--config CONFIGURATION_FILE] [--warnings-as-errors]
               [--line-ranges LINE_RANGES] [--respect-ignore-files]
               [--stdin-filepath PATH]
               [src ...]

A formatter to make your CMake code the real treasure.

positional arguments:
  src                   File or directory to format. When directory is provided then
                        CMakeLists.txt, CMakeLists.txt.in and files with
                        .cmake/.cmake.in extension are automatically discovered. If only
                        `-` is provided, input is taken from stdin instead.
                        If --definitions is used it has to be separated with another
                        option or `--`, for example:
                        gersemi --definitions def1.cmake def2.cmake -- src1.cmake

modes:
  -c, --check           Check if files require reformatting. Return 0 when there's
                        nothing to reformat. Return 1 when some files would be
                        reformatted. It can be used together with --diff.
  -i, --in-place        Format files in-place.
  --diff                Show diff on stdout for each formatted file instead. It can be
                        used together with --check.
  --print-config {minimal,verbose,default}
                        Print configuration for files. With "minimal" prints source of
                        outcome configuration (configuration file or defaults) and the
                        options that differ from defaults. With "verbose" prints source
                        of outcome configuration (configuration file or defaults), files
                        for which this configuration is applicable and complete listing
                        of options. With "default" prints outcome configuration with
                        default values. Command line arguments are taken into
                        consideration just as they would be for formatting. When
                        configuration file is found values in "definitions" are printed
                        as relative paths, otherwise absolute paths are printed. Output
                        can be placed in .gersemirc file verbatim.
  --version             Show version.
  -h, --help            Show this help message and exit.

outcome configuration:
  These arguments control how gersemi formats source code. Values for these arguments
  can be stored in .gersemirc file which can be placed in directory next to the source
  file or any parent directory. The highest priority has file provided through
  --config, then file closest to the source file, then file in parent directory etc.
  until root of file system is reached. Arguments from command line can be used to
  override parts of that stored configuration or supply them in absence of
  configuration file. Precedence: (command line arguments) > (configuration file) >
  (defaults)

  -l, --line-length INTEGER
                        Maximum line length in characters. [default: 80]
  --indent (INTEGER | tabs)
                        Number of spaces used to indent or 'tabs' for indenting with
                        tabs [default: 4]
  --safe, --unsafe      Enable sanity checks. [default: skip sanity checks]
  --definitions src [src ...]
                        Files or directories containing custom command definitions
                        (functions or macros). If only - is provided custom definitions,
                        if there are any, are taken from stdin instead. Commands from
                        not deprecated CMake native modules don't have to be provided.
                        See: https://cmake.org/cmake/help/latest/manual/cmake-
                        modules.7.html
  --list-expansion {favour-inlining,favour-expansion}
                        Switch controls how code is expanded into multiple lines when
                        it's not possible to keep it formatted in one line. With
                        "favour-inlining" the list of entities will be formatted in such
                        way that sublists might still be formatted into single line as
                        long as it's possible or as long as it doesn't break the "more
                        than four standalone arguments" heuristic that's mostly focused
                        on commands like `set` or `list(APPEND)`. With "favour-
                        expansion" the list of entities will be formatted in such way
                        that sublists will be completely expanded once expansion becomes
                        necessary at all. [default: favour-inlining]
  --warn-about-unknown-commands, --no-warn-about-unknown-commands
                        When enabled file which has unknown custom commands will have
                        warnings issued about that and result won't be cached. See:
                        "Let's make a deal" section in README. [default: warnings
                        enabled, same as --warn-about-unknown-commands]
  --disable-formatting, --enable-formatting
                        Completely disable formatting. [default: formatting enabled]
  --extensions extension-name-or-path [extension-name-or-path ...]
                        Names of extension modules or paths to extension files. See:
                        "Extensions" section in README.
  --sort-order {case-sensitive,case-insensitive}
                        Defines sorting order for values after the keyword which
                        supports sorting due to either keyword hint or extension
                        definition. With "case-sensitive" arguments that are sorted in
                        case sensitive order also known as code point order. With "case-
                        insensitive" arguments are sorted in case insensitive order.
                        [default: case-sensitive]

control configuration:
  These arguments control how gersemi operates rather than how it formats source code.
  Values for these options are not read from configuration file. Default values are
  used when the arguments aren't supplied. Precedence: (command line arguments) >
  (defaults)

  -q, --quiet, --no-quiet
                        Skip printing non-error messages to stderr.
                        [default: don't skip, same as --no-quiet]
  --color, --no-color   If --diff is selected showed diff is colorized.
                        [default: don't colorize diff, same as --no-color]
  -w, --workers (INTEGER | max)
                        Explicit number of workers or 'max' for maximum possible number
                        of workers on given machine used to format multiple files in
                        parallel. [default: max]
  --cache, --no-cache   Enables cache with data about files that are known to be
                        formatted to speed up execution.
                        [default: cache enabled, same as --cache]
  --cache-dir CACHE_DIR
                        Directory used to store cache file when cache is enabled. When
                        omitted platform specific default cache directory will be used
                        instead.
                        [default: omitted]
  --config CONFIGURATION_FILE
                        Path to configuration file. When present this configuration file
                        will be used for determining configuration for all sources
                        instead of automatically found configuration files closest to
                        each of the sources. [default: omitted]
  --warnings-as-errors  Treat warnings as errors so that status code becomes 1 when at
                        least one warning would be issued. This option is not inhibited
                        by --quiet.
  --line-ranges LINE_RANGES
                        Try to format code only in specified line ranges. This option
                        works only with one input file. Range is specified as pairs of
                        integers indicating line numbers (1-based) joined with `-`
                        (dash) and each pair must be separated by comma. Examples of
                        valid values of this option: a) single line range: 13-21 b)
                        multiple line ranges: 10-49,51-100,111-123 c) single line: 7-7.
                        This option can be specified multiple times and union of ranges
                        will be considered, example: `--line-ranges 10-49 --line-ranges
                        51-100` is the same as `--line-ranges 10-49,51-100`
  --respect-ignore-files, --no-respect-ignore-files
                        When directory is passed as a source argument gersemi will
                        automatically discover relevant CMake files while respecting
                        rules in the following ignore files: .ignore, .gitignore,
                        .git/info/exclude and global gitignore globs. See:
                        https://docs.rs/ignore/latest/ignore/index.html
                        [default: respect ignore files, same as --respect-ignore-files]
  --stdin-filepath PATH
                        Path that code provided through stdin should be associated with.
                        When present configuration file closest to that path is used
                        instead of configuration file closest to current working
                        directory. That file doesn't have to exist, it's neither read
                        from nor written to. [default: omitted]

pre-commit hook

You can use gersemi with a pre-commit hook by adding the following to .pre-commit-config.yaml of your repository:

repos:
- repo: https://github.com/BlankSpruce/gersemi-pre-commit
  rev: 0.29.0
  hooks:
  - id: gersemi

Update rev to relevant version used in your repository. For more details refer to https://pre-commit.com/#using-the-latest-version-for-a-repository

Extensions in pre-commit hook

If you want to use extensions with pre-commit list them with additional_dependencies. Example assuming that outcome configuration is in .gersemirc:

.pre-commit-config.yaml:

repos:
- repo: https://github.com/BlankSpruce/gersemi-pre-commit
  rev: 0.29.0
  hooks:
  - id: gersemi
    additional_dependencies:
    - https://github.com/BlankSpruce/gersemi/extension-example/extension

.gersemirc:

line_length: 123
extensions:
- extension_example

Formatting

[!IMPORTANT] Changes to code might be destructive and you should always have a backup (version control helps a lot).

The key goals:

  • Formatter should "just work" and should have as little configuration as possible so that you don't have to worry about fine-tuning formatter to your needs - as long as you embrace the gersemi style of formatting, similarly as black or gofmt do their job.
  • Only valid CMake language code is considered - gersemi might be able to format some particular cases of invalid code but it's not guaranteed and it shouldn't be relied upon.
  • Only commands from CMake 3.0 onwards are supported and will be formatted properly - for instance exec_program has been deprecated since CMake 3.0 so it won't be formatted.
  • Formatter can be informed about commands not supported out of the box:

Style

General goals:

  • Canonical casing is used as it's defined in official CMake documentation like FetchContent_Declare. There are a few deliberate exceptions for which lower case name was chosen to provide broader consistency with other CMake commands. In case of unknown commands, not provided through definitions, lower case will be used.

  • Arguments attached to certain multi-value keywords, like PUBLIC/PRIVATE/INTERFACE in target_link_libraries, are treated as an argument group and such group might introduce another level of indentation. It's meant to introduce a visual hint that certain arguments have different, specific meaning.

  • Arguments that represent key-value pairs will be treated as such pairs.

    It's applicable to:
    • PROPERTIES keyword in the following official commands:
      • gtest_discover_test
      • set_directory_properties
      • set_package_properties
      • set_source_files_properties
      • set_target_properties
      • set_test_properties
    • keyword in custom commands that has pairs hint (See: Let's make a deal).
  • Arguments that represent shell command-like sequence won't be expanded in multiple lines unless character limit for single line is reached. In case of expansion arguments not fitting in given line will be placed in the next one instead of putting each argument in its own line like it would happen for usual multi-value arguments.

    Empty comments can be used to force some explicit expansions:
    add_test(
        NAME foo
        COMMAND
            some_command --with-argument-one foo --with argument-two bar --with-some-option
            --with-another-option --with-another-another-option
    )
    add_test(
        NAME foo
        COMMAND
            some_command #
            --with-argument-one foo #
            --with argument-two bar #
            --with-some-option --with-another-option --with-another-another-option
    )
    
    It's applicable to:
    • COMMAND keyword in the following official commands:
      • add_test
      • execute_process
      • env_module
    • COMMAND and ARGS keywords in add_custom_command
    • COMMAND keyword and positional arguments of add_custom_target
    • CMAKE_COMMAND_LINE in cmake_add_fortran_subdirectory
    • GCOV_OPTIONS in ctest_coverage_collect_gcov
    • these keywords in ExternalProject_Add:
      • DOWNLOAD_COMMAND
      • GIT_CONFIG
      • UPDATE_COMMAND
      • PATCH_COMMAND
      • CONFIGURE_COMMAND
      • CMAKE_ARGS
      • CMAKE_CACHE_ARGS
      • CMAKE_CACHE_DEFAULT_ARGS
      • BUILD_COMMAND
      • INSTALL_COMMAND
      • TEST_COMMAND
      • COMMAND
    • these keywords in FetchContent_Declare:
      • DOWNLOAD_COMMAND
      • UPDATE_COMMAND
      • PATCH_COMMAND
    • EXTRA_ARGS and DISCOVERY_EXTRA_ARGS keywords in gtest_discover_tests
    • MATLAB_ADDITIONAL_STARTUP_OPTIONS in matlab_add_unit_test
    • keyword in custom commands that has command_line hint (See: Let's make a deal).

Default style favour-inlining

gersemi will try to format the code in a way that respects set character limit for single line and only break line whenever necessary with one exception. The commands that have a group of parameters that aren't attached to any specific keyword (like set or list(APPEND)) will be broken into multiple lines when there are more than 4 arguments in that group. The exception to the rule is made as a heuristic to avoid large local diff when the given command won't fit into maximum line length:

# Four elements in the list "Oceans_Eleven"
set(Oceans_Eleven Danny Frank Rusty Reuben)

# Five elements in the list "Oceans_Twelve"
set(Oceans_Twelve
    Danny
    Frank
    Rusty
    Reuben
    Tess
)

You can also force expansion by using an empty comment somewhere in the argument group that you intend to keep expanded:

target_link_libraries(FOOBAR PUBLIC foo bar baz PRIVATE foo bar baz)

target_link_libraries(
    FOOBAR #
    PUBLIC foo bar baz
    PRIVATE foo bar baz
)

target_link_libraries(
    FOOBAR
    PUBLIC #
        foo
        bar
        baz
    PRIVATE foo bar baz
)

Example

cmake_minimum_required(VERSION 3.18 FATAL_ERROR)
project(example CXX)

message(STATUS "This is example project")
message(
    STATUS
    "Here is yet another but much much longer message that should be displayed"
)

# project version
set(VERSION_MAJOR 0)
set(VERSION_MINOR 1)
set(VERSION_PATCH 0)

add_compile_options(
    -Wall
    -Wpedantic
    -fsanitize=address
    -fconcepts
    -fsomething-else
)

if(NOT ${SOME_OPTION})
    add_compile_options(-Werror)
endif()

# foobar library
add_library(foobar)
add_library(example::foobar ALIAS foobar)

target_sources(
    foobar
    PUBLIC
        include/some_subdirectory/header.hpp
        include/another_subdirectory/header.hpp
    PRIVATE
        src/some_subdirectory/src1.cpp
        src/some_subdirectory/src1.cpp
        src/another_subdirectory/src1.cpp
        src/another_subdirectory/src2.cpp
        src/another_subdirectory/src3.cpp
)

target_include_directories(
    foobar
    INTERFACE
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
        $<INSTALL_INTERFACE:include>
)

target_link_libraries(
    foobar
    PUBLIC example::dependency_one example::dependency_two
    PRIVATE
        example::some_util
        external::some_lib
        external::another_lib
        Boost::Boost
)

include(GNUInstallDirs)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})

# example executable
add_executable(app main.cpp)
target_link_libraries(app PRIVATE example::foobar Boost::Boost)

# tests
include(CTest)
include(GTest)
enable_testing()
add_subdirectory(tests)

# some helper function - see more details in "Let's make a deal" section
function(add_test_executable)
    set(OPTIONS
        QUIET
        VERBOSE
        SOME_PARTICULARLY_LONG_KEYWORD_THAT_ENABLES_SOMETHING
    )
    set(ONE_VALUE_ARGS NAME TESTED_TARGET)
    set(MULTI_VALUE_ARGS SOURCES DEPENDENCIES)

    cmake_parse_arguments(
        THIS_FUNCTION_PREFIX
        ${OPTIONS}
        ${ONE_VALUE_ARGS}
        ${MULTI_VALUE_ARGS}
    )
    # rest of the function
endfunction()

add_test_executable(
    NAME foobar_tests
    TESTED_TARGET foobar
    SOURCES
        some_test1.cpp
        some_test2.cpp
        some_test3.cpp
        some_test4.cpp
        some_test5.cpp
    QUIET
    DEPENDENCIES googletest::googletest
)

add_custom_command(
    OUTPUT ${SOMETHING_TO_OUTPUT}
    COMMAND ${CMAKE_COMMAND} -E cat foobar
    COMMAND cmake -E echo foobar
    COMMAND
        cmake -E echo "something quite a bit                           longer"
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/something
    DEPENDS
        ${CMAKE_CURRENT_SOURCE_DIR}/something
        ${CMAKE_CURRENT_SOURCE_DIR}/something_else
    COMMENT "example custom command"
)

Alternative style favour-expansion

In this style lines are broken in one of these cases:

  • there is at least one multi-value argument present a single command invocation, either keyworded one like PUBLIC in target_link_libraries or standalone one like list of files in add_library, which has more than one value
  • there are more than one multi-value arguments present in the command invocation like target_link_libraries with PUBLIC and PRIVATE arguments.
  • character limit for single line is reached

One-value arguments (like NAME in add_test) will be inlined unless that'd violate character limit. Structure or control flow commands (if, while, function, foreach etc.) are exempted from these special rules and follow the same formatting as favour-inlining. This style is more merge or git blame friendly because usually multi-value arguments are changed one element at a time and with this style such change will be visible as one line of code per element.

Example

cmake_minimum_required(VERSION 3.18 FATAL_ERROR)
project(example CXX)

message(STATUS "This is example project")
message(
    STATUS
    "Here is yet another but much much longer message that should be displayed"
)

# project version
set(VERSION_MAJOR 0)
set(VERSION_MINOR 1)
set(VERSION_PATCH 0)

add_compile_options(
    -Wall
    -Wpedantic
    -fsanitize=address
    -fconcepts
    -fsomething-else
)

if(NOT ${SOME_OPTION})
    add_compile_options(-Werror)
endif()

# foobar library
add_library(foobar)
add_library(example::foobar ALIAS foobar)

target_sources(
    foobar
    PUBLIC
        include/some_subdirectory/header.hpp
        include/another_subdirectory/header.hpp
    PRIVATE
        src/some_subdirectory/src1.cpp
        src/some_subdirectory/src1.cpp
        src/another_subdirectory/src1.cpp
        src/another_subdirectory/src2.cpp
        src/another_subdirectory/src3.cpp
)

target_include_directories(
    foobar
    INTERFACE
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
        $<INSTALL_INTERFACE:include>
)

target_link_libraries(
    foobar
    PUBLIC
        example::dependency_one
        example::dependency_two
    PRIVATE
        example::some_util
        external::some_lib
        external::another_lib
        Boost::Boost
)

include(GNUInstallDirs)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})

# example executable
add_executable(app main.cpp)
target_link_libraries(
    app
    PRIVATE
        example::foobar
        Boost::Boost
)

# tests
include(CTest)
include(GTest)
enable_testing()
add_subdirectory(tests)

# some helper function - see more details in "Let's make a deal" section
function(add_test_executable)
    set(OPTIONS
        QUIET
        VERBOSE
        SOME_PARTICULARLY_LONG_KEYWORD_THAT_ENABLES_SOMETHING
    )
    set(ONE_VALUE_ARGS
        NAME
        TESTED_TARGET
    )
    set(MULTI_VALUE_ARGS
        SOURCES
        DEPENDENCIES
    )

    cmake_parse_arguments(
        THIS_FUNCTION_PREFIX
        ${OPTIONS}
        ${ONE_VALUE_ARGS}
        ${MULTI_VALUE_ARGS}
    )
    # rest of the function
endfunction()

add_test_executable(
    NAME foobar_tests
    TESTED_TARGET foobar
    SOURCES
        some_test1.cpp
        some_test2.cpp
        some_test3.cpp
        some_test4.cpp
        some_test5.cpp
    QUIET
    DEPENDENCIES googletest::googletest
)

add_custom_command(
    OUTPUT
        ${SOMETHING_TO_OUTPUT}
    COMMAND
        ${CMAKE_COMMAND} -E cat foobar
    COMMAND
        cmake -E echo foobar
    COMMAND
        cmake -E echo "something quite a bit                           longer"
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/something
    DEPENDS
        ${CMAKE_CURRENT_SOURCE_DIR}/something
        ${CMAKE_CURRENT_SOURCE_DIR}/something_else
    COMMENT "example custom command"
)

Let's make a deal

It's possible to provide reasonable formatting for custom commands. However on language level there are no hints available about supported keywords for given command so gersemi has to generate specialized formatter. To do that custom command definition is necessary which should be provided with --definitions. There are limitations though since it'd probably require full-blown CMake language interpreter to do it in every case so let's make a deal: if your custom command definition (function or macro) uses cmake_parse_arguments and does it in obvious manner such specialized formatter will be generated. Name casing used in command definition will be considered canonical for custom command (in the example below canonical casing will be Seven_Samurai). For instance this definition is okay (you can find other examples in tests/custom_command_formatting/):

function(Seven_Samurai some standalone arguments)
    set(options KAMBEI KATSUSHIRO)
    set(oneValueArgs GOROBEI HEIHACHI KYUZO)
    set(multiValueArgs SHICHIROJI KIKUCHIYO)

    cmake_parse_arguments(
        THIS_FUNCTION_PREFIX
        "${options}"
        "${oneValueArgs}"
        "${multiValueArgs}"
        ${ARGN}
    )

    # rest of the function definition...
endfunction()

With this definition available it's possible to format code like so:

Seven_Samurai(
    three
    standalone
    arguments
    KAMBEI
    KATSUSHIRO
    GOROBEI foo
    HEIHACHI bar
    KYUZO baz
    SHICHIROJI foo bar baz
    KIKUCHIYO bar baz foo
)

Otherwise gersemi will fallback to only fixing indentation of command name and it's closing parenthesis while preserving original formatting of arguments:

# before formatting of unknown command
  watch_david_fincher_movies(
       "Se7en"
       "The Game"
         "Fight Club"
       "Zodiac"     "The Curious Case of Benjamin Button"
         )

# after
watch_david_fincher_movies(
       "Se7en"
       "The Game"
         "Fight Club"
       "Zodiac"     "The Curious Case of Benjamin Button"
)

If you find these limitations too strict let me know about your case.

When source code has custom commands but their definitions aren't known gersemi will warn about that. Warnings can be suppressed with --no-warn-about-unknown-commands/warn_about_unknown_commands: false.

How to format custom commands for which path to definition can't be guaranteed to be stable? (e.g external dependencies not managed by CMake)

You can either implement extension or provide stub definitions that will be used only as an input for gersemi. Example of stub definition:

# ./.gersemirc
definitions: [./src/cmake/stubs, ...] # ... other paths that might contain actual definitions
line_length: 120
list_expansion: favour-expansion
# ./src/cmake/stubs/try_to_win_best_picture_academy_award.cmake
# A stub for some external command out of our control
function(try_to_win_best_picture_academy_award)
    # gersemi: hints { CAST: pairs, SUMMARY: command_line }
    set(options FOREIGN_LANGUAGE)
    set(oneValueArgs GENRE YEAR)
    set(multiValueArgs DIRECTORS CAST SUMMARY)

    cmake_parse_arguments(_ "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
endfunction()

gersemi: ignore

If your definition should be ignored for purposes of generating specialized formatter you can use # gersemi: ignore at the beginning of the custom command:

function(harry_potter_and_the_philosophers_stone some standalone arguments)
    # gersemi: ignore
    set(options HARRY)
    set(oneValueArgs HERMIONE)
    set(multiValueArgs RON)

    cmake_parse_arguments(
        THIS_FUNCTION_PREFIX
        "${options}"
        "${oneValueArgs}"
        "${multiValueArgs}"
        ${ARGN}
    )

    # rest of the definition...
endfunction()

# no reformatting
harry_potter_and_the_philosophers_stone(HARRY
    HERMIONE foo
              RON foo bar baz)

It should be still preferred simply to not provide that definition instead.

gersemi: hints

If your definition has # gersemi: hints at the beginning then after hints you can provide YAML formatted pairs <keyword>: <specialized_formatting> to indicate how to treat specific multi-value arguments. <specialized_formatting> can be:

  • pairs: values after the keyword will be grouped into pairs, similar to how set_target_properties(PROPERTIES) is handled
  • command_line: values after the keyword will be treated like a sequence of words in command line, similar to how add_custom_command(COMMAND) is handled
  • sort: values after the keyword will be sorted in alphabetical order
  • unique: repeated values after the keyword will be removed during formatting
  • sort+unique: values will be sorted and repetitions will be removed

All line comments with # gersemi: hints prefix within custom command definition will be taken into consideration so it's possible to list all of the hints in more readable fashion.

Example:
function(movie_description_without_hints)
set(options "")
set(oneValueArgs DIRECTOR)
set(multiValueArgs CAST SUMMARY)

cmake_parse_arguments(THIS_FUNCTION_PREFIX "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
endfunction()

function(movie_description_with_hints)
# gersemi: hints { CAST: pairs, SUMMARY: command_line }
set(options "")
set(oneValueArgs DIRECTOR)
set(multiValueArgs CAST SUMMARY)

cmake_parse_arguments(THIS_FUNCTION_PREFIX "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
endfunction()

# alternative definition with hints spread across multiple line comments
function(movie_description_with_hints)
# gersemi: hints { CAST: pairs }
# gersemi: hints { SUMMARY: command_line }
set(options "")
set(oneValueArgs DIRECTOR)
set(multiValueArgs CAST SUMMARY)

cmake_parse_arguments(THIS_FUNCTION_PREFIX "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
endfunction()

movie_description_without_hints(
    Oppenheimer
    DIRECTOR "Christopher Nolan"
    CAST
        "J. Robert Oppenheimer"
        "Cillian Murphy"
        "Kitty Oppenheimer"
        "Emily Blunt"
        "General Leslie Groves"
        "Matt Damon"
    SUMMARY
        Oppenheimer
        is
        an
        epic
        biographical
        thriller
        directed
        by
        Christopher
        Nolan.
)

movie_description_with_hints(
    Oppenheimer
    DIRECTOR "Christopher Nolan"
    CAST
        "J. Robert Oppenheimer" "Cillian Murphy"
        "Kitty Oppenheimer" "Emily Blunt"
        "General Leslie Groves" "Matt Damon"
    SUMMARY
        Oppenheimer is an epic biographical thriller directed by Christopher
        Nolan.
)

gersemi: block_end

If your definition has # gersemi: block_end at the beginning then after block_end you can provide name of another command. This will form block-like structure that will be formatted similarly to the pair of function/endfunction.

Example:
function(movie_prologue)
    # gersemi: block_end movie_epilogue

    # details of this function
endfunction()

function(movie_epilogue)
    # details of this function
endfunction()

movie_prologue()
    set(MOVIE_SETTING "Jury room on a hot summer day")
movie_epilogue()

Inline argument hints

In case you want format group of arguments in particular way you can introduce bracket comment with hint how to format that group. It will affect arguments from that bracket argument until next keyword or end of command invocation. The following hints are supported:

  • Same as hints used in custom command definitions:
    • [[gersemi: pairs]]
    • [[gersemi: command_line]]
    • [[gersemi: sort]]
    • [[gersemi: unique]]
    • [[gersemi: sort+unique]]
  • [[gersemi: as_command=<name_of_command>]] to format list of arguments in the same way as another command.
Example:
set(MY_SOURCES
    #[[gersemi: sort+unique]]
    a.h
    b.h
    c.h
    d_____________________________________________.h
    CACHE INTERNAL # CACHE is the next keyword after inline hint
    "Short docstring"
    FORCE
)

set(install_args
    #[[gersemi: as_command=install]]
    TARGETS
        long_arg______________________________________________________________
    EXPORT
        long_arg______________________________________________________________
    PUBLIC_HEADER
        DESTINATION
            long_arg____________________________________________________________
        PERMISSIONS OWNER_READ
        CONFIGURATIONS Debug
        COMPONENT
            long_arg____________________________________________________________
        NAMELINK_COMPONENT
            long_arg____________________________________________________________
        OPTIONAL
        EXCLUDE_FROM_ALL
        NAMELINK_ONLY
    INCLUDES DESTINATION
        long_arg____________________________________________________________
)

Extensions

You can extend gersemi capabilities through Python modules listed with --extensions(command line)/extensions (configuration file). Such extension has to:

  • either:
    • be module installed in gersemi's environment that follows naming convention gersemi_{extension module name},
    • be file that ends with .py extension, for example: acme_corporation.py
  • implement command_definitions mapping, where key describes command in its canonical casing and value describes command properties,

[!IMPORTANT]

  1. Exact details on command properties are available in extension example implementation.
  2. It's possible to override or tweak builtin commands. Extension example shows how to do that with target_sources command example. Use with caution.
  • pass verification done once during runtime that checks whether command_definitions follows some basic constraints like "keyworded arguments are strings", "command names don't start with a digit" etc.

How to disable reformatting

Gersemi can be disallowed to format block of code using pair of fencing comments. Supported pairs:

  • # gersemi: off/# gersemi: on
  • # cmake-format: off/# cmake-format: on
  • # fmt: off/# fmt: on Mixing fencing comments, for instance # gersemi: off + # fmt: on, is not supported. Example:
the_hobbit(
    BURGLAR "Bilbo Baggins"
    WIZARD Gandalf
    DWARVES
        "Thorin Oakenshield"
        Fili
        Kili
        Balin
        Dwalin
        Oin
        Gloin
        Dori
        Nori
        Ori
        Bifur
        Bofur
        Bombur
)

# gersemi: off
the_fellowship_of_the_ring     (
    RING_BEARER Frodo GARDENER Samwise
    Merry Pippin Aragon
            Boromir
            Gimli
       Legolas
       Gandalf
       )
# gersemi: on

# gersemi: off
the_two_towers(
            RING_BEARER Frodo
        GARDENER Samwise
    Merry Pippin Aragon
    # gersemi: on
    Boromir
    Gimli
    Legolas
    Gandalf
)

# gersemi: off
function(how_to_make_a_successful_movie args)
step_one_have_a_good_scenario()
    # gersemi: on
    step_two_make_the_movie()
endfunction()

Fencing comments will be indented as usual comments (as in the_two_towers and how_to_make_a_successful_movie examples) so it's probably a good idea to disable formatting in code block representing the same semantic level.

Contributing

Bug or style inconsitencies reports are always welcomed. In case of style enhancement or feature proposals consider providing rationale (and maybe some example) having in mind the deliberate choice mentioned above. As long as it's meant to improve something go for it and be prepared to defend your point.

Running tests

Entire test suite can be run with just:

tox

Selecting functional tests can be done like so:

tox -e tests -- -k <test_pattern>

If you are familiar with pytest then you can pass relevant arguments after --.

Download files

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

Source Distribution

gersemi-0.29.0.tar.gz (125.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

gersemi-0.29.0-cp314-cp314t-win_arm64.whl (2.2 MB view details)

Uploaded CPython 3.14tWindows ARM64

gersemi-0.29.0-cp314-cp314t-win_amd64.whl (2.4 MB view details)

Uploaded CPython 3.14tWindows x86-64

gersemi-0.29.0-cp314-cp314t-manylinux_2_28_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ x86-64

gersemi-0.29.0-cp314-cp314t-manylinux_2_28_aarch64.whl (2.8 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

gersemi-0.29.0-cp314-cp314t-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

gersemi-0.29.0-cp314-cp314t-macosx_10_15_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.14tmacOS 10.15+ x86-64

gersemi-0.29.0-cp314-cp314-win_arm64.whl (2.2 MB view details)

Uploaded CPython 3.14Windows ARM64

gersemi-0.29.0-cp314-cp314-win_amd64.whl (2.4 MB view details)

Uploaded CPython 3.14Windows x86-64

gersemi-0.29.0-cp314-cp314-manylinux_2_28_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

gersemi-0.29.0-cp314-cp314-manylinux_2_28_aarch64.whl (2.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

gersemi-0.29.0-cp314-cp314-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

gersemi-0.29.0-cp314-cp314-macosx_10_15_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

gersemi-0.29.0-cp313-cp313-win_arm64.whl (2.1 MB view details)

Uploaded CPython 3.13Windows ARM64

gersemi-0.29.0-cp313-cp313-win_amd64.whl (2.4 MB view details)

Uploaded CPython 3.13Windows x86-64

gersemi-0.29.0-cp313-cp313-manylinux_2_28_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

gersemi-0.29.0-cp313-cp313-manylinux_2_28_aarch64.whl (2.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

gersemi-0.29.0-cp313-cp313-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

gersemi-0.29.0-cp313-cp313-macosx_10_13_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

gersemi-0.29.0-cp312-cp312-win_arm64.whl (2.1 MB view details)

Uploaded CPython 3.12Windows ARM64

gersemi-0.29.0-cp312-cp312-win_amd64.whl (2.4 MB view details)

Uploaded CPython 3.12Windows x86-64

gersemi-0.29.0-cp312-cp312-manylinux_2_28_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

gersemi-0.29.0-cp312-cp312-manylinux_2_28_aarch64.whl (2.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

gersemi-0.29.0-cp312-cp312-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

gersemi-0.29.0-cp312-cp312-macosx_10_13_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

gersemi-0.29.0-cp311-cp311-win_arm64.whl (2.2 MB view details)

Uploaded CPython 3.11Windows ARM64

gersemi-0.29.0-cp311-cp311-win_amd64.whl (2.4 MB view details)

Uploaded CPython 3.11Windows x86-64

gersemi-0.29.0-cp311-cp311-manylinux_2_28_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

gersemi-0.29.0-cp311-cp311-manylinux_2_28_aarch64.whl (2.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

gersemi-0.29.0-cp311-cp311-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

gersemi-0.29.0-cp311-cp311-macosx_10_12_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

gersemi-0.29.0-cp310-cp310-win_arm64.whl (2.2 MB view details)

Uploaded CPython 3.10Windows ARM64

gersemi-0.29.0-cp310-cp310-win_amd64.whl (2.4 MB view details)

Uploaded CPython 3.10Windows x86-64

gersemi-0.29.0-cp310-cp310-manylinux_2_28_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

gersemi-0.29.0-cp310-cp310-manylinux_2_28_aarch64.whl (2.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

gersemi-0.29.0-cp310-cp310-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

gersemi-0.29.0-cp310-cp310-macosx_10_12_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

gersemi-0.29.0-cp39-cp39-win_arm64.whl (2.1 MB view details)

Uploaded CPython 3.9Windows ARM64

gersemi-0.29.0-cp39-cp39-win_amd64.whl (2.4 MB view details)

Uploaded CPython 3.9Windows x86-64

gersemi-0.29.0-cp39-cp39-manylinux_2_28_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

gersemi-0.29.0-cp39-cp39-manylinux_2_28_aarch64.whl (2.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

gersemi-0.29.0-cp39-cp39-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

gersemi-0.29.0-cp39-cp39-macosx_10_12_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

gersemi-0.29.0-cp38-cp38-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.8Windows x86-64

gersemi-0.29.0-cp38-cp38-manylinux_2_28_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ x86-64

gersemi-0.29.0-cp38-cp38-manylinux_2_28_aarch64.whl (2.8 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ ARM64

gersemi-0.29.0-cp38-cp38-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

gersemi-0.29.0-cp38-cp38-macosx_10_12_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.8macOS 10.12+ x86-64

File details

Details for the file gersemi-0.29.0.tar.gz.

File metadata

  • Download URL: gersemi-0.29.0.tar.gz
  • Upload date:
  • Size: 125.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.29.0.tar.gz
Algorithm Hash digest
SHA256 6b6a41bea5fce42033d6330aa2a202b3564b44475050e26c03d65c44e1e3c05d
MD5 af197e0cbe55e002644a893b64f614c3
BLAKE2b-256 ab81312386da943216127cfea5646a5f3e329afa27c6b777b35a41592a76f6bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0.tar.gz:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp314-cp314t-win_arm64.whl.

File metadata

  • Download URL: gersemi-0.29.0-cp314-cp314t-win_arm64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.14t, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.29.0-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 8c85115cc6de894e3a6c31a3d7fd4131a3a5f67314e9ef5ae6cb9eae4b8f5db9
MD5 58c18c18436c6faaf2973a60db77a9ca
BLAKE2b-256 a5fce2c137b2e69d26a9b1a75cda3b8481cb69492399e613d62fb377bc0d30b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp314-cp314t-win_arm64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: gersemi-0.29.0-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.29.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 a503ed6d7afef12ef56f25050e3e696023c845f9848bb597ef83734b1d52093c
MD5 625f4cdba580965743c2910394b5b65e
BLAKE2b-256 ef779941d4af072574ab24cae23dbd2ccc05eb45364a8ea8e075646d0932a44a

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp314-cp314t-win_amd64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp314-cp314t-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp314-cp314t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f4ed7e911c0307b3cb93da71e93e73e4b21e5aad781aacc5376292e952e6f6c7
MD5 178c06f388819ee364815efb7f422a90
BLAKE2b-256 b2738cd1e91c93805e37fd3b9ff748424d93924c76931323677036d2b5dbb77e

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp314-cp314t-manylinux_2_28_x86_64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp314-cp314t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6d836d5c85cf253e665ba2bc5b94e25573b14edcb94d90ca1a38699f19d35e50
MD5 a062bb00c172b8078ee6490244260fe5
BLAKE2b-256 d12bb0afbe7a5cbbdd0282f3fa33303ada6e3e40c4be76d4ef793bab1c478b9a

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp314-cp314t-manylinux_2_28_aarch64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7473d842c87c8f2deb9930681ebb3868a51856e1b7d5112063fda18516b3cd79
MD5 e9fad001e3973d9fe51fe65c8514d26b
BLAKE2b-256 72c83f38dc202283d5ad2b7f57fc9d15706e6d78a75d4387186ab005cc4b96d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp314-cp314t-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 eade4f97b18579bff8e4fd088cb77cc036bd4771cb49a1c7017d689359c588e4
MD5 707defc8f3a2ac66780c95cf6fd5cee5
BLAKE2b-256 600e95dbd04db897af5c527bbd7263db4239de8189913bfcfd2cf519de17a089

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp314-cp314t-macosx_10_15_x86_64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp314-cp314-win_arm64.whl.

File metadata

  • Download URL: gersemi-0.29.0-cp314-cp314-win_arm64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.14, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.29.0-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 0fe5c02558976b7cbb45fb8643a27377e452ec5ed53037255e6ac5a29d511e12
MD5 44548eea41e9675fc46af30d77237f54
BLAKE2b-256 f64e6e0b5843fc0c2ad1e348dd136f1a2271cb7a031269639b4a79c621cdcb4f

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp314-cp314-win_arm64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: gersemi-0.29.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.29.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 37c50d6128d100d7a368204b48de04059eb1477b663670f2eab148e5038f0fbd
MD5 a8fede14c3d688119b30802060d4fbb8
BLAKE2b-256 423e98a6c1f0aae5f4ee3dd08f14877e71446a80d12100b49a13ed0a7a09c7b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp314-cp314-win_amd64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ee456a300334216b19c5460713b6346ad36c6b1fa27a49f3eb9346c12e46043f
MD5 ba432e7cda91412e8176bea869e4983a
BLAKE2b-256 9d38dff59f2d9a540fbb518bb5bea8ffce8db55922017ebfce718144fbd210d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp314-cp314-manylinux_2_28_x86_64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e0b260eea74a1982bf8b677d834ed35d1019736e7912bdf52c8d4e6763eda99a
MD5 50c3d15813b55867dbc17a6c3065355d
BLAKE2b-256 2cbd19124d670bd2b471573dd48cfa00931009001f3d51f4cc44185c78a6a51e

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp314-cp314-manylinux_2_28_aarch64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cf2bc764fa99943628f48793e09d4d9cb6c8f92cf815a6a0bcbb385dd470a49e
MD5 32a59bdd085fd11270fdc493f00b255e
BLAKE2b-256 7d5bca1555629d5720c1d50eba813160ce715b8ab03d3e10725d0811e2f411f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 eb824d1bdedc1fec6c5b58eac6bcfce2c13c41522ae93db972c9ead33fb79ebc
MD5 027f997733ab8760db6436ae84991232
BLAKE2b-256 eb267f2b38fca17b726cbf8366d42080a2c20b9b8aeab585817aacf0edfaf740

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp314-cp314-macosx_10_15_x86_64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp313-cp313-win_arm64.whl.

File metadata

  • Download URL: gersemi-0.29.0-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.13, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.29.0-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 1a8f823a60f1b8507af8161c366f92798024649c5dbb15a6792f07c79c56429f
MD5 11aac4c551305a93c521c97c531b4b1a
BLAKE2b-256 6ca1793f42037e0ccb7c503dc6b352389fc8842004ef752e01c2e3afac053244

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp313-cp313-win_arm64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: gersemi-0.29.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.29.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 65ce9c3bda869be7856904c1901c789d9680ad6b95448912f07904ea460ab27e
MD5 39df36d6330b03d88ed62d51c38f0439
BLAKE2b-256 97f65611559c783dca73365f91074d4625c3cfe924e4e3be48814bfdf5b5de84

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp313-cp313-win_amd64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1d03acc2af14c149f23d4dbe092bdd957e1accd03f5f1a497499c7241ff16a5d
MD5 7b016bc4236854e4e92225b883d7144d
BLAKE2b-256 5bd5fd383a0f438fa517d103a1c357895e878d8823dca06fc498a3d94d749181

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6355d6d6675bda3808a3527541c85285b3f92edd7cff5abf9f9e2c5a4ca1c0bf
MD5 51352807a56d07a0c1d26c48e39cbdf1
BLAKE2b-256 74df54fb7bc8932f9987668bdd3a6afc74ebea5ae206490a6b90f0cb1b71bfdf

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp313-cp313-manylinux_2_28_aarch64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dbf459caf08629570ef6a618172c9cf7aa76950a6ce12c47b1f59937a9a66c30
MD5 9b39166462918710ee0e93204172cedd
BLAKE2b-256 fe63e0949b87b5afcf321e87af59c50f08e9f77af48526f576a4a1edc3424c39

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 642de8d3f8291274637b4d9a08488c0c2bc602644010a58fae082e9ec82c7247
MD5 ff8b72b126f0b921074d06e3ec6e6625
BLAKE2b-256 5219d64202de6cad92ce0cb4bb6da3c1f2ab6e398fb739bc6daf46e6cce2f8c0

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp312-cp312-win_arm64.whl.

File metadata

  • Download URL: gersemi-0.29.0-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.12, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.29.0-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 d932b878845931c6a27b56f1bfb1412fc1d8e2b582ed43b8bb8e617a0a5ef9c2
MD5 2d7a90afeb5d441773f929897bf6a2fc
BLAKE2b-256 f7875d20b83815e6b1ba455038daee6a437dc8e177355540a98abc38f56f93c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp312-cp312-win_arm64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: gersemi-0.29.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.29.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4d9f671a0a57e94cdaf54ced0c9d013ec775f18f36fecf7c985d7be488863bdc
MD5 46449ef318665a05e3073c3b206757f2
BLAKE2b-256 c0f1b14ddc9aaecd0c2d7c6c9b86005e3e785ad436fedbc9c59ab7ac1d8d27f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp312-cp312-win_amd64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dad2f4b527fef26588e9ee18854f408ef238238a233c6918d26cdc3fe0d63cc1
MD5 93cd7dfb41c9cc4dcedb2c22da2e6d8d
BLAKE2b-256 04da0831e15d0c6175f01f8eb7a85721fefaae1194947b00fefc0d0ea7e783d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c58bff65f6f140f76e7cbcbd95a2736c37b1552a937e2cbcb883907faa2e8bf2
MD5 66ab7b45f9d40b02fee89d0c8254b680
BLAKE2b-256 ee41549da207b75410df1a686ac015416db9b4736997c2e0c4e93f182792001a

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp312-cp312-manylinux_2_28_aarch64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2992439bfe27d7880a24ec05418c5e61c99dcb4f7468134db7aa2a51fab51f49
MD5 eec72f85679a41d60489cca5bfe434e7
BLAKE2b-256 d9d884c759e8a397912b487264529d6b38656e1194b6516b5ab2e60ff2701504

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 a05657fbd23703071eade32dba4d5e1abb89ee38a4ad9a04f9839d9716c3bfcd
MD5 ef03b6645bd31908c221d66bdc66338a
BLAKE2b-256 dd4367d2bfde51a2f94f587da4c3f24ecf32ea34e195dfc235cb76d5c962c7f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp311-cp311-win_arm64.whl.

File metadata

  • Download URL: gersemi-0.29.0-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.11, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.29.0-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 ad210f5242b0c4757bf93fddffee811b8f6590810854b9867638b7ad5b7fa155
MD5 f114376283930396ec4d94c981de11ac
BLAKE2b-256 e714144e428bec0275a27b2cb47de79855c4e001ce8e09a061ac3843da3d4ae8

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp311-cp311-win_arm64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: gersemi-0.29.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.29.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 dc7833c80b6cd7cfdca4008325a688030eed798cefa09c35b586cb4fd79c24af
MD5 bfee50ec1581222786fbae2df90dd507
BLAKE2b-256 b12df8abfd88e58f6ea89682847a5c15d57117b48a261dc98fd80f90aa0bc7d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp311-cp311-win_amd64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8ce4fa81eaf82590ba6ed290d397dbe277a3c829d4a2ce320639c8db375635ea
MD5 c4ae3eff4fb37a186f9ccdb03127a4ce
BLAKE2b-256 f72f6fb6858f881e247fbdb0204467fc1a248c884871e50eeaf4dd4aeefaafd6

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7197a7270edaac0627f6a92dbda8aefab5a28bddb8dbfd4c3f41e1f361b982ec
MD5 9e6d5cb467355be31fd24edf1c78dcd9
BLAKE2b-256 e827b4b5425edbf67e8548c8704e53140b8ae775b78674f401f086b957a42072

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp311-cp311-manylinux_2_28_aarch64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f054957f618b281d52976279b95f0f1c8e2ef19c389f7fb20a6d871753e81e0c
MD5 99b1130c3824c6807d20cc44102e6170
BLAKE2b-256 7407e09e4ddfc37fca42b6e12ef6c5ad74cc587e9671ad5acf5dfe1aafbf3217

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 636f335c5865e7ce1ff63c7fb05e6ab9802c229482b37d6f94abcad87146c8ab
MD5 6ca8032a93a1d8db47f24255f60234ff
BLAKE2b-256 4e07966d13f6dcaac8b8d6978e80c29a5290304b44d18154e65682d8a850c862

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp310-cp310-win_arm64.whl.

File metadata

  • Download URL: gersemi-0.29.0-cp310-cp310-win_arm64.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.10, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.29.0-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 a1a96834f036c468ba10089f868752bda6ac25130ebb1848d7b41120642d0595
MD5 fc9afc0d55814c9f13b2b93c810714ee
BLAKE2b-256 1d1bfabd949aba48cf82b5b66a5a0a3d250f204f640ef798c1f415a882c22a68

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp310-cp310-win_arm64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: gersemi-0.29.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.29.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 21f754bf0e626537c1df71cd8b5d8b11f735e91c3a28d157a2075a2921be4c90
MD5 08edf8280a0262c62280061bdde1ce2d
BLAKE2b-256 4588868124c3224ebf92cab7bf3ec8e4a92a8a7d3cb6aae8e80a42a13d3ff8c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp310-cp310-win_amd64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 16c1581d0b737d153c875dc98cae80f0dfca0d20f6f1cea0ca890e9780a21db7
MD5 a66d4c345d657ab4167cb3a3b71b5d81
BLAKE2b-256 ef86956202edaf6d3e892265d74910bed54b0b0a2e24d5177af0b12239431005

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp310-cp310-manylinux_2_28_x86_64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 937156d367db0415622d08f8712531dfb3cde527d4ba35f195781b132afbd6df
MD5 448ca830c37def0e5c7e469d6ebd27af
BLAKE2b-256 dc095f4588736dc5141d61c03e9dacefb697d9f0971ffd152ed210cf0c7dd6b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp310-cp310-manylinux_2_28_aarch64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 80a42e8ae551c561e65a637964b4688ce7967a3154d6e87d31549497f42d0ecd
MD5 0f748052b5e0012deced2b82fc2cd00d
BLAKE2b-256 55551ba4104212f65635ab7a03288ccef69ba9cbb03eb73572fd38bb781c3ad3

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0fac5d90537fa05890432399d95e343ff6b3ca7b188d9311433508129d255cc5
MD5 4060d9dfdfb73c538c6d7650817898cc
BLAKE2b-256 2d61ac7766dc38361608706fc4e3a263c932eec8ee5f4622f8a6e86942a5ab9f

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp310-cp310-macosx_10_12_x86_64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp39-cp39-win_arm64.whl.

File metadata

  • Download URL: gersemi-0.29.0-cp39-cp39-win_arm64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.9, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.29.0-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 ba09f1196932ada4e44c9798d60a197d4ab8c344b2495780ca8e26b6bfff5eff
MD5 b0c80a896d5592db3b4f8fe641430be8
BLAKE2b-256 a7edd89e7d799b7dc25f3a5179d33ce6b9ff2f7a56f75c8ddccd7a4b7c79dde1

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp39-cp39-win_arm64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: gersemi-0.29.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.29.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 ed95ee87c7c1e77daa73926b7e9a75dd95ad5769111473efae940da16f10097f
MD5 3a3f62ca058229dbd9cbe2182ce2fb44
BLAKE2b-256 a6da14d292e2fb50d311939ec6e4c59f7a167245f31e88f3376a12b7c728a0da

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp39-cp39-win_amd64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c495966a762e3e40f2abbd0c8f6fefd12a56dc6c549d0995aef5866ac65b5cd4
MD5 76d45a71037f91365ed7e9280ed67fc4
BLAKE2b-256 9f6a0e5605fdddf033500f6d83db83c91d5da431cbbbe29a77017235b7506193

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp39-cp39-manylinux_2_28_x86_64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp39-cp39-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 78e58dba67de35a3306557d7c623e6dfbdf02001fe37e6213712cf425f38ae12
MD5 443d961f8d1b61197804bb2ba16871ce
BLAKE2b-256 65f0a1413506a9bfa94e942feaea1c11a28202a333e51f7ac410040ed3cba3fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp39-cp39-manylinux_2_28_aarch64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b55fbac56c4370c9975e8518bdb9b861b2d3694051707a5c8a153d809840b81c
MD5 bf8977191d43a8be7413e0fee2a03e75
BLAKE2b-256 b449b46204728f5dcf84916c08499c751574047f7078e6478a1150be266cbacb

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 cb04dca7a0b3b66df7d5d43559ff24119c0f1278078b27f532140b38f1617f6e
MD5 cc8ef1a487e66b65f22fe9e54d0c35b6
BLAKE2b-256 d33f8d8248bb6ddc3892375ffd81c4a87222c5e9f06f8db9c8ec5b0e651c3828

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp39-cp39-macosx_10_12_x86_64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: gersemi-0.29.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 2.3 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.29.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 38a373d49c842d8a8c626f34d77d063750574082ee6ad33d2291be50984dead2
MD5 9f18e856a0cfff0dc7896b8abffd7617
BLAKE2b-256 7e79f08e57ff01739ccf8da1218c0fdc069bfa92579d684fdc72d1dd588ff9b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp38-cp38-win_amd64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp38-cp38-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 681b32b8cd26c6e25bb294750525769ad41d6512409fa53a09cdea3281d9eeac
MD5 6b4b316ac5c9a130f78537c8ee347853
BLAKE2b-256 ac6ad709f65cba858cb45c5ab24c28ae0a6e79b8d418db7dd74a28febea4541e

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp38-cp38-manylinux_2_28_x86_64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp38-cp38-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 593ee8926109acaad009b398666439f20ab77c69b05a9ea1e5025f33523081a7
MD5 29c9bc8e5de3a1028fa3f10c21021a2b
BLAKE2b-256 0870c0f7e361e5e538048ee59d90dd857cfd2b1dae4c14a3ce1a55ef06f80946

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp38-cp38-manylinux_2_28_aarch64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 10cfa910f10329fd69d01f104dc738e1f6355113324835729cdf673cc0134916
MD5 7a709bf489f65be74180fa2784b720d1
BLAKE2b-256 bbeaf8e18f643b5c95cd94315bcaaa6f559d04353b8ea1d167c46a835b271b29

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp38-cp38-macosx_11_0_arm64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gersemi-0.29.0-cp38-cp38-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.29.0-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 624b30b1b29b7461df9ba32ceffa131d25d617d9349e43db90ce6d59e037a7cb
MD5 2d5d8a4d317205f2aae71e155b383f03
BLAKE2b-256 c1c25db12b7996b70d1ed067ce2c52eede176e1e4ee21b7d8b4666e58932b655

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.29.0-cp38-cp38-macosx_10_12_x86_64.whl:

Publisher: deploy.yml on BlankSpruce/gersemi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.29.0 This release

48 files

0.28.1

48 files

0.28.0

48 files

0.27.7

48 files

0.27.6

48 files

0.27.5

48 files

0.27.4

48 files

0.27.3

48 files

0.27.2

25 files

0.27.1

25 files

0.27.0

25 files

0.26.1

2 files

0.26.0

2 files

0.25.4

2 files

0.25.3

2 files

0.25.2

2 files

0.25.1

2 files

0.25.0

2 files

0.24.0

2 files

0.23.2

2 files

0.23.1

2 files

0.23.0

2 files

0.22.3

2 files

0.22.2

2 files

0.22.1

2 files

0.22.0

2 files

0.21.0

2 files

0.20.1

2 files

0.20.0

2 files

0.19.3

2 files

0.19.2

2 files

0.19.1

2 files

0.19.0

2 files

0.18.2

2 files

0.18.1

2 files

0.18.0

2 files

0.17.1

2 files

0.17.0

2 files

0.16.2

2 files

0.16.1

2 files

0.16.0

2 files

0.15.1

2 files

0.15.0

2 files

0.14.0

2 files

0.13.6

2 files

0.13.5

2 files

0.13.4

2 files

0.13.3

2 files

0.13.2

2 files

0.13.1

2 files

0.13.0

2 files

0.12.1

2 files

0.12.0

2 files

0.11.1

2 files

0.11.0

2 files

0.10.0

2 files

0.9.4

2 files

0.9.3

2 files

0.9.2

2 files

0.9.1

2 files

0.9.0

2 files

0.8.3

2 files

0.8.2

2 files

0.8.1

2 files

0.8.0

2 files

0.7.5

2 files

0.7.4

2 files

0.7.3

2 files

0.7.2

2 files

0.7.1

2 files

0.7.0

2 files

0.6.1

2 files

0.6.0

1 file

0.5.0

1 file

0.4.0

1 file

0.3.1

1 file

0.3.0

1 file

0.2.2

1 file

0.2.1

1 file

0.2.0

1 file

0.1.2

1 file

0.1.1

1 file

0.1.0

2 files

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