Skip to main content

A Rust-based Statistics and ML package, callable from Python.

Project description

RustMFX

Build Status PyPI version

Introduction

RustMFX is a high-performance Rust package for computing marginal effects (MEs) in binary choice models (Logit and Probit).

As datasets in economics, social sciences, and data science continue to grow in size and complexity, traditional tools (like statsmodels) can struggle with speed and memory efficiency.

RustMFX leverages Rust’s efficiency and safety to deliver fast and memory-friendly computations of average marginal effects (AMEs) and their standard errors (SEs).

1. Introduction

In today's data-driven world, researchers and practitioners are faced with increasingly massive datasets.

In fields such as economics, social sciences, and data science, analyzing high-dimensional data efficiently is critical.

While libraries like statsmodels provide robust statistical tools, they can be limited by the speed and memory constraints of Python when handling large datasets.

RustMFX was designed to overcome these challenges by using Rust—a language known for its high performance and low memory overhead—to compute marginal effects quickly and reliably.

2. Speed and Memory Efficiency

RustMFX outperforms Python-based statsmodels in several key areas:

Efficient Vectorization & Low-Level Optimizations

The Rust code leverages libraries like ndarray (using a BLAS backend) to perform operations in a highly optimized, vectorized manner.
This means calculations are executed on entire matrices at once, rather than iterating over rows with loops.
This eliminates costly Python-level loops, allowing computations to be performed in a fraction of the time.

Loop-Based Computation in statsmodels

  • statsmodels.get_margeff() uses explicit Python loops in places where RustMFX performs fully vectorized operations.
  • For continuous variables, statsmodels iterates over observations to compute marginal effects, while RustMFX applies matrix operations across the entire dataset in one step.
  • For discrete variables, statsmodels loops over each discrete feature, recomputing probabilities for every observation twice (once for X=0, once for X=1).
    In contrast, RustMFX batch-computes these changes in a single matrix operation.

Memory Efficiency & In-Place Computation

Rust’s strict memory management and zero-cost abstractions help keep memory overhead low.

  • RustMFX reuses memory and avoids large temporary allocations, ensuring that memory usage scales efficiently with increasing variables.
  • statsmodels.get_margeff() creates multiple intermediate arrays, whose sizes grow significantly as the number of variables $K$ increases.
    This leads to exponential memory growth in statsmodels, whereas RustMFX remains efficient even at large scales.

Compiled vs. Interpreted Code

Rust is a compiled language with aggressive optimizations by LLVM, while statsmodels is written in Python (using NumPy for vectorization).
Although NumPy is optimized for array computations, Python’s dynamic memory management and interpreted nature introduce overhead,
especially when handling large models with many variables.

Why RustMFX Scales Better

Fully vectorized operations eliminate Python loops for both continuous and discrete marginal effects.
Lower memory footprint by avoiding large temporary allocations and using in-place computation.
Efficient discrete variable handling batch-computes discrete effects instead of looping over them.
Scales efficiently with increasing $K$, whereas statsmodels.get_margeff() suffers from excessive memory usage.

These features make RustMFX an ideal choice for analyzing large-scale data quickly, efficiently, and with minimal memory overhead.

3. Comparison: Statsmodels-Style vs. Rust Method

RustMFX provides two methods for calculating standard errors of the marginal effects:

Rust Method ("rust")

  • Description:
    This method calculates the gradient (Jacobian) of the marginal effects with respect to the coefficients by averaging the individual observation-level gradients.
  • Benefits:
    Captures detailed individual-level variability, which is beneficial when data heterogeneity is significant. Closer to the way Stata calculates Standard Errors.
  • Use Cases:
    Best used in applications where capturing the nuances of individual effects is crucial.

Statsmodels-Style Method ("sm")

  • Description:
    This approach computes the derivative of the predicted probabilities with respect to the coefficients and then averages this derivative over all observations.
  • Benefits:
    Produces smoother and often more stable SE estimates, especially useful in smaller samples.
  • Use Cases:
    Preferred when consistency with traditional statsmodels output is desired or when more stable SE estimates are needed.

4. Methodology: Calculating Marginal Effects and Standard Errors

RustMFX calculates Average Marginal Effects (AMEs) and uses the delta method to compute standard errors.

Marginal Effects Calculation

For a given observation $i$ and variable $j$, the marginal effect is:

$\frac{\partial P(Y=1 \mid \text{X}_i)}{\partial \text{X}_{ij}} = \beta_j \times f(\text{X}_i \beta)$

where:

  • $\beta_j$ is the coefficient for variable $j$,

  • $f(\cdot)$ is the probability density function (PDF):

    • Logit:

    $f(z) = \frac{e^z}{\left(1+e^z\right)^2}$

    • Probit:

    $f(z) = \frac{1}{\sqrt{2\pi}} e^{-0.5 z^2}$


The Average Marginal Effect (AME) is computed by averaging over all $N$ observations:

$\text{AME}_j = \frac{1}{N} \sum_{i=1}^{N} \beta_j \times f(\text{X}_i \beta)$


Standard Errors Calculation

Using the delta method, the variance of the AME is calculated as:

$\text{Var}(\text{AME}) = \text{J} \cdot \text{Var}(\beta) \cdot \text{J}^T$

where $\text{J}$ is the Jacobian matrix of the transformation from coefficients to marginal effects. The Jacobian is computed differently depending on the method:

  • Rust Method:

$\text{J}_{\text{rust}} = \frac{1}{N} \sum_{i=1}^{N} \frac{\partial \left( \beta_j f(\text{X}_i \beta) \right)}{\partial \beta}$

Explanation:

  • This method computes the Jacobian by taking the derivative of the marginal effects function for each individual observation.
  • The gradient is first computed at the observation level and then averaged over all $N$ observations.
  • This approach captures individual-level variability in marginal effects more accurately.
  • The partial derivative term represents how a small change in $\beta$ affects the probability distribution function $f(\text{X}_i \beta)$.
  • Closer to how Stata computes standard errors and more sensitive to variations across observations.

✅ Why Use This Method?

✔ More precise in heterogeneous datasets (e.g., large-scale social science or labor market studies).
✔ Preserves individual-level variability rather than smoothing it out.
✔ Better for large datasets where heterogeneity matters.

  • Statsmodels-Style Method:

$\text{J}_{\text{sm}} = \frac{1}{N} \sum_{i=1}^{N} \text{X}_i \ f(\text{X}_i \beta)$

Explanation:

  • Instead of differentiating at the individual level, this method computes the derivative of the predicted probability function with respect to $\beta$, then averages over all observations.
  • The term $\text{X}_i$ represents the independent variable values for observation $i$, and it is multiplied by the PDF $f(\text{X}_i \beta)$.
  • This method smooths out variability across observations, leading to more stable standard error estimates.
  • While slightly less precise at the individual level, it is computationally simpler and produces standard errors identical to statsmodels.

✅ Why Use This Method?

✔ Produces more stable standard errors, especially in small samples.
✔ Ensures consistency with traditional statsmodels outputs.
✔ Useful when a more aggregated (less individual-specific) marginal effect estimate is preferred.


These approaches allow you to choose the estimation method that best fits your application needs.

Handling of Continuous vs. Discrete Variables

RustMFX distinguishes between continuous and discrete variables when computing marginal effects and their standard errors (in an identical way to sm.get_margeff()):

  • Continuous Variables:
    For a continuous variable $\text{X}_j$, the marginal effect is computed as:

$\frac{\partial P(Y=1 \mid \text{X}_i)}{\partial \text{X}_{ij}} = \beta_j \times f(\text{X}_i \beta)$

This formula directly measures how a small change in $\text{X}_j$ affects the probability $\text{P}(Y=1)$. The associated Jacobian and standard errors are calculated using the derivative of this expression.

  • Discrete Variables:
    For a discrete (binary) variable $\text{X}_j$, the marginal effect is computed using a finite-difference approach:

$\Delta P = P(Y=1 \mid \text{X}_{ij}=1) - P(Y=1 \mid \text{X}_{ij}=0)$

Rather than using a derivative (which isn't defined for variables that only take two values), this method measures the change in the predicted probability when the variable switches from 0 to 1.

The gradient for discrete variables is computed by comparing the probability densities for both states, ensuring that the binary nature of the variable is appropriately handled.

5. How to Use RustMFX

Below is an example of how to integrate RustMFX into your workflow. First install rustmfx on your system.

pip install rustmfx

Here we will construct a dataset using make_classification from the sklearn library. Then we fit sm.Probit and sm.Logit models.

Note:

  • It is important that y and X fed to the sm.{Model}(y,X).fit() function are pandas.DataFrame type, as this will result in the output objects being DFs, which is required by rustmfx.mfx().
  • Column names must also be strings/non-numeric.
import numpy as np
import pandas as pd
import statsmodels.api as sm
from sklearn.datasets import make_classification

# Import RustMFX
import rustmfx  

# Number of rows
nobs = 1_000_000

# Define feature counts
num_continuous = 4
num_dummy = 4
num_features = num_continuous + num_dummy

# Randomly decide how many variables should be predictive
num_informative = np.random.randint(1, num_features + 1)  # At least 1 variable is predictive

# Generate dataset with random informative variables
X, y = make_classification(
    n_samples=nobs,
    n_features=num_features,
    n_informative=num_informative,  # Randomly chosen number of informative variables
    n_redundant=0,  
    n_classes=2,  
    random_state=42
)

# Convert to Pandas DataFrame with proper naming
continuous_names = [f"continuous_{i+1}" for i in range(num_continuous)]
dummy_names = [f"dummy_{i+1}" for i in range(num_dummy)]
column_names = continuous_names + dummy_names
X = pd.DataFrame(X, columns=column_names)
y = pd.DataFrame(y, columns=["outcome"])

# Convert last 4 columns (dummy variables) into 0/1 binary variables
X[dummy_names] = (X[dummy_names] > X[dummy_names].median()).astype(int)  

# Add intercept column
X = sm.add_constant(X)

# Fit Logit and Probit models using Statsmodels
results_probit = sm.Probit(y, X).fit(disp=0)
results_logit = sm.Logit(y, X).fit(disp=0)

Below we run rustmfx.mfx() on the Probit model. se_method defaults to "rust".

This produces a pandas.DataFrame object with:
variable names;
dy/dx (average marginal effects);
Standard Errors;
z score;
p-values;
95% confidence interval;
Significance level (* = p<0.1, ** = p<0.05, *** = p<0.01).

# get marginal effects for Probit model using rustmfx.mfx()
# By default, <option: se_method='rust'>
rustmfx.mfx(results_probit)

Output:

|              |        dy/dx |    Std. Err |           z |   Pr(>|z|) |   Conf. Int. Low |   Conf. Int. Hi | Significance   |
|:-------------|-------------:|------------:|------------:|-----------:|-----------------:|----------------:|:---------------|
| continuous_1 | -0.000711967 | 0.000429515 |   -1.65761  |  0.0973968 |     -0.00155382  |     0.000129882 | *              |
| continuous_2 |  0.000143285 | 0.000429703 |    0.333452 |  0.738793  |     -0.000698933 |     0.000985503 |                |
| continuous_3 |  0.132766    | 0.000325385 |  408.028    |  0         |      0.132128    |     0.133404    | ***            |
| continuous_4 |  0.000172238 | 0.000429776 |    0.400763 |  0.688595  |     -0.000670123 |     0.0010146   |                |
| dummy_1      | -0.144887    | 0.000853498 | -169.757    |  0         |     -0.14656     |    -0.143214    | ***            |
| dummy_2      |  0.355616    | 0.000853642 |  416.586    |  0         |      0.353943    |     0.357289    | ***            |
| dummy_3      | -0.000114508 | 0.000858866 |   -0.133325 |  0.893936  |     -0.00179789  |     0.00156887  |                |
| dummy_4      |  0.193636    | 0.000841226 |  230.183    |  0         |      0.191987    |     0.195285    | ***            |

This time we run .mfx() on the Logit model.

The .mfx() function automatically detects if the sm.{Model}(y,X).fit() is Probit or Logit by extracting {Model}.model.__class__.__name__

Here I set se_method='sm' to mimic statsmodel's method for getting standard errors.

# get marginal effects for Logit model using rustmfx.mfx()
# Use <option: se_method='sm'> instead. This will produce SE identical to sm.get_margeff()
rustmfx.mfx(results_logit, se_method='sm')

Output:

|              |        dy/dx |    Std. Err |            z |   Pr(>|z|) |   Conf. Int. Low |   Conf. Int. Hi | Significance   |
|:-------------|-------------:|------------:|-------------:|-----------:|-----------------:|----------------:|:---------------|
| continuous_1 | -0.000727353 | 0.000429072 |   -1.69518   |  0.0900422 |     -0.00156833  |     0.000113629 | *              |
| continuous_2 |  0.000160417 | 0.000429249 |    0.373717  |  0.708615  |     -0.00068091  |     0.00100174  |                |
| continuous_3 |  0.133292    | 0.000259576 |  513.501     |  0         |      0.132784    |     0.133801    | ***            |
| continuous_4 |  0.000194787 | 0.000429317 |    0.453715  |  0.650034  |     -0.000646674 |     0.00103625  |                |
| dummy_1      | -0.152622    | 0.00085115  | -179.313     |  0         |     -0.15429     |    -0.150954    | ***            |
| dummy_2      |  0.355251    | 0.000852706 |  416.616     |  0         |      0.35358     |     0.356923    | ***            |
| dummy_3      | -8.12991e-05 | 0.000857946 |   -0.0947601 |  0.924505  |     -0.00176287  |     0.00160027  |                |
| dummy_4      |  0.194628    | 0.000837786 |  232.313     |  0         |      0.192986    |     0.19627     | ***            |

Accounting for Robust SE, Clustered SE, and Weights

One of the key advantages of RustMFX is that it automatically uses the model’s covariance matrix—obtained via the cov_params() method from the statsmodels fit object—in the delta method to compute the standard errors of the marginal effects.

What does this mean for you?
If you fit your model with additional parameters such as robust standard errors, clustered standard errors, or observation weights (for example, by using options like cov_type='HC0', cov_kwds={'groups': clusters}, or specifying weights), these adjustments will be captured in the covariance matrix output of your sm.{Model}(y, X).fit() call.

For instance, if you fit a Probit model with robust standard errors:

results = sm.Probit(y, X).fit(cov_type='HC0')

Then call

mfx_results = rustmfx.mfx(results)

RustMFX will automatically extract and use the robust covariance matrix in the marginal effects calculations. In other words, as long as these parameters (robust SE, clustered SE, weights, etc.) are specified in your ``statsmodels .fit()```, the ```.mfx()``` function will automatically account for them.

This integration ensures that your marginal effects and their standard errors reflect any adjustments made during model fitting, providing you with accurate and reliable inference.

Performance Comparison between .mfx() and .get_margeff()

Below is a graph showing the difference in peak memory usage of .mfx() and .get_margeff() across datasets of differing number of observations $N$ and degrees of freedom (number of parameters) $k$.
RustMFX performs exponentially better than statsmodels as the number of parameters increases.

Memory Usage Comparison of .get_margeff() VS .mfx()

Memory Usage Comparison of .get_margeff() VS .mfx()

Contributing

Contributions are welcome! Feel free to submit issues and pull requests on GitHub.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

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

Source Distribution

rustmfx-0.1.4.tar.gz (122.9 kB view details)

Uploaded Source

Built Distributions

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

rustmfx-0.1.4-cp313-cp313-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.13Windows x86-64

rustmfx-0.1.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (309.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

rustmfx-0.1.4-cp313-cp313-macosx_11_0_arm64.whl (260.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rustmfx-0.1.4-cp313-cp313-macosx_10_12_x86_64.whl (279.3 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

rustmfx-0.1.4-cp312-cp312-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.12Windows x86-64

rustmfx-0.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (309.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

rustmfx-0.1.4-cp312-cp312-macosx_11_0_arm64.whl (260.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rustmfx-0.1.4-cp312-cp312-macosx_10_12_x86_64.whl (279.3 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

rustmfx-0.1.4-cp311-cp311-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.11Windows x86-64

rustmfx-0.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (309.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

rustmfx-0.1.4-cp311-cp311-macosx_11_0_arm64.whl (260.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rustmfx-0.1.4-cp311-cp311-macosx_10_12_x86_64.whl (279.3 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

rustmfx-0.1.4-cp310-cp310-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.10Windows x86-64

rustmfx-0.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (309.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

rustmfx-0.1.4-cp310-cp310-macosx_11_0_arm64.whl (260.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

rustmfx-0.1.4-cp310-cp310-macosx_10_12_x86_64.whl (279.3 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

rustmfx-0.1.4-cp39-cp39-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.9Windows x86-64

rustmfx-0.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (309.3 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

rustmfx-0.1.4-cp39-cp39-macosx_11_0_arm64.whl (260.6 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

rustmfx-0.1.4-cp39-cp39-macosx_10_12_x86_64.whl (279.3 kB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

rustmfx-0.1.4-cp38-cp38-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.8Windows x86-64

rustmfx-0.1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (308.8 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

rustmfx-0.1.4-cp38-cp38-macosx_11_0_arm64.whl (260.6 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

rustmfx-0.1.4-cp38-cp38-macosx_10_12_x86_64.whl (279.2 kB view details)

Uploaded CPython 3.8macOS 10.12+ x86-64

File details

Details for the file rustmfx-0.1.4.tar.gz.

File metadata

  • Download URL: rustmfx-0.1.4.tar.gz
  • Upload date:
  • Size: 122.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.8.2

File hashes

Hashes for rustmfx-0.1.4.tar.gz
Algorithm Hash digest
SHA256 f378c70921aba16a3d09f41b04f48a680163d50c6efd54df7ab3ae23f7c8706c
MD5 425152d14d065a4c4f010d99c339ed98
BLAKE2b-256 62f9ba0bc11fd65641f4c1a483aae6c6dc0038b40fd6c2048bac7b3f8fb9a074

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: rustmfx-0.1.4-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.8.2

File hashes

Hashes for rustmfx-0.1.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 efa1395d176499b3edc5fa1d7b1eb59c1fd7dea894568341416f9dd61efac6fb
MD5 8ccbb3a3e42e15fbc1629e60ca1b2a14
BLAKE2b-256 31866f4014caa2cd7ca30f9f363ccc2de45cf8a73684da6c37b6ab6ccc816a66

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 816df6c6884e0febe8adc4a836c134391308281ff5d142faed20f2617ef2522f
MD5 37fb8b8505560ba2b9915e700d8e43b5
BLAKE2b-256 8ae74ceb7480a3700d36b0a5af114281cb8574f4d95ad6282809fa546121fdb8

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fde438d461c0881c2f7aa5383df08303115eb90f6b022ce29581a88c079192a1
MD5 b92b6330b0e64edf113d4932a0bcf118
BLAKE2b-256 a74b2aa7884e6f0fbdba3c1d3a717ac039738909764f1229f4c2b5abe6c16b0e

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 987a8ece6e7cbaf0d7d022f281f9cf1de6497ffb91a29723d1b82696fecc82f2
MD5 472a23c6c272df521be1b1792341f31c
BLAKE2b-256 5835822dae258ef5d4c44f6c5a97603110d6dbbc9aef731afa328dca4719efdd

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: rustmfx-0.1.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.8.2

File hashes

Hashes for rustmfx-0.1.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1562c40f00b29d46ddb6b1f014e8a9903a837ff58474a16713c083c9ad67167f
MD5 77ceec73c821de0b1d342325c71a848f
BLAKE2b-256 f689d208e0d0496e29420fa0276442213dbb76604d58ad35144644bd6264fbf7

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 89a1b2b62d9a38b1d2d963a745ea5c3e2b9b51c79740383ca52013d44d343ac8
MD5 f50829f317c0bf4d80cc4d5601848d74
BLAKE2b-256 f7cd16291c7f43fb2fba4e00788a9fa0ed877e4b5d445a46ded6d8e281f7ab15

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7811b064412f71b366959ba38d743ccf5b201ffadbeff89b376be016ecc275b4
MD5 8759ffc15a1b5069b12b4912cb2f3e22
BLAKE2b-256 2f92a4c5d8ff551fa07325075386cd34c91ece96a50c65c2b6ec064572ed01f6

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ad281c4fa29428c353405e8c33fbdc806d1ee1850ccd654183d51220138359d2
MD5 c07c1b10466973a7308badda78e57ff3
BLAKE2b-256 f017f365d3846b0d36368ad62b2f2dde11688a25fe4e07e94e91e44f7b7fffb7

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: rustmfx-0.1.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.8.2

File hashes

Hashes for rustmfx-0.1.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f2ea1cf3b610fef5ce884ddf30456a0ed3ea6a65f3da31fc9c63fda10d8f9e5e
MD5 9bd8ad3dc4c215f25ff85695cf1b465c
BLAKE2b-256 9f5532ecafaa07b92f2cb59dfd2c554d8f6bb92144bbea479547cc782859bb5c

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 87d49cf7b2ce4d7f02acfb88286513ed0b84e0fdf14a58ab86dc2623407b3cc3
MD5 a59e93e2236341a5dd58ea27cf8049ee
BLAKE2b-256 fc814e48c9035186e3fcde881e68d262c2fe5c6f7855f33375c0ee0fdb3fea59

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 196ca0c7981a93a13eb39d6913c22ac63f898f060f38e1b84d8e1a1e246fd672
MD5 19bb1ffae53174e84027bda226d1708a
BLAKE2b-256 ec96cf256beb6be75d6b496aef1cde73560defb64cf46d613edf3e6c5844f557

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c9c0142ff73fcc24589edde06b9cc98945ecd8f3710df214ed4711c7b7f7c3a0
MD5 85f98ed910fcce3f0e49cfd2f96f8280
BLAKE2b-256 dd18d435e9be909d3e7ae11dd23ca77611bd999c31e5debf3327148a56003684

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: rustmfx-0.1.4-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.8.2

File hashes

Hashes for rustmfx-0.1.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 eec3e00112ae2ce525d6a9705821c6016a8eaafa6ea35cf811643f18f202c5d5
MD5 541d7001e67e9a9016c249b2be6f6b30
BLAKE2b-256 7f0be7d7be451fb29615e7934002370d2cedd132707ae05c981c5e1788f724b4

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 333d59229076591b1c5b49c5ca7b9e3d81d587fbfbdae543ec5d52558e9a0b25
MD5 3309e5347d3d5e85eb5088d1334ac9da
BLAKE2b-256 d12f5fb3ff3140953d8000f218db9ae56ffba2bacbc65a5e1a3e62c5a0d9a181

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 486494c7cdd56c5d18bcef5997721728fccdb0e06eadc49120cc5e2d197373b1
MD5 3c9c3a51aff2487f28d55b8361e7f53c
BLAKE2b-256 dd390a40b00cf8edbf89aef86cf0a2b30525be162e29a304701827b93e754dab

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e7534c7cd084d04caa4201805b708abdfe2c1ba2997dcb873eb58a2681c2c943
MD5 74bc85adeb5bbe4f0a04b271ced4ff1e
BLAKE2b-256 d17902f3cfd4c1a13b27ede0b2d6942659e12487d5685a090922a4309131519a

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: rustmfx-0.1.4-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.8.2

File hashes

Hashes for rustmfx-0.1.4-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 b6ed050197c51f1413b32def6de3c4d2b57e7f60a384826582446d28c3f04bca
MD5 09ec631eb3427a2c1a37012d04aa08b2
BLAKE2b-256 d00c24364bb1df7b9013f13fe7833d9a529624f8dc58153576e3820600f10c7f

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9b53e40bba59a51385c1d1736143f3a97fd67e7eb77ec98428ce7a12d8f41647
MD5 1a085dd218ec9dec88874beaab55e360
BLAKE2b-256 e3e90bca78f1b8ac83847b6c1f780c70fd277abc4c23635aa8c936ff34d545d0

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3649698f74ae165a7ce46709054615d89dd782c6192cccc6dda126a59c749cea
MD5 258adf98b9395282611e1dd6225acf8b
BLAKE2b-256 4841abe2922ca0fc8523178d57ae008f9069aed01a2568edfe973bb151ed9561

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2a24c4190d0ffee5d32a11add67fc599e1932c25903d74c3d9740e13b3adc587
MD5 45dfc2527d6db4e54c2316da0dfc5236
BLAKE2b-256 fd410cb19e21efb4c07b8c95af642524a22ea69b58b26e5f60cd24f8b169657e

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: rustmfx-0.1.4-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.8.2

File hashes

Hashes for rustmfx-0.1.4-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 654c7b2cd7d31465a76d729b0b1f790355df1d4d8ebbd7ad13ea864fe3519fe9
MD5 cfcec3cfc87c2341cbadd8d1d937f83b
BLAKE2b-256 0168ae9d72940e8fba501358cee08aef79838fd55831033fec896d251d1470be

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f74bfefefb7d373c33ba57820c75f6f3240febdde41d8a1a878017de55ffa9b0
MD5 a64b5419bc8180fa7ad199b5407facde
BLAKE2b-256 ff1d10ab2fb6c6b365d89640e11dbce98689ebebeb02a4a59f5455cdf589f02c

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2b80c881fee49db3b7fc0852fd15be053011fef608d3b385b345e536e5112446
MD5 b5839cfee871f2285e542c8bc99b1635
BLAKE2b-256 b867962899c9a33fb8c76c04c12285d58c97e5b31ece97e060d6973787d83942

See more details on using hashes here.

File details

Details for the file rustmfx-0.1.4-cp38-cp38-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rustmfx-0.1.4-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 09df772f4625d9b24e5c98a4ca8ea3f08ae97fa3b23bf5bddf0732cc11774ade
MD5 406952aedf4f8608c5c9abbe553ebb79
BLAKE2b-256 04f3add13c078a9d7e81f57942a11b9ed5b1b16df02ed125538516ccc8e1d7d0

See more details on using hashes here.

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