From 4cf25719da08fa919baf253e15f2a3b841a4b9cf Mon Sep 17 00:00:00 2001 From: Felix Jentzsch Date: Tue, 28 Jan 2025 21:37:29 +0000 Subject: [PATCH 1/2] Replace distutil copy_tree with shutil --- src/finn/builder/build_dataflow_steps.py | 11 ++++++----- tests/end2end/test_end2end_bnn_pynq.py | 5 ++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/finn/builder/build_dataflow_steps.py b/src/finn/builder/build_dataflow_steps.py index ab2280554c..5163b2dbdb 100644 --- a/src/finn/builder/build_dataflow_steps.py +++ b/src/finn/builder/build_dataflow_steps.py @@ -33,7 +33,6 @@ import shutil import warnings from copy import deepcopy -from distutils.dir_util import copy_tree from functools import partial from qonnx.core.modelwrapper import ModelWrapper from qonnx.custom_op.registry import getCustomOp @@ -656,7 +655,9 @@ def step_create_stitched_ip(model: ModelWrapper, cfg: DataflowBuildConfig): ) ) # TODO copy all ip sources into output dir? as zip? - copy_tree(model.get_metadata_prop("vivado_stitch_proj"), stitched_ip_dir) + shutil.copytree( + model.get_metadata_prop("vivado_stitch_proj"), stitched_ip_dir, dirs_exist_ok=True + ) print("Vivado stitched IP written into " + stitched_ip_dir) if VerificationStepType.STITCHED_IP_RTLSIM in cfg._resolve_verification_steps(): # prepare ip-stitched rtlsim @@ -761,7 +762,7 @@ def step_make_pynq_driver(model: ModelWrapper, cfg: DataflowBuildConfig): if DataflowOutputType.PYNQ_DRIVER in cfg.generate_outputs: driver_dir = cfg.output_dir + "/driver" model = model.transform(MakePYNQDriver(cfg._resolve_driver_platform())) - copy_tree(model.get_metadata_prop("pynq_driver_dir"), driver_dir) + shutil.copytree(model.get_metadata_prop("pynq_driver_dir"), driver_dir, dirs_exist_ok=True) print("PYNQ Python driver written into " + driver_dir) return model @@ -862,8 +863,8 @@ def step_deployment_package(model: ModelWrapper, cfg: DataflowBuildConfig): bitfile_dir = cfg.output_dir + "/bitfile" driver_dir = cfg.output_dir + "/driver" os.makedirs(deploy_dir, exist_ok=True) - copy_tree(bitfile_dir, deploy_dir + "/bitfile") - copy_tree(driver_dir, deploy_dir + "/driver") + shutil.copytree(bitfile_dir, deploy_dir + "/bitfile", dirs_exist_ok=True) + shutil.copytree(driver_dir, deploy_dir + "/driver", dirs_exist_ok=True) return model diff --git a/tests/end2end/test_end2end_bnn_pynq.py b/tests/end2end/test_end2end_bnn_pynq.py index 0d3418624a..688423e581 100644 --- a/tests/end2end/test_end2end_bnn_pynq.py +++ b/tests/end2end/test_end2end_bnn_pynq.py @@ -40,7 +40,6 @@ import warnings from brevitas.export import export_qonnx from dataset_loading import cifar, mnist -from distutils.dir_util import copy_tree from qonnx.core.datatype import DataType from qonnx.core.modelwrapper import ModelWrapper from qonnx.custom_op.registry import getCustomOp @@ -59,7 +58,7 @@ from qonnx.transformation.lower_convs_to_matmul import LowerConvsToMatMul from qonnx.transformation.merge_onnx_models import MergeONNXModels from qonnx.util.cleanup import cleanup as qonnx_cleanup -from shutil import copy +from shutil import copy, copytree import finn.transformation.fpgadataflow.convert_to_hw_layers as to_hw import finn.transformation.streamline.absorb as absorb @@ -357,7 +356,7 @@ def deploy_based_on_board(model, model_title, topology, wbits, abits, board): # driver.py and python libraries pynq_driver_dir = model.get_metadata_prop("pynq_driver_dir") - copy_tree(pynq_driver_dir, deployment_dir) + copytree(pynq_driver_dir, deployment_dir, dirs_exist_ok=True) model.set_metadata_prop("pynq_deploy_dir", deployment_dir) From 6bd073a0c7c0926ca938aa8e51abc119db47ddd6 Mon Sep 17 00:00:00 2001 From: auphelia Date: Fri, 7 Feb 2025 17:15:47 +0000 Subject: [PATCH 2/2] [Notebooks] Replace disutil copy_tree with shutil in notebooks --- notebooks/end2end_example/bnn-pynq/cnv_end2end_example.ipynb | 5 ++--- notebooks/end2end_example/bnn-pynq/tfc_end2end_example.ipynb | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/notebooks/end2end_example/bnn-pynq/cnv_end2end_example.ipynb b/notebooks/end2end_example/bnn-pynq/cnv_end2end_example.ipynb index 8b8cff8ee9..507b1022e6 100644 --- a/notebooks/end2end_example/bnn-pynq/cnv_end2end_example.ipynb +++ b/notebooks/end2end_example/bnn-pynq/cnv_end2end_example.ipynb @@ -484,8 +484,7 @@ "metadata": {}, "outputs": [], "source": [ - "from shutil import copy\n", - "from distutils.dir_util import copy_tree\n", + "from shutil import copy, copytree\n", "\n", "# create directory for deployment files\n", "deployment_dir = make_build_dir(prefix=\"pynq_deployment_\")\n", @@ -503,7 +502,7 @@ "\n", "# driver.py and python libraries\n", "pynq_driver_dir = model.get_metadata_prop(\"pynq_driver_dir\")\n", - "copy_tree(pynq_driver_dir, deployment_dir)" + "copytree(pynq_driver_dir, deployment_dir, dirs_exist_ok=True)" ] }, { diff --git a/notebooks/end2end_example/bnn-pynq/tfc_end2end_example.ipynb b/notebooks/end2end_example/bnn-pynq/tfc_end2end_example.ipynb index 675ba23d2d..bb5e357b66 100644 --- a/notebooks/end2end_example/bnn-pynq/tfc_end2end_example.ipynb +++ b/notebooks/end2end_example/bnn-pynq/tfc_end2end_example.ipynb @@ -895,8 +895,7 @@ "metadata": {}, "outputs": [], "source": [ - "from shutil import copy\n", - "from distutils.dir_util import copy_tree\n", + "from shutil import copy, copytree\n", "\n", "# create directory for deployment files\n", "deployment_dir = make_build_dir(prefix=\"pynq_deployment_\")\n", @@ -914,7 +913,7 @@ "\n", "# driver.py and python libraries\n", "pynq_driver_dir = model.get_metadata_prop(\"pynq_driver_dir\")\n", - "copy_tree(pynq_driver_dir, deployment_dir)" + "copytree(pynq_driver_dir, deployment_dir, dirs_exist_ok=True)" ] }, {