import numpy as np

from Link import Link

class RubberBand:
    def __init__(self, N, a=1.):
        """
        RubberBand is a class that can simulate a rubber band with N
        incompressible links of length a.

        Parameters:
            N (int)     The number of links.
            a (float)   The fixed length of links.
        """

        self.N = N
        self.a = a
        self.links = self.__sample_links()

    @property
    def length(self):
        return self.a * np.sum([l.direction for l in self.links])

    def __sample_links(self):
        """
        Sample N Link objects with a random direction.
        """

        samples = np.random.random_sample((self.N,))
        directions = np.ones(samples.shape)
        directions[samples < 0.5] = -1.
        directions = directions.astype(int)
        return [Link(d) for d in directions]


