def _setParameters()

in pybulletX/_wrapper.py [0:0]


def _setParameters(cfg, physicsClientId=None):
    r"""
    A helper function that sets multiple parameters of pybullet from a dict-like
    object.

    Example::
        >>> pybullet.setParameters({
              "gravity": {
                "gravX": 0,
                "gravY": 0,
                "gravZ": -9.81,
              },
              "timeStep": 0.001,
              "physicsEngineParameter": {
                "numSolverIterations": 2000,
                "solverResidualThreshold": 1e-30,
                "reportSolverAnalytics": True,
              }
            })
    """
    for key, value in cfg.items():
        setter_method_name = "set{}".format(key[0].upper() + key[1:])
        setter = getattr(_pybullet, setter_method_name)

        args = []
        kwargs = {}

        # if value is a dict-like, copy it to kwargs. Otherwise, treat value as args
        try:
            # FIXME(poweic): should use isinstance(value, collections.abc.Mapping)
            # but some of the useful package (ex: OmegaConf) doesn't inherits from
            # collections.abc.Mapping. Use try except instead.
            kwargs = dict(**value)
        except TypeError:
            args.append(value)

        if physicsClientId is not None:
            kwargs["physicsClientId"] = physicsClientId

        param_str = ", ".join([f"{k}={v}" for k, v in kwargs.items()])
        _log.info(f"Calling pybullet.{setter_method_name}({param_str})")
        setter(*args, **kwargs)