Skip to main content

GitHub release; latest by date GitHub Release Date Test Status Code coverage
PyPI - Version PyPI - Format PyPI - Downloads PyPI - Python Version
GitHub commits since latest release GitHub commit activity GitHub last commit
Number of GitHub open issues Number of GitHub closed issues Number of GitHub open pull requests Number of GitHub closed pull requests
GitHub License Number of GitHub stars GitHub forks

cspyce MODULE OVERVIEW

Version 2.x, originally released March, 2022 (see above for current installable version)

PDS Ring-Moon Systems Node, SETI Institute

cspyce is a Python module that provides an interface to the C-language CSPICE library produced by the Navigation and Ancillary Information Facility (NAIF) of NASA's Planetary Data System (PDS). It implements most functions of CSPICE in a Python-like way, while also supporting numerous enhancements, including support for Python exceptions, array inputs, and aliases.

cspyce may be installed by running pip install cspyce.

Python versions 3.11 thru 3.15 are currently supported, with pre-built wheels available for Linux, MacOS, and Windows. NumPy 1.x and 2.x are supported.

If you are looking for information on running or distributing this code from the GitHub sources, look at the file README-developers.md in this directory.

PYTHONIZATION

cspyce has been designed to replicate the core features of CSPICE for users who wish to translate a program that already exists. Function names in cspyce match their CSPICE names.

However, it is also designed to behave as much as possible like a normal Python module. To that end, it has the following features.

  • The C language requires buffers to be allocated for output and it requires array sizes to be included for both input and output. The cspyce module, instead, eliminates all extraneous inputs, and all output arguments are returned as a list (or as a single object if the function only returns one item).

  • cspyce has been fully integrated with Python's exception handling; programmers can still opt to use CSPICE's error handling mechanism if they wish to.

  • All cspyce functions can handle positional arguments as well as arguments passed by name.

  • All cspyce functions have informative docstrings, so typing help(function) provides useful information.

  • Many cspyce functions take sensible default values if input arguments are omitted.

  • All cspyce functions that take filename arguments now support path-like-arguments. A path-like argument could be a strings, a byte string, or a pathlib.Path. The pathlib.Path class provides an object-oriented class for manipulating file-system paths and performing common operations on files.

ENHANCEMENTS

In addition, the cspyce module takes advantage of features of the Python language to provide numerous options about how the functions perform their work. These options include:

  • Whether to return a CSPICE-style error condition or to raise a Python exception.

  • How to handle CSPICE functions that return a status flag, e.g., "found" or "ok", instead of using the CSPICE toolkit's error handling mechanism.

  • Whether to allow cspyce functions to accept arrays of inputs all at once, rather than looping through inputs in Python.

  • Whether to automate the translation between SPICE body and frame IDs and their associated names.

  • Whether to allow cspyce to support aliases, in which the same body or frame is associated with alternative names or IDs.


EXCEPTION HANDLING

In CSPICE, the user can designate what to do in the event of an error condition using the function erract(). In CSPICE, the available options are "RETURN", "REPORT", "IGNORE", "ABORT", and "DEFAULT". The cspyce version of this function adds new options "EXCEPTION" and "RUNTIME" to the suite of error handling options supported by CSPICE.

  • As usual, the user can select the exception handling mechanism to use by calling the function erract(). In cspyce, the default is "EXCEPTION".

  • When using the "EXCEPTION" option, each CSPICE error condition raises a Python exception rather than setting the failed() flag. The exception contains the text of the CSPICE error, in the form (short message + " -- " + long message). The CSPICE error conditions are mapped to standard Python exception types in a sensible way:

    • KeyError indicates that a SPICE ID or name is unrecognized.
    • ValueError indicates that one of the inputs to a function had an invalid value.
    • TypeError indicates that one of the inputs to a function had an invalid type.
    • IndexError indicates that an integer index is out of range.
    • IOError indicates errors with reading and writing files, including SPICE kernels. IOError can also indicate that needed information was not in one of the furnished kernels.
    • MemoryError indicates that adequate memory could not be allocated, or that the defined size of a memory buffer in C is too small.
    • ZeroDivisionError indicates that a divide-by-zero has occurred.
    • RuntimeError indicates that an action is incompatible with some aspect of the CSPICE module's internal configuration.
  • When using one of CSPICE's intrinsic error handling methods, no exception will be raised, but a call to failed() will reveal whether an error has occurred. A call to reset() is needed to clear the error.

  • Care has been taken to reduce the chances that the "dangerous" options "IGNORE" and "REPORT" will cause a segmentation fault. However, this possibility cannot be entirely ruled out, so caution is advised.

  • Because it would be a highly questionable thing to do, the "ABORT" and "DEFAULT" options are overridden by "EXCEPTION" when the user is running cspyce from an interactive shell. However, they resume their standard effects during non-interactive runs.

  • When using the "RUNTIME" option, each CSPICE error condition raises a Python RuntimeError exception rather than setting the failed() flag. This is similar to the "EXCEPTION" option except the type of exception is always the same.

  • Certain out-of-memory conditions are beyond the control of the CSPICE library. These will always raise a MemoryError exception, regardless of the exception handling method chosen.

HANDLING OF ERROR FLAGS

Many CSPICE functions bypass the library's own error handling mechanism; instead they return a status flag, sometimes called "found" or "ok", or perhaps an empty response to indicate failure. The cspyce module provides alternative options for these functions.

Within cspyce, functions that return error flags have an alternative implementation with a suffix of "_error", which uses the CSPICE/cspyce error handling mechanism detailed above instead.

Note that most _error versions of functions have fewer return values than the associated non-error versions. The user should be certain which version is being used before interpreting the returned value(s).

The cspyce module provides several ways to control which version of the function to use:

  • The function use_flags() takes a function name or list of names and designates the original version of each function as the default. If the input argument is missing, original versions are selected universally.

  • The function use_errors() takes a function name or list of names and designates the _error version of each function as the default. If the input argument is missing, _error versions are selected universally.

To provide a more consistent Python interface, the _error versions of all cspyce functions are selected by default. You can also choose between the "flag" and "error" versions of a function using cspyce function attributes, as discussed below.


VECTORS AND ARRAYS

VECTORIZATION

Nearly every function that takes floating-point input (be it a scalar, 1-D array, or 2-D array) has a vectorized version that allows you to pass a vector of these items in place of a single value. The CSPICE function is called for each of the provided inputs, the results are collected, and the cspyce function returns a vector of results.

  • Vectorized versions have the same name but with _vector appended.

  • In a vectorized function, you can replace any or all floating-point input parameters with an array having one extra leading dimension. Integer, boolean, and string inputs cannot be replaced by arrays.

  • If no inputs have an extra dimension, then the result is the same as calling the original, un-vectorized function.

  • Otherwise, all returned quantities are replaced by arrays having the size of the largest leading axis.

  • Note that it is permissible to pass arrays with different leading axis sizes to the function. The vectorized function cycles through the elements of each array repeatedly if necessary. It may make sense to do this if each leading axis is an integer fraction of the largest axis size. For example, if the first input array has size 100 and the second has size 25, then the returned arrays(s) will have 100 elements and the values of the second will each be used four times. However, caution is advised when using this capability.

  • Some functions are not vectorized. These include:

    • Functions that have no floating-point inputs.
    • Functions that include strings among the returned quantities.
    • Functions that already return arrays where the leading axis could be variable in size.
  • In the two cases (ckgp and ckgpav) where a function can be both vectorized and either raise an error or return a flag, the _vector suffix comes before _error.

ARRAYS

An optional import allows the cspyce module to support multidimensional arrays:

import cspyce
import cspyce.arrays

The latter import creates a new function in which the suffix _array replaces _vector for every vectorized function. Whereas _vector functions support only a single extra dimension, _array functions follow all the standard rules of shape broadcasting as defined in NumPy. For example, if one input has leading dimension (10,4) and another has dimension (4,), then the two shapes will be broadcasted together and returned quantities will be arrays with shape (10,4).

You can choose between the scalar, vector, and array versions of a function by using their explicit names, or by using cspyce function attributes, as discussed below.


ALIASES

Aliases allow the user to associate multiple names or SPICE codes with the same CSPICE body or frame. Aliases can be used for a variety of purposes.

  • You can use names and codes interchangeably as input arguments to any cspyce function.
  • You can use a body name or code in place of a frame name or code, and the primary frame associated with that identified body will be used.
  • Strings that represent integers are equivalent to the integers themselves.

Most importantly, you can allow multiple names or codes to refer to the same CSPICE body or frame. For bodies and frames that have multiple names or codes, calls to a cspyce function will try each option in sequence until it finds one that works. Options are always tried in the order in which they were defined, so higher-priority names and codes are tried first.

Example 1: Jupiter's moon Dia uses code 553, but it previously used code 55076. With 55076 defined as an alias for 553, a cspyce call will return information about Dia under either of its codes.

Example 2: The Earth's rotation is, by default, modeled by frame "IAU_EARTH". However, "ITRF93" is the name of a much more precise description of Earth's rotation. If you define "IAU_EARTH" as an alias for "ITRF93", then the cspyce toolkit will use ITRF93 if it is available, and otherwise IAU_EARTH.

Immediately after a cspyce call involving aliases, you can find out what value or values were actually used by looking at attributes of the function. For example, the first input to the cspyce function spkez is called targ and it identifies the code of a target being observed. After a call to

cspyce.spkez(553, ...)

the value of cspyce.spkez.targ will be the code actually used, in this case either 553 or 55076.

To enable aliases, you must import an additional module

import cspyce
import cspyce.aliases

(Note that cspyce.aliases and cspyce.arrays can both be imported, and in either order. Note also that these are unconventional modules, in that they introduce new functionality into the cspyce namespace rather than creating new namespaces called cspyce.aliases and cspyce.arrays.)

With this import, a new function is defined for every cspyce function that takes a frame or body as input. The new function has the same name as the pre-existing cspyce function, but with _alias inserted immediately after the original cspyce name (and before any other suffix such as _vector or _error).

You can make alias support the default for individual cspyce functions or for the entire cspyce module by calling cspyce.use_aliases(). These versions can subsequently be disabled as the default by calling cspyce.use_noaliases() (see more detailed discussion below).

To define a body alias or frame alias, call

cspyce.define_body_aliases(name_or_code, name_or_code, ...)
cspyce.define_frame_aliases(name_or_code, name_or_code, ...)

where the arguments are an arbitrary list of codes and names.

To determine the aliases associated with a name or code, call

cspyce.get_body_aliases(name_or_code)
cspyce.get_frame_aliases(name_or_code)

where the argument is either a name or a code.

You can also select between the alias-supporting and alias-nonsupporting versions of a function using function attributes as discussed below.


FUNCTION NAMES, VERSIONS AND SELECTION METHODS

A cspyce function can accumulate several suffixes, based on the particular behavior, as so:

basename[_alias][_vector|_array][_error]

Only functions that are truly distinct are defined. For example, if a function does not have a vector option, then no function will exist containing the _vector suffix.

You can use these functions to set defaults:

cspyce.use_flags()
cspyce.use_errors()
cspyce.use_scalars()
cspyce.use_vectors()
cspyce.use_arrays()
cspyce.use_aliases()
cspyce.use_noaliases()

Each function can take one or more arguments referencing specific cspyce functions, in which case the defaults only apply to those functions. If no arguments are specified, the default applies to all functions. For example, to use "flags" as the default for all functions except ckgp, you could use:

cspyce.use_flags()
cspyce.use_errors(cspyce.ckgp)

FUNCTION ATTRIBUTES

Function attributes provide a simpler mechanism for choosing the needed version of a function, without needing to remember the suffix rules. Every cspyce function has these attributes, each of which identifies another (or possibly the same) cspyce function:

Attribute Meaning
func.flag the equivalent function without the _error suffix, if any.
func.error the equivalent function with the _error suffix, if any.
func.scalar the equivalent function without _array or _vector suffixes.
func.vector the equivalent function with the _vector suffix, if any.
func.array the equivalent function with the _array suffix, if any.
func.alias the equivalent function with the _alias suffix, if any.
func.noalias the equivalent function without the _alias suffix, if any.

These attributes are always defined, even if the particular option is not supported by that function. This saves the programmer the effort of remembering, for example, which functions support aliases or which functions support flags.

Thus, if the programmer wishes to be sure they are using the error version of function bodn2c, and wants the vector version if it exists (but it doesn't!), they can call

cspyce.bodn2c.error.vector(args, ...)

RECORD ENHANCEMENTS

SpiceCell

cspyce provides an enhanced version of SpiceCell to make it simpler to use for both CSPICE and in Python.

In the documentation that follows, active elements refer to those elements in the SpiceCell whose index is such that 0 ≤ index < spice_cell.card.

Constructors

To create a SpiceCell:

from cspyce import SpiceCell, SPICE_CELL_INT, SPICE_CELL_DOUBLE
spice_cell = SpiceCell(typeno=SPICE_CELL_INT, size=20)
spice_cell = SpiceCell(typeno=SPICE_CELL_DOUBLE, size=10)

With these constructors, spice_cell.card will be set to 0 and there will initially be no active elements.

If you already have data that you want to convert to a spice cell, you can use a simpler interface:

spice_cell = SpiceCell([1, 2, 3, 4, 5])
spice_cell = SpiceCell(np.arange(1.0, 10.0))
spice_cell = SpiceCell(np.arange(1.0, 10.0), size=40)  # set size explicitly

If you use these constructions, Python will create a SpiceCell whose size is a little bigger than the length of the given data. The passed first argument will be the active elements.

Any CSPICE function that expects a SpiceCell as an input can also be passed an array, a tuple, or anything that can reasonably be converted into an appropriately typed SpiceCell:

Any CSPICE function that returns a SpiceCell as a result takes an optional final argument.

  • If this argument is omitted, a SpiceCell with a function-specific default capacity will be created, and the output will be placed into it.
  • If this argument is a SpiceCell, it will be used as the output argument.
  • If this argument is an integer, a SpiceCell with that capacity will be created and used as the output.

In all cases, the SpiceCell output will also be a return value.

>>> import cspyce
>>> cspyce.wninsd(2.0, 4.9, (1.0, 3.0, 5.0, 7.0, 9.0, 11.0))
<SpiceCell double 6/12 [ 1.   4.9  5.   7.   9.  11. ]>

Sequence-like operations

SpiceCell offers the following methods so that they behave like Python sequences.

spice_cell[index], spice_cell[index] = value

: Gets or sets the index-th element of the SpiceCell. Must have -len(spice_cell) ≤ index < spice_cell.size. As in Python, we allow negative indices, but -1, -2, etc count backwards from the last active elements.

len(spice_cell) : Returns the number of active elements of spice_cell.

spice_cell.append(value) : If value is a float or integer, it is added to the SpiceCell's active cells. If value is an array, all of its elements are added to the SpiceCell's active cells. The cell's maximum size is grown if necessary.

spice_cell.extend(values) : Appends each value in values to the end of the SpiceCell's active cells. Each element of values can be a float, an integer, or an array. The SpiceCell's maximum size is grown if necessary.

spice_cell += values : Synonym for spice_cell.extend(values)

spice_cell.clear() : Make all elements inactive. Same as spice_cell.card = 0.

iter(spice_cell) : Iterates through the active elements of spice_cell. Because of this iterator, list(spice_cell), set(spice_cell), and tuple(spice_cell) work as expected. You can also write a for loop for item in spice_cell: ... to iterate through the active elements.

bool(spice_cell) : If a spice_cell is used in a boolean context, its value is False if all elements are inactive (spice.cell.card == 0), and True otherwise.

SpiceCell-specific operations

SpiceCell also has the following methods and properties specific to a SpiceCell.

spice_cell.size : Gets the current maximum size of the SpiceCell.

spice_cell.size = value : Grows or shrinks the maximum size of the SpiceCell. If the number of active elements is greater than value, it is reduced to value. This operation is a cspyce enhancement that does not exist in CSPICE.

spice_cell.card : Same as len(spice_cell). (Also known as the "cardinality", hence the name).

spice_cell.card = value : Changes the number of active elements in the SpiceCell. Must have 0 ≤ value < spice_cell.size.

spice_cell.as_array() : Returns a view of the active contents of the array as a numpy array

spice_cell.as_intervals() : Returns a view of the active contents of the array as a 2-dimensional card/2x 2 array. Many SpiceCells are used to represent intervals in which each pair of numbers represents the lower and upper bounds.

Although cspyce's SpiceCells can grow and shrink, CSPICE is not aware of this capability. Its functions will still raise a WINDOWOVERFLOW if SpiceCell.size is not large enough to hold the results. The user must increase SpiceCell.size and try again.

Handling intervals and other structures

Although internally, a SpiceCell is a flat array of integers or floats, some CSPICE routines treat the contents of a SpiceCell as if it were a 2-dimensional array. For example, some CSPICE routines expect the SpiceCell to contain pairs of values where each pair represents the limits of an interval.

To simplify dealing with this use case, the methods append and extend have been enhanced. You can pass an array or an array-like object to append, and all elements of the array will be added to the SpiceCell. Likewise you can pass extend a sequence of array-like objects, and all of them will be added to the SpiceCell.

So, for example, you could write:

spice_cell.append([10, 20])
spice_cell.extend([[35, 50], [90, 100], [120, 140]])

to add intervals to your SpiceCell.

To view a SpiceCell containing intervals, you can use spice_cell.as_intervals() as described above. This is just a shortcut for spice_cell.as_array().reshape(-1, 2), where -1 is a special marker to reshape saying "figure out this value from the size of the array and the other dimensions". The expression spice_cell.as_array().reshape(-1, 3) would give an array of triples. self.as_array().reshape(-1, 4, 4) gives an array of 4x4 matrices.

Metadata

Release files for cspyce 2.4.0

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

Source distribution (sdist)

Source distribution for cspyce 2.4.0
File Size Uploaded Provenance Actions
cspyce-2.4.0.tar.gz 59.4 MB Without provenance Details for cspyce-2.4.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for cspyce 2.4.0
File Actions
cspyce-2.4.0-cp315-cp315t-win_amd64.whl CPython 3.15 CPython 3.15 free-threading Windows x86-64 Details for cspyce-2.4.0-cp315-cp315t-win_amd64.whl
cspyce-2.4.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.15 CPython 3.15 free-threading Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details for cspyce-2.4.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
cspyce-2.4.0-cp315-cp315t-macosx_11_0_arm64.whl CPython 3.15 CPython 3.15 free-threading macOS 11.0+ ARM64 Details for cspyce-2.4.0-cp315-cp315t-macosx_11_0_arm64.whl
cspyce-2.4.0-cp315-cp315t-macosx_10_15_x86_64.whl CPython 3.15 CPython 3.15 free-threading macOS 10.15+ x86-64 Details for cspyce-2.4.0-cp315-cp315t-macosx_10_15_x86_64.whl
cspyce-2.4.0-cp315-cp315-win_amd64.whl CPython 3.15 CPython 3.15 Windows x86-64 Details for cspyce-2.4.0-cp315-cp315-win_amd64.whl
cspyce-2.4.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details for cspyce-2.4.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
cspyce-2.4.0-cp315-cp315-macosx_11_0_arm64.whl CPython 3.15 CPython 3.15 macOS 11.0+ ARM64 Details for cspyce-2.4.0-cp315-cp315-macosx_11_0_arm64.whl
cspyce-2.4.0-cp315-cp315-macosx_10_15_x86_64.whl CPython 3.15 CPython 3.15 macOS 10.15+ x86-64 Details for cspyce-2.4.0-cp315-cp315-macosx_10_15_x86_64.whl
cspyce-2.4.0-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details for cspyce-2.4.0-cp314-cp314t-win_amd64.whl
cspyce-2.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details for cspyce-2.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
cspyce-2.4.0-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details for cspyce-2.4.0-cp314-cp314t-macosx_11_0_arm64.whl
cspyce-2.4.0-cp314-cp314t-macosx_10_15_x86_64.whl CPython 3.14 CPython 3.14 free-threading macOS 10.15+ x86-64 Details for cspyce-2.4.0-cp314-cp314t-macosx_10_15_x86_64.whl
cspyce-2.4.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details for cspyce-2.4.0-cp314-cp314-win_amd64.whl
cspyce-2.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details for cspyce-2.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
cspyce-2.4.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details for cspyce-2.4.0-cp314-cp314-macosx_11_0_arm64.whl
cspyce-2.4.0-cp314-cp314-macosx_10_15_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.15+ x86-64 Details for cspyce-2.4.0-cp314-cp314-macosx_10_15_x86_64.whl
cspyce-2.4.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for cspyce-2.4.0-cp313-cp313-win_amd64.whl
cspyce-2.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details for cspyce-2.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
cspyce-2.4.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for cspyce-2.4.0-cp313-cp313-macosx_11_0_arm64.whl
cspyce-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.13+ x86-64 Details for cspyce-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl
cspyce-2.4.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for cspyce-2.4.0-cp312-cp312-win_amd64.whl
cspyce-2.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details for cspyce-2.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
cspyce-2.4.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for cspyce-2.4.0-cp312-cp312-macosx_11_0_arm64.whl
cspyce-2.4.0-cp312-cp312-macosx_10_13_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.13+ x86-64 Details for cspyce-2.4.0-cp312-cp312-macosx_10_13_x86_64.whl
cspyce-2.4.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for cspyce-2.4.0-cp311-cp311-win_amd64.whl
cspyce-2.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details for cspyce-2.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
cspyce-2.4.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for cspyce-2.4.0-cp311-cp311-macosx_11_0_arm64.whl
cspyce-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.9+ x86-64 Details for cspyce-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl

Total release size: 146.5 MB

Release files / cspyce-2.4.0.tar.gz

Download URL cspyce-2.4.0.tar.gz
Size 59.4 MB
Tags Source
SHA-256 checksum
How to use checksums
f7bf79f4acc9b8578edd3fb5cc7e6072a9d5bb9f2a26771b32c0673062eb3f54
BLAKE2b-256 checksum
How to use checksums
fc7e2a35fc72d5fd500aee6488b92315de89586d135d481642d8a9c892c44905
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp315-cp315t-win_amd64.whl

Download URL cspyce-2.4.0-cp315-cp315t-win_amd64.whl
Size 1.9 MB
Tags CPython 3.15 CPython 3.15 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
b8226508126504bf706002f20e39cb8e3fc96ba1dd903260b8e640dd4d2b2043
BLAKE2b-256 checksum
How to use checksums
383782545d2803227e42297468700b1781a6eae75d1fa0acbc0c5135ec9f2b26
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL cspyce-2.4.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 7.0 MB
Tags CPython 3.15 CPython 3.15 free-threading Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
b294393bba03db36aac4a68f306bb5b8ef55c027a50010cfd265750c1079a8b6
BLAKE2b-256 checksum
How to use checksums
562f2a3834693a108751f13c7f9617214b5d59c2933ebc3caeefd49f3285c62e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp315-cp315t-macosx_11_0_arm64.whl

Download URL cspyce-2.4.0-cp315-cp315t-macosx_11_0_arm64.whl
Size 1.9 MB
Tags CPython 3.15 CPython 3.15 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
58fbda919e729febace9b532c8aca5bea1ee490a8b427dcff3debbf5eb928dd1
BLAKE2b-256 checksum
How to use checksums
9a45a3cb9291c444447927d86d4d282e15a75ef00a0398fc85c80ca973e21427
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp315-cp315t-macosx_10_15_x86_64.whl

Download URL cspyce-2.4.0-cp315-cp315t-macosx_10_15_x86_64.whl
Size 2.1 MB
Tags CPython 3.15 CPython 3.15 free-threading macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
bfb3514a0bed9035f822fd84dc7ee14a0eed4b9111262bd7a75c78631b6fdf6d
BLAKE2b-256 checksum
How to use checksums
10d643667bba08e116e69ee7ba137151cb54b3c29a289c22441488d400af1fd7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp315-cp315-win_amd64.whl

Download URL cspyce-2.4.0-cp315-cp315-win_amd64.whl
Size 1.8 MB
Tags CPython 3.15 Windows x86-64
SHA-256 checksum
How to use checksums
21d66ce08742f5b497e4d86ed01a01500a2f2a83589010e446f603501168eac9
BLAKE2b-256 checksum
How to use checksums
5f42a3e529b88abeaa9c5b37dfc5c1bdea2e8e2d9c74f1a99d47aa807ab7297b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL cspyce-2.4.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 6.7 MB
Tags CPython 3.15 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
3b612a0c895878f80491b22125c42af63c5d584e548cbc3d042374dc7cf93161
BLAKE2b-256 checksum
How to use checksums
615809808dbdcc92e2a93bae11280adb3ebbda88026be761c66c8d9aa9369cd7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp315-cp315-macosx_11_0_arm64.whl

Download URL cspyce-2.4.0-cp315-cp315-macosx_11_0_arm64.whl
Size 1.8 MB
Tags CPython 3.15 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1d6c00a669abd41d0b2466be71743713fd3c8ea6750daee44f76b5b3b6742f19
BLAKE2b-256 checksum
How to use checksums
2efb85606c6ae15bac3a1f79bd7c3ddb09749f4e8330b772e608647d00ba8ca9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp315-cp315-macosx_10_15_x86_64.whl

Download URL cspyce-2.4.0-cp315-cp315-macosx_10_15_x86_64.whl
Size 2.0 MB
Tags CPython 3.15 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
52e5f2aa3491bf71be945a85e4b5a4e5da8dc16ce4f0b70107a29246157a493b
BLAKE2b-256 checksum
How to use checksums
4d059a881134695f94a498ca52c5705d2f0b3c1ddc82f1ee7d9844349e5ffabf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp314-cp314t-win_amd64.whl

Download URL cspyce-2.4.0-cp314-cp314t-win_amd64.whl
Size 1.9 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
5b5aa7e7a981290ab99237b432029954a03ad068c5b2441c76e3103c0b011621
BLAKE2b-256 checksum
How to use checksums
e0291fa99b5524eed1e595af725f84c700272f6d4253fdbc7cc1434cc5c25af2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL cspyce-2.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 6.9 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
18a5b889a41c4d2f811c2ef54425ae1a7aae58f429412b205803bdfb922e2f0d
BLAKE2b-256 checksum
How to use checksums
7850c0695cdfb61c3ededc810a92894cfa55642aa3e16d4b82f556479ab24b85
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp314-cp314t-macosx_11_0_arm64.whl

Download URL cspyce-2.4.0-cp314-cp314t-macosx_11_0_arm64.whl
Size 1.9 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
be71c8db0c75f7e6dbee0f8198c41a7b05d2b4a83323d006ec83916edd192512
BLAKE2b-256 checksum
How to use checksums
a6c80288c0c5601515a12afe9fafd86fa492b6341c267e52ee4b375e3a53bfdb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp314-cp314t-macosx_10_15_x86_64.whl

Download URL cspyce-2.4.0-cp314-cp314t-macosx_10_15_x86_64.whl
Size 2.1 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
83a7bbfbde4b8a723edbef16821901211f232b4e72aea1a8e69f59e61fd717a3
BLAKE2b-256 checksum
How to use checksums
b9584f6e804abc395fb4d9f4a662f3ba18bc18a951060a3d841160fb8a136246
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp314-cp314-win_amd64.whl

Download URL cspyce-2.4.0-cp314-cp314-win_amd64.whl
Size 1.8 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
e95de8b6d9e1439b6cb52de3fb19cb6fdfea43fc876f74048569720752b045c8
BLAKE2b-256 checksum
How to use checksums
8db9e9d9e615dd28799937ab469b1e6de8d2dde8b35553ac1c6d63e9a1cc7743
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL cspyce-2.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 6.6 MB
Tags CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6b48386da4c2aa3388b8452664c2a00845ccc559022f47d7b4c94fa2e2b9d82a
BLAKE2b-256 checksum
How to use checksums
cb594c8c6ce728f54546380e53bcf75b3960cb927df0d23b72e293ca998d53f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL cspyce-2.4.0-cp314-cp314-macosx_11_0_arm64.whl
Size 1.8 MB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
671670b6dcf7b9d2379daed53eed48a120a30ca75b6d6b5f840800fd75303f76
BLAKE2b-256 checksum
How to use checksums
392447d59baa8d0715f35761d690c06441a60c072f980ce90df379d1a081a3d6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp314-cp314-macosx_10_15_x86_64.whl

Download URL cspyce-2.4.0-cp314-cp314-macosx_10_15_x86_64.whl
Size 2.0 MB
Tags CPython 3.14 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
00c0cc6678c72c870eb2d9434c3d5e0d01a242f5a92a3dbdc5143d8ba53a129b
BLAKE2b-256 checksum
How to use checksums
544f8cbbf89b5ac1c239318cbe749c372d397fd2d6e1b0fae08f625f5be3c8b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp313-cp313-win_amd64.whl

Download URL cspyce-2.4.0-cp313-cp313-win_amd64.whl
Size 1.8 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
7a9db3bb8fa86eb98c8a472e31c82c6c4c28520c492e02f820aea65f24555fda
BLAKE2b-256 checksum
How to use checksums
c54b075e2d70c2e2d86375286029fffd89969263c94a96126efe3caa811d3b25
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL cspyce-2.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 6.6 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
810845bac3428545a70e4e8dbfabab910b5b36f322f627f5d74aade7b3762c02
BLAKE2b-256 checksum
How to use checksums
aaca471624158a210cf0bea4ec73e77e00af16dc89288ace73475d1e20c1ff43
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL cspyce-2.4.0-cp313-cp313-macosx_11_0_arm64.whl
Size 1.8 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
12829ed1a8f063472ff46a25932c9d1c9288795362445f98b233073213e82135
BLAKE2b-256 checksum
How to use checksums
b83f7cda391077b1cb67d1aad569694ce793ab9c9d4de58a04790857af37ea17
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl

Download URL cspyce-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl
Size 2.0 MB
Tags CPython 3.13 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
807b270e8db799e5180cafdc5adac82768a98ce76498f7e40ebc2569e25f7b5b
BLAKE2b-256 checksum
How to use checksums
afa8e4483ae2fe3a080023b5e3104943a3de544d4ca2cc42415f8f46c5e64691
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp312-cp312-win_amd64.whl

Download URL cspyce-2.4.0-cp312-cp312-win_amd64.whl
Size 1.8 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
b84d5b5d93f20ae066dddf4fba833327ee6bb29ec682ef5281c13f91e446cb3b
BLAKE2b-256 checksum
How to use checksums
40828ea831c558f66f93f3eb6ff706be0554d8a9175e615476eb50dbe708cd0b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL cspyce-2.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 6.6 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
ba7400bebe48a58b43adb0c6a78e5689b37ddad5b5e57048a1f74784e8510276
BLAKE2b-256 checksum
How to use checksums
75cf6da8bd35be4ce9bc8a8d39f440f538cec69abe3a4301e4705cf734c1f91c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL cspyce-2.4.0-cp312-cp312-macosx_11_0_arm64.whl
Size 1.8 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c5a6cdaef3ba13f8546b4cb83cb81dc9ad110abd4cf0419323cb9582e3ac95f8
BLAKE2b-256 checksum
How to use checksums
e9d2b8aa9a13d0f2ff7739864f2494e658a482ec4874d510fef3d1c0a091e097
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp312-cp312-macosx_10_13_x86_64.whl

Download URL cspyce-2.4.0-cp312-cp312-macosx_10_13_x86_64.whl
Size 2.0 MB
Tags CPython 3.12 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
9219a459731d4a698b436b56a668db3e1bee2672a317c9b53ea6cbe2e8639938
BLAKE2b-256 checksum
How to use checksums
4639e304ef23f6a2b82cdd04974ec1baf4daa6e892dff2317146683d4d012b48
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp311-cp311-win_amd64.whl

Download URL cspyce-2.4.0-cp311-cp311-win_amd64.whl
Size 1.8 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
284cd2ca9a3e52e8b435e02cba22f7f8335741c7f502826f11040bcd4b5b43d6
BLAKE2b-256 checksum
How to use checksums
d2b722db0b0a702873cdbb5e8c29541704777d18ac9f9eb7abdaae40cc5e2e06
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL cspyce-2.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 6.7 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
96c6975f3c02624d226cbf2e6b82c80ac56da19f71b0ce88f1f10ab25ad2624e
BLAKE2b-256 checksum
How to use checksums
8a624a9115735518759a55cae07779f0907ff3f135a15f4c7ec41366222247e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL cspyce-2.4.0-cp311-cp311-macosx_11_0_arm64.whl
Size 1.8 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c2f310c1f1991f42836e9ce4b83d6b659f4beedad6d7ab947653de11620a4b9c
BLAKE2b-256 checksum
How to use checksums
c79fe099fea59b6df3e8b1765f98cb6dc20fa045c24a006d720f56353601d0b3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / cspyce-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl

Download URL cspyce-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl
Size 2.0 MB
Tags CPython 3.11 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
8b6b49722a74c8c68e13eb5969ca97df60280d267ec4c2a82d5f9fabf442b604
BLAKE2b-256 checksum
How to use checksums
5817cad131e80e592ad709697d979442b06ea8bf832a38712e482eec0f9f5d0c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Security for cspyce 2.4.0

Provenance

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

No provenance found

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

A note on package security

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

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

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