cythonlookupdicts


Namecythonlookupdicts JSON
Version 0.10 PyPI version JSON
download
home_pagehttps://github.com/hansalemaos/cythonlookupdicts
SummaryInsanely fast Cython lookup dicts for tedious datatypes (useful for Sports betting)
upload_time2024-01-31 03:19:17
maintainer
docs_urlNone
authorJohannes Fischer
requires_python
licenseMIT
keywords numpy c cython
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
# Insanely fast Cython lookup dicts for tedious datatypes (useful for Sports betting) 

Analyzing sports league data often involves complex operations, especially when dealing with team lineups and match statistics. The cythonlookupdicts library provides efficient and powerful tools, including LookUpDictMultiIndex and LookUpDictMultiValues and MultiIndexFinder, designed to streamline data retrieval, making it an ideal choice for sports analysts, coaches, and enthusiasts.


## Tested against Windows / Python 3.11 / Anaconda

## pip install cythonlookupdicts

## Copy + Paste Code (Explanation below)

```python

from cythonlookupdicts import (
    LookUpDictMultiIndex,
    LookUpDictMultiValues,
    MultiIndexFinder,
)

reps = 5 # Generate some random data, 

# Sample data: Teams and corresponding match statistics
_team_lineups = [
    ["TeamA", "Player1", "Player2"],
    ["TeamB", "Player3", "Player4"],
    ["TeamA", "Player1", "Player2"],
    ["TeamB", "Player3", "Player4"],
    ["TeamC", "Player5", "Player6"],
    ["TeamB", "Player3", "Player4"],
    ["TeamC", "Player5", "Player6"],
    ["TeamB", "Player3", "Player4"],
    ["TeamA", "Player1", "Player2"],
    ["TeamA", "Player1", "Player2"],
    ["TeamB", "Player3", "Player4"],
    ["TeamC", "Player5", "Player6"],
]
team_lineups = []
for h in range(reps):
    team_lineups.extend(_team_lineups)

_match_results = [
    {"goals_scored": 1, "goals_conceded": 2},
    {"goals_scored": 3, "goals_conceded": 1},
    {"goals_scored": 2, "goals_conceded": 0},
    {"goals_scored": 1, "goals_conceded": 2},
    {"goals_scored": 0, "goals_conceded": 1},
    {"goals_scored": 3, "goals_conceded": 0},
    {"goals_scored": 2, "goals_conceded": 1},
    {"goals_scored": 1, "goals_conceded": 2},
    {"goals_scored": 2, "goals_conceded": 0},
    {"goals_scored": 1, "goals_conceded": 2},
    {"goals_scored": 3, "goals_conceded": 1},
    {"goals_scored": 2, "goals_conceded": 0},
]
match_results = []
for h in range(reps):
    match_results.extend(_match_results)
# Create a LookUpDictMultiIndex instance for team lineups
team_lineup_index = LookUpDictMultiIndex(
    team_lineups, match_results, ignore_exceptions=False
)

# Example: Get match results for specific team lineups
selected_lineups = [["TeamA", "Player1", "Player2"], ["TeamB", "Player3", "Player4"]]
lineup_results = team_lineup_index[selected_lineups]

# Print the match results for the selected lineups
for lineup_indices in lineup_results:
    for idx, result_index in enumerate(lineup_indices):
        print(team_lineups[result_index], match_results[result_index], idx + 1)


# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 1, 'goals_conceded': 2} 1
# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 2, 'goals_conceded': 0} 2
# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 2, 'goals_conceded': 0} 3
# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 1, 'goals_conceded': 2} 4
# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 1, 'goals_conceded': 2} 5
# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 2, 'goals_conceded': 0} 6
# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 2, 'goals_conceded': 0} 7
# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 1, 'goals_conceded': 2} 8
# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 1, 'goals_conceded': 2} 9
# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 2, 'goals_conceded': 0} 10
# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 2, 'goals_conceded': 0} 11
# ....

print("0000000000000000000000000000000000000000000000000000000000000000000000000000000")
# Ignoring Exceptions:

team_lineup_index["ignore_exceptions"] = True
selected_lineups = [
    ["TeamA", "Player1", "Player2"],
    ["TeamB", "Player3", "Player444444444444444444444444"],
    ["TeamC", "Player5", "Player6"],
]
lineup_results = team_lineup_index[selected_lineups]
print(lineup_results)

# [[0, 2, 8, 9, 12, 14, 20, 21, 24, 26, 32, 33, 36, 38, 44, 45, 48, 50, 56, 57], [], [4, 6, 11, 16, 18, 23, 28, 30, 35, 40, 42, 47, 52, 54, 59]]
print("1111111111111111111111111111111111111111111111111111111111111111111111111111111")
import random

input_data1x = team_lineups.copy()
input_data2x = match_results.copy()
random.shuffle(input_data1x)
random.shuffle(input_data2x)

dd = LookUpDictMultiValues(input_data1x, input_data2x, ignore_exceptions=True)
searchlist2 = [
    ["TeamB", "Player3", "Player4"],
    ["TeamC", "Player5", "Player6"],
    ["TeamC", "Player5", "Player67777777777"], # Exception ignored -> empty list 
]
allresus = dd[searchlist2]
print(allresus)
# [[{'goals_scored': 1, 'goals_conceded': 2}, {'goals_scored': 3, 'goals_conceded': 1},
# {'goals_scored': 2, 'goals_conceded': 0}, {'goals_scored': 1, 'goals_conceded': 2},
# {'goals_scored': 2, 'goals_conceded': 0}, {'goals_scored': 3, 'goals_conceded': 1},
# {'goals_scored': 0, 'goals_conceded': 1}, {'goals_scored': 2, 'goals_conceded': 1},
#  {'goals_scored': 1, 'goals_conceded': 2}, {'goals_scored': 1, 'goals_conceded': 2},
#  {'goals_scored': 1, 'goals_conceded': 2}, {'goals_scored': 2, 'goals_conceded': 0},
# {'goals_scored': 3, 'goals_conceded': 1}, {'goals_scored': 2, 'goals_conceded': 0},
# ....
print("22222222222222222222222222222222222222222222222222222222222222222222222222222")

import random

input_data1x = team_lineups.copy()
random.shuffle(input_data1x)

dd = MultiIndexFinder(input_data1x, ignore_exceptions=False)
searchlist2 = [
    ["TeamB", "Player3", "Player4"],
    ["TeamC", "Player5", "Player6"],
]
allresus = dd[searchlist2]
print(allresus)
# [[0, 4, 7, 8, 12, 13, 16, 17, 18, 19, 20, 21, 22, 24, 25, 32, 38, 40, 42, 46, 47, 51, 52, 53, 57], [2, 3, 5, 10, 11, 26, 27, 29, 30, 35, 39, 44, 49, 54, 56]]
print("333333333333333333333333333333333333333333333333333333333333333333333333333")
```

## Explanation


```python
Example: Team Lineups and Match Results
In the given example, we have simulated team lineups (team_lineups) and corresponding match results (match_results). The LookUpDictMultiIndex class enables the quick retrieval of match results based on specific team lineups, offering a seamless way to analyze team performance over multiple matches.


# Create a LookUpDictMultiIndex instance for team lineups
team_lineup_index = LookUpDictMultiIndex(
    team_lineups, match_results, ignore_exceptions=False
)

# Example: Get match results for specific team lineups
selected_lineups = [["TeamA", "Player1", "Player2"], ["TeamB", "Player3", "Player4"]]
lineup_results = team_lineup_index[selected_lineups]

# Print the match results for the selected lineups
for lineup_indices in lineup_results:
    for idx, result_index in enumerate(lineup_indices):
        print(team_lineups[result_index], match_results[result_index], idx + 1)
		
		
Advantage 1: Exception Handling
One notable advantage of CythonLookupDicts is its robust exception handling. By default, exceptions are raised for unmatched queries, providing clarity in data integrity. However, the library allows users to set ignore_exceptions to True for scenarios where partial matches are acceptable, offering flexibility in data exploration.


# Ignoring Exceptions:
team_lineup_index["ignore_exceptions"] = True
selected_lineups = [
    ["TeamA", "Player1", "Player2"],
    ["TeamB", "Player3", "Player444444444444444444444444"],
    ["TeamC", "Player5", "Player6"],
]
lineup_results = team_lineup_index[selected_lineups]
print(lineup_results)
# [[0, 2, 8, 9, 12, 14, 20, 21, 24, 26, 32, 33, 36, 38, 44, 45, 48, 50, 56, 57], [], [4, 6, 11, 16, 18, 23, 28, 30, 35, 40, 42, 47, 52, 54, 59]]


Advantage 2: Multi-Scenario Analysis
For users who need to analyze multiple scenarios simultaneously, CythonLookupDicts offers the LookUpDictMultiValues class. It allows users to efficiently retrieve match statistics for specified scenarios, providing a comprehensive overview of team performance.


# Multi-Scenario Analysis:
searchlist2 = [
    ["TeamB", "Player3", "Player4"],
    ["TeamC", "Player5", "Player6"],
    ["TeamC", "Player5", "Player67777777777"],
]
allresus = dd[searchlist2]
print(allresus)
# [[{'goals_scored': 1, 'goals_conceded': 2}, {'goals_scored': 3, 'goals_conceded': 1}, ...]]
Advantage 3: Multi-Index Finder
For scenarios where direct value retrieval is not necessary, the MultiIndexFinder class allows users to find indices of matching entries efficiently. This is particularly useful when working with large datasets and the focus is on identifying relevant indices.


# Multi-Index Finder:
searchlist3 = [
    ["TeamB", "Player3", "Player4"],
    ["TeamC", "Player5", "Player6"],
]
allresus = dd[searchlist3]
print(allresus)
# [[0, 4, 7, 8, 12, 13, 16, 17, 18, ...], [2, 3, 5, 10, 11, 26, 27, 29, 30, ...]]
```



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/hansalemaos/cythonlookupdicts",
    "name": "cythonlookupdicts",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "numpy,C,cython",
    "author": "Johannes Fischer",
    "author_email": "aulasparticularesdealemaosp@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/a6/55/8329d3f9efe39930b483e514ea0a6aa1079e8f33bd686f9d62d4cbc8f166/cythonlookupdicts-0.10.tar.gz",
    "platform": null,
    "description": "\r\n# Insanely fast Cython lookup dicts for tedious datatypes (useful for Sports betting) \r\n\r\nAnalyzing sports league data often involves complex operations, especially when dealing with team lineups and match statistics. The cythonlookupdicts library provides efficient and powerful tools, including LookUpDictMultiIndex and LookUpDictMultiValues and MultiIndexFinder, designed to streamline data retrieval, making it an ideal choice for sports analysts, coaches, and enthusiasts.\r\n\r\n\r\n## Tested against Windows / Python 3.11 / Anaconda\r\n\r\n## pip install cythonlookupdicts\r\n\r\n## Copy + Paste Code (Explanation below)\r\n\r\n```python\r\n\r\nfrom cythonlookupdicts import (\r\n    LookUpDictMultiIndex,\r\n    LookUpDictMultiValues,\r\n    MultiIndexFinder,\r\n)\r\n\r\nreps = 5 # Generate some random data, \r\n\r\n# Sample data: Teams and corresponding match statistics\r\n_team_lineups = [\r\n    [\"TeamA\", \"Player1\", \"Player2\"],\r\n    [\"TeamB\", \"Player3\", \"Player4\"],\r\n    [\"TeamA\", \"Player1\", \"Player2\"],\r\n    [\"TeamB\", \"Player3\", \"Player4\"],\r\n    [\"TeamC\", \"Player5\", \"Player6\"],\r\n    [\"TeamB\", \"Player3\", \"Player4\"],\r\n    [\"TeamC\", \"Player5\", \"Player6\"],\r\n    [\"TeamB\", \"Player3\", \"Player4\"],\r\n    [\"TeamA\", \"Player1\", \"Player2\"],\r\n    [\"TeamA\", \"Player1\", \"Player2\"],\r\n    [\"TeamB\", \"Player3\", \"Player4\"],\r\n    [\"TeamC\", \"Player5\", \"Player6\"],\r\n]\r\nteam_lineups = []\r\nfor h in range(reps):\r\n    team_lineups.extend(_team_lineups)\r\n\r\n_match_results = [\r\n    {\"goals_scored\": 1, \"goals_conceded\": 2},\r\n    {\"goals_scored\": 3, \"goals_conceded\": 1},\r\n    {\"goals_scored\": 2, \"goals_conceded\": 0},\r\n    {\"goals_scored\": 1, \"goals_conceded\": 2},\r\n    {\"goals_scored\": 0, \"goals_conceded\": 1},\r\n    {\"goals_scored\": 3, \"goals_conceded\": 0},\r\n    {\"goals_scored\": 2, \"goals_conceded\": 1},\r\n    {\"goals_scored\": 1, \"goals_conceded\": 2},\r\n    {\"goals_scored\": 2, \"goals_conceded\": 0},\r\n    {\"goals_scored\": 1, \"goals_conceded\": 2},\r\n    {\"goals_scored\": 3, \"goals_conceded\": 1},\r\n    {\"goals_scored\": 2, \"goals_conceded\": 0},\r\n]\r\nmatch_results = []\r\nfor h in range(reps):\r\n    match_results.extend(_match_results)\r\n# Create a LookUpDictMultiIndex instance for team lineups\r\nteam_lineup_index = LookUpDictMultiIndex(\r\n    team_lineups, match_results, ignore_exceptions=False\r\n)\r\n\r\n# Example: Get match results for specific team lineups\r\nselected_lineups = [[\"TeamA\", \"Player1\", \"Player2\"], [\"TeamB\", \"Player3\", \"Player4\"]]\r\nlineup_results = team_lineup_index[selected_lineups]\r\n\r\n# Print the match results for the selected lineups\r\nfor lineup_indices in lineup_results:\r\n    for idx, result_index in enumerate(lineup_indices):\r\n        print(team_lineups[result_index], match_results[result_index], idx + 1)\r\n\r\n\r\n# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 1, 'goals_conceded': 2} 1\r\n# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 2, 'goals_conceded': 0} 2\r\n# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 2, 'goals_conceded': 0} 3\r\n# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 1, 'goals_conceded': 2} 4\r\n# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 1, 'goals_conceded': 2} 5\r\n# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 2, 'goals_conceded': 0} 6\r\n# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 2, 'goals_conceded': 0} 7\r\n# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 1, 'goals_conceded': 2} 8\r\n# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 1, 'goals_conceded': 2} 9\r\n# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 2, 'goals_conceded': 0} 10\r\n# ['TeamA', 'Player1', 'Player2'] {'goals_scored': 2, 'goals_conceded': 0} 11\r\n# ....\r\n\r\nprint(\"0000000000000000000000000000000000000000000000000000000000000000000000000000000\")\r\n# Ignoring Exceptions:\r\n\r\nteam_lineup_index[\"ignore_exceptions\"] = True\r\nselected_lineups = [\r\n    [\"TeamA\", \"Player1\", \"Player2\"],\r\n    [\"TeamB\", \"Player3\", \"Player444444444444444444444444\"],\r\n    [\"TeamC\", \"Player5\", \"Player6\"],\r\n]\r\nlineup_results = team_lineup_index[selected_lineups]\r\nprint(lineup_results)\r\n\r\n# [[0, 2, 8, 9, 12, 14, 20, 21, 24, 26, 32, 33, 36, 38, 44, 45, 48, 50, 56, 57], [], [4, 6, 11, 16, 18, 23, 28, 30, 35, 40, 42, 47, 52, 54, 59]]\r\nprint(\"1111111111111111111111111111111111111111111111111111111111111111111111111111111\")\r\nimport random\r\n\r\ninput_data1x = team_lineups.copy()\r\ninput_data2x = match_results.copy()\r\nrandom.shuffle(input_data1x)\r\nrandom.shuffle(input_data2x)\r\n\r\ndd = LookUpDictMultiValues(input_data1x, input_data2x, ignore_exceptions=True)\r\nsearchlist2 = [\r\n    [\"TeamB\", \"Player3\", \"Player4\"],\r\n    [\"TeamC\", \"Player5\", \"Player6\"],\r\n    [\"TeamC\", \"Player5\", \"Player67777777777\"], # Exception ignored -> empty list \r\n]\r\nallresus = dd[searchlist2]\r\nprint(allresus)\r\n# [[{'goals_scored': 1, 'goals_conceded': 2}, {'goals_scored': 3, 'goals_conceded': 1},\r\n# {'goals_scored': 2, 'goals_conceded': 0}, {'goals_scored': 1, 'goals_conceded': 2},\r\n# {'goals_scored': 2, 'goals_conceded': 0}, {'goals_scored': 3, 'goals_conceded': 1},\r\n# {'goals_scored': 0, 'goals_conceded': 1}, {'goals_scored': 2, 'goals_conceded': 1},\r\n#  {'goals_scored': 1, 'goals_conceded': 2}, {'goals_scored': 1, 'goals_conceded': 2},\r\n#  {'goals_scored': 1, 'goals_conceded': 2}, {'goals_scored': 2, 'goals_conceded': 0},\r\n# {'goals_scored': 3, 'goals_conceded': 1}, {'goals_scored': 2, 'goals_conceded': 0},\r\n# ....\r\nprint(\"22222222222222222222222222222222222222222222222222222222222222222222222222222\")\r\n\r\nimport random\r\n\r\ninput_data1x = team_lineups.copy()\r\nrandom.shuffle(input_data1x)\r\n\r\ndd = MultiIndexFinder(input_data1x, ignore_exceptions=False)\r\nsearchlist2 = [\r\n    [\"TeamB\", \"Player3\", \"Player4\"],\r\n    [\"TeamC\", \"Player5\", \"Player6\"],\r\n]\r\nallresus = dd[searchlist2]\r\nprint(allresus)\r\n# [[0, 4, 7, 8, 12, 13, 16, 17, 18, 19, 20, 21, 22, 24, 25, 32, 38, 40, 42, 46, 47, 51, 52, 53, 57], [2, 3, 5, 10, 11, 26, 27, 29, 30, 35, 39, 44, 49, 54, 56]]\r\nprint(\"333333333333333333333333333333333333333333333333333333333333333333333333333\")\r\n```\r\n\r\n## Explanation\r\n\r\n\r\n```python\r\nExample: Team Lineups and Match Results\r\nIn the given example, we have simulated team lineups (team_lineups) and corresponding match results (match_results). The LookUpDictMultiIndex class enables the quick retrieval of match results based on specific team lineups, offering a seamless way to analyze team performance over multiple matches.\r\n\r\n\r\n# Create a LookUpDictMultiIndex instance for team lineups\r\nteam_lineup_index = LookUpDictMultiIndex(\r\n    team_lineups, match_results, ignore_exceptions=False\r\n)\r\n\r\n# Example: Get match results for specific team lineups\r\nselected_lineups = [[\"TeamA\", \"Player1\", \"Player2\"], [\"TeamB\", \"Player3\", \"Player4\"]]\r\nlineup_results = team_lineup_index[selected_lineups]\r\n\r\n# Print the match results for the selected lineups\r\nfor lineup_indices in lineup_results:\r\n    for idx, result_index in enumerate(lineup_indices):\r\n        print(team_lineups[result_index], match_results[result_index], idx + 1)\r\n\t\t\r\n\t\t\r\nAdvantage 1: Exception Handling\r\nOne notable advantage of CythonLookupDicts is its robust exception handling. By default, exceptions are raised for unmatched queries, providing clarity in data integrity. However, the library allows users to set ignore_exceptions to True for scenarios where partial matches are acceptable, offering flexibility in data exploration.\r\n\r\n\r\n# Ignoring Exceptions:\r\nteam_lineup_index[\"ignore_exceptions\"] = True\r\nselected_lineups = [\r\n    [\"TeamA\", \"Player1\", \"Player2\"],\r\n    [\"TeamB\", \"Player3\", \"Player444444444444444444444444\"],\r\n    [\"TeamC\", \"Player5\", \"Player6\"],\r\n]\r\nlineup_results = team_lineup_index[selected_lineups]\r\nprint(lineup_results)\r\n# [[0, 2, 8, 9, 12, 14, 20, 21, 24, 26, 32, 33, 36, 38, 44, 45, 48, 50, 56, 57], [], [4, 6, 11, 16, 18, 23, 28, 30, 35, 40, 42, 47, 52, 54, 59]]\r\n\r\n\r\nAdvantage 2: Multi-Scenario Analysis\r\nFor users who need to analyze multiple scenarios simultaneously, CythonLookupDicts offers the LookUpDictMultiValues class. It allows users to efficiently retrieve match statistics for specified scenarios, providing a comprehensive overview of team performance.\r\n\r\n\r\n# Multi-Scenario Analysis:\r\nsearchlist2 = [\r\n    [\"TeamB\", \"Player3\", \"Player4\"],\r\n    [\"TeamC\", \"Player5\", \"Player6\"],\r\n    [\"TeamC\", \"Player5\", \"Player67777777777\"],\r\n]\r\nallresus = dd[searchlist2]\r\nprint(allresus)\r\n# [[{'goals_scored': 1, 'goals_conceded': 2}, {'goals_scored': 3, 'goals_conceded': 1}, ...]]\r\nAdvantage 3: Multi-Index Finder\r\nFor scenarios where direct value retrieval is not necessary, the MultiIndexFinder class allows users to find indices of matching entries efficiently. This is particularly useful when working with large datasets and the focus is on identifying relevant indices.\r\n\r\n\r\n# Multi-Index Finder:\r\nsearchlist3 = [\r\n    [\"TeamB\", \"Player3\", \"Player4\"],\r\n    [\"TeamC\", \"Player5\", \"Player6\"],\r\n]\r\nallresus = dd[searchlist3]\r\nprint(allresus)\r\n# [[0, 4, 7, 8, 12, 13, 16, 17, 18, ...], [2, 3, 5, 10, 11, 26, 27, 29, 30, ...]]\r\n```\r\n\r\n\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Insanely fast Cython lookup dicts for tedious datatypes (useful for Sports betting)",
    "version": "0.10",
    "project_urls": {
        "Homepage": "https://github.com/hansalemaos/cythonlookupdicts"
    },
    "split_keywords": [
        "numpy",
        "c",
        "cython"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "53371110bae475c633a2e8e1afe1fd2ce7057909bfa57a8ceb61e662df2de2a7",
                "md5": "6b556c858367955c2064e8d26cd14575",
                "sha256": "9863638747c4d2d5b4558ec65d62e817d2cb552ac13ba7ab98b3318b030e0260"
            },
            "downloads": -1,
            "filename": "cythonlookupdicts-0.10-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "6b556c858367955c2064e8d26cd14575",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 26143,
            "upload_time": "2024-01-31T03:19:15",
            "upload_time_iso_8601": "2024-01-31T03:19:15.725956Z",
            "url": "https://files.pythonhosted.org/packages/53/37/1110bae475c633a2e8e1afe1fd2ce7057909bfa57a8ceb61e662df2de2a7/cythonlookupdicts-0.10-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a6558329d3f9efe39930b483e514ea0a6aa1079e8f33bd686f9d62d4cbc8f166",
                "md5": "070c08b0c6787542bc3ed8f08a5217f7",
                "sha256": "34c12e566128fe04574893c6737e0b3b0c77f8d4e96d8b19cae82a3fa3fda19b"
            },
            "downloads": -1,
            "filename": "cythonlookupdicts-0.10.tar.gz",
            "has_sig": false,
            "md5_digest": "070c08b0c6787542bc3ed8f08a5217f7",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 26035,
            "upload_time": "2024-01-31T03:19:17",
            "upload_time_iso_8601": "2024-01-31T03:19:17.869927Z",
            "url": "https://files.pythonhosted.org/packages/a6/55/8329d3f9efe39930b483e514ea0a6aa1079e8f33bd686f9d62d4cbc8f166/cythonlookupdicts-0.10.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-01-31 03:19:17",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "hansalemaos",
    "github_project": "cythonlookupdicts",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "cythonlookupdicts"
}
        
Elapsed time: 0.18542s