<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: concept.proto

namespace Messages;

use Google\Protobuf\Internal\GPBType;
use Google\Protobuf\Internal\RepeatedField;
use Google\Protobuf\Internal\GPBUtil;

/**
 * Generated from protobuf message <code>Messages.Model</code>
 */
class Model extends \Google\Protobuf\Internal\Message
{
    /**
     * Generated from protobuf field <code>string name = 1;</code>
     */
    protected $name = '';
    /**
     *reserved
     *
     * Generated from protobuf field <code>repeated string dofs = 3;</code>
     */
    private $dofs;
    /**
     * ordered algorithms (by name)
     *
     * Generated from protobuf field <code>repeated string algorithms = 4;</code>
     */
    private $algorithms;
    /**
     * serialized property-keys
     *
     * Generated from protobuf field <code>repeated string available_outputs = 5;</code>
     */
    private $available_outputs;
    /**
     * some pk's are not recorded by default as an optimization. they can be added
     *
     * Generated from protobuf field <code>repeated string extra_properties = 6;</code>
     */
    private $extra_properties;
    /**
     * relevant algorithm/function names that are applied to one ore more regions or initialize
     *
     * Generated from protobuf field <code>repeated string compatible_conditions = 7;</code>
     */
    private $compatible_conditions;
    /**
     *reserved
     *
     * Generated from protobuf field <code>repeated .Messages.Model sub_models = 9;</code>
     */
    private $sub_models;
    /**
     * default constants, unless otherwise specified (by region)
     *
     * Generated from protobuf field <code>.Messages.Record64 default_data = 10;</code>
     */
    protected $default_data = null;
    /**
     * how each PK can be calculated (by algorithm name)
     *
     * Generated from protobuf field <code>repeated .Messages.Rule rules = 11;</code>
     */
    private $rules;
    /**
     * Generated from protobuf field <code>repeated .Messages.Rule mutex_stack = 12;</code>
     */
    private $mutex_stack;
    /**
     *reserved
     *
     * Generated from protobuf field <code>.Messages.SparseMatrix markov_matrix = 15;</code>
     */
    protected $markov_matrix = null;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $name
     *     @type string[]|\Google\Protobuf\Internal\RepeatedField $dofs
     *          reserved
     *     @type string[]|\Google\Protobuf\Internal\RepeatedField $algorithms
     *           ordered algorithms (by name)
     *     @type string[]|\Google\Protobuf\Internal\RepeatedField $available_outputs
     *           serialized property-keys
     *     @type string[]|\Google\Protobuf\Internal\RepeatedField $extra_properties
     *           some pk's are not recorded by default as an optimization. they can be added
     *     @type string[]|\Google\Protobuf\Internal\RepeatedField $compatible_conditions
     *           relevant algorithm/function names that are applied to one ore more regions or initialize
     *     @type \Messages\Model[]|\Google\Protobuf\Internal\RepeatedField $sub_models
     *          reserved
     *     @type \Messages\Record64 $default_data
     *           default constants, unless otherwise specified (by region)
     *     @type \Messages\Rule[]|\Google\Protobuf\Internal\RepeatedField $rules
     *           how each PK can be calculated (by algorithm name)
     *     @type \Messages\Rule[]|\Google\Protobuf\Internal\RepeatedField $mutex_stack
     *     @type \Messages\SparseMatrix $markov_matrix
     *          reserved
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Concept::initOnce();
        parent::__construct($data);
    }

    /**
     * Generated from protobuf field <code>string name = 1;</code>
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Generated from protobuf field <code>string name = 1;</code>
     * @param string $var
     * @return $this
     */
    public function setName($var)
    {
        GPBUtil::checkString($var, True);
        $this->name = $var;

        return $this;
    }

    /**
     *reserved
     *
     * Generated from protobuf field <code>repeated string dofs = 3;</code>
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getDofs()
    {
        return $this->dofs;
    }

    /**
     *reserved
     *
     * Generated from protobuf field <code>repeated string dofs = 3;</code>
     * @param string[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setDofs($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
        $this->dofs = $arr;

        return $this;
    }

    /**
     * ordered algorithms (by name)
     *
     * Generated from protobuf field <code>repeated string algorithms = 4;</code>
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getAlgorithms()
    {
        return $this->algorithms;
    }

    /**
     * ordered algorithms (by name)
     *
     * Generated from protobuf field <code>repeated string algorithms = 4;</code>
     * @param string[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setAlgorithms($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
        $this->algorithms = $arr;

        return $this;
    }

    /**
     * serialized property-keys
     *
     * Generated from protobuf field <code>repeated string available_outputs = 5;</code>
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getAvailableOutputs()
    {
        return $this->available_outputs;
    }

    /**
     * serialized property-keys
     *
     * Generated from protobuf field <code>repeated string available_outputs = 5;</code>
     * @param string[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setAvailableOutputs($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
        $this->available_outputs = $arr;

        return $this;
    }

    /**
     * some pk's are not recorded by default as an optimization. they can be added
     *
     * Generated from protobuf field <code>repeated string extra_properties = 6;</code>
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getExtraProperties()
    {
        return $this->extra_properties;
    }

    /**
     * some pk's are not recorded by default as an optimization. they can be added
     *
     * Generated from protobuf field <code>repeated string extra_properties = 6;</code>
     * @param string[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setExtraProperties($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
        $this->extra_properties = $arr;

        return $this;
    }

    /**
     * relevant algorithm/function names that are applied to one ore more regions or initialize
     *
     * Generated from protobuf field <code>repeated string compatible_conditions = 7;</code>
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getCompatibleConditions()
    {
        return $this->compatible_conditions;
    }

    /**
     * relevant algorithm/function names that are applied to one ore more regions or initialize
     *
     * Generated from protobuf field <code>repeated string compatible_conditions = 7;</code>
     * @param string[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setCompatibleConditions($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
        $this->compatible_conditions = $arr;

        return $this;
    }

    /**
     *reserved
     *
     * Generated from protobuf field <code>repeated .Messages.Model sub_models = 9;</code>
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getSubModels()
    {
        return $this->sub_models;
    }

    /**
     *reserved
     *
     * Generated from protobuf field <code>repeated .Messages.Model sub_models = 9;</code>
     * @param \Messages\Model[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setSubModels($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Messages\Model::class);
        $this->sub_models = $arr;

        return $this;
    }

    /**
     * default constants, unless otherwise specified (by region)
     *
     * Generated from protobuf field <code>.Messages.Record64 default_data = 10;</code>
     * @return \Messages\Record64|null
     */
    public function getDefaultData()
    {
        return $this->default_data;
    }

    public function hasDefaultData()
    {
        return isset($this->default_data);
    }

    public function clearDefaultData()
    {
        unset($this->default_data);
    }

    /**
     * default constants, unless otherwise specified (by region)
     *
     * Generated from protobuf field <code>.Messages.Record64 default_data = 10;</code>
     * @param \Messages\Record64 $var
     * @return $this
     */
    public function setDefaultData($var)
    {
        GPBUtil::checkMessage($var, \Messages\Record64::class);
        $this->default_data = $var;

        return $this;
    }

    /**
     * how each PK can be calculated (by algorithm name)
     *
     * Generated from protobuf field <code>repeated .Messages.Rule rules = 11;</code>
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getRules()
    {
        return $this->rules;
    }

    /**
     * how each PK can be calculated (by algorithm name)
     *
     * Generated from protobuf field <code>repeated .Messages.Rule rules = 11;</code>
     * @param \Messages\Rule[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setRules($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Messages\Rule::class);
        $this->rules = $arr;

        return $this;
    }

    /**
     * Generated from protobuf field <code>repeated .Messages.Rule mutex_stack = 12;</code>
     * @return \Google\Protobuf\Internal\RepeatedField
     */
    public function getMutexStack()
    {
        return $this->mutex_stack;
    }

    /**
     * Generated from protobuf field <code>repeated .Messages.Rule mutex_stack = 12;</code>
     * @param \Messages\Rule[]|\Google\Protobuf\Internal\RepeatedField $var
     * @return $this
     */
    public function setMutexStack($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Messages\Rule::class);
        $this->mutex_stack = $arr;

        return $this;
    }

    /**
     *reserved
     *
     * Generated from protobuf field <code>.Messages.SparseMatrix markov_matrix = 15;</code>
     * @return \Messages\SparseMatrix|null
     */
    public function getMarkovMatrix()
    {
        return $this->markov_matrix;
    }

    public function hasMarkovMatrix()
    {
        return isset($this->markov_matrix);
    }

    public function clearMarkovMatrix()
    {
        unset($this->markov_matrix);
    }

    /**
     *reserved
     *
     * Generated from protobuf field <code>.Messages.SparseMatrix markov_matrix = 15;</code>
     * @param \Messages\SparseMatrix $var
     * @return $this
     */
    public function setMarkovMatrix($var)
    {
        GPBUtil::checkMessage($var, \Messages\SparseMatrix::class);
        $this->markov_matrix = $var;

        return $this;
    }

}

