Skip to main content

A formatter to make your CMake code the real treasure

Project description

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]
               [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]

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.28.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.28.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 --.

Project details


Release history Release notifications | RSS feed

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.28.0.tar.gz (123.7 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.28.0-cp314-cp314t-win_arm64.whl (2.2 MB view details)

Uploaded CPython 3.14tWindows ARM64

gersemi-0.28.0-cp314-cp314t-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.14tWindows x86-64

gersemi-0.28.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.28.0-cp314-cp314t-manylinux_2_28_aarch64.whl (2.8 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.14tmacOS 11.0+ ARM64

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

Uploaded CPython 3.14tmacOS 10.15+ x86-64

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

Uploaded CPython 3.14Windows ARM64

gersemi-0.28.0-cp314-cp314-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.14Windows x86-64

gersemi-0.28.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.28.0-cp314-cp314-manylinux_2_28_aarch64.whl (2.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.14macOS 10.15+ x86-64

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

Uploaded CPython 3.13Windows ARM64

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

Uploaded CPython 3.13Windows x86-64

gersemi-0.28.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.28.0-cp313-cp313-manylinux_2_28_aarch64.whl (2.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.13macOS 10.13+ x86-64

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

Uploaded CPython 3.12Windows ARM64

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

Uploaded CPython 3.12Windows x86-64

gersemi-0.28.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.28.0-cp312-cp312-manylinux_2_28_aarch64.whl (2.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.13+ x86-64

gersemi-0.28.0-cp311-cp311-win_arm64.whl (2.1 MB view details)

Uploaded CPython 3.11Windows ARM64

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

Uploaded CPython 3.11Windows x86-64

gersemi-0.28.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.28.0-cp311-cp311-manylinux_2_28_aarch64.whl (2.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

gersemi-0.28.0-cp311-cp311-macosx_10_12_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

gersemi-0.28.0-cp310-cp310-win_arm64.whl (2.1 MB view details)

Uploaded CPython 3.10Windows ARM64

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

Uploaded CPython 3.10Windows x86-64

gersemi-0.28.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.28.0-cp310-cp310-manylinux_2_28_aarch64.whl (2.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.10macOS 11.0+ ARM64

gersemi-0.28.0-cp310-cp310-macosx_10_12_x86_64.whl (2.7 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

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

Uploaded CPython 3.9Windows ARM64

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

Uploaded CPython 3.9Windows x86-64

gersemi-0.28.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.28.0-cp39-cp39-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.9macOS 11.0+ ARM64

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

Uploaded CPython 3.9macOS 10.12+ x86-64

gersemi-0.28.0-cp38-cp38-win_amd64.whl (2.4 MB view details)

Uploaded CPython 3.8Windows x86-64

gersemi-0.28.0-cp38-cp38-manylinux_2_28_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.8manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.8macOS 11.0+ ARM64

gersemi-0.28.0-cp38-cp38-macosx_10_12_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.8macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for gersemi-0.28.0.tar.gz
Algorithm Hash digest
SHA256 984b488fd7b4c6a77fb41e4291ca63b08fc2dfe46a722b6309e23b4fee5df7e0
MD5 ac2c26ce500d3df88aea68fe549a9108
BLAKE2b-256 963dbabcff7d305561ebe96124298dbb7e3acaaa21f04a6490a8f0987130233e

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp314-cp314t-win_arm64.whl.

File metadata

  • Download URL: gersemi-0.28.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/6.1.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.28.0-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 f8c301efc2cb4a758031ebb267161b606de56ed727701b7691df40a1ce7d4f81
MD5 65fa334208816003febb078d5425064e
BLAKE2b-256 d2fbec755c6f08c97deffebdc3c4bc4792aff01990448d2c3ff392ab2aa4de19

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp314-cp314t-win_amd64.whl.

File metadata

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

File hashes

Hashes for gersemi-0.28.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 5996957810c244db9c1e3252a22dfe1068ed5930c8867e3f71961a4ec46f7931
MD5 3834546e911086cdb68478024e5db3bc
BLAKE2b-256 8b5cf1501fe4977e00acc08ced4b6c845a7357d9a53fd3b4123ce9d9b33e68c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp314-cp314t-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp314-cp314t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0d24ed27c1761ef99e1e73c4f43e66bf085a98efc726ed42936171031eb6b518
MD5 793cd279493b187600c51e0c20ef4ae4
BLAKE2b-256 50a1018c0f16f0748eb859f85fa543aa5ba2533dddb749018740e58d54749e3d

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp314-cp314t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 70291eae99e79b543f70f37921095018a9ab5c69f14168f59419ffc669147810
MD5 fd274f690629c1b0c57ab134f59f0caa
BLAKE2b-256 d78e7f09fab3fb4939defa587362f6d8b12db46c94009dd9d4453f40bf2afc0f

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c9fc6ef55bd9c2e841a5fbc1acc3c7b254bee0d6558b7e5e50346c6b6f94d59a
MD5 3947e302d35d06380db1fbbccb843213
BLAKE2b-256 5d486c643bb218b32f20372d396fc4124def60db48b903beaab12dde493c082d

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp314-cp314t-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 b8fb2f6870545ae63e4ddf13ef0545d2c46c43771c2fc4912fc9604eb5c4ae0d
MD5 c2cbdf576fa95b1bae796407ae54cf5f
BLAKE2b-256 1f091d94374e3aeb7133a711a410f5c635da2cbea1f482466248f35f9df66228

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp314-cp314-win_arm64.whl.

File metadata

  • Download URL: gersemi-0.28.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/6.1.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.28.0-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 315c3179b9c4b92698fbd132e53df4ea1b81c99fd2cd8eafbe858368d466798e
MD5 adbb98d4ec235f03998a72136b4212a9
BLAKE2b-256 28f1992b26095a1add422b1a55eca1e09e1a9e17f69accc05b67ba0b4dc44368

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp314-cp314-win_amd64.whl.

File metadata

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

File hashes

Hashes for gersemi-0.28.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 7fbb2f14caaaf2b30aa870e08d49838e555d05ae4040327675ee44a842b0503a
MD5 f6bf94a006c99e0a8e05c53d4339cbb3
BLAKE2b-256 630700df8aed7b41881e47002761af58c60daad27c930ae3782e22637da881bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 33f5868f68feeaaf9b7f8a0a097a847494135ac7f1765b8e7b400d442a4a5748
MD5 a07adfe3cc24e620a6433d48a2eb7c0b
BLAKE2b-256 6f6e93b09b0e6da931841a779ab926c913e524901eba8c6ee8920550816239c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ff8f9f977ca9e15a8ec944d1ac631dc5a588073865e313a2d1e90920fab9a80d
MD5 69a83014b87a2802ae22fcb3fab9d388
BLAKE2b-256 1149f209645dba902f8197531cec5d76551d37a65888b6773fd5a36aad7378bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e804f3e045cc978b46b7345eacaf279b7e2ec713220e1ad3c5804f58ed29a0c9
MD5 139b546ecc9d769d30ad07ace198b9e0
BLAKE2b-256 524aa1dbc3aadbc0bed74f7d7834b819fc912a8b43dbfa74625a2a7d5395f2ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 b5ac19badc78f0ca6642b2c97eb8630014af3a9ca35696b40c44495fe09cf9fb
MD5 39a656d7406ac270468d713abedfe4b1
BLAKE2b-256 dc24cd0a6b9d96c5bbb796bc17737ef9b827a15e9e498fa6babc2e9aee350e45

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp313-cp313-win_arm64.whl.

File metadata

  • Download URL: gersemi-0.28.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/6.1.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.28.0-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 325c20350af648b5e5f5b710980212f92b7ff5585356370e6d66f1b74dc08e42
MD5 c90335b697fcf3aa89f02b13de674eee
BLAKE2b-256 0d2bf013951b0489c7b10893a8de4f70bd98ee6a3c1af2adafeecb2ff6521495

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: gersemi-0.28.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/6.1.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.28.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 217e6082faa084e4348fea3eb11e005007a3f6f4f314fa3810379c418ded06a6
MD5 1ae858ef49e8820cb71e3763f6215afa
BLAKE2b-256 ddb1c592689d39fbddef63e4fb218b702447d8dc23d3cf37892f710cea871ec4

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 61b7d977680ff649bebeee29dfd3913b3dfa6a748c5a4e6b8bc70a4375a7f430
MD5 f3ed36f7b1392ca777bea183effd6e12
BLAKE2b-256 20ea5abe742c9d5f60aeb249f02c3a160b8bb72476e695ecb0bbb9230df5e3c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 27f1f1b22ae85413b72ab8262ed19f0b471820f8309568bb076ea62904d08840
MD5 012ef0a22e6634256468bbab3e6304d0
BLAKE2b-256 344ab1b1dc48bc9df3174c81ecada39363cd032b99632af0569356fcd78111b7

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f94e96aaccea72b37ac89a7e5981d658fbd1b3fc5e30d6f71f4122dee6ece133
MD5 632924631fcb67c0514bb30d5dc8591d
BLAKE2b-256 0f99b271e583b7a6f14ce4d1d05ad306780bdd5d915bbc7cd4b4691b87c1baa9

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 732273e5f4c5c113c91b580ac83d623bae9c0eb3966417d9f227ce8d5bc7fe8c
MD5 649f26ee37b15128841a203c04c0267a
BLAKE2b-256 91c3411990565179e6697b317063479c35721ec9f7d8e9c87ae498561629ed54

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp312-cp312-win_arm64.whl.

File metadata

  • Download URL: gersemi-0.28.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/6.1.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.28.0-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 374ca1662f7a218dd7e2405442c88a23a331a22785e0b33d77af1b58b1eda685
MD5 b0ca8ba825d8a686526c11157bf02df0
BLAKE2b-256 c44fcac8f4caa6cfb1fad35ad876fa654dfca97e383afe4c9bb03469003d75dc

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: gersemi-0.28.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/6.1.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.28.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6574621b95fd915229bb8117a387a30b3b1d41613cd167332c834643a3676c79
MD5 567bef0c83c0b9b670ab53a8c6a3c01c
BLAKE2b-256 83d664e1021b45206170f5f02c811a4accb85a9d7a72a8641788fa554eb991f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 aeddee34b59aab7ed381a7d92e4437761eafd3a9eae1135eb975e2d45b993451
MD5 5eecb8d52cb6ba3712d38d9a14af92fb
BLAKE2b-256 6986021b786118298a129919b2afb290acbdbca4ab58465f79bd307dd8d3dcaa

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9d781dc72758082326fe1767eda1e3b4b206f3c02b271096b19d4d054d4956e8
MD5 e255a3fdac79e686dbad9cb57a467729
BLAKE2b-256 2d0b39f8d77421238408b1e78d6070e2623170ba89dbad0bf986e56c43a0c303

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4b76113212ed3b97ee28cdd74fcdff22266344af3b39e711918a79e98fdf7332
MD5 1d871de5b49760e9864cdea7d630d95c
BLAKE2b-256 5327836237ef1c2ab3466f6510141b89b0cf1844cb551b54e512865c4ff3358f

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 c21705a8610e5656946b89cb7fed04b31613e54d84a0ff5ca1ec77a945769718
MD5 5cefebe8564719694ad1b5e0ca559f7f
BLAKE2b-256 150a24e77a12b38e5ce43adda3f507be73fb854fd0bdfb9901c00b3cd92ed21e

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp311-cp311-win_arm64.whl.

File metadata

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

File hashes

Hashes for gersemi-0.28.0-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 436b40c710539927233e6be421ebaeb9f43fdf89ba84244bbe02387c9749a754
MD5 c3beda7c9113c7d3e6386cc87bb9f8bc
BLAKE2b-256 17e2e784e98283dcf8073169055b1955a41263f895f32be2f23ba98355ac0349

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: gersemi-0.28.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/6.1.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.28.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 81531e17f625ce7a9f71ee826d93f9f0aef062e6719ca9484d28246020772df1
MD5 8d57cf606ac68a57c4044c7d1ad2283a
BLAKE2b-256 f851f84d5d25ceef0c0ea38e2dd7132a65ee2eec0a326218a305f03c755ab23a

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 00847db5cca6a404b16df3d6fab555742065cd80433fbde0a06e61b4d383b667
MD5 0779040b22ddeaab702dd4767d00200c
BLAKE2b-256 e1fcd22fdd999a75f6db5da26d0778884f7a9d1283c9e2cfcb7c50ab46dd45e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 fc467a0ae7cc95b8995622d29c90b7eb76e2433f24dfeceb53882b32662215f9
MD5 f83c3121ca6e54f49c89c8d0f7d00e81
BLAKE2b-256 7202f9ec4f50f6b392007d9ee21ab935a58ed4b4fbc7d3d51065057181f8ba1d

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cbc073acabccbbf76ad5bf45be4e583f0a4fb43d1648b6f8f18199ea2e631285
MD5 bc54ec8b7cfd01e108e56998921d723c
BLAKE2b-256 832120ee40447c5c24e8fe9f96fbccc4ed10d7e7a20b6a6ab99bc120ae5dc35c

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4ec6dc721fed52fbbe7b3f4a73fc57efe7798ae120a565f94b0a39fa3b7fbed4
MD5 ff6b42270784c1c39c4b4062ad71cf06
BLAKE2b-256 4d7e33a44ae86f977fbe525241cf5a1820b72186eeb692a9ecd7de4148f02e5f

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp310-cp310-win_arm64.whl.

File metadata

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

File hashes

Hashes for gersemi-0.28.0-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 cddcead96694d068b71294af0c006dd1b8d8cbaed9b7028eef915c8471e9e6d9
MD5 a010fa46ccb9094623c9f7d954bd26c8
BLAKE2b-256 fe325a61134dfc18179d4649e0b692b9c95595fd1982763b36174a0da41b8408

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: gersemi-0.28.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/6.1.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.28.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ce037a6f0d7d716e3069fbe5b8d1c62871d4a79e4fc6d68153a5b3f10e6aa79f
MD5 0c8c74e6c4fbac9b5fac48fd612f8ada
BLAKE2b-256 8faa16b2a7f7c36c0ea8fc76ab3a3890d1b7046631c1efba70a35a2af1a62f6b

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2c2609fc2cf3c5c0e018b5291c42562476edd7c7774345430545d699aa84c6b8
MD5 98c5193cb7c7e519d747f581ab56afe2
BLAKE2b-256 45b7bf09a47ec52bc93de2d3a732dc907fcecd1bd28666ba5af6ab4ba5495339

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 71e312bf53ebdecf32e5f651dc2cae1b0e63f8e288ca859468705e36255df87f
MD5 f8138d221d69056d27bafdea08ef71b5
BLAKE2b-256 89a2a4eb386d9ef2b68faaebc336176be3bb865d488bbdff46d71e03fd0a2e6c

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a116d5f25f5912fd5c5277dfc42af9e11553965448cfec53ed3cd35c0e74120b
MD5 35cedd6635c33173b3e6e7960881aa1b
BLAKE2b-256 7724c7e8c7770eca7745bf68d5f93628b18987f7d1fec874239c0d6edfaaa933

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2403aaac769f35590fbc3beebb15f2c02f878c0c242f126ee06fed9dbd77dd35
MD5 960546ccb03f26e2c702dcdb23d43850
BLAKE2b-256 2bb0602ef2b0b5917f9bd465a98163dacc06c6e57d6f47595ef5622329f84ed0

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp39-cp39-win_arm64.whl.

File metadata

  • Download URL: gersemi-0.28.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/6.1.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.28.0-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 cc427f9c800c11e0ffe42cab45788ee72f1404d6e17d4f061c3540a7a539f2a1
MD5 2a65e8808f0a995364675c66c577e45c
BLAKE2b-256 eafa31d731004dce4a90ad45273b13b7dc463757579e48efc355b35e90dac0dc

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: gersemi-0.28.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/6.1.0 CPython/3.13.14

File hashes

Hashes for gersemi-0.28.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 a52c265f5713829605544b6a5735a6fccc69177d86dbe74c39c7f7813065e728
MD5 eb0906bd4587a50afa228778bd4dbfc2
BLAKE2b-256 29186401cbb3f03910b74b4a50c013521ec58b1ccd8d98ee7f6c695f3292677a

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d2726db350fbaf7012b6987ae6d20ab6da2687076d2d060c211ae7e3dbbaa653
MD5 2e50cd7215bbe069e9d11841b350207b
BLAKE2b-256 5f9cf0d56abcb74ce842c476addeaf84f5908b94d5eae8c0294fb693970eeb1c

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp39-cp39-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 38e4c8fa09cde7568ab454af29c0fa578c6d55eebd948c4a5ea76a744de84895
MD5 402f56a320739433c20834c472ffd4e9
BLAKE2b-256 8c3501c21f98f216d0aa8e7afd4afbca7ff7ccdffb1a9b0a553bf629bccc7a7f

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5108c05ffea25e07ae8085175f169a7bb966a1254a8d5e8d4d67d0403023bd69
MD5 f3b4b8b6991c4b78127ee3d98d845675
BLAKE2b-256 8911f42306deb8518062a24414d48d4480d9237912c9467a394497182bbf8109

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ae15c5a0ddecf9b757a693178ff4f43a68b29d79c27b3f63a3cd798e1abb8dac
MD5 cda70d1ffc8202e645d6827e3a0bbf2f
BLAKE2b-256 93475d606d6aa21a1dbd3b99cb7da1f156ebfe24055463e02fb2d7a91ed76595

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp38-cp38-win_amd64.whl.

File metadata

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

File hashes

Hashes for gersemi-0.28.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 8fdfa3058a22f45507b81efd6b14452db6f67e8831374aac1254c9380fe2326e
MD5 41791f37d2d48a7cec7eafe5990e9de8
BLAKE2b-256 22340ee4315de78c2ab831baca3a49ed8f455cf8db750e84a83b00418a4f2d6a

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp38-cp38-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e97651176c09bce2033a9c0a7ef23afab895e59f89f4234735a3a00ee09e144b
MD5 0a47278259b66268ef8ba06196de0e1d
BLAKE2b-256 dfdccc877f81d6c8c016a01d17d59dfe9e373235c6eda36159efeaafb7f5b9e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp38-cp38-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cfa842fe7dabd5fefbd93e01caa370060e76441cd21de0c77534bb7f4854d355
MD5 d2de574f264da6eee22a2e3167bab693
BLAKE2b-256 1f5273c921c1867de262b805d40eeb4d9a5f05755dac1fb16bf356777de7fbc8

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b4319f6e1d255c9efe005cbcf3f28327283c6796ae9e375a7403e36a8352921c
MD5 7d7ea2bf7108b003e9ec20a60935efb2
BLAKE2b-256 f02394fd5d1a60ae635e69a44615ac93b24b236b3cb07af804841a3091c9d551

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.28.0-cp38-cp38-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for gersemi-0.28.0-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a5ec16305df04f6dd463610b173b096ab1c5edbbf19caed9e8af1d2de90bbd48
MD5 c6a494784108a4d3b09aeebc0bfedc05
BLAKE2b-256 f4a54293a4ab6b769b1388ca991e38d82dbea471d8d59815b536e04156123f6a

See more details on using hashes here.

Provenance

The following attestation bundles were made for gersemi-0.28.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.

Supported by

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