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.3.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.3-cp312-cp312-win_amd64.whl (1.0 MB view details)

Uploaded CPython 3.12Windows x86-64

rustmfx-0.1.3-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.3-cp312-cp312-macosx_11_0_arm64.whl (260.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rustmfx-0.1.3-cp312-cp312-macosx_10_12_x86_64.whl (279.4 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

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

Uploaded CPython 3.11Windows x86-64

rustmfx-0.1.3-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.3-cp311-cp311-macosx_11_0_arm64.whl (260.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rustmfx-0.1.3-cp311-cp311-macosx_10_12_x86_64.whl (279.4 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

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

Uploaded CPython 3.10Windows x86-64

rustmfx-0.1.3-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.3-cp310-cp310-macosx_11_0_arm64.whl (260.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

rustmfx-0.1.3-cp310-cp310-macosx_10_12_x86_64.whl (279.4 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

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

Uploaded CPython 3.9Windows x86-64

rustmfx-0.1.3-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.3-cp39-cp39-macosx_11_0_arm64.whl (260.8 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

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

Uploaded CPython 3.9macOS 10.12+ x86-64

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

Uploaded CPython 3.8Windows x86-64

rustmfx-0.1.3-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.3-cp38-cp38-macosx_11_0_arm64.whl (260.7 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

rustmfx-0.1.3-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.3.tar.gz.

File metadata

  • Download URL: rustmfx-0.1.3.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.3.tar.gz
Algorithm Hash digest
SHA256 c1b61eb506f704828b661e5472d1fc2ce885755bde421bb63cb7f7fe958a2b4c
MD5 00a8d38266aa1a0aad2192ddd53abb8f
BLAKE2b-256 8393170ff3caf11bf8e6e529c7fa1469b5c5aa607f6f215d2ba22d6dd582c76b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rustmfx-0.1.3-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.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e2adce87de9efd682d4d7ef81d6b2e50f89a09177f7e2c6a8d1ff63b11c90dd4
MD5 7fe85120a8c4e3019f1b82f2ba19ff0c
BLAKE2b-256 39bb101c28cd423fb56bd4575a2651277e90ae36295d05f9dc60de4f8beb5ccd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 38208f1ce98f9d73eb962e5895753b5f6140cf144e85b457c027546de8dfb903
MD5 8b1756d1df9a07c131f6025350e4f507
BLAKE2b-256 eaa92285e6c1e031a1e90884f44353f0a532bb8753d89fc4da57052871b78483

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f38c2660adc1a7de2c0fb5808c1b0964e99a23ffe7b30c92b8689a7a092186a2
MD5 63311ece60decd1b68637dba3c2445d2
BLAKE2b-256 7b09d0ea851d87bda90cde9c1d7bc93699b20e843e3babb5e4832145d1c9669e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.3-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 fba81e1b7d05912708fc057b3e43b5f9330c1212669b9f61121928e3a4350a5c
MD5 c658209a6daa0fdc7b5111d7fcbd22be
BLAKE2b-256 9e26b4688934c6da246063f6769078f18d2744ba2a6b2ef665ea768394a2976f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rustmfx-0.1.3-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.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9ec2757e8b0bc3b44d7b5be74d607acb0aca172f7bfc6c74d484bfb3548b42bc
MD5 848912a91dd5a95671010303bc9925e3
BLAKE2b-256 abb65e39a6bbd85d4f0ef4a8b5f5f3a4018f1c68a2ecbf2ed00604bc85363a3c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7162e00c4f5ceef0927adbea8bc401ec486e38a6d321ddf642b5de0f8743b54d
MD5 5ff9970af5d0bf6191a104c147b92365
BLAKE2b-256 f203fa677a837c84c1457a5ae17c7027409f790849e2e6d3b901981717cab2c5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1ab17730400c49bbaab46c6d7e97af6bef32875f9e209b1a3f9c1dca5e8479fc
MD5 4da743034b480c7f98bd4fc5ebe5b6db
BLAKE2b-256 09dfbf264d8187129f227075aca9da3cad5f143a0bd863c69a5c22fbcdd0e514

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.3-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 41e921e75ffb9b9508f2c7f464dbcca678875f65e6a02116cf75f67d9c798fbb
MD5 aa1608e789c68cba3cc11d5fbcfbc235
BLAKE2b-256 1d786275e933d06c0bf3aca1a311d6fa1e04f10866b4dc77a1c5d4d51ee02644

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rustmfx-0.1.3-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.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1db8f3f367a1861dc844e72c73e750023fd3ce33b2fb885009339b3286dcb317
MD5 39da3faf14db86323a3dd7b329c78ea5
BLAKE2b-256 88b24a8dbfa7eef018ac93d26c435968ca2862ac55fe1d39df9d5d076ff100d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c3442860e00866dfdb040ea00bc47ca75f4003b41d801f82b7576d6539277249
MD5 067d8a08f27dfb2d5176b7847bc9eaf8
BLAKE2b-256 938dbd563b604b81410331171c71a896afa75ebc2d9db3a2658599c1490fb011

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 36818d468a0e73b73ac7e496d831abcc0e678920aedfc4d43eee255893e62635
MD5 80b76f151503dec9597a9f73071f5fe7
BLAKE2b-256 0fcc09fd4b4ae105ec14a5cf83eca323b462c4e264dad9e004e6b3d8ec3b5682

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.3-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bd78337cd3b37b3f22382d9b9b1af56d7c27753b74af8fcf95b9aa2c5bea72f5
MD5 61821c23d71fc5c3ca3e83578214a297
BLAKE2b-256 76f7b43387a0fcd00b604af605b496556fc39970f7b40df81fb7710fb65f6f4a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rustmfx-0.1.3-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.3-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 280dc22c100e1ad11d7b42e2c23077d392fad66bee1031b52384f500c6bd58c1
MD5 5512a30c663329304d503ceff44a7a32
BLAKE2b-256 f3aeeb11a7f61190af472f4717964161002134bd167b4f33fc13b30b8bb0af3b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fb51509e8840ade1e19b5d4d565ec047f9b5b9d22da651a5800ad0b930cd76f7
MD5 d7cd473e28df6479953607b3875d9d29
BLAKE2b-256 887f9ca74cf32437fd013382e96c6aa3444ee295705f7861097edb6924e5a5ba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.3-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0c55248c070bd5ce567a60fa0dd1c87baac0b20baed537949191c59ad2c8a176
MD5 c120209d69c41c6e6c916c897da9a855
BLAKE2b-256 4179dded0a4bba8e245b988fe7368c4a7e2ad4387086e60cfd4b3ebda935076f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.3-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 cf97a72e6d638e4b57040648d330cea3235db534497e946d72e7dfe88c2fc5e6
MD5 d1f3a4562642c84176507a1abfdc5dc1
BLAKE2b-256 4fe133da69d845deaf352852ec10827de857f15e717c81c19315e3314db6e585

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rustmfx-0.1.3-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.3-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 28e4f06180d3cddc6360d08813227a407d26904a4e3e59a367469ffcf3532845
MD5 1303219d9e6c0b6642a1180843788cb0
BLAKE2b-256 18abb1d77c63deaa93ddf7f659e22aa26af811c8a959031440baaa5e469df956

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 21ae6de62f903b6f8e2952d841ea1482da3cb428f70e1a1302ef2934cbd1683e
MD5 7eef489903d3aeb8f4003327df3ab1e9
BLAKE2b-256 5d9e96483c12c1bd18e4f9d3e9171d4206c23431a46367c2bb5d33b8c549ae94

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.3-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 08f516aec6048b3ae4bdba29985c71ac6ff0e4aead387ef0b6016984a523e85e
MD5 01e1c6cf41b21e2415ad27f8ab3ee3c4
BLAKE2b-256 0a19abfd666291d2fd7d60b34ff6cbdc2eaa90816aa5625b980a059230a2779a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rustmfx-0.1.3-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7504931e9756c72f4ba7b269f50dedc1eb70ff96e7df4450b9b2da9ce14113d9
MD5 7da20970d83e03d554753505cf8739e5
BLAKE2b-256 f0c2e3ee5eab618d793a12d5066ec5db919a87ced70f69cc1d5222b4dc96a759

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