nfTlWNl rn Ѻq$³*%yNk9SZ/ϺgC#֒Hnn!V5孱4Fϟh^}r % o ];i U,M|N{J4%%p~72%2]:,PC\:4p B? iϮ[!vx Ԡ_'VfMݠv@' =c`qM:a1[m|OۦZ5F4c+cB7նĂ|F5"Oa={9sn(\kuʓ$&-Ҕ>exUswjJ7A]_اqʄ="źV`Q1#!t4,+odܼ쟤'G^!{tB+xHY&`ms}k5Hy{ѐ$ajN$&-Ҕ>exUswjJ7A]_g4kU" b#d6iMbWp | OC)gdqpo)W\.IQ5Wd}abb&n;<ސәX&K9kiA3'&Ѱ %%Hpb оmL~:P:mGQ'@s:j߬.|54=aNV((G5^PH}8PΒ&nk;XcG1/&F!1kdl2 ^= |B/S;x/,`NAv|3ۅa.hF<-Cw? u8gXϜ@sFV?ċISsLgAèoWݕ5SOpԫie|+-'2Snwq"ys3nQrd/e=E$M6gk|"3@i+Ӻ u4MAI[r0<:"9M#j7{`ƚ 1N{}bY]B!EDAZߖHpKmacee6\]"fg;Kwb󪞍沒:9Z/R";:#tlݾ`ٙcUBy~>>mxvf9 S %ҼZneF7Rп6mVXa7ü8; κoq=-9cPޔZ!Kz2^f%*vܑ^mI*+ĥ̫sJSC>V?d$l< C ;bClC=]( sH.pnbf@57 :p "@G ĢQ$3MD58V@oBDTE%䚻af(pg,mj$8XSPK^@c1;D%  ->ٗ?aiMڭ5pn_ EƨMdb1{tnfgN|kBxhU;-U8Ջ)G%rI;9 lG edU?t1`XGiX1iPї%_7SRxd8lYhY* l7eIegJA69 9c[ޟ)݊fF<.!^aϓ[&jFjEru@XVEotPL]Li8CFDj1pqO"LѨMJTk ĢQ$3(եӭw? u8gXϜ2yERL^dWj~=##lXǿ ĢQ$3+3]~6ybL@qVSX zMnzϙ' w#ϓ}2y=]Fև, ~8H+XnjG2иjKCl :[#rgY-/ءgPt.ҥ*٬5I(ǽZ<%I\VVz?|I? RC( 3>-(ǽZ<%I\VVz?|I? 2] = $value2; $result[$rowIndex][$columnIndex] = $method(...$arguments); } } return $result; } /** * @param mixed ...$arguments */ private static function evaluateMatrixPair(callable $method, array $matrixIndexes, ...$arguments): array { $matrix2 = array_pop($matrixIndexes); /** @var array $matrixValues2 */ $matrixValues2 = $arguments[$matrix2]; $matrix1 = array_pop($matrixIndexes); /** @var array $matrixValues1 */ $matrixValues1 = $arguments[$matrix1]; $result = []; foreach ($matrixValues1 as $rowIndex => $row) { foreach ($row as $columnIndex => $value1) { if (isset($matrixValues2[$rowIndex][$columnIndex]) === false) { continue; } $value2 = $matrixValues2[$rowIndex][$columnIndex]; $arguments[$matrix1] = $value1; $arguments[$matrix2] = $value2; $result[$rowIndex][$columnIndex] = $method(...$arguments); } } return $result; } /** * @param mixed ...$arguments */ private static function evaluateVectorPair(callable $method, int $rowIndex, int $columnIndex, ...$arguments): array { $rowVector = Functions::flattenArray($arguments[$rowIndex]); $columnVector = Functions::flattenArray($arguments[$columnIndex]); $result = []; foreach ($columnVector as $column) { $rowResults = []; foreach ($rowVector as $row) { $arguments[$rowIndex] = $row; $arguments[$columnIndex] = $column; $rowResults[] = $method(...$arguments); } $result[] = $rowResults; } return $result; } /** * Note, offset is from 1 (for the first argument) rather than from 0. * * @param mixed ...$arguments */ private static function evaluateNthArgumentAsArray(callable $method, int $nthArgument, ...$arguments): array { $values = array_slice($arguments, $nthArgument - 1, 1); /** @var array $values */ $values = array_pop($values); $result = []; foreach ($values as $value) { $arguments[$nthArgument - 1] = $value; $result[] = $method(...$arguments); } return $result; } }