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)