Compare commits
5 Commits
dc47964310
...
v0.1.0
| Author | SHA1 | Date | |
|---|---|---|---|
| a14df02089 | |||
| 0d266b4428 | |||
| a4b4e5e8fa | |||
| 04d5478ee4 | |||
| 480467ac32 |
90
CHANGELOG.md
Normal file
90
CHANGELOG.md
Normal file
@@ -0,0 +1,90 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## 0.1.0 - 2026-04-23
|
||||
|
||||
### Features
|
||||
|
||||
- feat: added a Drift trait and a "default" ConstantDrift implementation
|
||||
|
||||
### Miscellaneous Tasks
|
||||
|
||||
- chore: added cliff.toml, release.toml and rustfmt.toml
|
||||
- chore: clean up
|
||||
|
||||
### Other (unconventional)
|
||||
|
||||
- Initial commit.
|
||||
- Begin working on batch.
|
||||
- Passing tests for Batch
|
||||
- Working on History struct. First test is passing.
|
||||
- More test passing for History
|
||||
- Added more functions to History
|
||||
- Remove Display impl, better to use Debug
|
||||
- Use flatten instead of flat_map
|
||||
- Handle case where there is no time
|
||||
- It works, or so it seems
|
||||
- Use PlayerIndex instead of String
|
||||
- Inline a lot of functions
|
||||
- Refactor some code
|
||||
- Refactor some stuff
|
||||
- Port from julia version instead
|
||||
- More things, better things, awesome
|
||||
- More tests, more code
|
||||
- More things, more tests
|
||||
- Fix tests
|
||||
- More tests
|
||||
- More tests
|
||||
- Added builder for History, and start migrating test to use builder instead.
|
||||
- Update test to use builder
|
||||
- Remove unused code
|
||||
- Use and Index struct instead of str and String for player id
|
||||
- Update example so now it works, and thats, well, good
|
||||
- Update test to use assert_ulps_eq
|
||||
- Fixed test
|
||||
- Change time to use i64 instead of u64
|
||||
- Small change
|
||||
- Clean up example
|
||||
- Update crates and added methods to get a key or all keys in an IndexMap
|
||||
- Added a get function to IndexMap
|
||||
- Agents doens't have to be behind a mutable reference in within_prior
|
||||
- Agents doens't have to be behind a mutable reference in within_priors
|
||||
- Refactor so we can see if there is any way to improve the performance
|
||||
- Fix clippy warning
|
||||
- More refactoring
|
||||
- Remove warnings and refactor some code
|
||||
- Added benchmark for Batch
|
||||
- Added default implementation for TeamMessage
|
||||
- Remove unused mut reference
|
||||
- Make it more rusty
|
||||
- More rustifying
|
||||
- Small refactor
|
||||
- Rename d to diff, and t to team
|
||||
- Added more links to readme
|
||||
- Fix broken link in README
|
||||
- Update crates
|
||||
- Clean up
|
||||
- Dry my eyes
|
||||
- Remove unnecessary allocations
|
||||
- Fix clippy warning
|
||||
- Refactor history
|
||||
- Rename variables
|
||||
- Move stuff around
|
||||
- Added quality function
|
||||
- Make quality a free standing function instead
|
||||
- Improve performance
|
||||
- Change assert to debug_assert
|
||||
- Added todo to readme, and documentation for quality function
|
||||
- Basic test for quality
|
||||
- Ignore temp folder
|
||||
- Update edition
|
||||
- Small changes for new 2024 edition
|
||||
- remove notepad
|
||||
- added benchmark
|
||||
|
||||
### Styling
|
||||
|
||||
- style: cargo fmt
|
||||
|
||||
<!-- generated by git-cliff -->
|
||||
10
Justfile
Normal file
10
Justfile
Normal file
@@ -0,0 +1,10 @@
|
||||
alias b := bench
|
||||
|
||||
store:
|
||||
cargo bench -- --save-baseline base
|
||||
|
||||
bench:
|
||||
cargo bench -- --baseline base
|
||||
|
||||
flame:
|
||||
cargo flamegraph --root --example atp
|
||||
@@ -1,4 +1,4 @@
|
||||
use criterion::{criterion_group, criterion_main, Criterion};
|
||||
use criterion::{Criterion, criterion_group, criterion_main};
|
||||
use trueskill_tt::gaussian::Gaussian;
|
||||
|
||||
fn benchmark_gaussian_arithmetic(criterion: &mut Criterion) {
|
||||
@@ -6,36 +6,36 @@ fn benchmark_gaussian_arithmetic(criterion: &mut Criterion) {
|
||||
let g1 = Gaussian::from_ms(25.0, 25.0 / 3.0);
|
||||
let g2 = Gaussian::from_ms(0.0, 1.0);
|
||||
let g3 = Gaussian::from_ms(1.0, 1.0);
|
||||
|
||||
|
||||
// Benchmark addition
|
||||
criterion.bench_function("Gaussian::add", |bencher| {
|
||||
bencher.iter(|| g1 + g2);
|
||||
});
|
||||
|
||||
|
||||
// Benchmark subtraction
|
||||
criterion.bench_function("Gaussian::sub", |bencher| {
|
||||
bencher.iter(|| g1 - g3);
|
||||
});
|
||||
|
||||
|
||||
// Benchmark multiplication
|
||||
criterion.bench_function("Gaussian::mul", |bencher| {
|
||||
bencher.iter(|| g1 * g2);
|
||||
});
|
||||
|
||||
|
||||
// Benchmark division
|
||||
criterion.bench_function("Gaussian::div", |bencher| {
|
||||
bencher.iter(|| g1 / g2);
|
||||
});
|
||||
|
||||
|
||||
// Benchmark natural parameter conversions
|
||||
criterion.bench_function("Gaussian::pi", |bencher| {
|
||||
bencher.iter(|| g1.pi());
|
||||
});
|
||||
|
||||
|
||||
criterion.bench_function("Gaussian::tau", |bencher| {
|
||||
bencher.iter(|| g1.tau());
|
||||
});
|
||||
|
||||
|
||||
// Benchmark combined pi/tau operations (used in mul/div)
|
||||
criterion.bench_function("Gaussian::pi_tau_combined", |bencher| {
|
||||
bencher.iter(|| {
|
||||
|
||||
65
cliff.toml
Normal file
65
cliff.toml
Normal file
@@ -0,0 +1,65 @@
|
||||
# git-cliff ~ configuration file
|
||||
# https://git-cliff.org/docs/configuration
|
||||
|
||||
[changelog]
|
||||
# A Tera template to be rendered as the changelog's header.
|
||||
# See https://keats.github.io/tera/docs/#introduction
|
||||
header = """
|
||||
# Changelog\n
|
||||
All notable changes to this project will be documented in this file.\n
|
||||
"""
|
||||
# A Tera template to be rendered for each release in the changelog.
|
||||
# See https://keats.github.io/tera/docs/#introduction
|
||||
body = """
|
||||
{% if version %}\
|
||||
## {{ version | trim_start_matches(pat="v") }} - {{ timestamp | date(format="%Y-%m-%d") }}
|
||||
{% else %}\
|
||||
## Unreleased
|
||||
{% endif %}\
|
||||
{% for group, commits in commits | group_by(attribute="group") %}
|
||||
### {{ group | upper_first }}
|
||||
{% for commit in commits %}
|
||||
- {{ commit.message | split(pat="\n") | first | trim_end }}\
|
||||
{% endfor %}
|
||||
{% endfor %}\n
|
||||
"""
|
||||
# A Tera template to be rendered as the changelog's footer.
|
||||
# See https://keats.github.io/tera/docs/#introduction
|
||||
footer = """
|
||||
<!-- generated by git-cliff -->
|
||||
"""
|
||||
# Remove leading and trailing whitespaces from the changelog's body.
|
||||
trim = true
|
||||
|
||||
|
||||
[git]
|
||||
# Parse commits according to the conventional commits specification.
|
||||
# See https://www.conventionalcommits.org
|
||||
conventional_commits = false
|
||||
# Exclude commits that do not match the conventional commits specification.
|
||||
filter_unconventional = false
|
||||
# Split commits on newlines, treating each line as an individual commit.
|
||||
split_commits = false
|
||||
# An array of regex based parsers for extracting data from the commit message.
|
||||
# Assigns commits to groups.
|
||||
# Optionally sets the commit's scope and can decide to exclude commits from further processing.
|
||||
commit_parsers = [
|
||||
{ message = "^feat", group = "Features" },
|
||||
{ message = "^fix", group = "Bug Fixes" },
|
||||
{ message = "^doc", group = "Documentation" },
|
||||
{ message = "^perf", group = "Performance" },
|
||||
{ message = "^refactor", group = "Refactor" },
|
||||
{ message = "^style", group = "Styling" },
|
||||
{ message = "^test", group = "Testing" },
|
||||
{ message = "^chore\\(release\\): prepare for", skip = true },
|
||||
{ message = "^chore", group = "Miscellaneous Tasks" },
|
||||
{ body = ".*security", group = "Security" },
|
||||
{ body = ".*", group = "Other (unconventional)" },
|
||||
]
|
||||
# Exclude commits that are not matched by any commit parser.
|
||||
filter_commits = false
|
||||
# Order releases topologically instead of chronologically.
|
||||
topo_order = false
|
||||
# Order of commits in each group/release within the changelog.
|
||||
# Allowed values: newest, oldest
|
||||
sort_commits = "oldest"
|
||||
@@ -159,10 +159,12 @@ fn main() {
|
||||
}
|
||||
|
||||
mod csv {
|
||||
use std::fs::File;
|
||||
use std::io::{self, BufRead, BufReader, Lines};
|
||||
use std::ops;
|
||||
use std::path::Path;
|
||||
use std::{
|
||||
fs::File,
|
||||
io::{self, BufRead, BufReader, Lines},
|
||||
ops,
|
||||
path::Path,
|
||||
};
|
||||
|
||||
pub struct Reader {
|
||||
header_map: Vec<String>,
|
||||
|
||||
64
graph.d2
64
graph.d2
@@ -1,64 +0,0 @@
|
||||
vars: {
|
||||
d2-config: {
|
||||
layout-engine: elk
|
||||
# Terminal theme code
|
||||
theme-id: 300
|
||||
}
|
||||
}
|
||||
|
||||
History: {
|
||||
shape: class
|
||||
|
||||
agents: "HashMap<Index, Agent>"
|
||||
batches: "Vec<Batch>"
|
||||
}
|
||||
|
||||
Batch: {
|
||||
shape: class
|
||||
|
||||
skills: "HashMap<Index, Skill>"
|
||||
events: "Vec<Event>"
|
||||
time: "i64"
|
||||
p_draw: "f64"
|
||||
}
|
||||
|
||||
Event: {
|
||||
shape: class
|
||||
|
||||
teams: "Vec<Team>"
|
||||
weights: "Vec<Vec<f64>>"
|
||||
evidence: "f64"
|
||||
}
|
||||
|
||||
Team: {
|
||||
shape: class
|
||||
|
||||
items: "Vec<Item>"
|
||||
output: "f64"
|
||||
}
|
||||
|
||||
Item: {
|
||||
shape: class
|
||||
|
||||
agent: "Index"
|
||||
likelihood: "Gaussian"
|
||||
}
|
||||
|
||||
Skill: {
|
||||
shape: class
|
||||
|
||||
forward: "Gaussian"
|
||||
backward: "Gaussian"
|
||||
likelihood: "Gaussian"
|
||||
elapsed: "i64"
|
||||
online: "Gaussian"
|
||||
}
|
||||
|
||||
History -> Batch
|
||||
|
||||
Batch -> Skill
|
||||
Batch -> Event
|
||||
|
||||
Event -> Team
|
||||
|
||||
Team -> Item
|
||||
2
release.toml
Normal file
2
release.toml
Normal file
@@ -0,0 +1,2 @@
|
||||
publish = false
|
||||
pre-release-hook = ["sh", "-c", "git cliff -o ../CHANGELOG.md --tag {{version}} && git add CHANGELOG.md"]
|
||||
2
rustfmt.toml
Normal file
2
rustfmt.toml
Normal file
@@ -0,0 +1,2 @@
|
||||
imports_granularity = "Crate"
|
||||
group_imports = "StdExternalCrate"
|
||||
@@ -391,9 +391,8 @@ pub(crate) fn compute_elapsed(last_time: i64, actual_time: i64) -> i64 {
|
||||
mod tests {
|
||||
use approx::assert_ulps_eq;
|
||||
|
||||
use crate::{IndexMap, agent::Agent, drift::ConstantDrift, player::Player};
|
||||
|
||||
use super::*;
|
||||
use crate::{IndexMap, agent::Agent, drift::ConstantDrift, player::Player};
|
||||
|
||||
#[test]
|
||||
fn test_one_event_each() {
|
||||
|
||||
@@ -203,9 +203,8 @@ impl<'a, D: Drift> Game<'a, D> {
|
||||
mod tests {
|
||||
use ::approx::assert_ulps_eq;
|
||||
|
||||
use crate::{ConstantDrift, GAMMA, Gaussian, N_INF, Player};
|
||||
|
||||
use super::*;
|
||||
use crate::{ConstantDrift, GAMMA, Gaussian, N_INF, Player};
|
||||
|
||||
#[test]
|
||||
fn test_1vs1() {
|
||||
|
||||
@@ -433,9 +433,8 @@ impl<D: Drift> History<D> {
|
||||
mod tests {
|
||||
use approx::assert_ulps_eq;
|
||||
|
||||
use crate::{ConstantDrift, EPSILON, Game, Gaussian, ITERATIONS, IndexMap, P_DRAW, Player};
|
||||
|
||||
use super::*;
|
||||
use crate::{ConstantDrift, EPSILON, Game, Gaussian, ITERATIONS, IndexMap, P_DRAW, Player};
|
||||
|
||||
#[test]
|
||||
fn test_init() {
|
||||
|
||||
12
src/lib.rs
12
src/lib.rs
@@ -1,8 +1,10 @@
|
||||
use std::borrow::{Borrow, ToOwned};
|
||||
use std::cmp::Reverse;
|
||||
use std::collections::HashMap;
|
||||
use std::f64::consts::{FRAC_1_SQRT_2, FRAC_2_SQRT_PI, SQRT_2};
|
||||
use std::hash::Hash;
|
||||
use std::{
|
||||
borrow::{Borrow, ToOwned},
|
||||
cmp::Reverse,
|
||||
collections::HashMap,
|
||||
f64::consts::{FRAC_1_SQRT_2, FRAC_2_SQRT_PI, SQRT_2},
|
||||
hash::Hash,
|
||||
};
|
||||
|
||||
pub mod agent;
|
||||
#[cfg(feature = "approx")]
|
||||
|
||||
Reference in New Issue
Block a user