@@ -49,7 +49,7 @@ internal TypedColumn(DataViewSchema.Column column, bool isImputed, SharedColumnS
4949 }
5050
5151 internal abstract Delegate GetGetter ( ) ;
52- internal abstract void InitializeGetter ( DataViewRowCursor cursor , TimeSeriesImputerTransformer transformerParent , string timeSeriesColumn ,
52+ internal abstract void InitializeGetter ( DataViewRowCursor cursor , TimeSeriesImputerTransformer . TransformerEstimatorSafeHandle transformerParent , string timeSeriesColumn ,
5353 string [ ] grainColumns , string [ ] dataColumns , string [ ] allColumnNames , Dictionary < string , TypedColumn > allColumns ) ;
5454
5555 internal abstract TypeId GetTypeId ( ) ;
@@ -129,7 +129,7 @@ internal override Delegate GetGetter()
129129 return _getter ;
130130 }
131131
132- internal override unsafe void InitializeGetter ( DataViewRowCursor cursor , TimeSeriesImputerTransformer transformerParent , string timeSeriesColumn ,
132+ internal override unsafe void InitializeGetter ( DataViewRowCursor cursor , TimeSeriesImputerTransformer . TransformerEstimatorSafeHandle transformer , string timeSeriesColumn ,
133133 string [ ] grainColumns , string [ ] dataColumns , string [ ] allImputedColumnNames , Dictionary < string , TypedColumn > allColumns )
134134 {
135135 if ( Column . Name != IsRowImputedColumnName )
@@ -154,7 +154,7 @@ internal override unsafe void InitializeGetter(DataViewRowCursor cursor, TimeSer
154154 fixed ( byte * bufferPointer = SharedState . ColumnBuffer )
155155 {
156156 var binaryArchiveData = new NativeBinaryArchiveData ( ) { Data = bufferPointer , DataSize = new IntPtr ( bufferLength ) } ;
157- success = TransformDataNative ( transformerParent . TransformerHandle , binaryArchiveData , out outputData , out outputDataSize , out errorHandle ) ;
157+ success = TransformDataNative ( transformer , binaryArchiveData , out outputData , out outputDataSize , out errorHandle ) ;
158158 if ( ! success )
159159 throw new Exception ( CommonExtensions . GetErrorDetailsAndFreeNativeMemory ( errorHandle ) ) ;
160160 }
@@ -633,7 +633,7 @@ protected override bool ReleaseHandle()
633633 private readonly string [ ] _allImputedColumnNames ;
634634 private readonly DataViewSchema _schema ;
635635
636- public TimeSeriesImputerDataView ( IHostEnvironment env , IDataView input , string timeSeriesColumn , string [ ] grainColumns , string [ ] dataColumns , string [ ] allColumnNames , TimeSeriesImputerTransformer parent )
636+ internal TimeSeriesImputerDataView ( IHostEnvironment env , IDataView input , string timeSeriesColumn , string [ ] grainColumns , string [ ] dataColumns , string [ ] allColumnNames , TimeSeriesImputerTransformer parent )
637637 {
638638 _host = env ;
639639 _source = input ;
@@ -664,7 +664,7 @@ public DataViewRowCursor GetRowCursor(IEnumerable<DataViewSchema.Column> columns
664664
665665 // Column WasColumnImputed is new, don't get its value from source
666666 var input = _source . GetRowCursorForAllColumns ( ) ; //.GetRowCursor(columnsNeeded.Where(x => x.Name != IsRowImputedColumnName));
667- return new Cursor ( _host , input , _parent , _timeSeriesColumn , _grainColumns , _dataColumns , _allImputedColumnNames , _schema ) ;
667+ return new Cursor ( _host , input , _parent . CloneTransformer ( ) , _timeSeriesColumn , _grainColumns , _dataColumns , _allImputedColumnNames , _schema ) ;
668668 }
669669
670670 // Can't use parallel cursors so this defaults to calling non-parallel version
@@ -687,9 +687,9 @@ private sealed class Cursor : DataViewRowCursor
687687 private bool _isGood ;
688688 private readonly Dictionary < string , TypedColumn > _allColumns ;
689689 private readonly DataViewSchema _schema ;
690- private readonly TimeSeriesImputerTransformer _transformerParent ;
690+ private readonly TimeSeriesImputerTransformer . TransformerEstimatorSafeHandle _transformer ;
691691
692- public Cursor ( IChannelProvider provider , DataViewRowCursor input , TimeSeriesImputerTransformer transformerParent , string timeSeriesColumn ,
692+ public Cursor ( IChannelProvider provider , DataViewRowCursor input , TimeSeriesImputerTransformer . TransformerEstimatorSafeHandle transformer , string timeSeriesColumn ,
693693 string [ ] grainColumns , string [ ] dataColumns , string [ ] allImputedColumnNames , DataViewSchema schema )
694694 {
695695 _ch = provider ;
@@ -699,7 +699,7 @@ public Cursor(IChannelProvider provider, DataViewRowCursor input, TimeSeriesImpu
699699 var length = input . Schema . Count ;
700700 _position = - 1 ;
701701 _schema = schema ;
702- _transformerParent = transformerParent ;
702+ _transformer = transformer ;
703703
704704 var sharedState = new SharedColumnState ( )
705705 {
@@ -712,7 +712,7 @@ public Cursor(IChannelProvider provider, DataViewRowCursor input, TimeSeriesImpu
712712
713713 foreach ( var column in _allColumns . Values )
714714 {
715- column . InitializeGetter ( _input , transformerParent , timeSeriesColumn , grainColumns , dataColumns , allImputedColumnNames , _allColumns ) ;
715+ column . InitializeGetter ( _input , transformer , timeSeriesColumn , grainColumns , dataColumns , allImputedColumnNames , _allColumns ) ;
716716 }
717717 }
718718
@@ -736,6 +736,12 @@ public override bool IsColumnActive(DataViewSchema.Column column)
736736 return true ;
737737 }
738738
739+ protected override void Dispose ( bool disposing )
740+ {
741+ if ( ! _transformer . IsClosed )
742+ _transformer . Close ( ) ;
743+ }
744+
739745 /// <summary>
740746 /// Returns a value getter delegate to fetch the value of column with the given columnIndex, from the row.
741747 /// This throws if the column is not active in this row, or if the type
0 commit comments