def __init__(self, pos, shape=None, param_prefix='<STR_LIT>', category='<STR_LIT>',<EOL>support_pad=<NUM_LIT:4>, float_precision=np.float64):
if pos.ndim != <NUM_LIT:2>:<EOL><INDENT>raise ValueError('<STR_LIT>')<EOL><DEDENT>self.category = category<EOL>self.support_pad = support_pad<EOL>self.pos = pos.astype('<STR_LIT:float>')<EOL>self.param_prefix = param_prefix<EOL>if float_precision not in (np.float64, np.float32, np.float16):<EOL><INDENT>raise ValueError('<STR_LIT>' +<EOL>'<STR_LIT>')<EOL><DEDENT>self.float_precision = float_precision<EOL>self.shape = shape<EOL>self.setup_variables()<EOL>if self.shape:<EOL><INDENT>self.inner = self.shape.copy()<EOL>self.tile = self.inner.copy()<EOL>self.initialize()<EOL><DEDENT>
Parent class for a large collection of particles, such as spheres or
points or ellipsoids or rods.

This class is good for a collection of objects which each have a
position as well as (possibly) some other parameters, like particle
radius, aspect ratio, or brightness. Its .get() method returns a
field of the drawn particles, selected on the current tile. Any
daughter classes need the following methods:

* _draw_particle
* _update_type
* setup_variables
* get_values
* set_values
* add_particle
* remove_particle

In addition, the following methods should be modified for particles
with more parameters than just positions:

* _drawargs
* _tile
* param_particle
* exports
* _p2i

If you have a few objects to group, like 2 or 3 slabs, group them
with a `peri.comp.ComponentCollection` instead.

Parameters
----------
pos : ndarray [N,d]
    Initial positions of the particles. Re-cast as float internally

shape : ``peri.util.Tile``, optional
    Shape of the field over which to draw the platonic spheres.
    Default is None.

param_prefix : string, optional
    Prefix for the particle parameter names. Default is `'sph'`

category : string, optional
    Category, as in comp.Component. Default is `'obj'`.

support_pad : Int, optional
    How much to pad the boundary of particles when calculating the
    support so that particles do not leak out the edges. Default is 4

float_precision : numpy float datatype, optional
    One of numpy.float16, numpy.float32, numpy.float64; precision
    for precomputed arrays. Default is np.float64; make it 16 or 32
    to save memory.