fix some ci failures more ci fixes more ci fails yet another ci fail more ci stuff still ci more ci more ci more citags/v0.3.0-alpha
| @@ -14,6 +14,7 @@ | |||||
| * limitations under the License. | * limitations under the License. | ||||
| */ | */ | ||||
| #include "dataset/engine/datasetops/barrier_op.h" | #include "dataset/engine/datasetops/barrier_op.h" | ||||
| #include <iomanip> | |||||
| #include <utility> | #include <utility> | ||||
| #include "dataset/core/constants.h" | #include "dataset/core/constants.h" | ||||
| #include "dataset/engine/data_buffer.h" | #include "dataset/engine/data_buffer.h" | ||||
| @@ -214,10 +215,19 @@ Status BarrierOp::getNextTensorRow(TensorRow *new_row) { | |||||
| // A function that prints info about the Operator | // A function that prints info about the Operator | ||||
| void BarrierOp::Print(std::ostream &out, bool show_all) const { | void BarrierOp::Print(std::ostream &out, bool show_all) const { | ||||
| // Call base class printer first | |||||
| PipelineOp::Print(out, show_all); | |||||
| out << "\nBarrierOp:\n" | |||||
| << "\nCondition " << condition_name_ << "\n\n"; | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <BarrierOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nCondition: " << condition_name_ << "\n\n"; | |||||
| } | |||||
| } | } | ||||
| // overwrite function and handle eof | // overwrite function and handle eof | ||||
| @@ -15,6 +15,7 @@ | |||||
| */ | */ | ||||
| #include "dataset/engine/datasetops/batch_op.h" | #include "dataset/engine/datasetops/batch_op.h" | ||||
| #include <utility> | #include <utility> | ||||
| #include <iomanip> | |||||
| #include "common/utils.h" | #include "common/utils.h" | ||||
| #include "dataset/engine/data_buffer.h" | #include "dataset/engine/data_buffer.h" | ||||
| #include "dataset/engine/db_connector.h" | #include "dataset/engine/db_connector.h" | ||||
| @@ -102,10 +103,19 @@ Status BatchOp::operator()() { | |||||
| } | } | ||||
| void BatchOp::Print(std::ostream &out, bool show_all) const { | void BatchOp::Print(std::ostream &out, bool show_all) const { | ||||
| ParallelOp::Print(out, show_all); | |||||
| out << "\nBatchOp:\n" | |||||
| << "number of parallel workers: " << num_workers_ << "\nBatch size: " << start_batch_size_ | |||||
| << "\nDrop remainder: " << (drop_ ? "yes" : "no") << "\n\n"; | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <BatchOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << " [batch size: " << start_batch_size_ << "]\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nStart batch size: " << start_batch_size_ << "\nDrop remainder: " << (drop_ ? "yes" : "no") << "\n\n"; | |||||
| } | |||||
| } | } | ||||
| Status BatchOp::BatchRows(const std::unique_ptr<TensorQTable> *source_table, | Status BatchOp::BatchRows(const std::unique_ptr<TensorQTable> *source_table, | ||||
| @@ -92,18 +92,24 @@ void DatasetOp::CreateConnector(int32_t num_producers, int32_t num_consumers) { | |||||
| // A print method typically used for debugging. showAll of true will recursively descend to child prints | // A print method typically used for debugging. showAll of true will recursively descend to child prints | ||||
| void DatasetOp::Print(std::ostream &out, bool show_all) const { | void DatasetOp::Print(std::ostream &out, bool show_all) const { | ||||
| // When show_all is false, we display a 1 liner piece of text for the op. | |||||
| // When show_all is true, we display more detailed output for the op. | |||||
| // Derived printers should show their own header info, then call base class printer, followed by | |||||
| // derived-specific items. | |||||
| // For now, the base class doesn't have any summary info to show so it's a no-op in that case. | |||||
| if (show_all) { | if (show_all) { | ||||
| // The detailed display will show common base class info of the op. Allow the derived class to print | |||||
| // it's own id and name though as the first line. | |||||
| out << "\nNumber of children : " << child_.size(); | |||||
| for (size_t i = 0; i < child_.size(); i++) { | for (size_t i = 0; i < child_.size(); i++) { | ||||
| child_[i]->Print(out, show_all); | |||||
| out << "\n Child[" << i << "] id: " << child_[i]->id(); | |||||
| } | } | ||||
| } | |||||
| out << "\n-------------------------" | |||||
| << "\nOperator # : " << operator_id_ << "\nNumber of children : " << child_.size() | |||||
| << "\nNumber of parents : " << parent_.size() << "\nConnector queue size : " << oc_queue_size_ | |||||
| << "\nOperator control flags : 0x" << std::hex << std::setw(8) << std::setfill('0') << op_ctrl_flags_ << std::dec | |||||
| << std::setfill(' ') << "\nHas parents:\n"; | |||||
| for (size_t i = 0; i < parent_.size(); i++) { | |||||
| out << "Parent[" << i << "] id: " << parent_[i]->id() << "\n"; | |||||
| out << "\nNumber of parents : " << parent_.size(); | |||||
| for (size_t i = 0; i < parent_.size(); i++) { | |||||
| out << "\n Parent[" << i << "] id: " << parent_[i]->id(); | |||||
| } | |||||
| out << "\nConnector queue size : " << oc_queue_size_ << "\nOperator control flags : 0x" << std::hex | |||||
| << std::setw(8) << std::setfill('0') << op_ctrl_flags_ << std::dec << std::setfill(' '); | |||||
| } | } | ||||
| } | } | ||||
| @@ -14,7 +14,7 @@ | |||||
| * limitations under the License. | * limitations under the License. | ||||
| */ | */ | ||||
| #include "dataset/engine/datasetops/device_queue_op.h" | #include "dataset/engine/datasetops/device_queue_op.h" | ||||
| #include <iomanip> | |||||
| #include <iostream> | #include <iostream> | ||||
| #include <memory> | #include <memory> | ||||
| @@ -246,9 +246,19 @@ Status DeviceQueueOp::SendDataToCPU() { | |||||
| } | } | ||||
| void DeviceQueueOp::Print(std::ostream &out, bool show_all) const { | void DeviceQueueOp::Print(std::ostream &out, bool show_all) const { | ||||
| PipelineOp::Print(out, show_all); | |||||
| out << "DeviceQueueOp: channelName: " << channel_name_ << ", prefetchSize: " << prefetch_size_ << '\n'; | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <DeviceQueueOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nChannel name: " << channel_name_ << "\nPrefetch size: " << prefetch_size_ << "\n\n"; | |||||
| } | |||||
| } | } | ||||
| } // namespace dataset | } // namespace dataset | ||||
| } // namespace mindspore | } // namespace mindspore | ||||
| @@ -16,6 +16,7 @@ | |||||
| #include "dataset/engine/datasetops/filter_op.h" | #include "dataset/engine/datasetops/filter_op.h" | ||||
| #include <algorithm> | #include <algorithm> | ||||
| #include <cstring> | #include <cstring> | ||||
| #include <iomanip> | |||||
| #include <iostream> | #include <iostream> | ||||
| #include <memory> | #include <memory> | ||||
| #include <vector> | #include <vector> | ||||
| @@ -88,14 +89,22 @@ Status FilterOp::ValidateInColumns(const std::unordered_map<std::string, int32_t | |||||
| // A print method typically used for debugging. | // A print method typically used for debugging. | ||||
| void FilterOp::Print(std::ostream &out, bool show_all) const { | void FilterOp::Print(std::ostream &out, bool show_all) const { | ||||
| // Call base class printer first. | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then display our own stuff. | |||||
| out << "\nFilterOp:"; | |||||
| out << "\n Input column names:"; | |||||
| for (size_t i = 0; i < in_columns_.size(); i++) { | |||||
| out << " " << in_columns_[i]; | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <FilterOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nInput column names:"; | |||||
| for (size_t i = 0; i < in_columns_.size(); i++) { | |||||
| out << " " << in_columns_[i]; | |||||
| } | |||||
| out << "\n\n"; | |||||
| } | } | ||||
| } | } | ||||
| @@ -15,6 +15,7 @@ | |||||
| */ | */ | ||||
| #include "dataset/engine/datasetops/map_op.h" | #include "dataset/engine/datasetops/map_op.h" | ||||
| #include <cstring> | #include <cstring> | ||||
| #include <iomanip> | |||||
| #include <iostream> | #include <iostream> | ||||
| #include <memory> | #include <memory> | ||||
| #include <vector> | #include <vector> | ||||
| @@ -81,20 +82,27 @@ int32_t MapOp::num_consumers() const { | |||||
| // A print method typically used for debugging | // A print method typically used for debugging | ||||
| void MapOp::Print(std::ostream &out, bool show_all) const { | void MapOp::Print(std::ostream &out, bool show_all) const { | ||||
| // Call base class printer first | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then display our own stuff | |||||
| out << "\nMapOp:"; | |||||
| out << "\n Input column names:"; | |||||
| for (size_t i = 0; i < in_columns_.size(); i++) { | |||||
| out << " " << in_columns_[i]; | |||||
| } | |||||
| out << "\n TensorOps:"; | |||||
| for (size_t i = 0; i < tfuncs_.size(); i++) { | |||||
| out << " " << tfuncs_[i]; | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <MapOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nInput column names:"; | |||||
| for (size_t i = 0; i < in_columns_.size(); i++) { | |||||
| out << " " << in_columns_[i]; | |||||
| } | |||||
| out << "\n TensorOps:"; | |||||
| for (size_t i = 0; i < tfuncs_.size(); i++) { | |||||
| out << " " << tfuncs_[i]; | |||||
| } | |||||
| out << "\n\n"; | |||||
| } | } | ||||
| out << "\n"; | |||||
| } | } | ||||
| // This class functor will provide the master loop that drives the logic for performing the work | // This class functor will provide the master loop that drives the logic for performing the work | ||||
| @@ -55,12 +55,16 @@ Status ParallelOp::CreateWorkerConnector(int32_t worker_connector_size) { | |||||
| // A print method typically used for debugging | // A print method typically used for debugging | ||||
| void ParallelOp::Print(std::ostream &out, bool show_all) const { | void ParallelOp::Print(std::ostream &out, bool show_all) const { | ||||
| // Call base class printer first | |||||
| DatasetOp::Print(out, show_all); | |||||
| // Then show our own stuff | |||||
| out << "ParallelOp:"; | |||||
| out << "\n Num workers : " << num_workers_ << "\n"; | |||||
| // Summary 1-liner print | |||||
| if (!show_all) { | |||||
| out << " [workers: " << num_workers_ << "]"; | |||||
| // Call super class printer | |||||
| DatasetOp::Print(out, show_all); | |||||
| } else { | |||||
| // Detailed print | |||||
| DatasetOp::Print(out, show_all); | |||||
| out << "\nNum workers: " << num_workers_; | |||||
| } | |||||
| } | } | ||||
| // Override base class reset to provide reset actions specific to the ParallelOp class. | // Override base class reset to provide reset actions specific to the ParallelOp class. | ||||
| @@ -13,6 +13,7 @@ | |||||
| * See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
| * limitations under the License. | * limitations under the License. | ||||
| */ | */ | ||||
| #include <iomanip> | |||||
| #include <iostream> | #include <iostream> | ||||
| #include "dataset/engine/datasetops/pipeline_op.h" | #include "dataset/engine/datasetops/pipeline_op.h" | ||||
| @@ -23,11 +24,26 @@ PipelineOp::PipelineOp(int32_t op_connector_size) : DatasetOp(op_connector_size) | |||||
| // A print method typically used for debugging | // A print method typically used for debugging | ||||
| void PipelineOp::Print(std::ostream &out, bool show_all) const { | void PipelineOp::Print(std::ostream &out, bool show_all) const { | ||||
| // Call base class printer first | |||||
| DatasetOp::Print(out, show_all); | |||||
| // Then display our own stuff for the pipeline op | |||||
| // out << "This is a pipeline op print. nothing to display here at the moment.\n"; | |||||
| // Summary 1-liner print | |||||
| if (!show_all) { | |||||
| out << " [workers: "; | |||||
| if (this->inlined()) { | |||||
| out << "0 (inlined)]"; | |||||
| } else { | |||||
| out << "1]"; // Pipeline ops only have 1 worker | |||||
| } | |||||
| // Call super class printer | |||||
| DatasetOp::Print(out, show_all); | |||||
| } else { | |||||
| // Detailed print | |||||
| DatasetOp::Print(out, show_all); | |||||
| out << "\nNum workers: "; | |||||
| if (this->inlined()) { | |||||
| out << "0 (inlined)"; | |||||
| } else { | |||||
| out << "1"; // Pipeline ops only have 1 worker | |||||
| } | |||||
| } | |||||
| } | } | ||||
| } // namespace dataset | } // namespace dataset | ||||
| } // namespace mindspore | } // namespace mindspore | ||||
| @@ -16,6 +16,7 @@ | |||||
| #include "dataset/engine/datasetops/project_op.h" | #include "dataset/engine/datasetops/project_op.h" | ||||
| #include <algorithm> | #include <algorithm> | ||||
| #include <iomanip> | |||||
| #include <iostream> | #include <iostream> | ||||
| #include <string> | #include <string> | ||||
| #include <unordered_map> | #include <unordered_map> | ||||
| @@ -49,12 +50,23 @@ ProjectOp::ProjectOp(const std::vector<std::string> &columns_to_project) | |||||
| : PipelineOp(0), columns_to_project_(columns_to_project) {} | : PipelineOp(0), columns_to_project_(columns_to_project) {} | ||||
| void ProjectOp::Print(std::ostream &out, bool show_all) const { | void ProjectOp::Print(std::ostream &out, bool show_all) const { | ||||
| PipelineOp::Print(out, show_all); | |||||
| out << "ProjectOp: columns that are projected: "; | |||||
| for (size_t i = 0; i < columns_to_project_.size(); i++) { | |||||
| out << columns_to_project_[i] << " "; | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <ProjectOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nColumns that are projected:"; | |||||
| for (size_t i = 0; i < columns_to_project_.size(); i++) { | |||||
| out << "\n" << columns_to_project_[i]; | |||||
| } | |||||
| out << "\n\n"; | |||||
| } | } | ||||
| out << '\n'; | |||||
| } | } | ||||
| // Gets a buffer from the child operator and projects the buffer. | // Gets a buffer from the child operator and projects the buffer. | ||||
| @@ -14,7 +14,7 @@ | |||||
| * limitations under the License. | * limitations under the License. | ||||
| */ | */ | ||||
| #include "dataset/engine/datasetops/rename_op.h" | #include "dataset/engine/datasetops/rename_op.h" | ||||
| #include <iomanip> | |||||
| #include <vector> | #include <vector> | ||||
| #include <utility> | #include <utility> | ||||
| #include <unordered_map> | #include <unordered_map> | ||||
| @@ -138,11 +138,25 @@ Status RenameOp::RenameBuffer(std::unique_ptr<DataBuffer> *input_buffer) { | |||||
| // prints rename | // prints rename | ||||
| void RenameOp::Print(std::ostream &out, // In: The output stream to print to | void RenameOp::Print(std::ostream &out, // In: The output stream to print to | ||||
| bool show_all) const { // In: T/F if it should print everything | bool show_all) const { // In: T/F if it should print everything | ||||
| // Call base class printer first | |||||
| PipelineOp::Print(out, show_all); | |||||
| out << "\nRenameOp:\n"; | |||||
| for (size_t i = 0; i < in_columns_.size(); ++i) { | |||||
| out << "\nin Columns: " << in_columns_[i] << "\nOut Columns: " << out_columns_[i] << "\n\n"; | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <RenameOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nIn columns:"; | |||||
| for (size_t i = 0; i < in_columns_.size(); ++i) { | |||||
| out << "\n " << in_columns_[i]; | |||||
| } | |||||
| for (size_t i = 0; i < out_columns_.size(); ++i) { | |||||
| out << "\n " << out_columns_[i]; | |||||
| } | |||||
| out << "\n\n"; | |||||
| } | } | ||||
| } | } | ||||
| @@ -13,6 +13,7 @@ | |||||
| * See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
| * limitations under the License. | * limitations under the License. | ||||
| */ | */ | ||||
| #include <iomanip> | |||||
| #include <iostream> | #include <iostream> | ||||
| #include <utility> | #include <utility> | ||||
| @@ -51,22 +52,28 @@ RepeatOp::~RepeatOp() {} | |||||
| // A print method typically used for debugging | // A print method typically used for debugging | ||||
| void RepeatOp::Print(std::ostream &out, bool show_all) const { | void RepeatOp::Print(std::ostream &out, bool show_all) const { | ||||
| // Call base class printer first | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then display our own stuff | |||||
| out << "RepeatOp:" | |||||
| << "\nCurrent repeat count: " << repeat_count_ << "\nMax repeat count: " << max_repeats_ | |||||
| << "\nLeaf Nodes in my execution path:"; | |||||
| if (!eoe_ops_.empty()) { | |||||
| out << "\n"; | |||||
| for (size_t i = 0; i < eoe_ops_.size(); i++) { | |||||
| out << " Operator: " << eoe_ops_[i]->id() << "\n"; | |||||
| } | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <RepeatOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << " [repeats: " << max_repeats_ << "]\n"; | |||||
| } else { | } else { | ||||
| out << " kNone."; | |||||
| // Call the super class for displaying any common detailed info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nCurrent repeat count: " << repeat_count_ << "\nMax repeat count: " << max_repeats_ | |||||
| << "\nLeaf Nodes in execution path:"; | |||||
| if (!eoe_ops_.empty()) { | |||||
| for (size_t i = 0; i < eoe_ops_.size(); i++) { | |||||
| out << "\n Operator: " << eoe_ops_[i]->id(); | |||||
| } | |||||
| } else { | |||||
| out << " None."; | |||||
| } | |||||
| out << "\n\n"; | |||||
| } | } | ||||
| out << "\n-------------------------\n\n"; // End the display with this line | |||||
| } | } | ||||
| // Base-class override for executing specific RepeatOp configurations. This code will be called | // Base-class override for executing specific RepeatOp configurations. This code will be called | ||||
| @@ -19,6 +19,7 @@ | |||||
| #include <securec.h> | #include <securec.h> | ||||
| #include <algorithm> | #include <algorithm> | ||||
| #include <chrono> | #include <chrono> | ||||
| #include <iomanip> | |||||
| #include <iostream> | #include <iostream> | ||||
| #include <limits> | #include <limits> | ||||
| #include <random> | #include <random> | ||||
| @@ -108,13 +109,20 @@ Status ShuffleOp::SelfReset() { | |||||
| // A print method typically used for debugging | // A print method typically used for debugging | ||||
| void ShuffleOp::Print(std::ostream &out, bool show_all) const { | void ShuffleOp::Print(std::ostream &out, bool show_all) const { | ||||
| // Call base class printer first | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then display our own stuff | |||||
| out << "ShuffleOp:\n Shuffle size: " << shuffle_size_ << "\n rows_per_buffer_: " << rows_per_buffer_ | |||||
| << "\n shuffle_buffer_state_: " << shuffle_buffer_state_ << "\n shuffle_seed_: " << shuffle_seed_; | |||||
| out << "\n-------------------------\n\n"; // End the display with this line | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <ShuffleOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << " [shuffle size: " << shuffle_size_ << "]\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nShuffle size: " << shuffle_size_ << "\nRows per buffer: " << rows_per_buffer_ | |||||
| << "\nShuffle buffer state: " << shuffle_buffer_state_ << "\nShuffle seed: " << shuffle_seed_ << "\n\n"; | |||||
| } | |||||
| } | } | ||||
| // Private function to add a new row to the shuffle buffer. | // Private function to add a new row to the shuffle buffer. | ||||
| @@ -13,6 +13,7 @@ | |||||
| * See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
| * limitations under the License. | * limitations under the License. | ||||
| */ | */ | ||||
| #include <iomanip> | |||||
| #include <iostream> | #include <iostream> | ||||
| #include <utility> | #include <utility> | ||||
| @@ -51,12 +52,19 @@ SkipOp::~SkipOp() {} | |||||
| // A print method typically used for debugging | // A print method typically used for debugging | ||||
| void SkipOp::Print(std::ostream &out, bool show_all) const { | void SkipOp::Print(std::ostream &out, bool show_all) const { | ||||
| // Call base class printer first | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then display our own stuff | |||||
| out << "SkipOp:" | |||||
| << "\nCurrent skip count: " << skip_count_ << "\nMax skip count: " << max_skips_; | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <SkipOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << " [skips: " << max_skips_ << "]\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nSkip count: " << skip_count_ << "\nMax skips: " << max_skips_ << "\n\n"; | |||||
| } | |||||
| } | } | ||||
| // Since the buffer may contain multi rows, this function will drop the rows | // Since the buffer may contain multi rows, this function will drop the rows | ||||
| @@ -16,6 +16,7 @@ | |||||
| #include "dataset/engine/datasetops/source/celeba_op.h" | #include "dataset/engine/datasetops/source/celeba_op.h" | ||||
| #include <fstream> | #include <fstream> | ||||
| #include <iomanip> | |||||
| #include "dataset/core/config_manager.h" | #include "dataset/core/config_manager.h" | ||||
| #include "dataset/util/path.h" | #include "dataset/util/path.h" | ||||
| #include "dataset/engine/datasetops/source/sampler/sequential_sampler.h" | #include "dataset/engine/datasetops/source/sampler/sequential_sampler.h" | ||||
| @@ -434,9 +435,19 @@ Status CelebAOp::LoadTensorRow(const std::pair<std::string, std::vector<int32_t> | |||||
| } | } | ||||
| void CelebAOp::Print(std::ostream &out, bool show_all) const { | void CelebAOp::Print(std::ostream &out, bool show_all) const { | ||||
| DatasetOp::Print(out, show_all); | |||||
| out << "\nnumber of parallel workers:" << num_workers_ << "\nNumber of rows:" << num_rows_exact_ | |||||
| << "\nceleba dir: " << folder_path_ << "\n-------------------------\n"; | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <CelebAOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nNumber of rows:" << num_rows_exact_ << "\nceleba dir: " << folder_path_ << "\n\n"; | |||||
| } | |||||
| } | } | ||||
| // Reset Sampler and wakeup Master thread (functor) | // Reset Sampler and wakeup Master thread (functor) | ||||
| @@ -17,6 +17,7 @@ | |||||
| #include <algorithm> | #include <algorithm> | ||||
| #include <fstream> | #include <fstream> | ||||
| #include <iomanip> | |||||
| #include <utility> | #include <utility> | ||||
| #include "common/utils.h" | #include "common/utils.h" | ||||
| @@ -225,9 +226,19 @@ Status CifarOp::LoadBuffer(const std::vector<int64_t> &keys, std::unique_ptr<Dat | |||||
| } | } | ||||
| void CifarOp::Print(std::ostream &out, bool show_all) const { | void CifarOp::Print(std::ostream &out, bool show_all) const { | ||||
| DatasetOp::Print(out, show_all); | |||||
| out << "\nnumber of parallel workers:" << num_workers_ << "\nNumber of rows:" << num_rows_ | |||||
| << "\nCifar Directory: " << folder_path_ << "\n-------------------------\n"; | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <CifarOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nNumber of rows:" << num_rows_ << "\nCifar directory: " << folder_path_ << "\n\n"; | |||||
| } | |||||
| } | } | ||||
| // Reset Sampler and wakeup Master thread (functor) | // Reset Sampler and wakeup Master thread (functor) | ||||
| @@ -13,8 +13,9 @@ | |||||
| * See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
| * limitations under the License. | * limitations under the License. | ||||
| */ | */ | ||||
| #include "dataset/core/global_context.h" | |||||
| #include "dataset/engine/datasetops/source/generator_op.h" | #include "dataset/engine/datasetops/source/generator_op.h" | ||||
| #include <iomanip> | |||||
| #include "dataset/core/global_context.h" | |||||
| #include "dataset/engine/db_connector.h" | #include "dataset/engine/db_connector.h" | ||||
| #include "dataset/engine/data_buffer.h" | #include "dataset/engine/data_buffer.h" | ||||
| #include "dataset/engine/execution_tree.h" | #include "dataset/engine/execution_tree.h" | ||||
| @@ -58,6 +59,26 @@ GeneratorOp::GeneratorOp(py::function generator_function, std::vector<std::strin | |||||
| GeneratorOp::~GeneratorOp() { this->Dealloc(); } | GeneratorOp::~GeneratorOp() { this->Dealloc(); } | ||||
| void GeneratorOp::Print(std::ostream &out, bool show_all) const { | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <GeneratorOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nColumn names:\n"; | |||||
| for (int i = 0; i < column_names_.size(); ++i) { | |||||
| out << "\n " << column_names_[i]; | |||||
| } | |||||
| out << "\n\n"; | |||||
| } | |||||
| } | |||||
| void GeneratorOp::Dealloc() noexcept { | void GeneratorOp::Dealloc() noexcept { | ||||
| // Setup GIL state | // Setup GIL state | ||||
| PyGILState_STATE gstate; | PyGILState_STATE gstate; | ||||
| @@ -95,6 +95,11 @@ class GeneratorOp : public PipelineOp { | |||||
| ~GeneratorOp(); | ~GeneratorOp(); | ||||
| // A print method typically used for debugging | |||||
| // @param out - The output stream to write output to | |||||
| // @param show_all - A bool to control if you want to show all info or just a summary | |||||
| void Print(std::ostream &out, bool show_all) const override; | |||||
| // << Stream output operator overload | // << Stream output operator overload | ||||
| // @notes This allows you to write the debug print info using stream operators | // @notes This allows you to write the debug print info using stream operators | ||||
| // @param out - reference to the output stream being overloaded | // @param out - reference to the output stream being overloaded | ||||
| @@ -14,9 +14,8 @@ | |||||
| * limitations under the License. | * limitations under the License. | ||||
| */ | */ | ||||
| #include "dataset/engine/datasetops/source/image_folder_op.h" | #include "dataset/engine/datasetops/source/image_folder_op.h" | ||||
| #include <fstream> | #include <fstream> | ||||
| #include <iomanip> | |||||
| #include "common/utils.h" | #include "common/utils.h" | ||||
| #include "dataset/core/config_manager.h" | #include "dataset/core/config_manager.h" | ||||
| #include "dataset/core/tensor_shape.h" | #include "dataset/core/tensor_shape.h" | ||||
| @@ -243,9 +242,19 @@ Status ImageFolderOp::LoadBuffer(const std::vector<int64_t> &keys, std::unique_p | |||||
| } | } | ||||
| void ImageFolderOp::Print(std::ostream &out, bool show_all) const { | void ImageFolderOp::Print(std::ostream &out, bool show_all) const { | ||||
| DatasetOp::Print(out, show_all); | |||||
| out << "\nnumber of parallel workers:" << num_workers_ << "\nNumber of rows:" << num_rows_ | |||||
| << "\nImageFolder Directory: " << folder_path_ << "\n-------------------------\n"; | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <ImageFolderOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nNumber of rows:" << num_rows_ << "\nImageFolder directory: " << folder_path_ << "\n\n"; | |||||
| } | |||||
| } | } | ||||
| // Reset Sampler and wakeup Master thread (functor) | // Reset Sampler and wakeup Master thread (functor) | ||||
| @@ -17,6 +17,7 @@ | |||||
| #include <algorithm> | #include <algorithm> | ||||
| #include <fstream> | #include <fstream> | ||||
| #include <iomanip> | |||||
| #include <nlohmann/json.hpp> | #include <nlohmann/json.hpp> | ||||
| #include "common/utils.h" | #include "common/utils.h" | ||||
| @@ -239,9 +240,19 @@ Status ManifestOp::LoadBuffer(const std::vector<int64_t> &keys, std::unique_ptr< | |||||
| } | } | ||||
| void ManifestOp::Print(std::ostream &out, bool show_all) const { | void ManifestOp::Print(std::ostream &out, bool show_all) const { | ||||
| DatasetOp::Print(out, show_all); | |||||
| out << "\nnumber of parallel workers:" << num_workers_ << "\nNumber of rows:" << num_rows_ | |||||
| << "\nManifest file: " << file_ << "\n-------------------------\n"; | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <ManifestOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nNumber of rows:" << num_rows_ << "\nManifest file: " << file_ << "\n\n"; | |||||
| } | |||||
| } | } | ||||
| // Reset Sampler and wakeup Master thread (functor) | // Reset Sampler and wakeup Master thread (functor) | ||||
| @@ -17,6 +17,7 @@ | |||||
| #include <algorithm> | #include <algorithm> | ||||
| #include <cstdint> | #include <cstdint> | ||||
| #include <iomanip> | |||||
| #include <limits> | #include <limits> | ||||
| #include <utility> | #include <utility> | ||||
| @@ -179,18 +180,21 @@ MindRecordOp::~MindRecordOp() {} | |||||
| // A print method typically used for debugging | // A print method typically used for debugging | ||||
| void MindRecordOp::Print(std::ostream &out, bool show_all) const { | void MindRecordOp::Print(std::ostream &out, bool show_all) const { | ||||
| // Call base class printer first | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then display our own stuff | |||||
| out << "\nMindRecordOp:"; | |||||
| out << "\n 1 Dataset file : " << dataset_file_; | |||||
| out << "\n Number of rows : " << num_rows_; | |||||
| out << "\n Rows per buffer : " << rows_per_buffer_; | |||||
| out << "\n Number of buffers : " << buffers_needed_; | |||||
| out << "\n Number of ShardReader workers : " << num_mind_record_workers_; | |||||
| out << "\n\n"; | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <MindRecordOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\n1 Dataset file : " << dataset_file_ << "\nNumber of rows : " << num_rows_ | |||||
| << "\nRows per buffer : " << rows_per_buffer_ << "\nNumber of buffers : " << buffers_needed_ | |||||
| << "\nNumber of ShardReader workers : " << num_mind_record_workers_ << "\n\n"; | |||||
| } | |||||
| } | } | ||||
| template <typename T> | template <typename T> | ||||
| @@ -16,7 +16,7 @@ | |||||
| #include "dataset/engine/datasetops/source/mnist_op.h" | #include "dataset/engine/datasetops/source/mnist_op.h" | ||||
| #include <fstream> | #include <fstream> | ||||
| #include <iomanip> | |||||
| #include "common/utils.h" | #include "common/utils.h" | ||||
| #include "dataset/core/config_manager.h" | #include "dataset/core/config_manager.h" | ||||
| #include "dataset/core/tensor_shape.h" | #include "dataset/core/tensor_shape.h" | ||||
| @@ -190,9 +190,19 @@ Status MnistOp::LoadBuffer(const std::vector<int64_t> &keys, std::unique_ptr<Dat | |||||
| } | } | ||||
| void MnistOp::Print(std::ostream &out, bool show_all) const { | void MnistOp::Print(std::ostream &out, bool show_all) const { | ||||
| DatasetOp::Print(out, show_all); | |||||
| out << "\nnumber of parallel workers:" << num_workers_ << "\nNumber of rows:" << num_rows_ | |||||
| << "\nMNIST Directory: " << folder_path_ << "\n-------------------------\n"; | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <MnistOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nNumber of rows:" << num_rows_ << "\nMNIST Directory: " << folder_path_ << "\n\n"; | |||||
| } | |||||
| } | } | ||||
| // Reset Sampler and wakeup Master thread (functor) | // Reset Sampler and wakeup Master thread (functor) | ||||
| @@ -23,6 +23,7 @@ | |||||
| #include <chrono> | #include <chrono> | ||||
| #include <cstdint> | #include <cstdint> | ||||
| #include <fstream> | #include <fstream> | ||||
| #include <iomanip> | |||||
| #include <iostream> | #include <iostream> | ||||
| #include <memory> | #include <memory> | ||||
| #include <mutex> | #include <mutex> | ||||
| @@ -319,31 +320,18 @@ StorageOp::~StorageOp() {} | |||||
| // A print method typically used for debugging | // A print method typically used for debugging | ||||
| void StorageOp::Print(std::ostream &out, bool show_all) const { | void StorageOp::Print(std::ostream &out, bool show_all) const { | ||||
| // Call base class printer first | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then display our own stuff | |||||
| out << "\nStorageOp:"; | |||||
| out << "\n Dataset files dir : " << dataset_files_dir_ << "\n Dataset schema file : " << schema_file_; | |||||
| if (!dataset_file_list_.empty()) { | |||||
| out << "\n Dataset Files List:\n"; | |||||
| for (auto filename : dataset_file_list_) { | |||||
| out << " " << filename << "\n"; | |||||
| } | |||||
| } | |||||
| out << "\n\n"; | |||||
| if (!data_buffers_.empty()) { | |||||
| out << std::boolalpha << " Number of DataBuffers inside StorageOp: " << data_buffers_.size() | |||||
| << "\n Number of rows: " << num_rows_ << "\n Rows per buffer: " << rows_per_buffer_ << "\n\n DataBuffers:\n"; | |||||
| // Iterate over each DataBuffer and display the buffer id and the buffer | |||||
| int32_t i = 0; | |||||
| for (i = 0; i < data_buffers_.size(); i++) { | |||||
| out << " " << i << ")\n"; | |||||
| data_buffers_[i]->Print(out, show_all); | |||||
| } | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <StorageOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | } else { | ||||
| out << "DataCache is empty!\n"; | |||||
| // Call the super class for displaying any common detailed info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nDetailed operator printing has not been implemented for this op.\n\n"; | |||||
| } | } | ||||
| } | } | ||||
| @@ -16,6 +16,7 @@ | |||||
| #include <algorithm> | #include <algorithm> | ||||
| #include <fstream> | #include <fstream> | ||||
| #include <iomanip> | |||||
| #include <memory> | #include <memory> | ||||
| #include <string> | #include <string> | ||||
| #include <utility> | #include <utility> | ||||
| @@ -90,6 +91,30 @@ TextFileOp::TextFileOp(int32_t num_workers, int64_t rows_per_buffer, int64_t num | |||||
| worker_connector_size_ = worker_connector_size; | worker_connector_size_ = worker_connector_size; | ||||
| } | } | ||||
| // A print method typically used for debugging | |||||
| void TextFileOp::Print(std::ostream &out, bool show_all) const { | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <TextFileOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nRows per buffer: " << rows_per_buffer_ << "\nSample count: " << num_samples_ | |||||
| << "\nDevice id: " << device_id_ << "\nNumber of devices: " << num_devices_ | |||||
| << "\nShuffle files: " << ((shuffle_files_) ? "yes" : "no") << "\nText files list:\n"; | |||||
| for (int i = 0; i < text_files_list_.size(); ++i) { | |||||
| out << " " << text_files_list_[i]; | |||||
| } | |||||
| out << "\nData Schema:\n"; | |||||
| out << *data_schema_ << "\n\n"; | |||||
| } | |||||
| } | |||||
| Status TextFileOp::Init() { | Status TextFileOp::Init() { | ||||
| RETURN_IF_NOT_OK(filename_index_->insert(text_files_list_)); | RETURN_IF_NOT_OK(filename_index_->insert(text_files_list_)); | ||||
| @@ -144,6 +144,11 @@ class TextFileOp : public ParallelOp { | |||||
| // Default destructor | // Default destructor | ||||
| ~TextFileOp() = default; | ~TextFileOp() = default; | ||||
| // A print method typically used for debugging | |||||
| // @param out - The output stream to write output to | |||||
| // @param show_all - A bool to control if you want to show all info or just a summary | |||||
| void Print(std::ostream &out, bool show_all) const override; | |||||
| // Instantiates the internal queues and connectors | // Instantiates the internal queues and connectors | ||||
| // @return Status - the error code returned | // @return Status - the error code returned | ||||
| Status Init(); | Status Init(); | ||||
| @@ -18,6 +18,7 @@ | |||||
| #include <cmath> | #include <cmath> | ||||
| #include <condition_variable> | #include <condition_variable> | ||||
| #include <future> | #include <future> | ||||
| #include <iomanip> | |||||
| #include <memory> | #include <memory> | ||||
| #include <mutex> | #include <mutex> | ||||
| #include <utility> | #include <utility> | ||||
| @@ -155,6 +156,36 @@ TFReaderOp::TFReaderOp(int32_t num_workers, int32_t worker_connector_size, int64 | |||||
| worker_connector_size_ = worker_connector_size; | worker_connector_size_ = worker_connector_size; | ||||
| } | } | ||||
| // A print method typically used for debugging | |||||
| void TFReaderOp::Print(std::ostream &out, bool show_all) const { | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <TFReaderOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nRows per buffer: " << rows_per_buffer_ << "\nTotal rows: " << total_rows_ << "\nDevice id: " << device_id_ | |||||
| << "\nNumber of devices: " << num_devices_ << "\nShuffle files: " << ((shuffle_files_) ? "yes" : "no") | |||||
| << "\nDataset files list:\n"; | |||||
| for (int i = 0; i < dataset_files_list_.size(); ++i) { | |||||
| out << " " << dataset_files_list_[i]; | |||||
| } | |||||
| if (!columns_to_load_.empty()) { | |||||
| out << "\nColumns to load:\n"; | |||||
| for (int i = 0; i < columns_to_load_.size(); ++i) { | |||||
| out << " " << columns_to_load_[i]; | |||||
| } | |||||
| } | |||||
| out << "\nData Schema:\n"; | |||||
| out << *data_schema_ << "\n\n"; | |||||
| } | |||||
| } | |||||
| Status TFReaderOp::Init() { | Status TFReaderOp::Init() { | ||||
| if (data_schema_->Empty()) { | if (data_schema_->Empty()) { | ||||
| RETURN_IF_NOT_OK(CreateSchema(dataset_files_list_[0], columns_to_load_)); | RETURN_IF_NOT_OK(CreateSchema(dataset_files_list_[0], columns_to_load_)); | ||||
| @@ -188,6 +188,11 @@ class TFReaderOp : public ParallelOp { | |||||
| // Default destructor | // Default destructor | ||||
| ~TFReaderOp() = default; | ~TFReaderOp() = default; | ||||
| // A print method typically used for debugging | |||||
| // @param out - The output stream to write output to | |||||
| // @param show_all - A bool to control if you want to show all info or just a summary | |||||
| void Print(std::ostream &out, bool show_all) const override; | |||||
| // Instantiates the internal queues and connectors. | // Instantiates the internal queues and connectors. | ||||
| // @return Status - the error code returned. | // @return Status - the error code returned. | ||||
| Status Init(); | Status Init(); | ||||
| @@ -16,7 +16,7 @@ | |||||
| #include "dataset/engine/datasetops/source/voc_op.h" | #include "dataset/engine/datasetops/source/voc_op.h" | ||||
| #include <fstream> | #include <fstream> | ||||
| #include <iomanip> | |||||
| #include "common/utils.h" | #include "common/utils.h" | ||||
| #include "dataset/core/config_manager.h" | #include "dataset/core/config_manager.h" | ||||
| #include "dataset/core/tensor_shape.h" | #include "dataset/core/tensor_shape.h" | ||||
| @@ -133,9 +133,19 @@ Status VOCOp::operator()() { | |||||
| } | } | ||||
| void VOCOp::Print(std::ostream &out, bool show_all) const { | void VOCOp::Print(std::ostream &out, bool show_all) const { | ||||
| DatasetOp::Print(out, show_all); | |||||
| out << "\nnumber of parallel workers:" << num_workers_ << "\nNumber of rows:" << num_rows_ | |||||
| << "\nVOC Directory: " << folder_path_ << "\n-------------------\n"; | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <VOCOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| ParallelOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nNumber of rows: " << num_rows_ << "\nVOC Directory: " << folder_path_ << "\n\n"; | |||||
| } | |||||
| } | } | ||||
| Status VOCOp::Reset() { | Status VOCOp::Reset() { | ||||
| @@ -13,7 +13,7 @@ | |||||
| * See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | ||||
| * limitations under the License. | * limitations under the License. | ||||
| */ | */ | ||||
| #include <iomanip> | |||||
| #include <utility> | #include <utility> | ||||
| #include "common/utils.h" | #include "common/utils.h" | ||||
| @@ -47,12 +47,19 @@ TakeOp::TakeOp(int32_t count) : PipelineOp(0), max_takes_(count), take_count_(0) | |||||
| // A print method typically used for debugging | // A print method typically used for debugging | ||||
| void TakeOp::Print(std::ostream &out, bool show_all) const { | void TakeOp::Print(std::ostream &out, bool show_all) const { | ||||
| // Call base class printer first | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then display our own stuff | |||||
| out << "TakeOp:" | |||||
| << "\nCurrent take count: " << take_count_ << "\nMax take count: " << max_takes_; | |||||
| // Always show the id and name as first line regardless if this summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <TakeOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << " [takes: " << max_takes_ << "]\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nTake count: " << take_count_ << "\nMax takes: " << max_takes_ << "\n\n"; | |||||
| } | |||||
| } | } | ||||
| // This function will be call muti times to returns the buffer, when meet required max take count or meet | // This function will be call muti times to returns the buffer, when meet required max take count or meet | ||||
| @@ -15,6 +15,7 @@ | |||||
| */ | */ | ||||
| #include "dataset/engine/datasetops/zip_op.h" | #include "dataset/engine/datasetops/zip_op.h" | ||||
| #include <utility> | #include <utility> | ||||
| #include <iomanip> | |||||
| #include "dataset/core/constants.h" | #include "dataset/core/constants.h" | ||||
| #include "dataset/engine/data_buffer.h" | #include "dataset/engine/data_buffer.h" | ||||
| #include "dataset/engine/db_connector.h" | #include "dataset/engine/db_connector.h" | ||||
| @@ -224,10 +225,19 @@ Status ZipOp::drainPipeline() { | |||||
| // A function that prints info about the Operator | // A function that prints info about the Operator | ||||
| void ZipOp::Print(std::ostream &out, // In: The output stream to print to | void ZipOp::Print(std::ostream &out, // In: The output stream to print to | ||||
| bool show_all) const { // In: T/F if it should print everything | bool show_all) const { // In: T/F if it should print everything | ||||
| // Call base class printer first | |||||
| PipelineOp::Print(out, show_all); | |||||
| out << "\nZipOp:\n" | |||||
| << "\nDatasets: " << children_num_ << "\n\n"; | |||||
| // Always show the id and name as first line regardless if this is summary or detailed print | |||||
| out << "(" << std::setw(2) << operator_id_ << ") <ZipOp>:"; | |||||
| if (!show_all) { | |||||
| // Call the super class for displaying any common 1-liner info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal 1-liner info for this op | |||||
| out << "\n"; | |||||
| } else { | |||||
| // Call the super class for displaying any common detailed info | |||||
| PipelineOp::Print(out, show_all); | |||||
| // Then show any custom derived-internal stuff | |||||
| out << "\nDatasets: " << children_num_ << "\n\n"; | |||||
| } | |||||
| } | } | ||||
| // overwrite function and handle eof | // overwrite function and handle eof | ||||
| @@ -81,13 +81,29 @@ Status ExecutionTree::AssignRoot(const std::shared_ptr<DatasetOp> &op) { | |||||
| } | } | ||||
| // A print method typically used for debugging | // A print method typically used for debugging | ||||
| void ExecutionTree::Print(std::ostream &out, bool show_all) const { | |||||
| out << "Total number of nodes in the ExecutionTree (may or may not be connected nodes): " << id_count_ | |||||
| << "\nTree state: " << static_cast<int>(tree_state_) << "\n"; | |||||
| if (root_ != nullptr) { | |||||
| // Just call the printer on the root node. Each node descends to it's children to print them if | |||||
| // showAll is true. | |||||
| root_->Print(out, show_all); | |||||
| void ExecutionTree::Print(std::ostream &out) const { | |||||
| out << "Execution tree summary:\n" | |||||
| << "-----------------------\n"; | |||||
| this->PrintNode(out, root_, "", true, false); | |||||
| out << "\nExecution tree operator details:\n" | |||||
| << "--------------------------------\n"; | |||||
| this->PrintNode(out, root_, "", true, true); | |||||
| } | |||||
| // A helper functions for doing the recursive printing | |||||
| void ExecutionTree::PrintNode(std::ostream &out, const std::shared_ptr<DatasetOp> &dataset_op, std::string indent, | |||||
| bool last, bool detailed) const { | |||||
| // Decide which printer to use based on detailed arg. | |||||
| if (!detailed) { | |||||
| out << indent << "+- " << *dataset_op; | |||||
| indent += (last ? " " : "| "); | |||||
| } else { | |||||
| dataset_op->Print(out, detailed); | |||||
| } | |||||
| // Descend to children | |||||
| for (int32_t i = 0; i < dataset_op->child_.size(); ++i) { | |||||
| this->PrintNode(out, dataset_op->child_[i], indent, (i == (dataset_op->child_.size() - 1)), detailed); | |||||
| } | } | ||||
| } | } | ||||
| @@ -100,6 +116,9 @@ Status ExecutionTree::Launch() { | |||||
| " Expected state: " + std::to_string(static_cast<int>(kDeTStateReady)); | " Expected state: " + std::to_string(static_cast<int>(kDeTStateReady)); | ||||
| RETURN_STATUS_UNEXPECTED(err_msg); | RETURN_STATUS_UNEXPECTED(err_msg); | ||||
| } | } | ||||
| std::ostringstream ss; | |||||
| ss << *this; | |||||
| MS_LOG(INFO) << "Printing the tree before launch tasks:\n" << ss.str(); | |||||
| for (auto itr = this->begin(); itr != this->end(); ++itr) { | for (auto itr = this->begin(); itr != this->end(); ++itr) { | ||||
| // An inlined operator is one that has an output connector size of 0, and it does not | // An inlined operator is one that has an output connector size of 0, and it does not | ||||
| // require a thread to execute. Instead, the work of this operator is executed inlined | // require a thread to execute. Instead, the work of this operator is executed inlined | ||||
| @@ -19,6 +19,7 @@ | |||||
| #include <functional> | #include <functional> | ||||
| #include <memory> | #include <memory> | ||||
| #include <stack> | #include <stack> | ||||
| #include <string> | |||||
| #include <vector> | #include <vector> | ||||
| #include "dataset/engine/datasetops/dataset_op.h" | #include "dataset/engine/datasetops/dataset_op.h" | ||||
| #include "dataset/util/status.h" | #include "dataset/util/status.h" | ||||
| @@ -114,8 +115,7 @@ class ExecutionTree { | |||||
| // A print method typically used for debugging | // A print method typically used for debugging | ||||
| // @param out - The output stream to write output to | // @param out - The output stream to write output to | ||||
| // @param show_all - A bool to control if you want to show all info or just a summary | |||||
| void Print(std::ostream &out, bool show_all) const; | |||||
| void Print(std::ostream &out) const; | |||||
| // Returns an iterator positioned at the start | // Returns an iterator positioned at the start | ||||
| // @return Iterator - The iterator | // @return Iterator - The iterator | ||||
| @@ -133,7 +133,7 @@ class ExecutionTree { | |||||
| // @param exe_tree - reference to the execution tree to display | // @param exe_tree - reference to the execution tree to display | ||||
| // @return - the output stream must be returned | // @return - the output stream must be returned | ||||
| friend std::ostream &operator<<(std::ostream &out, ExecutionTree &exe_tree) { | friend std::ostream &operator<<(std::ostream &out, ExecutionTree &exe_tree) { | ||||
| exe_tree.Print(out, false); | |||||
| exe_tree.Print(out); | |||||
| return out; | return out; | ||||
| } | } | ||||
| @@ -178,6 +178,14 @@ class ExecutionTree { | |||||
| TaskGroup *AllTasks() const { return tg_.get(); } | TaskGroup *AllTasks() const { return tg_.get(); } | ||||
| private: | private: | ||||
| // A helper functions for doing the recursive printing | |||||
| // @param dataset_op - The dataset op to print | |||||
| // @param indent - an indent string for aligning child levels in output | |||||
| // @param last - an indicator if it's the last child or not | |||||
| // @param detailed - should it display the detailed node output or the summary line | |||||
| void PrintNode(std::ostream &out, const std::shared_ptr<DatasetOp> &dataset_op, std::string indent, bool last, | |||||
| bool detailed) const; | |||||
| std::unique_ptr<TaskGroup> tg_; // Class for worker management | std::unique_ptr<TaskGroup> tg_; // Class for worker management | ||||
| std::shared_ptr<DatasetOp> root_; // The root node of the tree | std::shared_ptr<DatasetOp> root_; // The root node of the tree | ||||
| int32_t id_count_; // Counter for generating operator id's | int32_t id_count_; // Counter for generating operator id's | ||||