for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace loophp\collection\Operation;
use Closure;
use Generator;
/**
* @immutable
*
* @template TKey
* @template T
*/
final class Dispersion extends AbstractOperation
{
* @return Closure(iterable<TKey, T>): Generator<int, float|int<0,1>>
public function __invoke(): Closure
/** @var Closure(iterable<TKey, T>): Generator<int, float|int<0,1>> $pipe */
$pipe = (new Pipe())()(
(new Normalize())(),
(new ScanLeft())()(
* @param array<float|int<0,1>, T|null> $acc
array<float|int<0,1>, T|null>
4
* @param T $value
* @return array<float|int<0,1>, T>
array<float|int<0,1>, T>
static function (array $acc, mixed $value, int $key): array {
[$c, $v] = $acc;
return [(0 === $key) ? 0 : (($c * ($key - 1) + (($v === $value) ? 0 : 1)) / $key), $value];
}
)([0, null]),
(new Drop())()(1),
(new Map())()(
* @param array<float|int<0,1>, T> $value
* @return float|int<0,1>
static fn (array $value): float|int => (0.0 === $value[0] || 1.0 === $value[0]) ? (int) $value[0] : $value[0]
)
);
return $pipe;