@@ -5,7 +5,8 @@ using ChainRulesCore: ChainRulesCore as CRC, NoTangent, @thunk
55
66using  .. OperatorEnumModule:  AbstractOperatorEnum, OperatorEnum
77using  .. NodeModule:  AbstractExpressionNode, Node, tree_mapreduce
8- using  .. ExpressionModule:  AbstractExpression, Metadata, with_contents, with_metadata
8+ using  .. ExpressionModule: 
9+     AbstractExpression, Metadata, with_contents, with_metadata, unpack_metadata
910using  .. ChainRulesModule:  NodeTangent
1011
1112import  .. NodeModule: 
@@ -63,7 +64,6 @@ mutable struct ParametricNode{T} <: AbstractExpressionNode{T}
6364        return  n
6465    end 
6566end 
66- @inline  _data (x:: Metadata ) =  getfield (x, :_data )
6767
6868""" 
6969    ParametricExpression{T,N<:ParametricNode{T},D<:NamedTuple} <: AbstractExpression{T,N} 
@@ -79,15 +79,17 @@ struct ParametricExpression{
7979    metadata:: Metadata{D} 
8080
8181    function  ParametricExpression (tree:: ParametricNode , metadata:: Metadata )
82-         return  new {eltype(tree),typeof(tree),typeof(_data(metadata))} (tree, metadata)
82+         return  new {eltype(tree),typeof(tree),typeof(unpack_metadata(metadata))} (
83+             tree, metadata
84+         )
8385    end 
8486end 
8587function  ParametricExpression (
8688    tree:: ParametricNode{T1} ;
8789    operators:: Union{AbstractOperatorEnum,Nothing} ,
88-     variable_names,
90+     variable_names= nothing ,
8991    parameters:: AbstractMatrix{T2} ,
90-     parameter_names,
92+     parameter_names= nothing ,
9193) where  {T1,T2}
9294    if  ! isnothing (parameter_names)
9395        @assert  size (parameters, 1 ) ==  length (parameter_names)
@@ -200,18 +202,16 @@ function get_variable_names(
200202    ex:: ParametricExpression ,
201203    variable_names:: Union{Nothing,AbstractVector{<:AbstractString}} = nothing ,
202204)
203-     return  variable_names ===  nothing  ?  ex. metadata. variable_names :  variable_names
205+     return  if  variable_names != =  nothing 
206+         variable_names
207+     elseif  hasproperty (ex. metadata, :variable_names )
208+         ex. metadata. variable_names
209+     else 
210+         nothing 
211+     end 
204212end 
205- @inline  _copy_with_nothing (x) =  copy (x)
206- @inline  _copy_with_nothing (:: Nothing ) =  nothing 
207213function  Base. copy (ex:: ParametricExpression ; break_sharing:: Val = Val (false ))
208-     return  ParametricExpression (
209-         copy (ex. tree; break_sharing= break_sharing);
210-         operators= _copy_with_nothing (ex. metadata. operators),
211-         variable_names= _copy_with_nothing (ex. metadata. variable_names),
212-         parameters= _copy_with_nothing (ex. metadata. parameters),
213-         parameter_names= _copy_with_nothing (ex. metadata. parameter_names),
214-     )
214+     return  ParametricExpression (copy (ex. tree; break_sharing), copy (ex. metadata))
215215end 
216216# ##############################################################################
217217
0 commit comments