Drake
Drake C++ Documentation
Loading...
Searching...
No Matches
variable.h File Reference
#include <cstddef>
#include <cstdint>
#include <functional>
#include <memory>
#include <string>
#include <Eigen/Core>
#include "drake/common/drake_copyable.h"
#include "drake/common/eigen_types.h"
#include "drake/common/fmt.h"
#include "drake/common/hash.h"
#include "drake/common/reset_after_move.h"
Include dependency graph for variable.h:
This graph shows which files directly or indirectly include this file:

Classes

class  Variable
 Represents a symbolic variable. More...
class  Variable::Id
 Identifier for a symbolic variable. More...
struct  Variable::CompareLess
 Provides a strict weak ordering on variables (see less), for use as the comparator of an ordered container, e.g., std::set<Variable, Variable::CompareLess>. More...
struct  Variable::CompareEqualTo
 Checks structural equality of variables (see equal_to), for use as the key-equality predicate of an unordered container, e.g., std::unordered_set<Variable, std::hash<Variable>, Variable::CompareEqualTo>. More...
struct  hash< drake::symbolic::Variable::Id >
struct  hash< drake::symbolic::Variable >
struct  formatter< drake::symbolic::Variable::Id >
 Specializes the fmt::formatter<> class template for drake::symbolic::Variable::Id. More...
struct  formatter< drake::symbolic::Variable >
 Specializes the fmt::formatter<> class template for drake::symbolic::Variable. More...
struct  formatter< drake::symbolic::Variable::Type >
 Specializes the fmt::formatter<> class template for drake::symbolic::Variable::Type. More...

Namespaces

namespace  drake
namespace  drake::symbolic
namespace  std
 STL namespace.
namespace  fmt

Macros

#define DRAKE_SYMBOLIC_DISTINCT_COMPARATORS
 When defined, the symbolic comparators (Variable::CompareLess, Variable::CompareEqualTo, Expression::CompareLess, and Expression::CompareEqualTo) are distinct types, and Drake provides no std::less or std::equal_to specializations for symbolic types.

Functions

std::string_view to_string (const Variable::Type &type)
MatrixX< Variable > MakeMatrixVariable (int rows, int cols, const std::string &name, Variable::Type type=Variable::Type::CONTINUOUS)
 Creates a dynamically-sized Eigen matrix of symbolic variables.
MatrixX< Variable > MakeMatrixBooleanVariable (int rows, int cols, const std::string &name)
 Creates a dynamically-sized Eigen matrix of symbolic Boolean variables.
MatrixX< Variable > MakeMatrixBinaryVariable (int rows, int cols, const std::string &name)
 Creates a dynamically-sized Eigen matrix of symbolic binary variables.
MatrixX< Variable > MakeMatrixContinuousVariable (int rows, int cols, const std::string &name)
 Creates a dynamically-sized Eigen matrix of symbolic continuous variables.
MatrixX< Variable > MakeMatrixIntegerVariable (int rows, int cols, const std::string &name)
 Creates a dynamically-sized Eigen matrix of symbolic integer variables.
template<int rows, int cols>
Eigen::Matrix< Variable, rows, cols > MakeMatrixVariable (const std::string &name, Variable::Type type=Variable::Type::CONTINUOUS)
 Creates a static-sized Eigen matrix of symbolic variables.
template<int rows, int cols>
Eigen::Matrix< Variable, rows, cols > MakeMatrixBooleanVariable (const std::string &name)
 Creates a static-sized Eigen matrix of symbolic Boolean variables.
template<int rows, int cols>
Eigen::Matrix< Variable, rows, cols > MakeMatrixBinaryVariable (const std::string &name)
 Creates a static-sized Eigen matrix of symbolic binary variables.
template<int rows, int cols>
Eigen::Matrix< Variable, rows, cols > MakeMatrixContinuousVariable (const std::string &name)
 Creates a static-sized Eigen matrix of symbolic continuous variables.
template<int rows, int cols>
Eigen::Matrix< Variable, rows, cols > MakeMatrixIntegerVariable (const std::string &name)
 Creates a static-sized Eigen matrix of symbolic integer variables.
VectorX< Variable > MakeVectorVariable (int rows, const std::string &name, Variable::Type type=Variable::Type::CONTINUOUS)
 Creates a dynamically-sized Eigen vector of symbolic variables.
VectorX< Variable > MakeVectorBooleanVariable (int rows, const std::string &name)
 Creates a dynamically-sized Eigen vector of symbolic Boolean variables.
VectorX< Variable > MakeVectorBinaryVariable (int rows, const std::string &name)
 Creates a dynamically-sized Eigen vector of symbolic binary variables.
VectorX< Variable > MakeVectorContinuousVariable (int rows, const std::string &name)
 Creates a dynamically-sized Eigen vector of symbolic continuous variables.
VectorX< Variable > MakeVectorIntegerVariable (int rows, const std::string &name)
 Creates a dynamically-sized Eigen vector of symbolic integer variables.
template<int rows>
Eigen::Matrix< Variable, rows, 1 > MakeVectorVariable (const std::string &name, Variable::Type type=Variable::Type::CONTINUOUS)
 Creates a static-sized Eigen vector of symbolic variables.
template<int rows>
Eigen::Matrix< Variable, rows, 1 > MakeVectorBooleanVariable (const std::string &name)
 Creates a static-sized Eigen vector of symbolic Boolean variables.
template<int rows>
Eigen::Matrix< Variable, rows, 1 > MakeVectorBinaryVariable (const std::string &name)
 Creates a static-sized Eigen vector of symbolic binary variables.
template<int rows>
Eigen::Matrix< Variable, rows, 1 > MakeVectorContinuousVariable (const std::string &name)
 Creates a static-sized Eigen vector of symbolic continuous variables.
template<int rows>
Eigen::Matrix< Variable, rows, 1 > MakeVectorIntegerVariable (const std::string &name)
 Creates a static-sized Eigen vector of symbolic integer variables.
template<typename DerivedA, typename DerivedB>
std::enable_if_t< is_eigen_scalar_same< DerivedA, Variable >::value &&is_eigen_scalar_same< DerivedB, Variable >::value, bool > CheckStructuralEquality (const DerivedA &m1, const DerivedB &m2)
 Checks if two Eigen::Matrix<Variable> m1 and m2 are structurally equal.

Macro Definition Documentation

◆ DRAKE_SYMBOLIC_DISTINCT_COMPARATORS

#define DRAKE_SYMBOLIC_DISTINCT_COMPARATORS

When defined, the symbolic comparators (Variable::CompareLess, Variable::CompareEqualTo, Expression::CompareLess, and Expression::CompareEqualTo) are distinct types, and Drake provides no std::less or std::equal_to specializations for symbolic types.

When not defined, the comparators are aliases of those (deprecated) specializations.

LLVM >= 22 requires std::less and std::equal_to to agree with operator< and operator==, which for symbolic types return a Formula rather than a bool. Drake therefore defines this macro for libc++ >= 22, and will define it on all platforms once the specializations are removed, on or after 2027-02-01.

Downstream code may check this macro, e.g., to avoid duplicate overloads while a comparator and its std counterpart are still the same type. Its definition must always match how Drake was compiled, so downstream code may only opt in when also building Drake from source with the same definition.