Completed
Branch master (9ed609)
by Nikita
02:40
created

RegressionFactory::linear()   A

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
     * @return InterfaceRegression
60
     * @throws TypeError
61
     */
62
    protected static function createContainer(string $className, array $data): RegressionModel
63
    {
64
        /**
65
        * @var InterfaceRegression $regressionObj
66
        */
67
        $regressionObj = new $className();
68
69
        if (!$regressionObj instanceof InterfaceRegression) {
70
            throw new TypeError(
71
                'the object' . $className .
72
                '  is not compatible with the interface ' . InterfaceRegression::class
73
            );
74
        }
75
76
        $regressionObj->setSourceSequence($data);
77
        $regressionObj->calculate();
78
        return $regressionObj->getRegressionModel();
79
    }
80
}