More code standards

This commit is contained in:
Jens True 2024-02-02 14:53:38 +00:00
parent 968c78d989
commit 3dddfc05db
46 changed files with 156 additions and 55 deletions

@ -15,6 +15,8 @@ use DNW\Skills\Teams;
class BasicBench class BasicBench
{ {
/** /**
* To benchmark performance when using TwoPlayerTrueSkillCalculator
*
* @Revs(20) * @Revs(20)
* @Iterations(20) * @Iterations(20)
*/ */
@ -44,6 +46,8 @@ class BasicBench
} }
/** /**
* To benchmark performance when using TwoTeamTrueSkillCalculator for just two players in two teams
*
* @Revs(20) * @Revs(20)
* @Iterations(20) * @Iterations(20)
*/ */
@ -73,6 +77,8 @@ class BasicBench
} }
/** /**
* To benchmark performance when using FactorGraphTrueSkillCalculator for just two players in two teams
*
* @Revs(20) * @Revs(20)
* @Iterations(20) * @Iterations(20)
*/ */
@ -102,6 +108,8 @@ class BasicBench
} }
/** /**
* To benchmark performance when using FactorGraphTrueSkillCalculator with 3 players in 3 teams
*
* @Revs(20) * @Revs(20)
* @Iterations(20) * @Iterations(20)
*/ */

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\FactorGraphs; namespace DNW\Skills\FactorGraphs;
use DNW\Skills\Guard; use DNW\Skills\Guard;
@ -94,6 +96,7 @@ abstract class Factor implements \Stringable
/** /**
* Sends the ith message to the marginal and returns the log-normalization constant * Sends the ith message to the marginal and returns the log-normalization constant
*
* @throws Exception * @throws Exception
*/ */
public function sendMessageIndex(int $messageIndex): float|int public function sendMessageIndex(int $messageIndex): float|int

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\FactorGraphs; namespace DNW\Skills\FactorGraphs;
use DNW\Skills\FactorGraphs\ScheduleSequence; use DNW\Skills\FactorGraphs\ScheduleSequence;
@ -42,6 +44,7 @@ abstract class FactorGraphLayer
/** /**
* This reference is still needed * This reference is still needed
*
* @return array<int,array<int,object>> * @return array<int,array<int,object>>
*/ */
public function &getOutputVariablesGroups(): array public function &getOutputVariablesGroups(): array
@ -82,11 +85,11 @@ abstract class FactorGraphLayer
public function createPriorSchedule(): ?ScheduleSequence public function createPriorSchedule(): ?ScheduleSequence
{ {
return null; return NULL;
} }
public function createPosteriorSchedule(): ?ScheduleSequence public function createPosteriorSchedule(): ?ScheduleSequence
{ {
return null; return NULL;
} }
} }

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\FactorGraphs; namespace DNW\Skills\FactorGraphs;
/** /**

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\FactorGraphs; namespace DNW\Skills\FactorGraphs;
class ScheduleLoop extends Schedule class ScheduleLoop extends Schedule

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\FactorGraphs; namespace DNW\Skills\FactorGraphs;
class ScheduleSequence extends Schedule class ScheduleSequence extends Schedule

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\FactorGraphs; namespace DNW\Skills\FactorGraphs;
class ScheduleStep extends Schedule class ScheduleStep extends Schedule

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\FactorGraphs; namespace DNW\Skills\FactorGraphs;
use DNW\Skills\Numerics\GaussianDistribution; use DNW\Skills\Numerics\GaussianDistribution;

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\FactorGraphs; namespace DNW\Skills\FactorGraphs;
class VariableFactory class VariableFactory

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills; namespace DNW\Skills;
/** /**
@ -23,7 +25,8 @@ class GameInfo
private float $beta = self::DEFAULT_BETA, private float $beta = self::DEFAULT_BETA,
private float $dynamicsFactor = self::DEFAULT_DYNAMICS_FACTOR, private float $dynamicsFactor = self::DEFAULT_DYNAMICS_FACTOR,
private float $drawProbability = self::DEFAULT_DRAW_PROBABILITY private float $drawProbability = self::DEFAULT_DRAW_PROBABILITY
) { )
{
} }
public function getInitialMean(): float public function getInitialMean(): float

@ -13,7 +13,7 @@ class Guard
{ {
public static function argumentNotNull(mixed $value, string $parameterName): void public static function argumentNotNull(mixed $value, string $parameterName): void
{ {
if ($value == null) { if ($value == NULL) {
throw new Exception($parameterName . ' can not be null'); throw new Exception($parameterName . ' can not be null');
} }
} }

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\Numerics; namespace DNW\Skills\Numerics;
class DiagonalMatrix extends Matrix class DiagonalMatrix extends Matrix

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\Numerics; namespace DNW\Skills\Numerics;
use Exception; use Exception;
@ -11,7 +13,7 @@ class Matrix
/** /**
* @param array<int,array<int,float>> $matrixRowData * @param array<int,array<int,float>> $matrixRowData
*/ */
public function __construct(private int $rowCount = 0, private int $columnCount = 0, private array $matrixRowData = array()) public function __construct(private int $rowCount = 0, private int $columnCount = 0, private array $matrixRowData = [])
{ {
} }
@ -307,7 +309,7 @@ class Matrix
public function equals(Matrix $otherMatrix): bool public function equals(Matrix $otherMatrix): bool
{ {
if (($this->rowCount != $otherMatrix->getRowCount()) || ($this->columnCount != $otherMatrix->getColumnCount())) { if (($this->rowCount != $otherMatrix->getRowCount()) || ($this->columnCount != $otherMatrix->getColumnCount())) {
return false; return FALSE;
} }
for ($currentRow = 0; $currentRow < $this->rowCount; $currentRow++) { for ($currentRow = 0; $currentRow < $this->rowCount; $currentRow++) {
@ -319,11 +321,11 @@ class Matrix
); );
if ($delta > self::ERROR_TOLERANCE) { if ($delta > self::ERROR_TOLERANCE) {
return false; return FALSE;
} }
} }
} }
return true; return TRUE;
} }
} }

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills; namespace DNW\Skills;
/** /**
@ -12,6 +14,7 @@ class RankSorter
* *
* @param array<mixed> $teams The items to sort according to the order specified by ranks. * @param array<mixed> $teams The items to sort according to the order specified by ranks.
* @param array<int> $teamRanks The ranks for each item where 1 is first place. * @param array<int> $teamRanks The ranks for each item where 1 is first place.
*
* @return array<int> * @return array<int>
*/ */
public static function sort(array &$teams, array &$teamRanks): array public static function sort(array &$teams, array &$teamRanks): array

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills; namespace DNW\Skills;
use Exception; use Exception;
@ -13,7 +15,8 @@ abstract class SkillCalculator
private int $supportedOptions, private int $supportedOptions,
private readonly TeamsRange $totalTeamsAllowed, private readonly TeamsRange $totalTeamsAllowed,
private readonly PlayersRange $playersPerTeamAllowed private readonly PlayersRange $playersPerTeamAllowed
) { )
{
} }
/** /**
@ -22,6 +25,7 @@ abstract class SkillCalculator
* @param GameInfo $gameInfo Parameters for the game. * @param GameInfo $gameInfo Parameters for the game.
* @param Team[] $teams A mapping of team players and their ratings. * @param Team[] $teams A mapping of team players and their ratings.
* @param int[] $teamRanks The ranks of the teams where 1 is first place. For a tie, repeat the number (e.g. 1, 2, 2). * @param int[] $teamRanks The ranks of the teams where 1 is first place. For a tie, repeat the number (e.g. 1, 2, 2).
*
* @return RatingContainer All the players and their new ratings. * @return RatingContainer All the players and their new ratings.
*/ */
abstract public function calculateNewRatings( abstract public function calculateNewRatings(
@ -35,6 +39,7 @@ abstract class SkillCalculator
* *
* @param GameInfo $gameInfo Parameters for the game. * @param GameInfo $gameInfo Parameters for the game.
* @param Team[] $teams A mapping of team players and their ratings. * @param Team[] $teams A mapping of team players and their ratings.
*
* @return float The quality of the match between the teams as a percentage (0% = bad, 100% = well matched). * @return float The quality of the match between the teams as a percentage (0% = bad, 100% = well matched).
*/ */
abstract public function calculateMatchQuality(GameInfo $gameInfo, array $teams): float; abstract public function calculateMatchQuality(GameInfo $gameInfo, array $teams): float;

@ -4,7 +4,7 @@ namespace DNW\Skills;
class Team extends RatingContainer class Team extends RatingContainer
{ {
public function __construct(Player $player = null, Rating $rating = null) public function __construct(Player $player = NULL, Rating $rating = NULL)
{ {
parent::__construct(); parent::__construct();

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills; namespace DNW\Skills;
class Teams class Teams

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills; namespace DNW\Skills;
use DNW\Skills\Numerics\Range; use DNW\Skills\Numerics\Range;

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\TrueSkill; namespace DNW\Skills\TrueSkill;
use DNW\Skills\Numerics\GaussianDistribution; use DNW\Skills\Numerics\GaussianDistribution;

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\TrueSkill\Factors; namespace DNW\Skills\TrueSkill\Factors;
use DNW\Skills\FactorGraphs\Message; use DNW\Skills\FactorGraphs\Message;

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\TrueSkill\Layers; namespace DNW\Skills\TrueSkill\Layers;
use DNW\Skills\FactorGraphs\ScheduleLoop; use DNW\Skills\FactorGraphs\ScheduleLoop;

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\TrueSkill\Layers; namespace DNW\Skills\TrueSkill\Layers;
use DNW\Skills\FactorGraphs\ScheduleStep; use DNW\Skills\FactorGraphs\ScheduleStep;

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\TrueSkill\Layers; namespace DNW\Skills\TrueSkill\Layers;
use DNW\Skills\FactorGraphs\ScheduleStep; use DNW\Skills\FactorGraphs\ScheduleStep;

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\TrueSkill\Layers; namespace DNW\Skills\TrueSkill\Layers;
use DNW\Skills\FactorGraphs\KeyedVariable; use DNW\Skills\FactorGraphs\KeyedVariable;

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\TrueSkill\Layers; namespace DNW\Skills\TrueSkill\Layers;
use DNW\Skills\TrueSkill\DrawMargin; use DNW\Skills\TrueSkill\DrawMargin;

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\TrueSkill\Layers; namespace DNW\Skills\TrueSkill\Layers;
use DNW\Skills\FactorGraphs\Variable; use DNW\Skills\FactorGraphs\Variable;

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\TrueSkill; namespace DNW\Skills\TrueSkill;
use DNW\Skills\FactorGraphs\FactorGraph; use DNW\Skills\FactorGraphs\FactorGraph;
@ -60,11 +62,11 @@ class TrueSkillFactorGraph extends FactorGraph
public function buildGraph(): void public function buildGraph(): void
{ {
$lastOutput = null; $lastOutput = NULL;
$layers = $this->layers; $layers = $this->layers;
foreach ($layers as $currentLayer) { foreach ($layers as $currentLayer) {
if ($lastOutput != null) { if ($lastOutput != NULL) {
$currentLayer->setInputVariablesGroups($lastOutput); $currentLayer->setInputVariablesGroups($lastOutput);
} }
@ -105,7 +107,7 @@ class TrueSkillFactorGraph extends FactorGraph
$layers = $this->layers; $layers = $this->layers;
foreach ($layers as $currentLayer) { foreach ($layers as $currentLayer) {
$currentPriorSchedule = $currentLayer->createPriorSchedule(); $currentPriorSchedule = $currentLayer->createPriorSchedule();
if ($currentPriorSchedule != null) { if ($currentPriorSchedule != NULL) {
$fullSchedule[] = $currentPriorSchedule; $fullSchedule[] = $currentPriorSchedule;
} }
} }
@ -114,7 +116,7 @@ class TrueSkillFactorGraph extends FactorGraph
foreach ($allLayersReverse as $currentLayer) { foreach ($allLayersReverse as $currentLayer) {
$currentPosteriorSchedule = $currentLayer->createPosteriorSchedule(); $currentPosteriorSchedule = $currentLayer->createPosteriorSchedule();
if ($currentPosteriorSchedule != null) { if ($currentPosteriorSchedule != NULL) {
$fullSchedule[] = $currentPosteriorSchedule; $fullSchedule[] = $currentPosteriorSchedule;
} }
} }

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\TrueSkill; namespace DNW\Skills\TrueSkill;
use DNW\Skills\Numerics\GaussianDistribution; use DNW\Skills\Numerics\GaussianDistribution;

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\TrueSkill; namespace DNW\Skills\TrueSkill;
use DNW\Skills\GameInfo; use DNW\Skills\GameInfo;

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\TrueSkill; namespace DNW\Skills\TrueSkill;
use DNW\Skills\GameInfo; use DNW\Skills\GameInfo;

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\Tests\FactorGraphs; namespace DNW\Skills\Tests\FactorGraphs;
use DNW\Skills\FactorGraphs\ScheduleStep; use DNW\Skills\FactorGraphs\ScheduleStep;

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\Tests\FactorGraphs; namespace DNW\Skills\Tests\FactorGraphs;
use DNW\Skills\FactorGraphs\Variable; use DNW\Skills\FactorGraphs\Variable;
@ -13,6 +15,7 @@ class VariableTest extends TestCase
$gd_prior = new GaussianDistribution(); $gd_prior = new GaussianDistribution();
$var = new Variable('dummy', $gd_prior); $var = new Variable('dummy', $gd_prior);
$this->assertEquals($gd_prior, $var->getValue()); $this->assertEquals($gd_prior, $var->getValue());
$gd_new = new GaussianDistribution(); $gd_new = new GaussianDistribution();
$this->assertEquals($gd_new, $var->getValue()); $this->assertEquals($gd_new, $var->getValue());
$var->resetToPrior(); $var->resetToPrior();

@ -1,4 +1,6 @@
<?php declare(strict_types=1); <?php
declare(strict_types=1);
namespace DNW\Skills\Tests; namespace DNW\Skills\Tests;
@ -12,7 +14,7 @@ class GuardTest extends TestCase
{ {
$this->expectException(Exception::class); $this->expectException(Exception::class);
$this->expectExceptionMessage('dummy can not be null'); $this->expectExceptionMessage('dummy can not be null');
Guard::argumentNotNull(null, "dummy"); Guard::argumentNotNull(NULL, "dummy");
} }
public function testargumentIsValidIndex(): void public function testargumentIsValidIndex(): void

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\Tests\Numerics; namespace DNW\Skills\Tests\Numerics;
use DNW\Skills\Numerics\BasicMath; use DNW\Skills\Numerics\BasicMath;

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\Tests\Numerics; namespace DNW\Skills\Tests\Numerics;
use DNW\Skills\Numerics\BasicMath; use DNW\Skills\Numerics\BasicMath;

@ -1,4 +1,6 @@
<?php declare(strict_types=1); <?php
declare(strict_types=1);
namespace DNW\Skills\Tests\Numerics; namespace DNW\Skills\Tests\Numerics;

@ -1,4 +1,6 @@
<?php declare(strict_types=1); <?php
declare(strict_types=1);
namespace DNW\Skills\Tests\Numerics; namespace DNW\Skills\Tests\Numerics;

@ -1,4 +1,6 @@
<?php declare(strict_types=1); <?php
declare(strict_types=1);
namespace DNW\Skills\Tests; namespace DNW\Skills\Tests;

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\Tests; namespace DNW\Skills\Tests;
use DNW\Skills\RankSorter; use DNW\Skills\RankSorter;

@ -1,5 +1,7 @@
<?php <?php
declare(strict_types=1);
namespace DNW\Skills\Tests; namespace DNW\Skills\Tests;
use DNW\Skills\Rating; use DNW\Skills\Rating;
@ -19,10 +21,10 @@ class RatingTest extends TestCase
public function testPartialUpdate(): void public function testPartialUpdate(): void
{ {
$rating = new Rating(100, 10, 5); $rating = new Rating(100, 10, 5);
$rating_prior = new Rating(100, 10, 5); $ratingOld = new Rating(100, 10, 5);
$rating_new = new Rating(200, 10, 5); $ratingNew = new Rating(200, 10, 5);
$rating_partial = $rating ->getPartialUpdate($rating_prior, $rating_new, 0.5); $rating_partial = $rating->getPartialUpdate($ratingOld, $ratingNew, 0.5);
$this->assertEquals(150, $rating_partial->getMean()); $this->assertEquals(150, $rating_partial->getMean());

@ -1,4 +1,6 @@
<?php declare(strict_types=1); <?php
declare(strict_types=1);
namespace DNW\Skills\Tests\TrueSkill; namespace DNW\Skills\Tests\TrueSkill;

@ -1,4 +1,6 @@
<?php declare(strict_types=1); <?php
declare(strict_types=1);
namespace DNW\Skills\Tests\TrueSkill; namespace DNW\Skills\Tests\TrueSkill;
@ -21,6 +23,6 @@ class FactorGraphTeamTrueSkillCalculatorTest extends TestCase
public function testMethodisSupported(): void public function testMethodisSupported(): void
{ {
$calculator = new FactorGraphTrueSkillCalculator(); $calculator = new FactorGraphTrueSkillCalculator();
$this->assertEquals(true, $calculator->isSupported(SkillCalculatorSupportedOptions::PARTIAL_PLAY)); $this->assertEquals(TRUE, $calculator->isSupported(SkillCalculatorSupportedOptions::PARTIAL_PLAY));
} }
} }

@ -1,4 +1,6 @@
<?php declare(strict_types=1); <?php
declare(strict_types=1);
namespace DNW\Skills\Tests\TrueSkill; namespace DNW\Skills\Tests\TrueSkill;
@ -25,7 +27,7 @@ class FactorGraphTrueSkillCalculatorTest extends TestCase
new Player("hillary"), new Player("hillary"),
]; ];
$teams = array(); $teams = [];
foreach ($players as $player) { foreach ($players as $player) {
$teams[] = new Team($player, $gameInfo->getDefaultRating()); $teams[] = new Team($player, $gameInfo->getDefaultRating());
} }

@ -1,4 +1,6 @@
<?php declare(strict_types=1); <?php
declare(strict_types=1);
namespace DNW\Skills\Tests\TrueSkill; namespace DNW\Skills\Tests\TrueSkill;
@ -108,6 +110,7 @@ class TrueSkillCalculatorTests
$team2 = new Team($player2, $gameInfo->getDefaultRating()); $team2 = new Team($player2, $gameInfo->getDefaultRating());
$teams = Teams::concat($team1, $team2); $teams = Teams::concat($team1, $team2);
$newRatings = $calculator->calculateNewRatings($gameInfo, $teams, [1, 1]); $newRatings = $calculator->calculateNewRatings($gameInfo, $teams, [1, 1]);
$player1NewRating = $newRatings->getRating($player1); $player1NewRating = $newRatings->getRating($player1);
@ -170,9 +173,7 @@ class TrueSkillCalculatorTests
private static function oneOnTwoSimpleTest(TestCase $testClass, SkillCalculator $calculator): void private static function oneOnTwoSimpleTest(TestCase $testClass, SkillCalculator $calculator): void
{ {
$player1 = new Player(1); $player1 = new Player(1);
$gameInfo = new GameInfo(); $gameInfo = new GameInfo();
$team1 = new Team(); $team1 = new Team();
$team1->addPlayer($player1, $gameInfo->getDefaultRating()); $team1->addPlayer($player1, $gameInfo->getDefaultRating());

@ -1,4 +1,6 @@
<?php declare(strict_types=1); <?php
declare(strict_types=1);
namespace DNW\Skills\Tests\TrueSkill; namespace DNW\Skills\Tests\TrueSkill;

@ -1,4 +1,6 @@
<?php declare(strict_types=1); <?php
declare(strict_types=1);
namespace DNW\Skills\Tests\TrueSkill; namespace DNW\Skills\Tests\TrueSkill;