pluralistic-rs 0.2.0

A Rust crate for Quadratic Funding calculations
Documentation
# pluralistic-rs

## Overview

The `pluralistic-rs` library is a Rust crate providing functionality to calculate quadratic funding distributions based
on a set of contributions. The library includes a robust implementation for generating random contributions, managing
contributions, and applying quadratic funding formulas to distribute a matching pot of funds.

## Features

- **Quadratic Funding Calculation**: Calculate funding distributions using the `calculate_linear_qf` function.
- **Matching Upscale**: Upscale matching to saturate a round.
- **Matching Cap Strategies**: Apply different cap strategies (`Cap` and `Redistribute`) using `MatchingCapStrategy`.
- **Random Contribution Generation**: Generate random contributions with the `Random` trait implemented
  for `Contribution`.

## Installation

Add `pluralistic-rs` to your `Cargo.toml` dependencies:

```toml
[dependencies]
pluralistic-rs = "0.1.0"
```

## Usage

1. **Defining Contributions**: Contributions are represented by the `Contribution` struct, which includes sender,
   recipient, and amount details.

1. **Calculating Distributions**: Use `calculate_linear_qf` to calculate the quadratic funding distribution based on the
   contributions, matching pot, and options provided.

2. **Applying Cap Strategies**: Utilize the `MatchingCapStrategy` to define how contributions are capped or
   redistributed when necessary.
3. **Generating Random Contributions**: Use the `Random` trait to generate random contributions for testing and
   simulation purposes.

## Example

```rust
use pluralistic_rs::{Contribution, calculate_linear_qf, LinearQfOptions, Random};

fn main() {
    // Generate random contributions
    let contributions = vec![Contribution::rnd(), Contribution::rnd(), ...];

    // Define options for quadratic funding calculation
    let options = LinearQfOptions {
        matching_cap_amount: Some(1000.0),
        matching_cap_strategy: MatchingCapStrategy::Cap,
        ..Default::default()
    };

    // Calculate distributions
    let distributions = calculate_linear_qf(contributions, 5000.0, options);

    // Process distributions...
}
```

## Testing

The library includes a `tests` module with test cases to ensure the functionality works as expected.

## Dependencies

- `rand`: Used for generating random contributions and other randomness-related functionalities.

## License

MIT