@@ -91,12 +91,14 @@ bool KernelDensity::train(std::shared_ptr<Features> data)
91
91
return true ;
92
92
}
93
93
94
- SGVector<float64_t > KernelDensity::get_log_density (const std::shared_ptr<DenseFeatures< float64_t > >& test, int32_t leaf_size)
94
+ SGVector<float64_t > KernelDensity::get_log_density (const std::shared_ptr<Features >& test, int32_t leaf_size)
95
95
{
96
96
require (test," data not supplied" );
97
+ auto dense_feat =std::dynamic_pointer_cast<DenseFeatures<float64_t >>(test);
98
+ require (dense_feat," Expected DenseFeatures<float64_t> type" );
97
99
98
100
if ((m_eval==EM_KDTREE_SINGLE) || (m_eval==EM_BALLTREE_SINGLE))
99
- return tree->log_kernel_density (test ->get_feature_matrix (),m_kernel_type,m_bandwidth,m_atol,m_rtol);
101
+ return tree->log_kernel_density (dense_feat ->get_feature_matrix (),m_kernel_type,m_bandwidth,m_atol,m_rtol);
100
102
101
103
std::shared_ptr<CNbodyTree> query_tree=NULL ;
102
104
if (m_eval==EM_KDTREE_DUAL)
@@ -106,7 +108,7 @@ SGVector<float64_t> KernelDensity::get_log_density(const std::shared_ptr<DenseFe
106
108
else
107
109
error (" Evaluation mode not identified" );
108
110
109
- query_tree->build_tree (test );
111
+ query_tree->build_tree (dense_feat );
110
112
std::shared_ptr<BinaryTreeMachineNode<NbodyTreeNodeData>> qroot=NULL ;
111
113
auto root=query_tree->get_root ();
112
114
if (root)
@@ -115,7 +117,7 @@ SGVector<float64_t> KernelDensity::get_log_density(const std::shared_ptr<DenseFe
115
117
error (" Query tree root not found!" );
116
118
117
119
SGVector<index_t > qid=query_tree->get_rearranged_vector_ids ();
118
- SGVector<float64_t > ret=tree->log_kernel_density_dual (test ->get_feature_matrix (),qid,qroot,m_kernel_type,m_bandwidth,m_atol,m_rtol);
120
+ SGVector<float64_t > ret=tree->log_kernel_density_dual (dense_feat ->get_feature_matrix (),qid,qroot,m_kernel_type,m_bandwidth,m_atol,m_rtol);
119
121
120
122
121
123
0 commit comments