[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/KumarRobotics/CoverageControl/main/python/tests/test_parity.py [Back]  [Original]

#  This file is part of the CoverageControl library
#
#  Author: Saurav Agarwal
#  Contact: sauravag@seas.upenn.edu, agr.saurav1@gmail.com
#  Repository: https://github.com/KumarRobotics/CoverageControl
#
#  Copyright (c) 2024, Saurav Agarwal
#
#  The CoverageControl library is free software: you can redistribute it and/or
#  modify it under the terms of the GNU General Public License as published by
#  the Free Software Foundation, either version 3 of the License, or (at your
#  option) any later version.
#
#  The CoverageControl library is distributed in the hope that it will be
#  useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
#  Public License for more details.
#
#  You should have received a copy of the GNU General Public License along with
#  CoverageControl library. If not, see .

import warnings

import coverage_control
import numpy as np

params = coverage_control.Parameters()


def test_parity():
    if not coverage_control.CudaUtils.IsCudaAvailable():
        warnings.warn("CUDA not available, skipping test")

        return
    env_cuda = coverage_control.CoverageSystem(params)
    world_idf_obj_cuda = env_cuda.GetWorldIDFObject()
    world_idf_obj_cuda.GenerateMapCuda()
    world_map_cuda = world_idf_obj_cuda.GetWorldMap()
    init_robots = env_cuda.GetRobotPositions()

    env_cpu = coverage_control.CoverageSystem(params, world_idf_obj_cuda, init_robots)
    world_idf_obj_cpu = env_cpu.GetWorldIDFObject()
    world_idf_obj_cpu.GenerateMapCPU()
    world_map_cpu = world_idf_obj_cpu.GetWorldMap()

    is_close = np.allclose(world_map_cuda, world_map_cpu, atol=1e-2)

    if not is_close:
        diff = np.abs(world_map_cuda - world_map_cpu).max()
        print("Max difference: ", diff)
    assert is_close
    is_equal = np.array_equal(world_map_cuda, world_map_cpu)

    if not is_equal and is_close:
        diff = np.abs(world_map_cuda - world_map_cpu).max()
        print("Max difference: ", diff)
        warnings.warn("Not all elements are equal, but all elements are close")


if __name__ == "__main__":
    test_parity()

Web Proxy Viewer  |  New URL  |  Original Page