diff --git a/src/PHPSci/Kernel/CArray/CArrayWrapper.php b/src/PHPSci/Kernel/CArray/CArrayWrapper.php index f3b6383..86c1447 100644 --- a/src/PHPSci/Kernel/CArray/CArrayWrapper.php +++ b/src/PHPSci/Kernel/CArray/CArrayWrapper.php @@ -4,18 +4,20 @@ use PHPSci\Kernel\Initializers\Creatable; use PHPSci\Kernel\LinearAlgebra\Operatable; use PHPSci\Kernel\Orchestrator\MemoryPointer; +use PHPSci\Kernel\Ranges\Rangeable; use PHPSci\Kernel\Transform\Transformable; use PHPSci\PHPSci; /** * Class CArrayWrapper * + * @author Henrique Borba <henrique.borba.dev@gmail.com> * @package PHPSci\Kernel\CArray */ abstract class CArrayWrapper implements Stackable, \ArrayAccess, \Countable { - use Transformable, Creatable, Operatable; + use Transformable, Creatable, Operatable, Rangeable; /** * @var diff --git a/src/PHPSci/Kernel/Ranges/Rangeable.php b/src/PHPSci/Kernel/Ranges/Rangeable.php new file mode 100644 index 0000000..31c2d57 --- /dev/null +++ b/src/PHPSci/Kernel/Ranges/Rangeable.php @@ -0,0 +1,41 @@ +<?php + +namespace PHPSci\Kernel\Ranges; + +use PHPSci\Kernel\CArray\CArrayWrapper; +use PHPSci\Kernel\Orchestrator\MemoryPointer; +use PHPSci\PHPSci; + +/** + * Trait Rangeable + * + * @author Henrique Borba <henrique.borba.dev@gmail.com> + * @package PHPSci\Kernel\Ranges + */ +trait Rangeable +{ + + /** + * Return evenly spaced CArray with values within a given interval. + * + * Values are generated within the half-open interval [start, stop) + * (in other words, the interval including start but excluding stop) + * + * @author Henrique Borba <henrique.borba.dev@gmail.com> + * @param float $stop + * @param float $start + * @param float $step + * @return CArrayWrapper + */ + public static function arange(float $stop, float $start = 0., float $step = 1.) : CArrayWrapper { + $new_ptr = \CArray::arange($start, $stop, $step); + return new PHPSci( + new MemoryPointer( + $new_ptr, + $new_ptr->rows, + $new_ptr->cols + ) + ); + } + +} \ No newline at end of file