Files
Reseaux-de-neurones-artific…/app/Services/DatasetReader/LinearOrderDataSetReader.php
Matthias Guillitte ef90236adc
Some checks failed
linter / quality (push) Failing after 6m26s
tests / ci (8.4) (push) Successful in 5m6s
tests / ci (8.5) (push) Successful in 5m38s
Fix linting
2026-03-23 08:44:50 +01:00

72 lines
1.7 KiB
PHP

<?php
namespace App\Services\DatasetReader;
use App\Services\CsvReader;
class LinearOrderDataSetReader implements IDataSetReader
{
public array $lines = [];
private array $currentLines = [];
private int $lastReadLineIndex = -1;
public function __construct(
public string $filename,
) {
// For now, we only support CSV files, so we can delegate to CsvReader
$csvReader = new CsvReader($filename);
$this->readEntireFile($csvReader);
$this->reset();
}
private function readEntireFile(CsvReader $reader): void
{
while ($line = $reader->readNextLine()) {
$newLine = [];
foreach ($line as $value) { // Transform to float
$newLine[] = (float) $value;
}
// if the dataset is for regression, we add a fake label of 0
if (count($newLine) === 2) {
$newLine[] = 0.0;
}
$this->lines[] = $newLine;
}
}
public function getNextLine(): ?array
{
if (! isset($this->currentLines[0])) {
return null; // No more lines to read
}
$this->lastReadLineIndex = array_search($this->currentLines[0], $this->lines, true);
return array_shift($this->currentLines);
}
public function getInputSize(): int
{
return count($this->lines[0]) - 1; // Don't count the label
}
public function reset(): void
{
$this->currentLines = $this->lines;
}
public function getLastReadLineIndex(): int
{
return $this->lastReadLineIndex;
}
public function getEpochExamplesCount(): int
{
return count($this->lines);
}
}