def _crossProduct( self, ls ):
p = ls[<NUM_LIT:0>]<EOL>ds = []<EOL>if len(ls) == <NUM_LIT:1>:<EOL><INDENT>for i in self._parameters[p]:<EOL><INDENT>dp = dict()<EOL>dp[p] = i<EOL>ds.append(dp)<EOL><DEDENT><DEDENT>else:<EOL><INDENT>ps = self._crossProduct(ls[<NUM_LIT:1>:])<EOL>for i in self._parameters[p]:<EOL><INDENT>for d in ps:<EOL><INDENT>dp = d.copy()<EOL>dp[p] = i<EOL>ds.append(dp)<EOL><DEDENT><DEDENT><DEDENT>return ds<EOL>
Internal method to generate the cross product of all parameter
        values, creating the parameter space for the experiment.

        :param ls: an array of parameter names
        :returns: list of dicts