96 const std::vector< double >& source_pos,
97 const std::vector< double >& target_pos,
157 value_ = d.get<
double >(
"value" );
204 "min < max required." );
243 throw BadProperty(
"UniformIntParameter: max > 0 required." );
334 throw BadProperty(
"ExponentialParameter: beta ≥ 0 required." );
341 return beta_ * ( -std::log( 1 - rng->
drand() ) );
373 if ( not dimension_specified )
375 throw BadParameterValue(
"Dimension must be specified when creating a node position parameter." );
379 throw BadParameterValue(
"Node position parameter dimension cannot be negative." );
384 throw BadParameterValue(
"Synaptic endpoint must either be unspecified (0), source (1) or target (2)." );
393 throw BadParameterValue(
"Source or target position parameter can only be used when connecting." );
397 throw KernelException(
"Node position parameter can only be used when connecting spatially distributed nodes." );
404 const std::vector< double >& source_pos,
405 const std::vector< double >& target_pos,
412 throw BadParameterValue(
"Node position parameter cannot be used when connecting." );
444 throw BadParameterValue(
"Spatial distance parameter dimension cannot be negative." );
451 throw BadParameterValue(
"Spatial distance parameter can only be used when connecting." );
455 const std::vector< double >& source_pos,
456 const std::vector< double >& target_pos,
501 const std::vector< double >& source_pos,
502 const std::vector< double >& target_pos,
504 Node* node )
override
506 return parameter1_->value( rng, source_pos, target_pos, layer, node )
507 *
parameter2_->value( rng, source_pos, target_pos, layer, node );
551 const std::vector< double >& source_pos,
552 const std::vector< double >& target_pos,
554 Node* node )
override
556 return parameter1_->value( rng, source_pos, target_pos, layer, node )
557 /
parameter2_->value( rng, source_pos, target_pos, layer, node );
601 const std::vector< double >& source_pos,
602 const std::vector< double >& target_pos,
604 Node* node )
override
606 return parameter1_->value( rng, source_pos, target_pos, layer, node )
607 +
parameter2_->value( rng, source_pos, target_pos, layer, node );
651 const std::vector< double >& source_pos,
652 const std::vector< double >& target_pos,
654 Node* node )
override
656 return parameter1_->value( rng, source_pos, target_pos, layer, node )
657 -
parameter2_->value( rng, source_pos, target_pos, layer, node );
692 throw BadParameter(
"A comparator has to be specified." );
696 throw BadParameter(
"Comparator specification has to be in the range 0-5." );
719 const std::vector< double >& source_pos,
720 const std::vector< double >& target_pos,
722 Node* node )
override
725 parameter2_->value( rng, source_pos, target_pos, layer, node ) );
739 return value_a < value_b;
741 return value_a <= value_b;
743 return value_a == value_b;
745 return value_a != value_b;
747 return value_a >= value_b;
749 return value_a > value_b;
793 return if_true_->value( rng, node );
803 const std::vector< double >& source_pos,
804 const std::vector< double >& target_pos,
806 Node* node )
override
808 if (
condition_->value( rng, source_pos, target_pos, layer, node ) )
810 return if_true_->value( rng, source_pos, target_pos, layer, node );
814 return if_false_->value( rng, source_pos, target_pos, layer, node );
861 const std::vector< double >& source_pos,
862 const std::vector< double >& target_pos,
864 Node* node )
override
866 return std::min(
p_->value( rng, source_pos, target_pos, layer, node ),
other_value_ );
910 const std::vector< double >& source_pos,
911 const std::vector< double >& target_pos,
913 Node* node )
override
915 return std::max(
p_->value( rng, source_pos, target_pos, layer, node ),
other_value_ );
950 const std::vector< double >& source_pos,
951 const std::vector< double >& target_pos,
953 Node* node )
override;
991 return std::exp(
p_->value( rng, node ) );
996 const std::vector< double >& source_pos,
997 const std::vector< double >& target_pos,
999 Node* node )
override
1001 return std::exp(
p_->value( rng, source_pos, target_pos, layer, node ) );
1037 return std::sin(
p_->value( rng, node ) );
1042 const std::vector< double >& source_pos,
1043 const std::vector< double >& target_pos,
1045 Node* node )
override
1047 return std::sin(
p_->value( rng, source_pos, target_pos, layer, node ) );
1082 return std::cos(
p_->value( rng, node ) );
1087 const std::vector< double >& source_pos,
1088 const std::vector< double >& target_pos,
1090 Node* node )
override
1092 return std::cos(
p_->value( rng, source_pos, target_pos, layer, node ) );
1130 return std::pow(
p_->value( rng, node ),
exponent_ );
1135 const std::vector< double >& source_pos,
1136 const std::vector< double >& target_pos,
1138 Node* node )
override
1140 return std::pow(
p_->value( rng, source_pos, target_pos, layer, node ),
exponent_ );
1205 std::vector< double >
1211 return {
px_->value( rng,
nullptr ),
py_->value( rng,
nullptr ) };
1213 return {
px_->value( rng,
nullptr ),
py_->value( rng,
nullptr ),
pz_->value( rng,
nullptr ) };
1261 throw BadParameterValue(
"Exponential distribution parameter can only be used when connecting." );
1265 const std::vector< double >& source_pos,
1266 const std::vector< double >& target_pos,
1268 Node* node )
override;
1305 throw BadParameterValue(
"Gaussian distribution parameter can only be used when connecting." );
1309 const std::vector< double >& source_pos,
1310 const std::vector< double >& target_pos,
1312 Node* node )
override;
1354 throw BadParameterValue(
"Gaussian 2D parameter can only be used when connecting." );
1358 const std::vector< double >& source_pos,
1359 const std::vector< double >& target_pos,
1361 Node* node )
override;
1409 const std::vector< double >& source_pos,
1410 const std::vector< double >& target_pos,
1412 Node* node )
override;
1415 std::shared_ptr< Parameter >
const px_;
1416 std::shared_ptr< Parameter >
const py_;
1456 throw BadParameterValue(
"Gamma distribution parameter can only be used when connecting." );
1460 const std::vector< double >& source_pos,
1461 const std::vector< double >& target_pos,
1463 Node* node )
override;
1474 const std::vector< double >&,
1475 const std::vector< double >&,
1479 return value( rng, node );
1499 return std::fmod(
value,
static_cast< double >( 1.0 ) ) == 0.0;
Dictionary class for interface to Python and C++ API.
Definition dictionary.h:213
Abstract base class for Layers of unspecified dimension.
Definition layer.h:52
Exception to be thrown if a parameter value is not acceptable.
Definition exceptions.h:752
Exception to be thrown if a parameter cannot be set.
Definition exceptions.h:717
Exception to be thrown if a status parameter is incomplete or inconsistent.
Definition exceptions.h:680
Base class for RNG engine wrappers.
Definition random_generators.h:67
virtual unsigned long ulrand(unsigned long N)=0
Uses the wrapped RNG engine to draw an unsigned long from a uniform distribution in the range [0,...
virtual double drand()=0
Uses the wrapped RNG engine to draw a double from a uniform distribution in the range [0,...
Parameter class representing the comparison of two parameters.
Definition parameter.h:669
double value(RngPtr rng, Node *node) override
Definition parameter.h:712
ParameterPTR const parameter2_
Definition parameter.h:730
double value(RngPtr rng, const std::vector< double > &source_pos, const std::vector< double > &target_pos, const AbstractLayer &layer, Node *node) override
Generates a value based on parameter specifications and arguments.
Definition parameter.h:718
ParameterPTR const parameter1_
Definition parameter.h:729
ComparingParameter(const ComparingParameter &p)
Definition parameter.h:700
ComparingParameter(ParameterPTR m1, ParameterPTR m2, const Dictionary &d)
Construct the comparison of the two given parameters.
Definition parameter.h:684
bool compare_(double value_a, double value_b) const
Definition parameter.h:734
int comparator_
Definition parameter.h:754
Parameter class choosing a value based on a comparing parameter.
Definition parameter.h:762
double value(RngPtr rng, const std::vector< double > &source_pos, const std::vector< double > &target_pos, const AbstractLayer &layer, Node *node) override
Generates a value based on parameter specifications and arguments.
Definition parameter.h:802
ConditionalParameter(const ConditionalParameter &p)
Definition parameter.h:777
ParameterPTR const if_false_
Definition parameter.h:821
ParameterPTR const condition_
Definition parameter.h:819
ParameterPTR const if_true_
Definition parameter.h:820
double value(RngPtr rng, Node *node) override
Definition parameter.h:789
ConditionalParameter(ParameterPTR condition, ParameterPTR if_true, ParameterPTR if_false)
Construct the choice of two given parameters, based on a third.
Definition parameter.h:768
Parameter with constant value.
Definition parameter.h:132
double value_
Definition parameter.h:173
ConstantParameter(double value)
Creates a ConstantParameter with a specified value.
Definition parameter.h:141
ConstantParameter(const Dictionary &d)
Creates a ConstantParameter with the value specified in a dictionary.
Definition parameter.h:155
~ConstantParameter() override=default
double value(RngPtr, Node *) override
Definition parameter.h:167
Parameter class representing the cosine of a parameter.
Definition parameter.h:1058
CosParameter(const CosParameter &p)
Definition parameter.h:1070
double value(RngPtr rng, Node *node) override
Definition parameter.h:1080
ParameterPTR const p_
Definition parameter.h:1096
double value(RngPtr rng, const std::vector< double > &source_pos, const std::vector< double > &target_pos, const AbstractLayer &layer, Node *node) override
Generates a value based on parameter specifications and arguments.
Definition parameter.h:1086
CosParameter(ParameterPTR p)
Construct the exponential of the given parameter.
Definition parameter.h:1064
Parameter class representing the difference of two parameters.
Definition parameter.h:619
double value(RngPtr rng, const std::vector< double > &source_pos, const std::vector< double > &target_pos, const AbstractLayer &layer, Node *node) override
Generates a value based on parameter specifications and arguments.
Definition parameter.h:650
DifferenceParameter(ParameterPTR m1, ParameterPTR m2)
Construct the difference of two given parameters.
Definition parameter.h:626
ParameterPTR const parameter2_
Definition parameter.h:662
DifferenceParameter(const DifferenceParameter &p)
Definition parameter.h:633
double value(RngPtr rng, Node *node) override
Definition parameter.h:644
ParameterPTR const parameter1_
Definition parameter.h:661
Position-generating Parameter class.
Definition parameter.h:1155
ParameterPTR const pz_
Definition parameter.h:1228
DimensionParameter(const DimensionParameter &p)
Definition parameter.h:1182
int get_num_dimensions() const
Definition parameter.h:1219
DimensionParameter(ParameterPTR px, ParameterPTR py)
Construct the Parameter with one given Parameter per dimension.
Definition parameter.h:1164
ParameterPTR const px_
Definition parameter.h:1226
double value(RngPtr, Node *) override
The DimensionParameter has no double value, so this method will always throw.
Definition parameter.h:1195
int num_dimensions_
Definition parameter.h:1225
DimensionParameter(ParameterPTR px, ParameterPTR py, ParameterPTR pz)
Definition parameter.h:1173
ParameterPTR const py_
Definition parameter.h:1227
std::vector< double > get_values(RngPtr rng)
Generates a position with values for each dimension generated from their respective parameters.
Definition parameter.h:1206
Parameter class representing an exponential distribution applied on a parameter.
Definition parameter.h:1238
ParameterPTR const p_
Definition parameter.h:1271
double value(RngPtr, Node *) override
Definition parameter.h:1259
const double inv_beta_
Definition parameter.h:1272
ExpDistParameter(const ExpDistParameter &p)
Definition parameter.h:1247
Parameter class representing the exponential of a parameter.
Definition parameter.h:967
double value(RngPtr rng, const std::vector< double > &source_pos, const std::vector< double > &target_pos, const AbstractLayer &layer, Node *node) override
Generates a value based on parameter specifications and arguments.
Definition parameter.h:995
ExpParameter(const ExpParameter &p)
Definition parameter.h:979
double value(RngPtr rng, Node *node) override
Definition parameter.h:989
ExpParameter(ParameterPTR p)
Construct the exponential of the given parameter.
Definition parameter.h:973
ParameterPTR const p_
Definition parameter.h:1005
Random parameter with exponential distribution.
Definition parameter.h:316
double value(RngPtr rng, Node *) override
Generates a value based on parameter specifications and arguments.
Definition parameter.h:339
ExponentialParameter(const Dictionary &d)
Creates a ExponentialParameter with specifications specified in a dictionary.
Definition parameter.h:328
double beta_
Definition parameter.h:345
Definition parameter.h:1374
const double lambda_
Definition parameter.h:1421
double value(RngPtr, Node *) override
Definition parameter.h:1403
const double inv_two_std2_
Definition parameter.h:1420
const double gamma_
Definition parameter.h:1419
const double cos_
Definition parameter.h:1417
std::shared_ptr< Parameter > const px_
Definition parameter.h:1415
std::shared_ptr< Parameter > const py_
Definition parameter.h:1416
const double psi_
Definition parameter.h:1422
GaborParameter(const GaborParameter &p)
Copy constructor.
Definition parameter.h:1386
const double sin_
Definition parameter.h:1418
Parameter class representing a gamma distribution applied on a parameter.
Definition parameter.h:1432
const double inv_theta_
Definition parameter.h:1468
double value(RngPtr, Node *) override
Definition parameter.h:1454
ParameterPTR const p_
Definition parameter.h:1466
const double delta_
Definition parameter.h:1469
const double kappa_
Definition parameter.h:1467
GammaParameter(const GammaParameter &p)
Definition parameter.h:1441
Parameter class representing a gaussian distribution in two dimensions applied on a parameter.
Definition parameter.h:1327
ParameterPTR const px_
Definition parameter.h:1364
const double y_term_const_
Definition parameter.h:1369
const double xy_term_const_
Definition parameter.h:1370
double value(RngPtr, Node *) override
Definition parameter.h:1352
Gaussian2DParameter(const Gaussian2DParameter &p)
Definition parameter.h:1336
ParameterPTR const py_
Definition parameter.h:1365
const double x_term_const_
Definition parameter.h:1368
const double mean_x_
Definition parameter.h:1366
const double mean_y_
Definition parameter.h:1367
Parameter class representing a gaussian distribution applied on a parameter.
Definition parameter.h:1282
const double mean_
Definition parameter.h:1316
GaussianParameter(const GaussianParameter &p)
Definition parameter.h:1291
const double inv_two_std2_
Definition parameter.h:1317
double value(RngPtr, Node *) override
Definition parameter.h:1303
ParameterPTR const p_
Definition parameter.h:1315
Base class for all Kernel exceptions.
Definition exceptions.h:65
Random parameter with lognormal distribution.
Definition parameter.h:289
double std_
Definition parameter.h:307
double value(RngPtr rng, Node *node) override
Generates a value based on parameter specifications and arguments.
Definition parameter.cpp:147
double mean_
Definition parameter.h:307
std::vector< lognormal_distribution > lognormal_dists_
Definition parameter.h:308
Parameter class representing the maximum of a parameter's value and a given value.
Definition parameter.h:879
MaxParameter(const MaxParameter &p)
Definition parameter.h:892
double other_value_
Definition parameter.h:920
MaxParameter(ParameterPTR p, const double other_value)
Construct a max parameter.
Definition parameter.h:885
double value(RngPtr rng, Node *node) override
Definition parameter.h:903
ParameterPTR const p_
Definition parameter.h:919
double value(RngPtr rng, const std::vector< double > &source_pos, const std::vector< double > &target_pos, const AbstractLayer &layer, Node *node) override
Generates a value based on parameter specifications and arguments.
Definition parameter.h:909
Parameter class representing the minimum of a parameter's value and a given value.
Definition parameter.h:829
double value(RngPtr rng, const std::vector< double > &source_pos, const std::vector< double > &target_pos, const AbstractLayer &layer, Node *node) override
Generates a value based on parameter specifications and arguments.
Definition parameter.h:860
double value(RngPtr rng, Node *node) override
Definition parameter.h:854
double other_value_
Definition parameter.h:871
ParameterPTR const p_
Definition parameter.h:870
MinParameter(ParameterPTR p, const double other_value)
Construct a min parameter.
Definition parameter.h:835
MinParameter(const MinParameter &p)
Definition parameter.h:843
Node position parameter.
Definition parameter.h:353
double value(RngPtr, Node *node) override
Generates a value based on parameter specifications and arguments.
Definition parameter.h:389
double get_node_pos_(Node *node) const
Definition parameter.cpp:161
long dimension_
Definition parameter.h:424
NodePosParameter(const Dictionary &d)
Creates a NodePosParameter with specifications specified in a dictionary.
Definition parameter.h:367
double value(RngPtr, const std::vector< double > &source_pos, const std::vector< double > &target_pos, const AbstractLayer &, Node *) override
Generates a value based on parameter specifications and arguments.
Definition parameter.h:403
int synaptic_endpoint_
Definition parameter.h:425
Base class for all NEST network objects.
Definition node.h:99
Random parameter with normal distribution.
Definition parameter.h:262
double mean_
Definition parameter.h:280
std::vector< normal_distribution > normal_dists_
Definition parameter.h:281
double std_
Definition parameter.h:280
double value(RngPtr rng, Node *node) override
Generates a value based on parameter specifications and arguments.
Definition parameter.cpp:107
Abstract base class for parameters.
Definition parameter.h:48
bool value_is_integer_(const double value) const
Definition parameter.h:1495
bool is_spatial() const
Check if the Parameter is based on spatial properties.
Definition parameter.h:1483
Parameter(bool is_spatial=false, bool returns_int_only=false)
Creates a Parameter, with optionally specified attributes.
Definition parameter.h:56
Parameter(const Parameter &p)=default
virtual double value(RngPtr, Node *)
Generates a value based on parameter specifications and arguments.
Definition parameter.h:78
bool is_spatial_
Definition parameter.h:122
std::vector< double > apply(const NodeCollectionPTR &, const std::vector< std::vector< double > > &)
Applies a parameter on a single-node ID NodeCollection and given array of positions.
Definition parameter.cpp:37
bool returns_int_only_
Definition parameter.h:123
bool returns_int_only() const
Check if the Parameter only returns integer values.
Definition parameter.h:1489
virtual ~Parameter()=default
Parameter class representing the parameter raised to the power of an exponent.
Definition parameter.h:1105
const double exponent_
Definition parameter.h:1145
double value(RngPtr rng, Node *node) override
Definition parameter.h:1128
PowParameter(ParameterPTR p, const double exponent)
Construct the parameter.
Definition parameter.h:1110
PowParameter(const PowParameter &p)
Definition parameter.h:1117
ParameterPTR const p_
Definition parameter.h:1144
double value(RngPtr rng, const std::vector< double > &source_pos, const std::vector< double > &target_pos, const AbstractLayer &layer, Node *node) override
Generates a value based on parameter specifications and arguments.
Definition parameter.h:1134
Parameter class representing the product of two parameters.
Definition parameter.h:469
ParameterPTR const parameter1_
Definition parameter.h:511
double value(RngPtr rng, const std::vector< double > &source_pos, const std::vector< double > &target_pos, const AbstractLayer &layer, Node *node) override
Generates a value based on parameter specifications and arguments.
Definition parameter.h:500
ProductParameter(const ParameterPTR m1, const ParameterPTR m2)
Construct the product of the two given parameters.
Definition parameter.h:476
ProductParameter(const ProductParameter &p)
Definition parameter.h:483
double value(RngPtr rng, Node *node) override
Definition parameter.h:494
ParameterPTR const parameter2_
Definition parameter.h:512
Parameter class representing the quotient of two parameters.
Definition parameter.h:519
QuotientParameter(ParameterPTR m1, ParameterPTR m2)
Construct the quotient of two given parameters.
Definition parameter.h:526
double value(RngPtr rng, Node *node) override
Definition parameter.h:544
ParameterPTR const parameter1_
Definition parameter.h:561
double value(RngPtr rng, const std::vector< double > &source_pos, const std::vector< double > &target_pos, const AbstractLayer &layer, Node *node) override
Generates a value based on parameter specifications and arguments.
Definition parameter.h:550
ParameterPTR const parameter2_
Definition parameter.h:562
QuotientParameter(const QuotientParameter &p)
Definition parameter.h:533
Parameter class redrawing a parameter value if it is outside of specified limits.
Definition parameter.h:928
const size_t max_redraws_
Definition parameter.h:959
double max_
Definition parameter.h:958
double min_
Definition parameter.h:957
double value(RngPtr rng, Node *node) override
Definition parameter.cpp:248
RedrawParameter(const RedrawParameter &p)
Definition parameter.h:936
ParameterPTR const p_
Definition parameter.h:956
Parameter class representing the sine of a parameter.
Definition parameter.h:1013
SinParameter(ParameterPTR p)
Construct the sine of the given parameter.
Definition parameter.h:1019
ParameterPTR const p_
Definition parameter.h:1051
double value(RngPtr rng, const std::vector< double > &source_pos, const std::vector< double > &target_pos, const AbstractLayer &layer, Node *node) override
Generates a value based on parameter specifications and arguments.
Definition parameter.h:1041
double value(RngPtr rng, Node *node) override
Definition parameter.h:1035
SinParameter(const SinParameter &p)
Definition parameter.h:1025
Parameter representing the spatial distance between two nodes, optionally in a specific dimension.
Definition parameter.h:435
SpatialDistanceParameter(const Dictionary &d)
Definition parameter.h:437
int dimension_
Definition parameter.h:461
double value(RngPtr, Node *) override
Generates a value based on parameter specifications and arguments.
Definition parameter.h:449
Parameter class representing the sum of two parameters.
Definition parameter.h:569
double value(RngPtr rng, Node *node) override
Definition parameter.h:594
SumParameter(ParameterPTR m1, ParameterPTR m2)
Construct the sum of two given parameters.
Definition parameter.h:576
SumParameter(const SumParameter &p)
Definition parameter.h:583
ParameterPTR const parameter1_
Definition parameter.h:611
double value(RngPtr rng, const std::vector< double > &source_pos, const std::vector< double > &target_pos, const AbstractLayer &layer, Node *node) override
Generates a value based on parameter specifications and arguments.
Definition parameter.h:600
ParameterPTR const parameter2_
Definition parameter.h:612
const std::string max("max")
const std::string beta("beta")
const std::string synaptic_endpoint("synaptic_endpoint")
const std::string comparator("comparator")
const std::string min("min")
const std::string dimension("dimension")
Namespace for the NEST simulation kernel.
Definition beta_normalization_factor.h:33
ParameterPTR divide_parameter(const ParameterPTR first, const ParameterPTR second)
Create the quotient of one parameter with another.
Definition parameter.cpp:462
ParameterPTR compare_parameter(const ParameterPTR first, const ParameterPTR second, const Dictionary &d)
Create comparison of one parameter with another.
Definition parameter.cpp:480
ParameterPTR add_parameter(const ParameterPTR first, const ParameterPTR second)
Create the sum of one parameter with another.
Definition parameter.cpp:468
ParameterPTR max_parameter(const ParameterPTR parameter, const double other)
Create parameter whose value is the maximum of a given parameter's value and the given value.
Definition parameter.cpp:498
ParameterPTR sin_parameter(const ParameterPTR parameter)
Create the sine of a parameter.
Definition parameter.cpp:516
ParameterPTR multiply_parameter(const ParameterPTR first, const ParameterPTR second)
Create the product of one parameter with another.
Definition parameter.cpp:456
ParameterPTR subtract_parameter(const ParameterPTR first, const ParameterPTR second)
Create the difference between one parameter and another.
Definition parameter.cpp:474
ParameterPTR dimension_parameter(const ParameterPTR x_parameter, const ParameterPTR y_parameter)
Create a parameter that can generate position vectors from a given set of parameters.
Definition parameter.cpp:534
ParameterPTR pow_parameter(const ParameterPTR parameter, const double exponent)
Create a parameter raised to the power of an exponent.
Definition parameter.cpp:528
ParameterPTR min_parameter(const ParameterPTR parameter, const double other)
Create parameter whose value is the minimum of a given parameter's value and the given value.
Definition parameter.cpp:492
ParameterPTR conditional_parameter(const ParameterPTR condition, const ParameterPTR if_true, const ParameterPTR if_false)
Create a parameter that chooses between two other parameters, based on a given condition parameter.
Definition parameter.cpp:486
ParameterPTR exp_parameter(const ParameterPTR parameter)
Create the exponential of a parameter.
Definition parameter.cpp:510
std::shared_ptr< Parameter > ParameterPTR
Definition parameter.h:40
std::shared_ptr< NodeCollection > NodeCollectionPTR
Definition node_collection.h:50
ParameterPTR cos_parameter(const ParameterPTR parameter)
Create the cosine of a parameter.
Definition parameter.cpp:522
ParameterPTR redraw_parameter(const ParameterPTR parameter, const double min, const double max)
Create parameter redrawing the value if the value of a parameter is outside the set limits.
Definition parameter.cpp:504
Declarations for base class Node.