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(probit_result)

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(logit_result, 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 rustmfx.mfx() and statsmodels.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.2.tar.gz (123.0 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.2-cp312-cp312-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.12Windows x86-64

rustmfx-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (309.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

rustmfx-0.1.2-cp312-cp312-macosx_11_0_arm64.whl (260.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.12+ x86-64

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

Uploaded CPython 3.11Windows x86-64

rustmfx-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (309.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

rustmfx-0.1.2-cp311-cp311-macosx_11_0_arm64.whl (260.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.11macOS 10.12+ x86-64

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

Uploaded CPython 3.10Windows x86-64

rustmfx-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (309.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

rustmfx-0.1.2-cp310-cp310-macosx_11_0_arm64.whl (260.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.10macOS 10.12+ x86-64

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

Uploaded CPython 3.9Windows x86-64

rustmfx-0.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (309.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

rustmfx-0.1.2-cp39-cp39-macosx_11_0_arm64.whl (260.7 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

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

Uploaded CPython 3.9macOS 10.12+ x86-64

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

Uploaded CPython 3.8Windows x86-64

rustmfx-0.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (309.4 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

rustmfx-0.1.2-cp38-cp38-macosx_11_0_arm64.whl (260.7 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

rustmfx-0.1.2-cp38-cp38-macosx_10_12_x86_64.whl (279.1 kB view details)

Uploaded CPython 3.8macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for rustmfx-0.1.2.tar.gz
Algorithm Hash digest
SHA256 d9475e253c14c5f888924ab2811de58a4052f2e521982604a6a1a1cf36fb2f70
MD5 b55e4e73740837a208a6f9dc0d54faf6
BLAKE2b-256 052bae4d38c9bfe7023aacda58e2d929b526f64aecfc169ca8b08c8b1ede78e1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rustmfx-0.1.2-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.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 38a142efac2f1c62cdaa9d8edad2b22aec145ba3c2315428feae1222f547a686
MD5 631d02967551a1c66a837df3353b94b5
BLAKE2b-256 09db2325ab0c11a0433a3782d2aca4e5198962cff7ae0151e43aa303bdd8ea38

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b44ba6cad29a9c8885bc33806fb82361816d1eba6c0e26a1f9ef1d795474e905
MD5 95b2c3421d10fda45ba74c94f0c6d72f
BLAKE2b-256 b1e98ee6cf264cf679666a392518bb3097484d0f3f573f67dc780fb8a3f3bb47

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 de8c412e182f91847d5e88000055b222c0db8941de709f9d9c072066e0f4fb06
MD5 17ac6c894f48e43ae88259f3f4f57c15
BLAKE2b-256 2f75dc3483afd7e69a74160d6b39b456f21052259250cf1ae80334d04afce471

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.2-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 68ca8055f607bd87592095169f9e227f3ba3daa1b486d8f6fcd89ff7fe0e4693
MD5 8beca4a2bdc805f9aca3d4ac0b1801a9
BLAKE2b-256 d0051b64697c360274d6aae0cb1f475346ffe3305039b0bde4644917689ada3b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rustmfx-0.1.2-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.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ceb12c22d6f771549e73742a6abe4a7d4952617d7e7050f53cd28719207542eb
MD5 96853c18644b6f77a8764c4d633be304
BLAKE2b-256 0d3a725b83ec39ccd18459430c34bae55fe3eb1df8b2565500aa4306e5f62715

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 53097efa5eeb087cacc3ed2c58f1f6ca9fd1cdeaea8d1266513aea8f36156d3b
MD5 a9391ab4ccfa626ea43d4c37fcbb1fe5
BLAKE2b-256 fcf23c9f5f9d2280d8dd50171f7d9353378b78958e294aebe9eaa7a404fde315

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 54706bff12ba8d6f0ba560570bb907f1f4b855912860c7b28ad9718f7a882a32
MD5 776a13d293f20422210d644253d00eab
BLAKE2b-256 8ab790fa3db25c9136f89bd857933ad58f66f32e2e09c5f5055b98d836c3a96a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.2-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 23f18f1f841645b810bfdbaf26b2dc4129e6155bc557bffcb587bda57f0b24c4
MD5 e363853b5d13262d75c94fae6c76354f
BLAKE2b-256 ca5dc84ece779bc9c3c52fe1dceca2079f26a62a0d8c6d0da4b6c82069449b7d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rustmfx-0.1.2-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.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 dd73d80e314a1b3d61fae4984c320f7d546d93f9b9992624b3c0c34951a419e9
MD5 0fb3a06038f52e1dbbc9d176e9996ba7
BLAKE2b-256 19b580554f410f8c65bb13b496455bf83b24fa96023434df4535d2cf91f5b248

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a510d2f147bfd3764118fafb63e7c28d6f25ac55aaaeab5391dc9cbdcafe35e0
MD5 97578feaf19b824e2e42fb47812e32b2
BLAKE2b-256 3f20061a207b2af5173f12c4379229d46ba9f606b22fc25163f677000553a666

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 db964c112d969452dec9fe333c10537e7076e57ee72dec1b6cb4a5c461b72e75
MD5 1f15ed38e2103b9bd5c686058e6f3f62
BLAKE2b-256 420ff0dcf1828969e521cd39cc1eca4fc79f0153c27704b138b75d264e38663c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.2-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d2cf6921fce89a4da9012ac94ea7f3a54e948d463a2ec72e693022033fac4bc2
MD5 6e0a8b739031df498b4c7b97983e8c14
BLAKE2b-256 7f5cc268a5a663de7d4634390eb015b1ccea10f6e358b4b8a06975ada060aaee

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rustmfx-0.1.2-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.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 d5222785fc8c732c2619341cb5154cb1237f5e809166531c048c48d069d94220
MD5 2ea97b079dc0be7449065704c929f853
BLAKE2b-256 c31feccb041ffe4e65958251b2107edacd6b8a69646e4b41b03c6767710f019c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 df34b1daebd41af991abb5cff0545dfd9a7c19dbac457f275fcc773660b553ae
MD5 d4006d906241e69b123c48de1d2f0f1d
BLAKE2b-256 1e7fff017623dec81fd955c2b046ab4c341155b509b961bd89ff78c01d7807a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d824aa623ea0db74993fa3b57563b4760119cc3d0f4475507b314a9f1de240a8
MD5 77bfa3ca3ef6977c5f83eb8205921001
BLAKE2b-256 0fb6b5dc5860be6f5ca911a7b6e4fbc2131e4f001058c17206a8390f7e9b967d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.2-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 04317991c54ceff3cc5b1c561e0af51c6f270300c18c5a624c0a888c6453a6e8
MD5 cb15997377001597fde2150500c986ef
BLAKE2b-256 221b443aaad97a2b28b12a3aea6dcb69c87ec180e9ed747711b0d5ea8bc02cd9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rustmfx-0.1.2-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.2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 adcaa39b4478004ec8f8f0e98ebe581ff4344a59df3fc246f8a88e4dd41c7ba8
MD5 37cba9505c9bf347123d03110b074157
BLAKE2b-256 e64c81c24d71509e3c0d775373d0e0675e969430c874b175a0dd69fc61461b77

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0fc1f77fcc5dab153d02671f86780e89f1bc9a594341f3a767a0a0c1aecec082
MD5 fbf735e7317bcac63fcfbad629edd51d
BLAKE2b-256 84e6348d4925bb82b5bc8abec0f78b4cb4c12b6efaed215e2b0f8025ce5971ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9b4fbaa9fe1aa0611995c8d4f85e0fca6518e973641da77eafa54dd11f4b60ca
MD5 fbb57a669e698486ed680a1c45a7854b
BLAKE2b-256 720610836ded274439474f20ec88225345578aa2f28d8a2be7243f6b422f6679

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.2-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a22ee1e15c21b89f884d5c353f44d8c9598b2721a9580f3823d30f297f5a254e
MD5 82b528867ea26bf29a24647bf6351970
BLAKE2b-256 d6076d970921f2f9f9a5dbe4e51a735af4d827d5d6264dae09a486ef73d21aea

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