RegressionFactory::exponential()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
declare(strict_types = 1);
3
4
namespace Regression;
5
6
use TypeError;
7
8
/**
9
 * Class RegressionFactory
10
 *
11
 * @package Regression
12
 * @author  [email protected]
13
 */
14
class RegressionFactory
15
{
16
    /**
17
     * @param array $data
18
     * @return RegressionModel
19
     * @throws TypeError
20
     */
21
    public static function linear(array $data): RegressionModel
22
    {
23
        return self::createContainer(LinearRegression::class, $data);
24
    }
25
26
    /**
27
     * @param array $data
28
     * @return RegressionModel
29
     * @throws TypeError
30
     */
31
    public static function exponential(array $data): RegressionModel
32
    {
33
        return self::createContainer(ExponentialRegression::class, $data);
34
    }
35
36
    /**
37
     * @param array $data
38
     * @return RegressionModel
39
     * @throws TypeError
40
     */
41
    public static function logarithmic(array $data): RegressionModel
42
    {
43
        return self::createContainer(LogarithmicRegression::class, $data);
44
    }
45
46
    /**
47
     * @param array $data
48
     * @return RegressionModel
49
     * @throws TypeError
50
     */
51
    public static function power(array $data): RegressionModel
52
    {
53
        return self::createContainer(PowerRegression::class, $data);
54
    }
55
56
    /**
57
     * @param string $className
58
     * @param array  $data
59
     *
60
     * @return \Regression\RegressionModel
61
     * @throws \TypeError
62
     */
63
    protected static function createContainer(string $className, array $data): RegressionModel
64
    {
65
        /**
66
        * @var InterfaceRegression $regressionObj
67
        */
68
        $regressionObj = new $className();
69
70
        if (!$regressionObj instanceof InterfaceRegression) {
71
            throw new TypeError(
72
                'the object' . $className .
0 ignored issues
show
Unused Code introduced by
The call to TypeError::__construct() has too many arguments starting with 'the object' . $classNam...erfaceRegression::class.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
73
                '  is not compatible with the interface ' . InterfaceRegression::class
74
            );
75
        }
76
77
        $regressionObj->setSourceSequence($data);
78
        $regressionObj->calculate();
79
80
        return $regressionObj->getRegressionModel();
81
    }
82
}