<commit_before>Overview
========

Queueing-tool is a Python simulation package for analyzing networks of queues.
The simulations are event based, where events are comprised as arrivals and
departures of agents that move from queue to queue in the network. The network
is represented as a graph, which is handled by NetworkX.

There are three major components to queueing-tool: the :class:`.QueueServer`
classes, :class:`.Agent` classes, and :class:`.QueueNetwork` class. This package
includes several different types of each class.

1. The :class:`.QueueServer` class is a standard implementation of a
   `waiting line <http://en.wikipedia.org/wiki/Queueing_theory>`_. Its basic
   function is facilitating the arrival of agents --- which arrive with some
   regularity according to some distribution --- and servicing those agents before
   they leave. Each queue can have any arrival and service distribution, and these
   distributions can depend on time. Two such implemented are the following:

    - The :class:`.QueueServer` class can have any positive number of servers
      (including infinitely many). There can also be a maximum number of potential
      arrivals to the queue. In `Kendall's notation`_, these are
      :math:`\text{GI}_t/\text{GI}_t/c/\infty/N/\text{FIFO}` queues.
    - The :class:`.LossQueue` class is an implementation of a
      `finite capacity queue`_\. It has all the features of the :class:`.QueueServer`
      class but also implements blocking (or loss). This class can be used to
      simulate `loss networks`_\. In Kendall's notation, these are
      :math:`\text{GI}_t/\text{GI}_t/c/c+b/N/\text{FIFO}` queues.

2. An :class:`.Agent` is an objects that moves throughout the network. When an
   instance of the network is created it starts empty. Agents are created by a
   queue and once serviced the agent moves on to another queue in the network.
   Each agent *decides* where in the network it wants to arrive at next. Two
   examples of the agent implementation are:

    - The :class:`.Agent` class routes itself throughout the network randomly.
      More specifically, when at node ``i`` in the network, the :class:`.Agent`
      decides to transition to node ``j`` with probability :math:`p_{ij}`. The
      user has control over setting the transition probabilities, which can be
      done using the network's :meth:`~.QueueNetwork.set_transitions` method.
    - The :class:`.GreedyAgent` class routes itself by choosing the queue with
      the shortest line.

3. The :class:`.QueueNetwork` class manages the routing of agents from queue to
   queue. It can also manage congestion and blocking within the network. There are<commit_msg>Fixed a typo<commit_after>Overview
========

Queueing-tool is a Python simulation package for analyzing networks of queues.
The simulations are event based, where events are comprised as arrivals and
departures of agents that move from queue to queue in the network. The network
is represented as a graph, which is handled by NetworkX.

There are three major components to queueing-tool: the :class:`.QueueServer`
classes, :class:`.Agent` classes, and :class:`.QueueNetwork` class. This package
includes several different types of each class.

1. The :class:`.QueueServer` class is a standard implementation of a
   `waiting line <http://en.wikipedia.org/wiki/Queueing_theory>`_. Its basic
   function is facilitating the arrival of agents --- which arrive with some
   regularity according to some distribution --- and servicing those agents before
   they leave. Each queue can have any arrival and service distribution, and these
   distributions can depend on time. Two such implemented are the following:

    - The :class:`.QueueServer` class can have any positive number of servers
      (including infinitely many). There can also be a maximum number of potential
      arrivals to the queue. In `Kendall's notation`_, these are
      :math:`\text{GI}_t/\text{GI}_t/c/\infty/N/\text{FIFO}` queues.
    - The :class:`.LossQueue` class is an implementation of a
      `finite capacity queue`_\. It has all the features of the :class:`.QueueServer`
      class but also implements blocking (or loss). This class can be used to
      simulate `loss networks`_\. In Kendall's notation, these are
      :math:`\text{GI}_t/\text{GI}_t/c/c+b/N/\text{FIFO}` queues.

2. An :class:`.Agent` is an object that moves throughout the network. When an
   instance of the network is created it starts empty. Agents are created by a
   queue and once serviced the agent moves on to another queue in the network.
   Each agent *decides* where in the network it wants to arrive at next. Two
   examples of the agent implementation are:

    - The :class:`.Agent` class routes itself throughout the network randomly.
      More specifically, when at node ``i`` in the network, the :class:`.Agent`
      decides to transition to node ``j`` with probability :math:`p_{ij}`. The
      user has control over setting the transition probabilities, which can be
      done using the network's :meth:`~.QueueNetwork.set_transitions` method.
    - The :class:`.GreedyAgent` class routes itself by choosing the queue with
      the shortest line.

3. The :class:`.QueueNetwork` class manages the routing of agents from queue to
   queue. It can also manage congestion and blocking within the network. There are
{'fraction_non_alphanumeric': 0.07849702380952381, 'fraction_numerical': 0.0011160714285714285, 'mean_word_length': 3.762621789193977, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4373891', 'n_tokens_mistral': 1402, 'n_tokens_neox': 1363, 'n_words': 707}