@@ -111,6 +111,35 @@ class PCAClient : public FluidBaseClient,
111111 return result;
112112 }
113113
114+ MessageResult<void > inverseTransform (InputDataSetClientRef sourceClient,
115+ DataSetClientRef destClient) const
116+ {
117+
118+ auto srcPtr = sourceClient.get ().lock ();
119+ auto destPtr = destClient.get ().lock ();
120+
121+ if (srcPtr && destPtr)
122+ {
123+ auto srcDataSet = srcPtr->getDataSet ();
124+ if (srcDataSet.size () == 0 ) return Error<void >(EmptyDataSet);
125+ if (!mAlgorithm .initialized ()) return Error<void >(NoDataFitted);
126+ StringVector ids{srcDataSet.getIds ()};
127+ RealMatrix paddedInput (srcPtr->size (), mAlgorithm .dims ());
128+ auto inputData = srcDataSet.getData ();
129+ paddedInput (Slice (0 , inputData.rows ()), Slice (0 , inputData.cols ())) <<=
130+ inputData;
131+ RealMatrix output (srcDataSet.size (), mAlgorithm .dims ());
132+ mAlgorithm .inverseProcess (paddedInput, output,get<kWhiten >() == 1 );
133+ FluidDataSet<string, double , 1 > result (ids, output);
134+ destPtr->setDataSet (result);
135+ return {};
136+ }
137+ else
138+ {
139+ return Error<void >(NoDataSet);
140+ }
141+ }
142+
114143 MessageResult<void > transformPoint (InputBufferPtr in, BufferPtr out) const
115144 {
116145 index k = get<kNumDimensions >();
@@ -150,7 +179,7 @@ class PCAClient : public FluidBaseClient,
150179 Result resizeResult = outBuf.resize (mAlgorithm .dims (), 1 , outBuf.sampleRate ());
151180
152181 mAlgorithm .inverseProcessFrame (src, dst, get<kWhiten >());
153- outBuf.samps (0 ,mAlgorithm .dims (),0 )<< = dst;
182+ outBuf.samps (0 ,mAlgorithm .dims (),0 ) << = dst;
154183 return OK ();
155184 }
156185
@@ -160,6 +189,7 @@ class PCAClient : public FluidBaseClient,
160189 makeMessage (" fit" , &PCAClient::fit),
161190 makeMessage (" transform" , &PCAClient::transform),
162191 makeMessage (" fitTransform" , &PCAClient::fitTransform),
192+ makeMessage (" inverseTransform" ,&PCAClient::inverseTransform),
163193 makeMessage (" transformPoint" , &PCAClient::transformPoint),
164194 makeMessage (" inverseTransformPoint" , &PCAClient::inverseTransformPoint),
165195 makeMessage (" cols" , &PCAClient::dims),
0 commit comments