LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
LMCAS::TransformNode类 参考

积分变换节点,表示 Laplace,Fourier,Z 变换及其逆变换. 更多...

#include </home/runner/work/docs/docs/LMCAS/src/internal/symbolic_ast/bindings.hpp>

类 LMCAS::TransformNode 继承关系图:
LMCAS::TransformNode 的协作图:

Public 类型

enum class  TransformType {
  Laplace , InverseLaplace , Fourier , InverseFourier ,
  ZTransform
}

Public 成员函数

void accept (LMCAS::detail::SymbolicVisitor &visitor) const override
const std::shared_ptr< const SymbolicNode > & body () const noexcept
std::shared_ptr< const SymbolicNode > clone () const override
int compare (const SymbolicNode &other) const
 与另一个节点进行全序比较.
bool equals (const SymbolicNode &other) const
 判断两个节点是否结构相等.
std::size_t hash () const
 获取节点哈希值(带缓存).
virtual bool is_number () const
virtual bool is_one () const
virtual bool is_positive () const
virtual bool is_zero () const
const std::string & source_var () const noexcept
const std::shared_ptr< const SymbolicNode > & target () const noexcept
TransformType transform_type () const noexcept
int type_priority () const override

Protected 成员函数

int compare_same_type (const SymbolicNode &other) const override
std::size_t compute_hash () const override

Protected 属性

std::atomic< std::size_t > cached_hash {0}
std::atomic< bool > hash_computed {false}

Private 成员函数

 TransformNode (TransformType tt, std::shared_ptr< const SymbolicNode > b, std::string src, std::shared_ptr< const SymbolicNode > target)
 构造积分变换节点.

Private 属性

const std::shared_ptr< const SymbolicNode > body_
 LMCAS_AST_NODE_FACTORY_FRIEND
const std::string source_var_
const std::shared_ptr< const SymbolicNode > target_
const TransformType transform_type_

详细描述

积分变换节点,表示 Laplace,Fourier,Z 变换及其逆变换.

统一表示各类积分变换:L{f(t)}(s),F{f(t)}(omega),Z{f[n]}(z) 等.

在文件 bindings.hpp 第 251 行定义.

成员枚举类型说明

◆ TransformType

枚举值
Laplace 

Laplace 变换 L{f(t)}(s)。

InverseLaplace 

逆 Laplace 变换 L-¹{F(s)}(t)。

Fourier 

Fourier 变换 F{f(t)}(omega)。

InverseFourier 

逆 Fourier 变换 F-¹{F(omega)}(t)。

ZTransform 

Z 变换 Z{f[n]}(z)。

在文件 bindings.hpp 第 253 行定义.

253 {
254 Laplace, /**< Laplace 变换 L{f(t)}(s)。 */
255 InverseLaplace, /**< 逆 Laplace 变换 L-¹{F(s)}(t)。 */
256 Fourier, /**< Fourier 变换 F{f(t)}(omega)。 */
257 InverseFourier, /**< 逆 Fourier 变换 F-¹{F(omega)}(t)。 */
258 ZTransform /**< Z 变换 Z{f[n]}(z)。 */
259 };

构造及析构函数说明

◆ TransformNode()

LMCAS::TransformNode::TransformNode ( TransformType tt,
std::shared_ptr< const SymbolicNode > b,
std::string src,
std::shared_ptr< const SymbolicNode > target )
inlineprivate

构造积分变换节点.

参数
tt变换类型
b被变换的表达式
src源变量名
tgt目标变量名

在文件 bindings.hpp 第 276 行定义.

278 : transform_type_(tt), body_(std::move(b)),
279 source_var_(std::move(src)), target_(std::move(target)) {
280 if (!body_ || !target_) {
281 throw std::invalid_argument("TransformNode children cannot be null");
282 }
283 if (source_var_.empty()) {
284 throw std::invalid_argument("TransformNode source variable cannot be empty");
285 }
286 }
const std::shared_ptr< const SymbolicNode > body_
const std::shared_ptr< const SymbolicNode > & target() const noexcept
const std::string source_var_
const std::shared_ptr< const SymbolicNode > target_
const TransformType transform_type_
const MultiPoly & b

引用了 LMCAS::b, body_, source_var_, target(), target_ , 以及 transform_type_.

被这些函数引用 compare_same_type().

函数调用图:
这是这个函数的调用关系图:

成员函数说明

◆ accept()

void LMCAS::TransformNode::accept ( LMCAS::detail::SymbolicVisitor & visitor) const
inlineoverridevirtual

实现了 LMCAS::SymbolicNode.

在文件 bindings.hpp 第 320 行定义.

320{ LMCAS::detail::SymbolicVisitor::DepthGuard guard(visitor); visitor.visit(*this); }
virtual void visit(const NumberNode &node)=0

引用了 LMCAS::detail::SymbolicVisitor::visit().

函数调用图:

◆ body()

const std::shared_ptr< const SymbolicNode > & LMCAS::TransformNode::body ( ) const
inlinenoexcept

在文件 bindings.hpp 第 290 行定义.

290{ return body_; }

引用了 body_.

被这些函数引用 LMCAS::anonymous_namespace{expr_serialization.cpp}::Writer::visit() , 以及 LMCAS::anonymous_namespace{mixed_transcendental_classification.cpp}::TranscendentalDetector::visit().

这是这个函数的调用关系图:

◆ clone()

std::shared_ptr< const SymbolicNode > LMCAS::TransformNode::clone ( ) const
inlineoverridevirtual

实现了 LMCAS::SymbolicNode.

在文件 bindings.hpp 第 322 行定义.

322 {
324 transform_type_, body_->clone(), source_var_, target_->clone());
325 }
std::shared_ptr< const Node > make_node(Args &&... args)

引用了 body_, LMCAS::detail::make_node(), source_var_, target_ , 以及 transform_type_.

函数调用图:

◆ compare()

int LMCAS::SymbolicNode::compare ( const SymbolicNode & other) const
inlineinherited

与另一个节点进行全序比较.

参数
other待比较的节点
返回
小于返回 -1,等于返回 0,大于返回 1

在文件 base.hpp 第 183 行定义.

183 {
184 if (type_priority() != other.type_priority()) {
185 return type_priority() < other.type_priority() ? -1 : 1;
186 }
187 return compare_same_type(other);
188 }
virtual int compare_same_type(const SymbolicNode &other) const =0
virtual int type_priority() const =0

引用了 SymbolicNode(), compare_same_type() , 以及 type_priority().

被这些函数引用 LMCAS::anonymous_namespace{symbolic_cancel.cpp}::combine_fraction_terms() , 以及 LMCAS::endpoints_equivalent().

函数调用图:
这是这个函数的调用关系图:

◆ compare_same_type()

int LMCAS::TransformNode::compare_same_type ( const SymbolicNode & other) const
inlineoverrideprotectedvirtual

实现了 LMCAS::SymbolicNode.

在文件 bindings.hpp 第 307 行定义.

307 {
308 const auto& o = static_cast<const TransformNode&>(other);
309 if (transform_type_ != o.transform_type_) {
310 return static_cast<int>(transform_type_) < static_cast<int>(o.transform_type_) ? -1 : 1;
311 }
312 int cmp = source_var_.compare(o.source_var_);
313 if (cmp != 0) return cmp;
314 cmp = target_->compare(*o.target_);
315 if (cmp != 0) return cmp;
316 return body_->compare(*o.body_);
317 }
TransformNode(TransformType tt, std::shared_ptr< const SymbolicNode > b, std::string src, std::shared_ptr< const SymbolicNode > target)
构造积分变换节点.

引用了 LMCAS::SymbolicNode::SymbolicNode(), TransformNode(), body_, source_var_, target_ , 以及 transform_type_.

函数调用图:

◆ compute_hash()

std::size_t LMCAS::TransformNode::compute_hash ( ) const
inlineoverrideprotectedvirtual

实现了 LMCAS::SymbolicNode.

在文件 bindings.hpp 第 297 行定义.

297 {
298 std::size_t seed = 0;
300 hash_combine(seed, static_cast<std::size_t>(transform_type_));
301 hash_combine(seed, body_->hash());
302 hash_combine(seed, std::hash<std::string>{}(source_var_));
303 hash_combine(seed, target_->hash());
304 return seed;
305 }
int type_priority() const override
void hash_combine(std::size_t &seed, std::size_t value)
将一个哈希值混合到种子中,用于组合多个字段的哈希.

引用了 body_, LMCAS::hash_combine(), source_var_, target_, transform_type_ , 以及 type_priority().

函数调用图:

◆ equals()

bool LMCAS::SymbolicNode::equals ( const SymbolicNode & other) const
inlineinherited

判断两个节点是否结构相等.

参数
other待比较的节点
返回
相等返回 true

在文件 base.hpp 第 195 行定义.

195 {
196 if (this == &other) return true;
197 if (hash() != other.hash()) return false;
198 if (type_priority() != other.type_priority()) return false;
199 return compare_same_type(other) == 0;
200 }
std::size_t hash() const
获取节点哈希值(带缓存).

引用了 SymbolicNode(), compare_same_type(), hash() , 以及 type_priority().

被这些函数引用 LMCAS::complementary_square(), LMCAS::anonymous_namespace{relation_store.cpp}::expr_equals(), LMCAS::match_recursive(), LMCAS::tf_remove_exp_factor() , 以及 LMCAS::tf_substitute_expr().

函数调用图:
这是这个函数的调用关系图:

◆ hash()

std::size_t LMCAS::SymbolicNode::hash ( ) const
inlineinherited

获取节点哈希值(带缓存).

返回
哈希值

在文件 base.hpp 第 168 行定义.

168 {
169 if (!hash_computed.load(std::memory_order_acquire)) {
170 std::size_t h = compute_hash();
171 cached_hash.store(h, std::memory_order_relaxed);
172 hash_computed.store(true, std::memory_order_release);
173 return h;
174 }
175 return cached_hash.load(std::memory_order_relaxed);
176 }
virtual std::size_t compute_hash() const =0
std::atomic< std::size_t > cached_hash
std::atomic< bool > hash_computed

引用了 cached_hash, compute_hash() , 以及 hash_computed.

被这些函数引用 LMCAS::MatrixNode::compute_hash(), LMCAS::VariableNode::compute_hash() , 以及 equals().

函数调用图:
这是这个函数的调用关系图:

◆ is_number()

virtual bool LMCAS::SymbolicNode::is_number ( ) const
inlinevirtualinherited

被 LMCAS::NumberNode 重载.

在文件 base.hpp 第 201 行定义.

201{ return false; }

◆ is_one()

virtual bool LMCAS::SymbolicNode::is_one ( ) const
inlinevirtualinherited

被 LMCAS::NumberNode 重载.

在文件 base.hpp 第 202 行定义.

202{ return false; }

◆ is_positive()

virtual bool LMCAS::SymbolicNode::is_positive ( ) const
inlinevirtualinherited

被 LMCAS::NumberNode 重载.

在文件 base.hpp 第 204 行定义.

204{ return false; }

◆ is_zero()

virtual bool LMCAS::SymbolicNode::is_zero ( ) const
inlinevirtualinherited

◆ source_var()

const std::string & LMCAS::TransformNode::source_var ( ) const
inlinenoexcept

在文件 bindings.hpp 第 291 行定义.

291{ return source_var_; }

引用了 source_var_.

被这些函数引用 LMCAS::anonymous_namespace{expr_serialization.cpp}::Writer::visit().

这是这个函数的调用关系图:

◆ target()

const std::shared_ptr< const SymbolicNode > & LMCAS::TransformNode::target ( ) const
inlinenoexcept

在文件 bindings.hpp 第 292 行定义.

292{ return target_; }

引用了 target_.

被这些函数引用 TransformNode() , 以及 LMCAS::anonymous_namespace{expr_serialization.cpp}::Writer::visit().

这是这个函数的调用关系图:

◆ transform_type()

TransformType LMCAS::TransformNode::transform_type ( ) const
inlinenoexcept

在文件 bindings.hpp 第 289 行定义.

289{ return transform_type_; }

引用了 transform_type_.

被这些函数引用 LMCAS::anonymous_namespace{expr_serialization.cpp}::Writer::visit().

这是这个函数的调用关系图:

◆ type_priority()

int LMCAS::TransformNode::type_priority ( ) const
inlineoverridevirtual

实现了 LMCAS::SymbolicNode.

在文件 bindings.hpp 第 294 行定义.

294{ return 11; }

被这些函数引用 compute_hash().

这是这个函数的调用关系图:

类成员变量说明

◆ body_

const std::shared_ptr<const SymbolicNode> LMCAS::TransformNode::body_
private

在文件 bindings.hpp 第 265 行定义.

被这些函数引用 TransformNode(), body(), clone(), compare_same_type() , 以及 compute_hash().

◆ cached_hash

std::atomic<std::size_t> LMCAS::SymbolicNode::cached_hash {0}
mutableprotectedinherited

在文件 base.hpp 第 149 行定义.

被这些函数引用 SymbolicNode() , 以及 hash().

◆ hash_computed

std::atomic<bool> LMCAS::SymbolicNode::hash_computed {false}
mutableprotectedinherited

在文件 base.hpp 第 150 行定义.

被这些函数引用 SymbolicNode() , 以及 hash().

◆ LMCAS_AST_NODE_FACTORY_FRIEND

LMCAS::TransformNode::LMCAS_AST_NODE_FACTORY_FRIEND
private

在文件 bindings.hpp 第 262 行定义.

◆ source_var_

const std::string LMCAS::TransformNode::source_var_
private

在文件 bindings.hpp 第 266 行定义.

被这些函数引用 TransformNode(), clone(), compare_same_type(), compute_hash() , 以及 source_var().

◆ target_

const std::shared_ptr<const SymbolicNode> LMCAS::TransformNode::target_
private

在文件 bindings.hpp 第 267 行定义.

被这些函数引用 TransformNode(), clone(), compare_same_type(), compute_hash() , 以及 target().

◆ transform_type_

const TransformType LMCAS::TransformNode::transform_type_
private

在文件 bindings.hpp 第 264 行定义.

被这些函数引用 TransformNode(), clone(), compare_same_type(), compute_hash() , 以及 transform_type().


该类的文档由以下文件生成: