dayone


Namedayone JSON
Version 0.1.7 PyPI version JSON
download
home_pageNone
SummaryA Performant Discrete-Event Simulator for Network Simulations with a Single-Threaded Executor
upload_time2024-07-16 03:16:00
maintainerNone
docs_urlNone
authorBaochun Li <bli@ece.toronto.edu>
requires_pythonNone
licenseApache-2.0
keywords network simulation framework time discrete events
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Day and Day One: Two Performant Discrete-Event Simulators for Network Simulations

Developed with the Rust programming language, **Day One** have been designed as a performant discrete-event simulators for network simulations, using a single-threaded design.

In **Day One**, the use of a single thread allows it to avoid any read-write mutual exclusion locks and thread synchronization overhead when sharing global data — such as the simulation time — across stackless coroutines, therefore improving single-threaded performance. With multiple CPU cores, multiple parallel simulation runs can take place using **Day One**, each with a different configuration setting or random seed.

To run a network simulation session using a configuration file with either of the two simulators, run:

```
RUST_LOG=debug dayone configs/simple.toml
```

where `RUST_LOG` levels can be `error`, `warn`, `info`, `debug`, and `trace`, and `configs/simple.toml` is the configuration file.

## Configuration Settings

In **Day One**, all configuration settings are read from a configuration file when a simulation session starts, and the configuration file follows the `TOML` format for the sake of simplicity and readability.

Here is an example configuration file `simple.toml`:

```toml
# An example configuration file that shows a basic setup.

seed = 1000
edges = [[0, 1], [0, 2]]
hosts = [0, 1, 2]
progress = 2.0
duration = 20.0
log_path = "./simple"
log_interval = 1.0

[switch]
port_rate = 8000
capacity = 100
weights = [1]
discipline = "FIFO"
drop = "RED"

[[flow]]
flow_type = "PacketDistribution"
graph = [[0, 1]]
[flow.traffic]
    initial_delay = 1.0
    size = 10000
    arr_dist = {type = "Exp", lambda = 1.0}
    pkt_size_dist = {type = "Uniform", low = 1000, high = 1500}

[[flow]]
flow_type = "PacketDistribution"
graph = [[1, 0]]
[flow.traffic]
    initial_delay = 2.0
    duration = 10.0
    arr_dist = {type = "Uniform", low = 1, high = 1}
    pkt_size_dist = {type = "Uniform", low = 1000, high = 1500}

[[collective]]
collective_type = "Broadcast"
flow_type = "PacketDistribution"
flow_count = 2
graph = [[0, 1], [0, 2]]
sources = [0]
sinks = [1, 2]
[collective.traffic]
    initial_delay = 1.0
    duration = 10.0
    arr_dist = {type = "Uniform", low = 1, high = 1}
    pkt_size_dist = {type = "Uniform", low = 1000, high = 1500}

```

The following introduces all the possible settings in the configuration file.

### General

#### seed

The seed for the random number generator to ensure reproducibility of the simulation results.

- **Valid value**: Integer
- **Required**: Yes
- **Example**:

  ```toml
  seed = 1000
  ```

#### duration

The total duration of the simulation in seconds.

- **Valid value**: Floating point number
- **Required**: No
- **Default**: 1500.0
- **Example**:

  ```toml
  duration = 20.0
  ```

#### progress

**Day** and **Day One** provide progress bars to visualize the progression of a simulation session. This `progress` element specifies the progress interval, which is the time interval to advance the position of the progress bar.

- **Valid value**: Floating point number
- **Required**: No
- **Default**: `duration` / 100
- **Example**:

  ```toml
  progress = 1.0
  ```

#### log_path

**Day** and **Day One** generate three CSV files, `sources.csv`, `sinks.csv`, and `switches.csv`, containing statistics of a simulation session. `log_path` specifies the directory of the three CSV files.

- **Valid value**: String
- **Required**: No
- **Default**: `./output`
- **Example**:

  ```toml
  log_path = "./test"
  ```

#### log_interval

In the three CSV files, each row contains statistics in a time interval. `log_interval` specifies the length of a time interval in seconds.

- **Valid value**: Floating point number
- **Required**: No
- **Default**: Value of `progress`
- **Example**:

  ```toml
  log_interval = "1.0"
  ```

#### topology

**Day** and **Day One** support arbitrary topologies. Besides widely-used topologies `FatTree` and `Torus`, any topology that can be specified as an undirected graph can be supported as well.

- `FatTree`

  To specify the `FatTree` topology, it is required to specific `k`. `k` is a multiple of 2.

  **Example**:

  ```toml
  [topology]
  category = "FatTree"

  [topology.torus]
    	k = 8
  ```

- `Torus`

  To specify the `Torus` topology, it is required to specific dimension `dim`, and node per dimension `n`. Only 1D, 2D, and 3D Torus topologies are supported. That is, valid values of `dim` are 1, 2, 3.

  **Example**:

  ```toml
  [topology]
  category = "Torus"

  [topology.torus]
    	dim = 2
    	n = 3
  ```

- Custom topology

  Use `edges` to specify an undirected graph as the topology, and `hosts` to specify hosts in the topology.

  `edges` is a vector of [integer, integer]. An [integer, integer] pair presents an edge in the undirected graph.

  `hosts` is a vector of integers

  **Example**:

  ```toml
  edges = [[0, 1], [0, 2]]
  hosts = [0, 1, 2]
  ```

### Switch

In **Day** and **Day One**, all switches use the same setting which can be specified with the following attributes.

#### port_rate

The bit rate of each outbound port.

- **Valid value**: Floating point number
- **Required**: Yes
- **Example**:

  ```toml
  port_rate = 8000
  ```

#### capacity

The capacity (buffer size) of each outbound port.

- **Valid value**: Integer
- **Required**: Yes
- **Example**:

  ```toml
  capacity = 100
  ```

#### drop

The packet drop strategy that drops packets when the buffer is full.

- **Valid value**:

  |   Value    | Meaning                                   |
  | :--------: | ----------------------------------------- |
  | `TailDrop` | Dropping packets at the tail of the queue |
  |   `RED`    | Random Early Detection                    |

- **Required**: Yes
- **Example**:

  ```toml
  capacity = 100
  ```

#### discipline

The scheduling discipline.

- **Valid value**:

  | Value  | Meaning                | Notes                            |
  | :----: | ---------------------- | -------------------------------- |
  | `FIFO` | First In First Out     |
  | `DRR`  | Deficit Round Robin    | Required to specify `weights`    |
  | `WFQ`  | Weighted Fair Queueing | Required to specify `weights`    |
  |  `SP`  | Static Priority        | Required to specify `priorities` |
  |  `VC`  | Virtual Clock          | Required to specify `vticks`     |

- **Required**: Yes
- **Example**:

  ```toml
  discipline = "FIFO"
  ```

#### weights

- **Valid value**: Vector of integers
- **Required**: Yes if `dispcipline = "DRR"` or `dispcipline = "WFQ"`
- **Example**:

  ```toml
  weights = [1, 2, 3]
  ```

#### priorities

- **Valid value**: Vector of (integer, integer), where the first integer is the flow class and the second integer is the priority of this flow class
- **Required**: Yes if `dispcipline = "SP"`
- **Example**:

  ```toml
  priorities = [(0, 2), (1, 1)]
  ```

#### vticks

- **Valid value**: Vector of (integer, integer), where the first integer is the flow class and the second integer is the inverse of the desired rates for the corresponding flows, in bits per second
- **Required**: Yes if `dispcipline = "VC"`
- **Example**:

  ```toml
  vticks = [(0, 2), (1, 1)]
  ```

### Flow

In **Day** and **Day One**, flows can be specified one by one:

```toml
[[flow]]
flow_id = 2
starts_before = [3]
starts_after = [1]
flow_type = "PacketDistribution"
graph = [[0, 1]]
[flow.traffic]
    initial_delay = 1.0
    duration = 2.0
    arr_dist = {type = "Uniform", low = 1, high = 1}
    pkt_size_dist = {type = "Uniform", low = 1000, high = 1500}
```

or by sets:

```toml
[[flow_set]]
first_flow_id = 10
flow_type = "PacketDistribution"
flow_count = 10
[flow_set.traffic]
    initial_delay = 0.0
    duration = 10.0
    arr_dist = {type = "Uniform", low = 0.0008, high = 0.0008}  # 10Mbps
    pkt_size_dist = {type = "Uniform", low = 1024, high = 1024}
```

The following table lists required, optional, or not supported attributes of a flow or a flow set.

|    Attribute    | Meaning                                                                               |   flow   | flow_set |
| :-------------: | ------------------------------------------------------------------------------------- | :------: | :------: |
|    `flow_id`    | The id of the flow                                                                    | optional |    no    |
| `first_flow_id` | The smallest flow id of the flow set                                                  |    no    | optional |
| `starts_before` | The ids of flows that cannot start until this flow / flow set ends                    | optional | optional |
| `starts_after`  | The ids of flows that this flow / flow set must wait for them to end before it starts | optional | optional |
|   `flow_type`   | The type of the flow or flows of the flow set                                         | required | required |
|  `flow_count`   | The number of flows in the flow set                                                   |    no    | required |
|     `graph`     | The pair of the source host and the sink host of the flow                             | required |    no    |
|     `path`      | The path of the flow                                                                  | optional |    no    |
|    `traffic`    | The traffic of the flow / flow set                                                    | required | required |

#### flow_id

The id of the flow.  
If not specified, the id of the first flow specified in the configuration file will be 0, and the subsequent ids of flows increase by 1.

- **Valid value**: Integer
- **Required**: No
- **Example**:

  ```toml
  flow_id = 1
  ```

#### first_flow_id

The smallest flow id of the flow set.

- **Valid value**: Integer
- **Required**: No
- **Example**:

  ```toml
  flow_first_id = 1
  ```

#### starts_before

The ids of flows that cannot start until this flow / flow set ends.

- **Valid value**: Vector of integers
- **Required**: No
- **Example**:

  ```toml
  starts_before = [3, 4]
  ```

#### starts_after

The ids of flows that this flow / flow set must wait for them to end before it starts.

- **Valid value**: Vector of integers
- **Required**: No
- **Example**:

  ```toml
  starts_after = [0, 1]
  ```

#### flow_type

The type of the flow or flows of the flow set.

- **Valid value**:

  |        Value         | Meaning                                                                                                      |
  | :------------------: | ------------------------------------------------------------------------------------------------------------ |
  | `PacketDistribution` | A flow whose packet source sends packets with specific distributions of inter-arrival times and packet sizes |
  |        `TCP`         | A flow whose packet source simulate the TCP protocol                                                         |

- **Required**: Yes
- **Example**:

  ```toml
  flow_type = "PacketDistribution"
  ```

#### flow_count

The number of flows in the flow set.

- **Valid value**: Integer
- **Required**: Yes for a flow set
- **Example**:

  ```toml
  flow_count = 10
  ```

#### graph

The pair of the source host and the sink host of the flow.

- **Valid value**: [[integer, integer]]
- **Required**: Yes for a single flow
- **Example**:

  ```toml
  graph = [[0, 2]]
  ```

#### path

The path of the flow.

- **Valid value**: Vector of integers where each integer is a node in the path
- **Required**: No
- **Example**:

  ```toml
  path = [0, 1, 2]
  ```

#### traffic

For a flow, it must specify its traffic under `[flow.traffic]`.  
For a flow set, it must specify the traffic of its flows under `[flow_set.traffic]`.

The following table lists attributes of traffic.

> Note:
>
> - `initial_delay`, `arr_dist`, and `pkt_size_dist` are required.
> - Either `size` or `duration` is required.
> - If `flow_type = "TCP"`, `[flow.traffic.tcp]` or `[flow_set.traffic.tcp]` must be specified for the flow or flow set.

- **Attributes**:

  |    Attribute    | Meaning                                                                    | Valid Value             |
  | :-------------: | -------------------------------------------------------------------------- | ----------------------- |
  | `initial_delay` | The seconds the flow / flow set waits before producing its first packet    | Floating point number   |
  |     `size`      | The total size of packets of the flow / each flow of the flow set in bytes | Integer                 |
  |   `duration`    | The duration of the flow / each flow of the flow set in seconds            | Floating point number   |
  |   `arr_dist`    | The arrival distribution of packets in seconds                             | Valid distribution info |
  | `pkt_size_dist` | The distribution of packet sizes in bytes                                  | Valid distribution info |

> Valid distribution info includes uniform distribution and exponential distribution:
>
> - {type = "Uniform", low = 0.0008, high = 0.0008}
> - {type = "Exp", lambda = 1.0}

- **Required**: Yes
- **Example**:

  ```toml
  [[flow_set]]
  flow_type = "TCP"
  flow_count = 100
  [flow_set.traffic]
  	initial_delay = 0.0
  	duration = 0.1
  	arr_dist = {type = "Uniform", low = 0.0008, high = 0.0008}
  	pkt_size_dist = {type = "Uniform", low = 1024, high = 1024}
  [flow_set.traffic.tcp]
  	cc_algorithm = "TCPReno"
  ```

#### traffic.tcp

For a flow, it must specify its tcp characteristics under `[flow.traffic.tcp]`.  
For a flow set, it must specify the tcp characteristics of its flows under `[flow_set.traffic.tcp]`.

- **Attributes**:

  |   Attribute    | Meaning                          | Valid Value           |
  | :------------: | -------------------------------- | --------------------- |
  | `cc_algorithm` | The congestion control algorithm | `TCPReno`, `TCPCubic` |

- **Required**: Yes
- **Example**:

  ```toml
  [flow.traffic.tcp]
  	cc_algorithm = "TCPReno"
  ```

### Collective

In **Day** and **Day One**, collectives can be specified one by one:

```toml
[[collective]]
collective_type = "Broadcast"
flow_type = "PacketDistribution"
flow_count = 2
graph = [[0, 2], [0, 3], [1, 2], [1, 3]]
sources = [0, 1]
sinks = [2, 3]
[collective.traffic]
    initial_delay = 1.0
    duration = 10.0
    arr_dist = {type = "Uniform", low = 1, high = 2}
    pkt_size_dist = {type = "Uniform", low = 1000, high = 1500}
```

or by sets:

```toml
[[collective_set]]
collective_type = "Gather"
collective_count = 2
flow_type = "PacketDistribution"
flow_count = 2
sources = [[0, 1], [1, 2]]
sinks = [[2, 2], [3, 3]]
[collective_set.traffic]
    initial_delay = 1.0
    duration = 10.0
    arr_dist = {type = "Uniform", low = 3, high = 4}
    pkt_size_dist = {type = "Uniform", low = 2000, high = 2500}
```

The following table lists required, optional, or not supported attributes of a collective or a collective set.

|     Attribute      | Meaning                                                                           | collective | collective_set |
| :----------------: | --------------------------------------------------------------------------------- | :--------: | :------------: |
| `collective_type`  | The type of the collective or collective set                                      |  required  |    required    |
|  `first_flow_id`   | The smallest flow id of the collective or collective set                          |  optional  |    optional    |
| `collective_count` | The number of collectives in the collective set                                   |     no     |    required    |
|    `flow_type`     | The type of the flows of the collective or collective set                         |  required  |    required    |
|    `flow_count`    | The number of flows in the collective or in each collective of the collective set |  required  |    required    |
|      `graph`       | The pairs of the source host and the sink host of the collective's flows          |  optional  |       no       |
|      `paths`       | The paths of the collective's flows                                               |  optional  |       no       |
|     `sources`      | The sources of flows                                                              |  optional  |    optional    |
|      `sinks`       | The sinks of flows                                                                |  optional  |    optional    |
|     `traffic`      | The traffic of the collective / collective set                                    |  required  |    required    |

#### collective_type

The type of the collective or collective set.

- **Valid value**: `Brordcast` or `Gather`
- **Required**: Yes
- **Example**:

  ```toml
  collective_type = "Broadcast"
  ```

#### first_flow_id

The smallest flow id of the collective / collective set.

- **Valid value**: Integer
- **Required**: No
- **Example**:

  ```toml
  flow_first_id = 1
  ```

#### collective_count

The number of collectives in the collective set.

- **Valid value**: Integer
- **Required**: Yes for a collective set
- **Example**:

  ```toml
  collective_count = 10
  ```

#### flow_count

The number of flows in the collective or in each collective of the collective set.

- **Valid value**: Integer
- **Required**: Yes
- **Example**:

  ```toml
  flow_count = 4
  ```

#### graph

The pairs of the source hosts and the sink hosts of the collective's flows.

- **Valid value**: Vector of [integer, integer]
- **Required**: No
- **Example**:

  ```toml
  graph = [[0, 1], [0, 2]]
  ```

#### paths

The paths of the collective's flows.

- **Valid value**: Vector of vectors of integers where each integer is a node in the path
- **Required**: No
- **Example**:

  ```toml
  paths = [[0, 1], [0, 1, 2]]
  ```

#### sources

For a collective, `sources` is the set of the source hosts of this collective's flows.

- **Valid value**: Vector of integers where each integer is a source host
- **Required**: No
- **Example**:

  ```toml
  sources = [0, 1]
  ```

For a collective set, `sources` is set of the source hosts of this collective set's collectives' flows.

- **Valid value**: Vector of vectors of integers where each vector is a collective's flows' source hosts
- **Required**: No
- **Example**:

  ```toml
  sources = [[0, 0], [1, 1]]
  ```

#### sinks

For a collective, `sinks` is the set of the sink hosts of this collective's flows.

- **Valid value**: Vector of integers where each integer is a sink host
- **Required**: No
- **Example**:

  ```toml
  sinks = [0, 1]
  ```

For a collective set, `sinks` is set of the sink hosts of this collective set's collectives' flows.

- **Valid value**: Vector of vectors of integers where each vector is a collective's flows' sink hosts
- **Required**: No
- **Example**:

  ```toml
  sinks = [[0, 0], [1, 1]]
  ```

#### traffic

For a collective, it must specify the traffic of its flows under `[collective.traffic]`.  
For a collective set, it must specify the traffic of its flows under `[collective_set.traffic]`.

The following table lists attributes of traffic.

> Note:
>
> - `initial_delay`, `arr_dist`, and `pkt_size_dist` are required.
> - Either `size` or `duration` is required.
> - If `flow_type = "TCP"`, `[flow.traffic.tcp]` or `[flow_set.traffic.tcp]` must be specified for the flow or flow set.

- **Attributes**:

  |    Attribute    | Meaning                                                                             | Valid Value             |
  | :-------------: | ----------------------------------------------------------------------------------- | ----------------------- |
  | `initial_delay` | The seconds the collective / collective set waits before producing its first packet | Floating point number   |
  |     `size`      | The total size of packets of each flow of the collective / collective set in bytes  | Integer                 |
  |   `duration`    | The duration of each flow of the collective / collective set in seconds             | Floating point number   |
  |   `arr_dist`    | The arrival distribution of packets in seconds                                      | Valid distribution info |
  | `pkt_size_dist` | The distribution of packet sizes in bytes                                           | Valid distribution info |

> Valid distribution info includes uniform distribution and exponential distribution:
>
> - {type = "Uniform", low = 0.0008, high = 0.0008}
> - {type = "Exp", lambda = 1.0}

- **Required**: Yes
- **Example**:

  ```toml
  [[collective]]
  collective_type = "Broadcast"
  flow_type = "PacketDistribution"
  flow_count = 4
  [collective.traffic]
      initial_delay = 1.0
      duration = 10.0
      arr_dist = {type = "Uniform", low = 3, high = 4}
      pkt_size_dist = {type = "Uniform", low = 2000, high = 2500}
  ```

#### traffic.tcp

For a collective, it must specify the tcp characteristicsc of its flows under `[collective.traffic.tcp]`.  
For a collective set, it must specify the tcp characteristics of its collectives' flows under `[collective_set.traffic.tcp]`.

- **Attributes**:

  |   Attribute    | Meaning                          | Valid Value           |
  | :------------: | -------------------------------- | --------------------- |
  | `cc_algorithm` | The congestion control algorithm | `TCPReno`, `TCPCubic` |

- **Required**: Yes
- **Example**:

  ```toml
  [collective.traffic.tcp]
  	cc_algorithm = "TCPReno"
  ```


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "dayone",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "network, simulation, framework, time, discrete, events",
    "author": "Baochun Li <bli@ece.toronto.edu>",
    "author_email": "Baochun Li <bli@ece.toronto.edu>",
    "download_url": null,
    "platform": null,
    "description": "# Day and Day One: Two Performant Discrete-Event Simulators for Network Simulations\n\nDeveloped with the Rust programming language, **Day One** have been designed as a performant discrete-event simulators for network simulations, using a single-threaded design.\n\nIn **Day One**, the use of a single thread allows it to avoid any read-write mutual exclusion locks and thread synchronization overhead when sharing global data \u2014 such as the simulation time \u2014 across stackless coroutines, therefore improving single-threaded performance. With multiple CPU cores, multiple parallel simulation runs can take place using **Day One**, each with a different configuration setting or random seed.\n\nTo run a network simulation session using a configuration file with either of the two simulators, run:\n\n```\nRUST_LOG=debug dayone configs/simple.toml\n```\n\nwhere `RUST_LOG` levels can be `error`, `warn`, `info`, `debug`, and `trace`, and `configs/simple.toml` is the configuration file.\n\n## Configuration Settings\n\nIn **Day One**, all configuration settings are read from a configuration file when a simulation session starts, and the configuration file follows the `TOML` format for the sake of simplicity and readability.\n\nHere is an example configuration file `simple.toml`:\n\n```toml\n# An example configuration file that shows a basic setup.\n\nseed = 1000\nedges = [[0, 1], [0, 2]]\nhosts = [0, 1, 2]\nprogress = 2.0\nduration = 20.0\nlog_path = \"./simple\"\nlog_interval = 1.0\n\n[switch]\nport_rate = 8000\ncapacity = 100\nweights = [1]\ndiscipline = \"FIFO\"\ndrop = \"RED\"\n\n[[flow]]\nflow_type = \"PacketDistribution\"\ngraph = [[0, 1]]\n[flow.traffic]\n    initial_delay = 1.0\n    size = 10000\n    arr_dist = {type = \"Exp\", lambda = 1.0}\n    pkt_size_dist = {type = \"Uniform\", low = 1000, high = 1500}\n\n[[flow]]\nflow_type = \"PacketDistribution\"\ngraph = [[1, 0]]\n[flow.traffic]\n    initial_delay = 2.0\n    duration = 10.0\n    arr_dist = {type = \"Uniform\", low = 1, high = 1}\n    pkt_size_dist = {type = \"Uniform\", low = 1000, high = 1500}\n\n[[collective]]\ncollective_type = \"Broadcast\"\nflow_type = \"PacketDistribution\"\nflow_count = 2\ngraph = [[0, 1], [0, 2]]\nsources = [0]\nsinks = [1, 2]\n[collective.traffic]\n    initial_delay = 1.0\n    duration = 10.0\n    arr_dist = {type = \"Uniform\", low = 1, high = 1}\n    pkt_size_dist = {type = \"Uniform\", low = 1000, high = 1500}\n\n```\n\nThe following introduces all the possible settings in the configuration file.\n\n### General\n\n#### seed\n\nThe seed for the random number generator to ensure reproducibility of the simulation results.\n\n- **Valid value**: Integer\n- **Required**: Yes\n- **Example**:\n\n  ```toml\n  seed = 1000\n  ```\n\n#### duration\n\nThe total duration of the simulation in seconds.\n\n- **Valid value**: Floating point number\n- **Required**: No\n- **Default**: 1500.0\n- **Example**:\n\n  ```toml\n  duration = 20.0\n  ```\n\n#### progress\n\n**Day** and **Day One** provide progress bars to visualize the progression of a simulation session. This `progress` element specifies the progress interval, which is the time interval to advance the position of the progress bar.\n\n- **Valid value**: Floating point number\n- **Required**: No\n- **Default**: `duration` / 100\n- **Example**:\n\n  ```toml\n  progress = 1.0\n  ```\n\n#### log_path\n\n**Day** and **Day One** generate three CSV files, `sources.csv`, `sinks.csv`, and `switches.csv`, containing statistics of a simulation session. `log_path` specifies the directory of the three CSV files.\n\n- **Valid value**: String\n- **Required**: No\n- **Default**: `./output`\n- **Example**:\n\n  ```toml\n  log_path = \"./test\"\n  ```\n\n#### log_interval\n\nIn the three CSV files, each row contains statistics in a time interval. `log_interval` specifies the length of a time interval in seconds.\n\n- **Valid value**: Floating point number\n- **Required**: No\n- **Default**: Value of `progress`\n- **Example**:\n\n  ```toml\n  log_interval = \"1.0\"\n  ```\n\n#### topology\n\n**Day** and **Day One** support arbitrary topologies. Besides widely-used topologies `FatTree` and `Torus`, any topology that can be specified as an undirected graph can be supported as well.\n\n- `FatTree`\n\n  To specify the `FatTree` topology, it is required to specific `k`. `k` is a multiple of 2.\n\n  **Example**:\n\n  ```toml\n  [topology]\n  category = \"FatTree\"\n\n  [topology.torus]\n    \tk = 8\n  ```\n\n- `Torus`\n\n  To specify the `Torus` topology, it is required to specific dimension `dim`, and node per dimension `n`. Only 1D, 2D, and 3D Torus topologies are supported. That is, valid values of `dim` are 1, 2, 3.\n\n  **Example**:\n\n  ```toml\n  [topology]\n  category = \"Torus\"\n\n  [topology.torus]\n    \tdim = 2\n    \tn = 3\n  ```\n\n- Custom topology\n\n  Use `edges` to specify an undirected graph as the topology, and `hosts` to specify hosts in the topology.\n\n  `edges` is a vector of [integer, integer]. An [integer, integer] pair presents an edge in the undirected graph.\n\n  `hosts` is a vector of integers\n\n  **Example**:\n\n  ```toml\n  edges = [[0, 1], [0, 2]]\n  hosts = [0, 1, 2]\n  ```\n\n### Switch\n\nIn **Day** and **Day One**, all switches use the same setting which can be specified with the following attributes.\n\n#### port_rate\n\nThe bit rate of each outbound port.\n\n- **Valid value**: Floating point number\n- **Required**: Yes\n- **Example**:\n\n  ```toml\n  port_rate = 8000\n  ```\n\n#### capacity\n\nThe capacity (buffer size) of each outbound port.\n\n- **Valid value**: Integer\n- **Required**: Yes\n- **Example**:\n\n  ```toml\n  capacity = 100\n  ```\n\n#### drop\n\nThe packet drop strategy that drops packets when the buffer is full.\n\n- **Valid value**:\n\n  |   Value    | Meaning                                   |\n  | :--------: | ----------------------------------------- |\n  | `TailDrop` | Dropping packets at the tail of the queue |\n  |   `RED`    | Random Early Detection                    |\n\n- **Required**: Yes\n- **Example**:\n\n  ```toml\n  capacity = 100\n  ```\n\n#### discipline\n\nThe scheduling discipline.\n\n- **Valid value**:\n\n  | Value  | Meaning                | Notes                            |\n  | :----: | ---------------------- | -------------------------------- |\n  | `FIFO` | First In First Out     |\n  | `DRR`  | Deficit Round Robin    | Required to specify `weights`    |\n  | `WFQ`  | Weighted Fair Queueing | Required to specify `weights`    |\n  |  `SP`  | Static Priority        | Required to specify `priorities` |\n  |  `VC`  | Virtual Clock          | Required to specify `vticks`     |\n\n- **Required**: Yes\n- **Example**:\n\n  ```toml\n  discipline = \"FIFO\"\n  ```\n\n#### weights\n\n- **Valid value**: Vector of integers\n- **Required**: Yes if `dispcipline = \"DRR\"` or `dispcipline = \"WFQ\"`\n- **Example**:\n\n  ```toml\n  weights = [1, 2, 3]\n  ```\n\n#### priorities\n\n- **Valid value**: Vector of (integer, integer), where the first integer is the flow class and the second integer is the priority of this flow class\n- **Required**: Yes if `dispcipline = \"SP\"`\n- **Example**:\n\n  ```toml\n  priorities = [(0, 2), (1, 1)]\n  ```\n\n#### vticks\n\n- **Valid value**: Vector of (integer, integer), where the first integer is the flow class and the second integer is the inverse of the desired rates for the corresponding flows, in bits per second\n- **Required**: Yes if `dispcipline = \"VC\"`\n- **Example**:\n\n  ```toml\n  vticks = [(0, 2), (1, 1)]\n  ```\n\n### Flow\n\nIn **Day** and **Day One**, flows can be specified one by one:\n\n```toml\n[[flow]]\nflow_id = 2\nstarts_before = [3]\nstarts_after = [1]\nflow_type = \"PacketDistribution\"\ngraph = [[0, 1]]\n[flow.traffic]\n    initial_delay = 1.0\n    duration = 2.0\n    arr_dist = {type = \"Uniform\", low = 1, high = 1}\n    pkt_size_dist = {type = \"Uniform\", low = 1000, high = 1500}\n```\n\nor by sets:\n\n```toml\n[[flow_set]]\nfirst_flow_id = 10\nflow_type = \"PacketDistribution\"\nflow_count = 10\n[flow_set.traffic]\n    initial_delay = 0.0\n    duration = 10.0\n    arr_dist = {type = \"Uniform\", low = 0.0008, high = 0.0008}  # 10Mbps\n    pkt_size_dist = {type = \"Uniform\", low = 1024, high = 1024}\n```\n\nThe following table lists required, optional, or not supported attributes of a flow or a flow set.\n\n|    Attribute    | Meaning                                                                               |   flow   | flow_set |\n| :-------------: | ------------------------------------------------------------------------------------- | :------: | :------: |\n|    `flow_id`    | The id of the flow                                                                    | optional |    no    |\n| `first_flow_id` | The smallest flow id of the flow set                                                  |    no    | optional |\n| `starts_before` | The ids of flows that cannot start until this flow / flow set ends                    | optional | optional |\n| `starts_after`  | The ids of flows that this flow / flow set must wait for them to end before it starts | optional | optional |\n|   `flow_type`   | The type of the flow or flows of the flow set                                         | required | required |\n|  `flow_count`   | The number of flows in the flow set                                                   |    no    | required |\n|     `graph`     | The pair of the source host and the sink host of the flow                             | required |    no    |\n|     `path`      | The path of the flow                                                                  | optional |    no    |\n|    `traffic`    | The traffic of the flow / flow set                                                    | required | required |\n\n#### flow_id\n\nThe id of the flow.  \nIf not specified, the id of the first flow specified in the configuration file will be 0, and the subsequent ids of flows increase by 1.\n\n- **Valid value**: Integer\n- **Required**: No\n- **Example**:\n\n  ```toml\n  flow_id = 1\n  ```\n\n#### first_flow_id\n\nThe smallest flow id of the flow set.\n\n- **Valid value**: Integer\n- **Required**: No\n- **Example**:\n\n  ```toml\n  flow_first_id = 1\n  ```\n\n#### starts_before\n\nThe ids of flows that cannot start until this flow / flow set ends.\n\n- **Valid value**: Vector of integers\n- **Required**: No\n- **Example**:\n\n  ```toml\n  starts_before = [3, 4]\n  ```\n\n#### starts_after\n\nThe ids of flows that this flow / flow set must wait for them to end before it starts.\n\n- **Valid value**: Vector of integers\n- **Required**: No\n- **Example**:\n\n  ```toml\n  starts_after = [0, 1]\n  ```\n\n#### flow_type\n\nThe type of the flow or flows of the flow set.\n\n- **Valid value**:\n\n  |        Value         | Meaning                                                                                                      |\n  | :------------------: | ------------------------------------------------------------------------------------------------------------ |\n  | `PacketDistribution` | A flow whose packet source sends packets with specific distributions of inter-arrival times and packet sizes |\n  |        `TCP`         | A flow whose packet source simulate the TCP protocol                                                         |\n\n- **Required**: Yes\n- **Example**:\n\n  ```toml\n  flow_type = \"PacketDistribution\"\n  ```\n\n#### flow_count\n\nThe number of flows in the flow set.\n\n- **Valid value**: Integer\n- **Required**: Yes for a flow set\n- **Example**:\n\n  ```toml\n  flow_count = 10\n  ```\n\n#### graph\n\nThe pair of the source host and the sink host of the flow.\n\n- **Valid value**: [[integer, integer]]\n- **Required**: Yes for a single flow\n- **Example**:\n\n  ```toml\n  graph = [[0, 2]]\n  ```\n\n#### path\n\nThe path of the flow.\n\n- **Valid value**: Vector of integers where each integer is a node in the path\n- **Required**: No\n- **Example**:\n\n  ```toml\n  path = [0, 1, 2]\n  ```\n\n#### traffic\n\nFor a flow, it must specify its traffic under `[flow.traffic]`.  \nFor a flow set, it must specify the traffic of its flows under `[flow_set.traffic]`.\n\nThe following table lists attributes of traffic.\n\n> Note:\n>\n> - `initial_delay`, `arr_dist`, and `pkt_size_dist` are required.\n> - Either `size` or `duration` is required.\n> - If `flow_type = \"TCP\"`, `[flow.traffic.tcp]` or `[flow_set.traffic.tcp]` must be specified for the flow or flow set.\n\n- **Attributes**:\n\n  |    Attribute    | Meaning                                                                    | Valid Value             |\n  | :-------------: | -------------------------------------------------------------------------- | ----------------------- |\n  | `initial_delay` | The seconds the flow / flow set waits before producing its first packet    | Floating point number   |\n  |     `size`      | The total size of packets of the flow / each flow of the flow set in bytes | Integer                 |\n  |   `duration`    | The duration of the flow / each flow of the flow set in seconds            | Floating point number   |\n  |   `arr_dist`    | The arrival distribution of packets in seconds                             | Valid distribution info |\n  | `pkt_size_dist` | The distribution of packet sizes in bytes                                  | Valid distribution info |\n\n> Valid distribution info includes uniform distribution and exponential distribution:\n>\n> - {type = \"Uniform\", low = 0.0008, high = 0.0008}\n> - {type = \"Exp\", lambda = 1.0}\n\n- **Required**: Yes\n- **Example**:\n\n  ```toml\n  [[flow_set]]\n  flow_type = \"TCP\"\n  flow_count = 100\n  [flow_set.traffic]\n  \tinitial_delay = 0.0\n  \tduration = 0.1\n  \tarr_dist = {type = \"Uniform\", low = 0.0008, high = 0.0008}\n  \tpkt_size_dist = {type = \"Uniform\", low = 1024, high = 1024}\n  [flow_set.traffic.tcp]\n  \tcc_algorithm = \"TCPReno\"\n  ```\n\n#### traffic.tcp\n\nFor a flow, it must specify its tcp characteristics under `[flow.traffic.tcp]`.  \nFor a flow set, it must specify the tcp characteristics of its flows under `[flow_set.traffic.tcp]`.\n\n- **Attributes**:\n\n  |   Attribute    | Meaning                          | Valid Value           |\n  | :------------: | -------------------------------- | --------------------- |\n  | `cc_algorithm` | The congestion control algorithm | `TCPReno`, `TCPCubic` |\n\n- **Required**: Yes\n- **Example**:\n\n  ```toml\n  [flow.traffic.tcp]\n  \tcc_algorithm = \"TCPReno\"\n  ```\n\n### Collective\n\nIn **Day** and **Day One**, collectives can be specified one by one:\n\n```toml\n[[collective]]\ncollective_type = \"Broadcast\"\nflow_type = \"PacketDistribution\"\nflow_count = 2\ngraph = [[0, 2], [0, 3], [1, 2], [1, 3]]\nsources = [0, 1]\nsinks = [2, 3]\n[collective.traffic]\n    initial_delay = 1.0\n    duration = 10.0\n    arr_dist = {type = \"Uniform\", low = 1, high = 2}\n    pkt_size_dist = {type = \"Uniform\", low = 1000, high = 1500}\n```\n\nor by sets:\n\n```toml\n[[collective_set]]\ncollective_type = \"Gather\"\ncollective_count = 2\nflow_type = \"PacketDistribution\"\nflow_count = 2\nsources = [[0, 1], [1, 2]]\nsinks = [[2, 2], [3, 3]]\n[collective_set.traffic]\n    initial_delay = 1.0\n    duration = 10.0\n    arr_dist = {type = \"Uniform\", low = 3, high = 4}\n    pkt_size_dist = {type = \"Uniform\", low = 2000, high = 2500}\n```\n\nThe following table lists required, optional, or not supported attributes of a collective or a collective set.\n\n|     Attribute      | Meaning                                                                           | collective | collective_set |\n| :----------------: | --------------------------------------------------------------------------------- | :--------: | :------------: |\n| `collective_type`  | The type of the collective or collective set                                      |  required  |    required    |\n|  `first_flow_id`   | The smallest flow id of the collective or collective set                          |  optional  |    optional    |\n| `collective_count` | The number of collectives in the collective set                                   |     no     |    required    |\n|    `flow_type`     | The type of the flows of the collective or collective set                         |  required  |    required    |\n|    `flow_count`    | The number of flows in the collective or in each collective of the collective set |  required  |    required    |\n|      `graph`       | The pairs of the source host and the sink host of the collective's flows          |  optional  |       no       |\n|      `paths`       | The paths of the collective's flows                                               |  optional  |       no       |\n|     `sources`      | The sources of flows                                                              |  optional  |    optional    |\n|      `sinks`       | The sinks of flows                                                                |  optional  |    optional    |\n|     `traffic`      | The traffic of the collective / collective set                                    |  required  |    required    |\n\n#### collective_type\n\nThe type of the collective or collective set.\n\n- **Valid value**: `Brordcast` or `Gather`\n- **Required**: Yes\n- **Example**:\n\n  ```toml\n  collective_type = \"Broadcast\"\n  ```\n\n#### first_flow_id\n\nThe smallest flow id of the collective / collective set.\n\n- **Valid value**: Integer\n- **Required**: No\n- **Example**:\n\n  ```toml\n  flow_first_id = 1\n  ```\n\n#### collective_count\n\nThe number of collectives in the collective set.\n\n- **Valid value**: Integer\n- **Required**: Yes for a collective set\n- **Example**:\n\n  ```toml\n  collective_count = 10\n  ```\n\n#### flow_count\n\nThe number of flows in the collective or in each collective of the collective set.\n\n- **Valid value**: Integer\n- **Required**: Yes\n- **Example**:\n\n  ```toml\n  flow_count = 4\n  ```\n\n#### graph\n\nThe pairs of the source hosts and the sink hosts of the collective's flows.\n\n- **Valid value**: Vector of [integer, integer]\n- **Required**: No\n- **Example**:\n\n  ```toml\n  graph = [[0, 1], [0, 2]]\n  ```\n\n#### paths\n\nThe paths of the collective's flows.\n\n- **Valid value**: Vector of vectors of integers where each integer is a node in the path\n- **Required**: No\n- **Example**:\n\n  ```toml\n  paths = [[0, 1], [0, 1, 2]]\n  ```\n\n#### sources\n\nFor a collective, `sources` is the set of the source hosts of this collective's flows.\n\n- **Valid value**: Vector of integers where each integer is a source host\n- **Required**: No\n- **Example**:\n\n  ```toml\n  sources = [0, 1]\n  ```\n\nFor a collective set, `sources` is set of the source hosts of this collective set's collectives' flows.\n\n- **Valid value**: Vector of vectors of integers where each vector is a collective's flows' source hosts\n- **Required**: No\n- **Example**:\n\n  ```toml\n  sources = [[0, 0], [1, 1]]\n  ```\n\n#### sinks\n\nFor a collective, `sinks` is the set of the sink hosts of this collective's flows.\n\n- **Valid value**: Vector of integers where each integer is a sink host\n- **Required**: No\n- **Example**:\n\n  ```toml\n  sinks = [0, 1]\n  ```\n\nFor a collective set, `sinks` is set of the sink hosts of this collective set's collectives' flows.\n\n- **Valid value**: Vector of vectors of integers where each vector is a collective's flows' sink hosts\n- **Required**: No\n- **Example**:\n\n  ```toml\n  sinks = [[0, 0], [1, 1]]\n  ```\n\n#### traffic\n\nFor a collective, it must specify the traffic of its flows under `[collective.traffic]`.  \nFor a collective set, it must specify the traffic of its flows under `[collective_set.traffic]`.\n\nThe following table lists attributes of traffic.\n\n> Note:\n>\n> - `initial_delay`, `arr_dist`, and `pkt_size_dist` are required.\n> - Either `size` or `duration` is required.\n> - If `flow_type = \"TCP\"`, `[flow.traffic.tcp]` or `[flow_set.traffic.tcp]` must be specified for the flow or flow set.\n\n- **Attributes**:\n\n  |    Attribute    | Meaning                                                                             | Valid Value             |\n  | :-------------: | ----------------------------------------------------------------------------------- | ----------------------- |\n  | `initial_delay` | The seconds the collective / collective set waits before producing its first packet | Floating point number   |\n  |     `size`      | The total size of packets of each flow of the collective / collective set in bytes  | Integer                 |\n  |   `duration`    | The duration of each flow of the collective / collective set in seconds             | Floating point number   |\n  |   `arr_dist`    | The arrival distribution of packets in seconds                                      | Valid distribution info |\n  | `pkt_size_dist` | The distribution of packet sizes in bytes                                           | Valid distribution info |\n\n> Valid distribution info includes uniform distribution and exponential distribution:\n>\n> - {type = \"Uniform\", low = 0.0008, high = 0.0008}\n> - {type = \"Exp\", lambda = 1.0}\n\n- **Required**: Yes\n- **Example**:\n\n  ```toml\n  [[collective]]\n  collective_type = \"Broadcast\"\n  flow_type = \"PacketDistribution\"\n  flow_count = 4\n  [collective.traffic]\n      initial_delay = 1.0\n      duration = 10.0\n      arr_dist = {type = \"Uniform\", low = 3, high = 4}\n      pkt_size_dist = {type = \"Uniform\", low = 2000, high = 2500}\n  ```\n\n#### traffic.tcp\n\nFor a collective, it must specify the tcp characteristicsc of its flows under `[collective.traffic.tcp]`.  \nFor a collective set, it must specify the tcp characteristics of its collectives' flows under `[collective_set.traffic.tcp]`.\n\n- **Attributes**:\n\n  |   Attribute    | Meaning                          | Valid Value           |\n  | :------------: | -------------------------------- | --------------------- |\n  | `cc_algorithm` | The congestion control algorithm | `TCPReno`, `TCPCubic` |\n\n- **Required**: Yes\n- **Example**:\n\n  ```toml\n  [collective.traffic.tcp]\n  \tcc_algorithm = \"TCPReno\"\n  ```\n\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "A Performant Discrete-Event Simulator for Network Simulations with a Single-Threaded Executor",
    "version": "0.1.7",
    "project_urls": {
        "Source Code": "https://github.com/baochunli/day"
    },
    "split_keywords": [
        "network",
        " simulation",
        " framework",
        " time",
        " discrete",
        " events"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f37266525ed8d9ed5926410e2afe3e5102bf4c5eacb69ee9939d3d43e260c21b",
                "md5": "f357eb7622cdc2dd7ad1f156ed74abd7",
                "sha256": "39529671e477318337142f2672c11ab39f4cbd4cca39933505276578fb5b46af"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp310-cp310-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f357eb7622cdc2dd7ad1f156ed74abd7",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 1275607,
            "upload_time": "2024-07-16T03:16:00",
            "upload_time_iso_8601": "2024-07-16T03:16:00.910319Z",
            "url": "https://files.pythonhosted.org/packages/f3/72/66525ed8d9ed5926410e2afe3e5102bf4c5eacb69ee9939d3d43e260c21b/dayone-0.1.7-cp310-cp310-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e11d0e716da24ff293c6b4e69f16412b10855df2d691086f815e29236369d6bf",
                "md5": "8a6f0e8559c933f0b300169d22847db6",
                "sha256": "7cae228523f599590cdfea8c87661945a64b0013185668238afec228ad51f823"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "8a6f0e8559c933f0b300169d22847db6",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 1221894,
            "upload_time": "2024-07-16T03:15:54",
            "upload_time_iso_8601": "2024-07-16T03:15:54.883600Z",
            "url": "https://files.pythonhosted.org/packages/e1/1d/0e716da24ff293c6b4e69f16412b10855df2d691086f815e29236369d6bf/dayone-0.1.7-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fef05f8b1c6b1d380c665e27fc28a37b36a7cac506d504c268ec32f6f7864d59",
                "md5": "5e47819315e3252772365b3fe17d70c8",
                "sha256": "45083e6cc27a77f9aad2cad03f719985c3c1076731752aac32575fef89151ea6"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "5e47819315e3252772365b3fe17d70c8",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 1328989,
            "upload_time": "2024-07-16T03:15:42",
            "upload_time_iso_8601": "2024-07-16T03:15:42.346122Z",
            "url": "https://files.pythonhosted.org/packages/fe/f0/5f8b1c6b1d380c665e27fc28a37b36a7cac506d504c268ec32f6f7864d59/dayone-0.1.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "385c152fd1268f98c007c2140fbe26e0237775918b7994f67bc784de6ec7ca3f",
                "md5": "9c1613eb2b544ee4c67743c53e38601c",
                "sha256": "c277e9c651b4ad32594ed0a9868a72bd936475b1b43bf28bd60658224887b417"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "9c1613eb2b544ee4c67743c53e38601c",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 1365527,
            "upload_time": "2024-07-16T03:15:48",
            "upload_time_iso_8601": "2024-07-16T03:15:48.331145Z",
            "url": "https://files.pythonhosted.org/packages/38/5c/152fd1268f98c007c2140fbe26e0237775918b7994f67bc784de6ec7ca3f/dayone-0.1.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c928698fc9cdd3a39001c23de0a98490b302a8e24790b8a6cecfcf1cb0d74599",
                "md5": "c479e787c8b1519bfd169fd6816f8ded",
                "sha256": "b806ef38aa291a6e696503c7d2441668b1301f376bc4fb26d86e823414fa3a5e"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp310-cp310-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "c479e787c8b1519bfd169fd6816f8ded",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 1367775,
            "upload_time": "2024-07-16T03:16:06",
            "upload_time_iso_8601": "2024-07-16T03:16:06.774485Z",
            "url": "https://files.pythonhosted.org/packages/c9/28/698fc9cdd3a39001c23de0a98490b302a8e24790b8a6cecfcf1cb0d74599/dayone-0.1.7-cp310-cp310-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9add8fe999f2ed58bb3d231ae7cc665c0e1ccbae8b0b63b254eb3568758c0945",
                "md5": "ff4239adac8b774819b6532505651288",
                "sha256": "7201c3a3324c9fe247631904941b492e7439d5fb3893f3474f8e8b249dcea989"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp310-cp310-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "ff4239adac8b774819b6532505651288",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 1404772,
            "upload_time": "2024-07-16T03:16:13",
            "upload_time_iso_8601": "2024-07-16T03:16:13.069313Z",
            "url": "https://files.pythonhosted.org/packages/9a/dd/8fe999f2ed58bb3d231ae7cc665c0e1ccbae8b0b63b254eb3568758c0945/dayone-0.1.7-cp310-cp310-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9dc32c6e149e529fc23a996673ec34de5c4da5ac9aea25b72d637d74783fb3e4",
                "md5": "5ecb7e31fd13995bec315555d99b9878",
                "sha256": "cfb3e122b306979d05a57b6146988ac8d4105738a5326d55149b4fe4856ec7f6"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp310-cp310-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "5ecb7e31fd13995bec315555d99b9878",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 1433776,
            "upload_time": "2024-07-16T03:16:24",
            "upload_time_iso_8601": "2024-07-16T03:16:24.678565Z",
            "url": "https://files.pythonhosted.org/packages/9d/c3/2c6e149e529fc23a996673ec34de5c4da5ac9aea25b72d637d74783fb3e4/dayone-0.1.7-cp310-cp310-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "067d06740895115d5faf5e80e064252131d459ba7c45be3d9946f06c883b3794",
                "md5": "d5f217def43cab25fbf7f6c5a803e745",
                "sha256": "6b4448ebef16fc09451b8bcd504d5bd8fa669fbd95d94437f73e818697b5841f"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp310-none-win32.whl",
            "has_sig": false,
            "md5_digest": "d5f217def43cab25fbf7f6c5a803e745",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 1001687,
            "upload_time": "2024-07-16T03:16:36",
            "upload_time_iso_8601": "2024-07-16T03:16:36.892982Z",
            "url": "https://files.pythonhosted.org/packages/06/7d/06740895115d5faf5e80e064252131d459ba7c45be3d9946f06c883b3794/dayone-0.1.7-cp310-none-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "920607ea25b94f0c0a02d88bda75ac3b7fd73ea9cd1d92b02acf1b446c06d02d",
                "md5": "19b89c4f0ac4e8dbee443368d86f7ea8",
                "sha256": "098abd336ca22af8581182630e082ed126c7813739d98481b9dee30b3e058690"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp310-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "19b89c4f0ac4e8dbee443368d86f7ea8",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 1102759,
            "upload_time": "2024-07-16T03:16:31",
            "upload_time_iso_8601": "2024-07-16T03:16:31.287973Z",
            "url": "https://files.pythonhosted.org/packages/92/06/07ea25b94f0c0a02d88bda75ac3b7fd73ea9cd1d92b02acf1b446c06d02d/dayone-0.1.7-cp310-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b17182cd827c016ddc220efa0e7eea6bb6142d6e7e1dba4b1081ec4d61270941",
                "md5": "e27086bc1be1903b714093748e5c24d8",
                "sha256": "55e93abb5af15889bd116a02062ee2c7b46987003e891a6e9d61d86881e76ac9"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp311-cp311-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e27086bc1be1903b714093748e5c24d8",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 1275608,
            "upload_time": "2024-07-16T03:16:03",
            "upload_time_iso_8601": "2024-07-16T03:16:03.148364Z",
            "url": "https://files.pythonhosted.org/packages/b1/71/82cd827c016ddc220efa0e7eea6bb6142d6e7e1dba4b1081ec4d61270941/dayone-0.1.7-cp311-cp311-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "521edf0b5af6d7bba78ea8d9f05c80a17a83676c4ab792182e932720ce8c4d10",
                "md5": "3436f2e766e3892b3338dc8fffe5674e",
                "sha256": "25586506a025edd62db56458e5f21869a436025e67887073577f0cdb7b39e0ff"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "3436f2e766e3892b3338dc8fffe5674e",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 1221895,
            "upload_time": "2024-07-16T03:15:57",
            "upload_time_iso_8601": "2024-07-16T03:15:57.039486Z",
            "url": "https://files.pythonhosted.org/packages/52/1e/df0b5af6d7bba78ea8d9f05c80a17a83676c4ab792182e932720ce8c4d10/dayone-0.1.7-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5537f4de582a559b670b8ad601b116b9b523ba179dd088e80331253e994e8c10",
                "md5": "67742bb78006a06dc8079972726c82f0",
                "sha256": "36c6b77b96295fb5a7f314d2fcc75bdbaa8b9ad8c4db11dd9eb2a95df4de04fb"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "67742bb78006a06dc8079972726c82f0",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 1328991,
            "upload_time": "2024-07-16T03:15:44",
            "upload_time_iso_8601": "2024-07-16T03:15:44.433914Z",
            "url": "https://files.pythonhosted.org/packages/55/37/f4de582a559b670b8ad601b116b9b523ba179dd088e80331253e994e8c10/dayone-0.1.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4b5d9f4c3a074ba144549135be3838e822cce2a2d596e93fd40caf22a64c4fc5",
                "md5": "686c89dd448d881e30cc3d93ac922a22",
                "sha256": "9961aad4a4012e2eac7b65c3e186d06d8451d9239fb63ee4a4080459875ea5fe"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "686c89dd448d881e30cc3d93ac922a22",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 1365527,
            "upload_time": "2024-07-16T03:15:50",
            "upload_time_iso_8601": "2024-07-16T03:15:50.716762Z",
            "url": "https://files.pythonhosted.org/packages/4b/5d/9f4c3a074ba144549135be3838e822cce2a2d596e93fd40caf22a64c4fc5/dayone-0.1.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "40a5c7f6c1c83069165a788225c5f687c780f756c44f9dc35668a3d2d539bdb2",
                "md5": "8a1ebdc7075e331752c4279dd9bce9bc",
                "sha256": "e6bb7fa32988057f5bb782bb6f5118a98808cb463fa038bb7d0cee310cbe4bb8"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp311-cp311-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "8a1ebdc7075e331752c4279dd9bce9bc",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 1367776,
            "upload_time": "2024-07-16T03:16:08",
            "upload_time_iso_8601": "2024-07-16T03:16:08.713316Z",
            "url": "https://files.pythonhosted.org/packages/40/a5/c7f6c1c83069165a788225c5f687c780f756c44f9dc35668a3d2d539bdb2/dayone-0.1.7-cp311-cp311-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "28da60214a57751dc3afb56456eaadb839041ae1019274e6ce23d5951edbe370",
                "md5": "71f4a98a259719ea7de2de4c91de7358",
                "sha256": "1993c268a2b6dd494f99eb096f92855ad57abe7c2633d3c1ba0934fad3126e42"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp311-cp311-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "71f4a98a259719ea7de2de4c91de7358",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 1404772,
            "upload_time": "2024-07-16T03:16:15",
            "upload_time_iso_8601": "2024-07-16T03:16:15.123865Z",
            "url": "https://files.pythonhosted.org/packages/28/da/60214a57751dc3afb56456eaadb839041ae1019274e6ce23d5951edbe370/dayone-0.1.7-cp311-cp311-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a93cfa7157884cb6f595c2027de9ab26a6188526ab351940dd1fc32628edb403",
                "md5": "8c4e669c6180c513dfed25ffed33427a",
                "sha256": "7173ef0c1477a21f316d06f454b629232cf7456e355686eb0f664c41452fa0eb"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp311-cp311-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "8c4e669c6180c513dfed25ffed33427a",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 1433777,
            "upload_time": "2024-07-16T03:16:27",
            "upload_time_iso_8601": "2024-07-16T03:16:27.332069Z",
            "url": "https://files.pythonhosted.org/packages/a9/3c/fa7157884cb6f595c2027de9ab26a6188526ab351940dd1fc32628edb403/dayone-0.1.7-cp311-cp311-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a0c6ed4108f9075a35c73a647dfcdbdbbac24fa216d1f01462df4e722d23f9d8",
                "md5": "985ae33dabe8c7a0cff72f6cb3d60da1",
                "sha256": "777512971d5c54984a0ad970d56f6b51ea83d98c1e517fe41de8c2c9063b016d"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp311-none-win32.whl",
            "has_sig": false,
            "md5_digest": "985ae33dabe8c7a0cff72f6cb3d60da1",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 1001688,
            "upload_time": "2024-07-16T03:16:38",
            "upload_time_iso_8601": "2024-07-16T03:16:38.897346Z",
            "url": "https://files.pythonhosted.org/packages/a0/c6/ed4108f9075a35c73a647dfcdbdbbac24fa216d1f01462df4e722d23f9d8/dayone-0.1.7-cp311-none-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0248b1f72984ae65523db815f225452ba7609fe0d321c23431162c3552c5d71a",
                "md5": "3f43c14a4ec16824b62bdd7956db7a9f",
                "sha256": "0f949d5189178a0456ee4331116dbf72dbb437a3e331883ba8b638d4ae2fe4a3"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp311-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "3f43c14a4ec16824b62bdd7956db7a9f",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 1102756,
            "upload_time": "2024-07-16T03:16:32",
            "upload_time_iso_8601": "2024-07-16T03:16:32.943056Z",
            "url": "https://files.pythonhosted.org/packages/02/48/b1f72984ae65523db815f225452ba7609fe0d321c23431162c3552c5d71a/dayone-0.1.7-cp311-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f28757eec974618c82ab4e44b04a592dec50d472181f0965191b2e4b17a19287",
                "md5": "3107ef851dc7809f16487099673d2bfa",
                "sha256": "f2939308e4264a69bf925d6523953901b4455a8ac3d242777cf7acce80bab0a9"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp39-cp39-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3107ef851dc7809f16487099673d2bfa",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 1275611,
            "upload_time": "2024-07-16T03:16:04",
            "upload_time_iso_8601": "2024-07-16T03:16:04.999071Z",
            "url": "https://files.pythonhosted.org/packages/f2/87/57eec974618c82ab4e44b04a592dec50d472181f0965191b2e4b17a19287/dayone-0.1.7-cp39-cp39-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7f4734fc9a87eee60f44dbff9a81fbc13b59dd75df552779ceb5e96aa7b26db1",
                "md5": "f5a34b93767a7060ddb62bdf208ab3a5",
                "sha256": "88696ee153a00f45d312b6e1895629222f2515f738ef32ab09f9c8e26f5d2fe3"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "f5a34b93767a7060ddb62bdf208ab3a5",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 1221893,
            "upload_time": "2024-07-16T03:15:58",
            "upload_time_iso_8601": "2024-07-16T03:15:58.933387Z",
            "url": "https://files.pythonhosted.org/packages/7f/47/34fc9a87eee60f44dbff9a81fbc13b59dd75df552779ceb5e96aa7b26db1/dayone-0.1.7-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e9dbbc8f68939fa4b6c3c6b0c7a83edb9cfeaa46d29a72e427fe3afbd12b1d8e",
                "md5": "64b486e33d91f1851ccdebb8297c2a5d",
                "sha256": "2b25c56272c5bd2533ff8c80736ee3ad14d5efc9ab4bd04131678240b6d3001e"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "64b486e33d91f1851ccdebb8297c2a5d",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 1328988,
            "upload_time": "2024-07-16T03:15:46",
            "upload_time_iso_8601": "2024-07-16T03:15:46.169012Z",
            "url": "https://files.pythonhosted.org/packages/e9/db/bc8f68939fa4b6c3c6b0c7a83edb9cfeaa46d29a72e427fe3afbd12b1d8e/dayone-0.1.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "50836d79fbfdebf5787ee55939b1ef99747ddb30353e947d72e9090af04a4c50",
                "md5": "8cf03e207254ec6803c00deca8442502",
                "sha256": "6805726a515fa985f8d68b28c6f6a76f95b2c7e0be28c719bb2d81f95b6bbd55"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "8cf03e207254ec6803c00deca8442502",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 1365527,
            "upload_time": "2024-07-16T03:15:52",
            "upload_time_iso_8601": "2024-07-16T03:15:52.539860Z",
            "url": "https://files.pythonhosted.org/packages/50/83/6d79fbfdebf5787ee55939b1ef99747ddb30353e947d72e9090af04a4c50/dayone-0.1.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "84c4cc6eacff2b992e4cd47263083309b48cfdc238b752b06f1daed79f94b3f9",
                "md5": "e6779f0821cba9731caa9a5cd3cb95fb",
                "sha256": "0c6e036159627aa99e2c7e74284278dbf12aceca23ba6c4cb2cfb354a825a6e8"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp39-cp39-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "e6779f0821cba9731caa9a5cd3cb95fb",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 1367774,
            "upload_time": "2024-07-16T03:16:11",
            "upload_time_iso_8601": "2024-07-16T03:16:11.026497Z",
            "url": "https://files.pythonhosted.org/packages/84/c4/cc6eacff2b992e4cd47263083309b48cfdc238b752b06f1daed79f94b3f9/dayone-0.1.7-cp39-cp39-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2f292ea8de2d545973381d546e6d61bbd4604ccb80569cd2d10f1a039de9f420",
                "md5": "1b04a62bfed1f099d748b6c51bd328bd",
                "sha256": "4cb1bed4f564fd83ef7cdb291220736ad1842597ba8b19ef9ae04ad9e608451c"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp39-cp39-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "1b04a62bfed1f099d748b6c51bd328bd",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 1404775,
            "upload_time": "2024-07-16T03:16:16",
            "upload_time_iso_8601": "2024-07-16T03:16:16.952399Z",
            "url": "https://files.pythonhosted.org/packages/2f/29/2ea8de2d545973381d546e6d61bbd4604ccb80569cd2d10f1a039de9f420/dayone-0.1.7-cp39-cp39-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "be2ce767510a26f7e65f48037c35b940514a4f0b9b8ffe5fbe9a0b70d5d07e81",
                "md5": "7050f8039581736e0f42f695e3d62d0b",
                "sha256": "515dc90c0573badf9688b7f6e41a66fff5bb23a674be5ad19ff2e10308ba963c"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp39-cp39-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "7050f8039581736e0f42f695e3d62d0b",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 1433775,
            "upload_time": "2024-07-16T03:16:29",
            "upload_time_iso_8601": "2024-07-16T03:16:29.219176Z",
            "url": "https://files.pythonhosted.org/packages/be/2c/e767510a26f7e65f48037c35b940514a4f0b9b8ffe5fbe9a0b70d5d07e81/dayone-0.1.7-cp39-cp39-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b6806a2e72714753b703780202c84e155036925168da806825908456fdf71f38",
                "md5": "bddcdcba982a0f0bb1fdf54eb6e96e19",
                "sha256": "67bb677aadb638f7c4a26432633eff166741450468dcde26c06fb1154241d2c1"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp39-none-win32.whl",
            "has_sig": false,
            "md5_digest": "bddcdcba982a0f0bb1fdf54eb6e96e19",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 1001688,
            "upload_time": "2024-07-16T03:16:41",
            "upload_time_iso_8601": "2024-07-16T03:16:41.190539Z",
            "url": "https://files.pythonhosted.org/packages/b6/80/6a2e72714753b703780202c84e155036925168da806825908456fdf71f38/dayone-0.1.7-cp39-none-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "13797a065128fd605d6a58c5cce5a397575d3d7449d0cb22563fe5e64c76cf39",
                "md5": "a322c6c7cc3d7580940209fa3d275fdd",
                "sha256": "11d1680b719fc691c1217deb6bca74f774dedaa814e4585d3826d2d3dc942c8d"
            },
            "downloads": -1,
            "filename": "dayone-0.1.7-cp39-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "a322c6c7cc3d7580940209fa3d275fdd",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": null,
            "size": 1102759,
            "upload_time": "2024-07-16T03:16:35",
            "upload_time_iso_8601": "2024-07-16T03:16:35.192121Z",
            "url": "https://files.pythonhosted.org/packages/13/79/7a065128fd605d6a58c5cce5a397575d3d7449d0cb22563fe5e64c76cf39/dayone-0.1.7-cp39-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-07-16 03:16:00",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "baochunli",
    "github_project": "day",
    "github_not_found": true,
    "lcname": "dayone"
}
        
Elapsed time: 1.27199s