## Easy management of python datetime & pandas time Series.
Created to be used in a project, this package is published to github for ease of management and installation across different modules.
### Installation
Install from `PyPi`
``` bash
pip install cytimes
```
Install from `github`
``` bash
pip install git+https://github.com/AresJef/cyTimes.git
```
### Compatibility
Supports Python 3.10 and above.
### Features
Provides two classes to make working with datetime easier in Python.
- `pydt` (Python Datetime)
- `pddt` (Pandas Series / DatetimeIndex)
Both provide similar functionalities:
- Parse datetime strings or datetime objects.
- Access in different data types.
- Conversion to numeric values (ordinal, total_seconds, timestamp, etc.)
- Calender properties (days_in_month, weekday, etc.)
- Year manipulation (to_next_year, to_year, etc.)
- Quarter manipulation (to_next_quarter, to_quarter, etc.)
- Month manipulation (to_next_month, to_to_month, etc.)
- Day manipulation (to_next_week, to_week, etc.)
- Time manipulation (to_time_start, to_time, etc.)
- Timezone manipulation (tz_localize, tz_convert, etc.)
- Frequency manipulation (freq_round, freq_ceil, freq_floor, etc.)
- Delta adjustment (Equivalent to adding `relativedelta` or `pandas.DateOffset`)
- Delta difference (Calcualte the absolute delta between two datetimes)
- Supports addition / substruction / comparision.
### Parser Performance
A major focus of this package is to optimize the datetime string parsing speed (through Cython), meanwhile maintains the maximum support for different datetime string formats. The following results are tested on an Apple M1 Pro:
##### Strict Isoformat without Timezone
```
------------------------ Strict Isoformat w/o Timezone -------------------------
Text: '2023-08-01 12:00:00.000001' Rounds: 100,000
- pydt(): 0.056599s
- direct create: 0.013991s Perf Diff: -3.045365x
- dt.fromisoformat(): 0.010218s Perf Diff: -4.539231x
- pendulum.parse(): 0.406704s Perf Diff: +6.185740x
- dateutil.isoparse(): 0.301066s Perf Diff: +4.319307x
- dateutil.parse(): 2.122079s Perf Diff: +36.493413x
##### Strict Isoformat with Timezone
```
##### Strict Isoformat with Timezone
```
------------------------ Strict Isoformat w/t Timezone -------------------------
Text: '2023-08-01 12:00:00.000001+02:00' Rounds: 100,000
- pydt(): 0.065986s
- direct create: 0.014609s Perf Diff: -3.516726x
- dt.fromisoformat(): 0.013402s Perf Diff: -3.923484x
- pendulum.parse(): 0.412670s Perf Diff: +5.253882x
- dateutil.isoparse(): 0.457038s Perf Diff: +5.926272x
- dateutil.parse(): 2.611803s Perf Diff: +38.581074x
```
##### Loose Isoformat without Timezone
```
------------------------- Loose Isoformat w/o Timezone -------------------------
Text: '2023/08/01 12:00:00.000001' Rounds: 100,000
- pydt(): 0.057039s
- pendulum.parse(): 0.838589s Perf Diff: +13.701917x
- dateutil.parse(): 2.062576s Perf Diff: +35.160516x
```
##### Loose Isoformat with Timezone
```
------------------------- Loose Isoformat w/t Timezone -------------------------
Text: '2023/08/01 12:00:00.000001+02:00' Rounds: 100,000
- pydt(): 0.066949s
- dateutil.parse(): 2.612083s Perf Diff: +38.016035x
```
##### Parse Datetime Strings
```
---------------------------- Parse Datetime Strings ----------------------------
Total datetime strings: #378 Rounds: 1,000
- pydt(): 0.587047s
- dateutil.parse(): 7.182461s Perf Diff: +11.234897x
```
### Usage for <'pydt'>
For more detail information, please refer to class methods' documentation.
``` python
from cytimes import pydt, cytimedelta
import datetime, numpy as np, pandas as pd
# Create
pt = pydt('2021-01-01 00:00:00') # ISO format string
pt = pydt("2021 Jan 1 11:11 AM") # datetime string
pt = pydt(datetime.datetime(2021, 1, 1, 0, 0, 0)) # <'datetime.datetime'>
pt = pydt(datetime.date(2021, 1, 1)) # <'datetime.date'>
pt = pydt(pd.Timestamp("2021-01-01 00:00:00")) # <'pandas.Timestamp'>
pt = pydt(np.datetime64("2021-01-01 00:00:00")) # <'numpy.datetime64'>
pt = pydt.now() # current time
pt = pydt.from_ordinal(1)
pt = pydt.from_timestamp(1)
...
# . multi-language support
# . common month / weekday / ampm
# . EN / DE / FR / IT / ES / PT / NL / SE / PL / TR / CN
pt = pydt("februar 23, 2023") # DE
pt = pydt("martes mayo 23, 2023") # ES
pt = pydt("2023年3月15日 12时15分50秒") # CN
...
# Access in different data types
pt.dt # <'datetime.datetime'>
pt.date # <'datetime.date'>
pt.time # <'datetime.time'>
pt.timetz # <'datetime.time'> (with timezone)
pt.ts # <'pandas.Timestamp'>
pt.dt64 # <'numpy.datetime64'>
...
# Conversion
pt.dt_iso # <'str'> ISO format
pt.ordinal # <'int'> ordinal of the date
pt.timestamp # <'float'> timestamp
...
# Calender
pt.is_leapyear() # <'bool'>
pt.days_bf_year # <'int'>
pt.days_in_month # <'int'>
pt.weekday # <'int'>
pt.isocalendar # <'dict'>
...
# Year manipulation
pt.to_year_lst() # Go to the last day of the current year.
pt.to_curr_year("Feb", 30) # Go to the last day in February of the current year.
pt.to_year(-3, "Mar", 15) # Go to the 15th day in March of the current year(-3).
...
# Quarter manipulation
pt.to_quarter_1st() # Go to the first day of the current quarter.
pt.to_curr_quarter(2, 0) # Go the the 2nd month of the current quarter with the same day.
pt.to_quarter(3, 2, 31) # Go the the last day of the 2nd month of the current quarter(+3).
...
# Month manipulation
pt.to_month_lst() # Go to the last day of the current month.
pt.to_next_month(31) # Go to the last day of the next month.
pt.to_month(3, 15) # Go the the 15th day of the current month(+3).
...
# Weekday manipulation
pt.to_monday() # Go to Monday of the current week.
pt.to_curr_weekday("Sun") # Go to Sunday of the current week.
pt.to_weekday(-2, "Sat") # Go to Saturday of the current week(-2).
...
# Day manipulation
pt.to_tomorrow() # Go to Tomorrow.
pt.to_yesterday() # Go to Yesterday.
pt.to_day(-2) # Go to today(-2).
...
# Time manipulation
pt.to_time_start() # Go to the start of the time (00:00:00).
pt.to_time_end() # Go to the end of the time (23:59:59.999999).
pt.to_time(1, 1, 1, 1, 1) # Go to specific time (01:01:01.001001).
...
# Timezone manipulation
pt.tz_localize("UTC") # Equivalent to 'datetime.replace(tzinfo=UTC).
pt.tz_convert("CET") # Convert to "CET" timezone.
pt.tz_switch(targ_tz="CET", base_tz="UTC") # Localize to "UTC" & convert to "CET".
# Frequency manipulation
pt.freq_round("D") # Round datetime to the resolution of hour.
pt.freq_ceil("s") # Ceil datetime to the resolution of second.
pt.freq_floor("us") # Floor datetime to the resolution of microsecond.
# Delta
pt.add_delta(years=1, months=1, days=1, milliseconds=1) # Add Y/M/D & ms.
pt.cal_delta("2023-01-01 12:00:00", unit="D", inclusive="both") # Calcualte the absolute delta in days.
...
# Addition Support
# <'datetime.timedelta>, <'pandas.Timedelta'>, <'numpy.timedelta64'>
# <'dateutil.relativedelta'>, <'cytimes.cytimedelta'>
pt = pt + datetime.timedelta(1)
pt = pt + cytimedelta(years=1, months=1)
...
# Substraction Support
# <'datetime.datetime'>, <'pandas.Timestamp'>, <'numpy.datetime64'>, <'str'>, <'pydt'>
# <'datetime.timedelta>, <'pandas.Timedelta'>, <'numpy.timedelta64'>
# <'dateutil.relativedelta'>, <'cytimes.cytimedelta'>
delta = pt - datetime.datetime(1970, 1, 1)
delta = pt - "1970-01-01"
pt = pt - datetime.timedelta(1)
...
# Comparison Support
# <'datetime.datetime'>, <'pandas.Timestamp'>, <'str'>, <'pydt'>
res = pt == datetime.datetime(1970, 1, 1)
res = pt == "1970-01-01"
...
```
### Usage for <'pddt'>
Class `pddt` provides similar functionality to `pydt` (methods and properties, see examples for `pydt`), but is designed to work with `<'pandas.Series'>` and `<'pandas.DatetimeIndex>`.
##### Out of bounds for nanoseconds
When encountering datetime values that are out of bounds for nanoseconds `datetime64[ns]`, `pddt` will automatically try to parse the value into microseconds `datetime64[us]` for greater compatibility.
```python
from cytimes import pddt
dts = [
"2000-01-02 03:04:05.000006",
"2100-01-02 03:04:05.000006",
"2200-01-02 03:04:05.000006",
"2300-01-02 03:04:05.000006", # out of bounds
]
pt = pddt(dts)
print(pt)
```
```
0 2000-01-02 03:04:05.000006
1 2100-01-02 03:04:05.000006
2 2200-01-02 03:04:05.000006
3 2300-01-02 03:04:05.000006
dtype: datetime64[us]
```
##### Specify desired time unit resolution
Sometimes the initial data is alreay a <'pandas.Series'> but defaults to `datetime64[ns]`, <'pddt'> supports specifing the the desired time 'unit' so adding `delta` or manipulating `year` can be within bounds.
```python
from pandas import Series
from datetime import datetime
dts = [
datetime(2000, 1, 2),
datetime(2100, 1, 2),
datetime(2200, 1, 2),
]
ser = Series(dts) # Series defaults to 'datetime64[ns]'
pt = pddt(ser, unit="us")
```
```
0 2000-01-02
1 2100-01-02
2 2200-01-02
dtype: datetime64[us]
```
##### Direct assignment to DataFrame
```python
from pandas import DataFrame
df = DataFrame()
df["pddt"] = pt
print(df)
```
```
pddt
0 2000-01-02 03:04:05.000006
1 2100-01-02 03:04:05.000006
2 2200-01-02 03:04:05.000006
3 2300-01-02 03:04:05.000006
```
### Acknowledgements
cyTimes is based on several open-source repositories.
- [numpy](https://github.com/numpy/numpy)
- [pandas](https://github.com/pandas-dev/pandas)
cyTimes makes modification of the following open-source repositories:
- [dateutil](https://github.com/dateutil/dateutil)
The class <'Parser'> and <'cytimedelta'> in this package is basically a cythonized version of <'dateutil.parser'> and <'dateutil.relativedelta'>. All credits go to the original authors and contributors of the `dateutil` library.
Raw data
{
"_id": null,
"home_page": "https://github.com/AresJef/cyTimes",
"name": "cytimes",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "cytimes, datetime, pandas, Series, parser",
"author": "Jiefu Chen",
"author_email": "keppa1991@163.com",
"download_url": "https://files.pythonhosted.org/packages/4c/35/25d17d0c38248246321f15dfc5f46f2803a3f5fd001dbc9d1388d92b687b/cytimes-1.0.3.tar.gz",
"platform": null,
"description": "## Easy management of python datetime & pandas time Series.\n\nCreated to be used in a project, this package is published to github for ease of management and installation across different modules.\n\n### Installation\nInstall from `PyPi`\n``` bash\npip install cytimes\n```\n\nInstall from `github`\n``` bash\npip install git+https://github.com/AresJef/cyTimes.git\n```\n\n### Compatibility\nSupports Python 3.10 and above.\n\n### Features\nProvides two classes to make working with datetime easier in Python.\n- `pydt` (Python Datetime)\n- `pddt` (Pandas Series / DatetimeIndex)\n\nBoth provide similar functionalities:\n- Parse datetime strings or datetime objects.\n- Access in different data types.\n- Conversion to numeric values (ordinal, total_seconds, timestamp, etc.)\n- Calender properties (days_in_month, weekday, etc.)\n- Year manipulation (to_next_year, to_year, etc.)\n- Quarter manipulation (to_next_quarter, to_quarter, etc.)\n- Month manipulation (to_next_month, to_to_month, etc.)\n- Day manipulation (to_next_week, to_week, etc.)\n- Time manipulation (to_time_start, to_time, etc.)\n- Timezone manipulation (tz_localize, tz_convert, etc.)\n- Frequency manipulation (freq_round, freq_ceil, freq_floor, etc.)\n- Delta adjustment (Equivalent to adding `relativedelta` or `pandas.DateOffset`)\n- Delta difference (Calcualte the absolute delta between two datetimes)\n- Supports addition / substruction / comparision.\n\n### Parser Performance\nA major focus of this package is to optimize the datetime string parsing speed (through Cython), meanwhile maintains the maximum support for different datetime string formats. The following results are tested on an Apple M1 Pro:\n\n##### Strict Isoformat without Timezone\n```\n------------------------ Strict Isoformat w/o Timezone -------------------------\nText: '2023-08-01 12:00:00.000001' Rounds: 100,000\n- pydt(): 0.056599s\n- direct create: 0.013991s Perf Diff: -3.045365x\n- dt.fromisoformat():\t 0.010218s Perf Diff: -4.539231x\n- pendulum.parse(): 0.406704s Perf Diff: +6.185740x\n- dateutil.isoparse():\t 0.301066s Perf Diff: +4.319307x\n- dateutil.parse(): 2.122079s Perf Diff: +36.493413x\n\n##### Strict Isoformat with Timezone\n```\n\n##### Strict Isoformat with Timezone\n```\n------------------------ Strict Isoformat w/t Timezone -------------------------\nText: '2023-08-01 12:00:00.000001+02:00' Rounds: 100,000\n- pydt(): 0.065986s\n- direct create: 0.014609s Perf Diff: -3.516726x\n- dt.fromisoformat(): 0.013402s Perf Diff: -3.923484x\n- pendulum.parse(): 0.412670s Perf Diff: +5.253882x\n- dateutil.isoparse(): 0.457038s Perf Diff: +5.926272x\n- dateutil.parse(): 2.611803s Perf Diff: +38.581074x\n```\n\n##### Loose Isoformat without Timezone\n```\n------------------------- Loose Isoformat w/o Timezone -------------------------\nText: '2023/08/01 12:00:00.000001' Rounds: 100,000\n- pydt(): 0.057039s\n- pendulum.parse(): 0.838589s Perf Diff: +13.701917x\n- dateutil.parse(): 2.062576s Perf Diff: +35.160516x\n```\n\n##### Loose Isoformat with Timezone\n```\n------------------------- Loose Isoformat w/t Timezone -------------------------\nText: '2023/08/01 12:00:00.000001+02:00' Rounds: 100,000\n- pydt(): 0.066949s\n- dateutil.parse(): 2.612083s Perf Diff: +38.016035x\n```\n\n##### Parse Datetime Strings\n```\n---------------------------- Parse Datetime Strings ----------------------------\nTotal datetime strings: #378 Rounds: 1,000\n- pydt(): 0.587047s\n- dateutil.parse(): 7.182461s Perf Diff: +11.234897x\n```\n\n### Usage for <'pydt'>\nFor more detail information, please refer to class methods' documentation.\n``` python\nfrom cytimes import pydt, cytimedelta\nimport datetime, numpy as np, pandas as pd\n\n# Create\npt = pydt('2021-01-01 00:00:00') # ISO format string\npt = pydt(\"2021 Jan 1 11:11 AM\") # datetime string\npt = pydt(datetime.datetime(2021, 1, 1, 0, 0, 0)) # <'datetime.datetime'>\npt = pydt(datetime.date(2021, 1, 1)) # <'datetime.date'>\npt = pydt(pd.Timestamp(\"2021-01-01 00:00:00\")) # <'pandas.Timestamp'>\npt = pydt(np.datetime64(\"2021-01-01 00:00:00\")) # <'numpy.datetime64'>\npt = pydt.now() # current time\npt = pydt.from_ordinal(1)\npt = pydt.from_timestamp(1)\n...\n\n# . multi-language support\n# . common month / weekday / ampm\n# . EN / DE / FR / IT / ES / PT / NL / SE / PL / TR / CN\npt = pydt(\"februar 23, 2023\") # DE\npt = pydt(\"martes mayo 23, 2023\") # ES\npt = pydt(\"2023\u5e743\u670815\u65e5 12\u65f615\u520650\u79d2\") # CN\n...\n\n# Access in different data types\npt.dt # <'datetime.datetime'>\npt.date # <'datetime.date'>\npt.time # <'datetime.time'>\npt.timetz # <'datetime.time'> (with timezone)\npt.ts # <'pandas.Timestamp'>\npt.dt64 # <'numpy.datetime64'>\n...\n\n# Conversion\npt.dt_iso # <'str'> ISO format\npt.ordinal # <'int'> ordinal of the date\npt.timestamp # <'float'> timestamp\n...\n\n# Calender\npt.is_leapyear() # <'bool'>\npt.days_bf_year # <'int'>\npt.days_in_month # <'int'>\npt.weekday # <'int'>\npt.isocalendar # <'dict'>\n...\n\n# Year manipulation\npt.to_year_lst() # Go to the last day of the current year.\npt.to_curr_year(\"Feb\", 30) # Go to the last day in February of the current year.\npt.to_year(-3, \"Mar\", 15) # Go to the 15th day in March of the current year(-3).\n...\n\n# Quarter manipulation\npt.to_quarter_1st() # Go to the first day of the current quarter.\npt.to_curr_quarter(2, 0) # Go the the 2nd month of the current quarter with the same day.\npt.to_quarter(3, 2, 31) # Go the the last day of the 2nd month of the current quarter(+3).\n...\n\n# Month manipulation\npt.to_month_lst() # Go to the last day of the current month.\npt.to_next_month(31) # Go to the last day of the next month.\npt.to_month(3, 15) # Go the the 15th day of the current month(+3).\n...\n\n# Weekday manipulation\npt.to_monday() # Go to Monday of the current week.\npt.to_curr_weekday(\"Sun\") # Go to Sunday of the current week.\npt.to_weekday(-2, \"Sat\") # Go to Saturday of the current week(-2).\n...\n\n# Day manipulation\npt.to_tomorrow() # Go to Tomorrow.\npt.to_yesterday() # Go to Yesterday.\npt.to_day(-2) # Go to today(-2).\n...\n\n# Time manipulation\npt.to_time_start() # Go to the start of the time (00:00:00).\npt.to_time_end() # Go to the end of the time (23:59:59.999999).\npt.to_time(1, 1, 1, 1, 1) # Go to specific time (01:01:01.001001).\n...\n\n# Timezone manipulation\npt.tz_localize(\"UTC\") # Equivalent to 'datetime.replace(tzinfo=UTC).\npt.tz_convert(\"CET\") # Convert to \"CET\" timezone.\npt.tz_switch(targ_tz=\"CET\", base_tz=\"UTC\") # Localize to \"UTC\" & convert to \"CET\".\n\n# Frequency manipulation\npt.freq_round(\"D\") # Round datetime to the resolution of hour.\npt.freq_ceil(\"s\") # Ceil datetime to the resolution of second.\npt.freq_floor(\"us\") # Floor datetime to the resolution of microsecond.\n\n# Delta\npt.add_delta(years=1, months=1, days=1, milliseconds=1) # Add Y/M/D & ms.\npt.cal_delta(\"2023-01-01 12:00:00\", unit=\"D\", inclusive=\"both\") # Calcualte the absolute delta in days.\n...\n\n# Addition Support\n# <'datetime.timedelta>, <'pandas.Timedelta'>, <'numpy.timedelta64'>\n# <'dateutil.relativedelta'>, <'cytimes.cytimedelta'>\npt = pt + datetime.timedelta(1)\npt = pt + cytimedelta(years=1, months=1)\n...\n\n# Substraction Support\n# <'datetime.datetime'>, <'pandas.Timestamp'>, <'numpy.datetime64'>, <'str'>, <'pydt'>\n# <'datetime.timedelta>, <'pandas.Timedelta'>, <'numpy.timedelta64'>\n# <'dateutil.relativedelta'>, <'cytimes.cytimedelta'>\ndelta = pt - datetime.datetime(1970, 1, 1)\ndelta = pt - \"1970-01-01\"\npt = pt - datetime.timedelta(1)\n...\n\n# Comparison Support\n# <'datetime.datetime'>, <'pandas.Timestamp'>, <'str'>, <'pydt'>\nres = pt == datetime.datetime(1970, 1, 1)\nres = pt == \"1970-01-01\"\n...\n```\n\n### Usage for <'pddt'>\nClass `pddt` provides similar functionality to `pydt` (methods and properties, see examples for `pydt`), but is designed to work with `<'pandas.Series'>` and `<'pandas.DatetimeIndex>`. \n\n##### Out of bounds for nanoseconds\nWhen encountering datetime values that are out of bounds for nanoseconds `datetime64[ns]`, `pddt` will automatically try to parse the value into microseconds `datetime64[us]` for greater compatibility.\n```python\nfrom cytimes import pddt\n\ndts = [\n \"2000-01-02 03:04:05.000006\",\n \"2100-01-02 03:04:05.000006\",\n \"2200-01-02 03:04:05.000006\",\n \"2300-01-02 03:04:05.000006\", # out of bounds\n]\npt = pddt(dts)\nprint(pt)\n```\n```\n0 2000-01-02 03:04:05.000006\n1 2100-01-02 03:04:05.000006\n2 2200-01-02 03:04:05.000006\n3 2300-01-02 03:04:05.000006\ndtype: datetime64[us]\n```\n\n##### Specify desired time unit resolution\nSometimes the initial data is alreay a <'pandas.Series'> but defaults to `datetime64[ns]`, <'pddt'> supports specifing the the desired time 'unit' so adding `delta` or manipulating `year` can be within bounds.\n```python\nfrom pandas import Series\nfrom datetime import datetime\n\ndts = [\n datetime(2000, 1, 2),\n datetime(2100, 1, 2),\n datetime(2200, 1, 2),\n]\nser = Series(dts) # Series defaults to 'datetime64[ns]'\npt = pddt(ser, unit=\"us\")\n```\n```\n0 2000-01-02\n1 2100-01-02\n2 2200-01-02\ndtype: datetime64[us]\n```\n\n##### Direct assignment to DataFrame\n```python\nfrom pandas import DataFrame\n\ndf = DataFrame()\ndf[\"pddt\"] = pt\nprint(df)\n```\n```\n pddt\n0 2000-01-02 03:04:05.000006\n1 2100-01-02 03:04:05.000006\n2 2200-01-02 03:04:05.000006\n3 2300-01-02 03:04:05.000006\n```\n\n### Acknowledgements\ncyTimes is based on several open-source repositories.\n- [numpy](https://github.com/numpy/numpy)\n- [pandas](https://github.com/pandas-dev/pandas)\n\ncyTimes makes modification of the following open-source repositories:\n- [dateutil](https://github.com/dateutil/dateutil)\n The class <'Parser'> and <'cytimedelta'> in this package is basically a cythonized version of <'dateutil.parser'> and <'dateutil.relativedelta'>. All credits go to the original authors and contributors of the `dateutil` library.\n",
"bugtrack_url": null,
"license": "MIT license, Apache License 2.0, BSD 3-Clause",
"summary": "Make working with datetime easier in Python.",
"version": "1.0.3",
"project_urls": {
"Homepage": "https://github.com/AresJef/cyTimes"
},
"split_keywords": [
"cytimes",
" datetime",
" pandas",
" series",
" parser"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f7c5d8dce65682889059436dee1e5e9be242ec97e9c2b791bf389827d082a345",
"md5": "cc5ce9e1c0ddf5a482017bf5a8f9b75a",
"sha256": "a96d45bd76052b6fc7fccb21eeb2b732e86a1fb10473eff99eb2032991ed0564"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp310-cp310-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "cc5ce9e1c0ddf5a482017bf5a8f9b75a",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 2713912,
"upload_time": "2024-06-27T07:31:38",
"upload_time_iso_8601": "2024-06-27T07:31:38.118761Z",
"url": "https://files.pythonhosted.org/packages/f7/c5/d8dce65682889059436dee1e5e9be242ec97e9c2b791bf389827d082a345/cytimes-1.0.3-cp310-cp310-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "acd3221b8b65486f2a63b6ffd7ba1743deee28548907f300e52a5378766edeef",
"md5": "9c832e71d9be80ef4af0e2878bb0e639",
"sha256": "f6c87dd36f9628a378dbf3e9f4e5c80c97125eff4cc3784336847e4dce4f88a5"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp310-cp310-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "9c832e71d9be80ef4af0e2878bb0e639",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 2018314,
"upload_time": "2024-06-27T07:31:39",
"upload_time_iso_8601": "2024-06-27T07:31:39.929085Z",
"url": "https://files.pythonhosted.org/packages/ac/d3/221b8b65486f2a63b6ffd7ba1743deee28548907f300e52a5378766edeef/cytimes-1.0.3-cp310-cp310-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b06b0217c10c3be980f75782d22476cadf2584d1f5017febe6bfd313a6596b6c",
"md5": "b9fab063006afac88ab515fc514012be",
"sha256": "ddd78e992279a178331bd02f61ab8126d6cd66f415c0d0d789f897b5ac4531c5"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "b9fab063006afac88ab515fc514012be",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 5934778,
"upload_time": "2024-06-27T07:31:41",
"upload_time_iso_8601": "2024-06-27T07:31:41.843887Z",
"url": "https://files.pythonhosted.org/packages/b0/6b/0217c10c3be980f75782d22476cadf2584d1f5017febe6bfd313a6596b6c/cytimes-1.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "799744669717b55650fc6dd6d62671fbb4afb27fb343309d2cccb5b7b3db125f",
"md5": "4b180c671d38bf63541e259bf4a5e21d",
"sha256": "21dcc09b3db8d2d5694b945faa5f30620053a36cb2a50825c7f12cce5be03fb5"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp310-cp310-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "4b180c671d38bf63541e259bf4a5e21d",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 5954575,
"upload_time": "2024-06-27T07:31:44",
"upload_time_iso_8601": "2024-06-27T07:31:44.149626Z",
"url": "https://files.pythonhosted.org/packages/79/97/44669717b55650fc6dd6d62671fbb4afb27fb343309d2cccb5b7b3db125f/cytimes-1.0.3-cp310-cp310-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "608744efe77be90623061a3783d587c34716213f44b6043397a306d33b9ac42e",
"md5": "6cc3805d0dae14c981995de953662b7d",
"sha256": "391186f8a59f3857857c4e31b4de9b7071af99bb9506916e38fdd7800b87ebed"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp310-cp310-win32.whl",
"has_sig": false,
"md5_digest": "6cc3805d0dae14c981995de953662b7d",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 1820730,
"upload_time": "2024-06-27T07:31:45",
"upload_time_iso_8601": "2024-06-27T07:31:45.949439Z",
"url": "https://files.pythonhosted.org/packages/60/87/44efe77be90623061a3783d587c34716213f44b6043397a306d33b9ac42e/cytimes-1.0.3-cp310-cp310-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "07a53d26949707d28e6c13ff23857af5a58ffb99977f2338ba998448653574b2",
"md5": "1d7554e0bca3c81f8572dd3a1c2dcc68",
"sha256": "03eef4c6162f681f0a28a1e88a011a0a8f5fb8359574b4551dcf33ce45723a4e"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "1d7554e0bca3c81f8572dd3a1c2dcc68",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 1898883,
"upload_time": "2024-06-27T07:31:48",
"upload_time_iso_8601": "2024-06-27T07:31:48.010963Z",
"url": "https://files.pythonhosted.org/packages/07/a5/3d26949707d28e6c13ff23857af5a58ffb99977f2338ba998448653574b2/cytimes-1.0.3-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "adf31a28b52bc890859c420a71cfa63676aa88922522f1686479bff0bdd8c794",
"md5": "b5202eb1e77a92a19f570f581d14db8b",
"sha256": "1323b903fe28175152b4628131100c1f1aecea84bf4e8cfd2e9a1abce6a4ca04"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp311-cp311-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "b5202eb1e77a92a19f570f581d14db8b",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 2718759,
"upload_time": "2024-06-27T07:31:49",
"upload_time_iso_8601": "2024-06-27T07:31:49.943380Z",
"url": "https://files.pythonhosted.org/packages/ad/f3/1a28b52bc890859c420a71cfa63676aa88922522f1686479bff0bdd8c794/cytimes-1.0.3-cp311-cp311-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "438df1669ec0a9a0052c27e6228f7d29dac582eed5beb0d1706e1383062ac942",
"md5": "7d5325a9f682d8fc91caa421aa4f5c5b",
"sha256": "ad5ad50ff737c6b39f2edf994f03adba4a4e480b6b4e3c18c285d30d44642216"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp311-cp311-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "7d5325a9f682d8fc91caa421aa4f5c5b",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 2023030,
"upload_time": "2024-06-27T07:31:51",
"upload_time_iso_8601": "2024-06-27T07:31:51.350745Z",
"url": "https://files.pythonhosted.org/packages/43/8d/f1669ec0a9a0052c27e6228f7d29dac582eed5beb0d1706e1383062ac942/cytimes-1.0.3-cp311-cp311-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e438ca672d2d909b768337c7e7684161af6d2e6ac3229d7991b3f55a0bd7c72f",
"md5": "f9d54c5a43c80d92fd80191d2ac818bc",
"sha256": "af1abfbba17ce1ff973f0983a4ab789cd0def6cd95d82b1dede2163a941ab530"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "f9d54c5a43c80d92fd80191d2ac818bc",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 6284370,
"upload_time": "2024-06-27T07:31:52",
"upload_time_iso_8601": "2024-06-27T07:31:52.936236Z",
"url": "https://files.pythonhosted.org/packages/e4/38/ca672d2d909b768337c7e7684161af6d2e6ac3229d7991b3f55a0bd7c72f/cytimes-1.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c4164790bc46be727ff7a667e4da3d511773696321c32c85139507a343442818",
"md5": "23da8167c1fa444f1f085cbb782e014a",
"sha256": "a3f557cf70f4ae191d847f930715c76fee01c96277f6abeea24add61eb397dba"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp311-cp311-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "23da8167c1fa444f1f085cbb782e014a",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 6311472,
"upload_time": "2024-06-27T07:31:55",
"upload_time_iso_8601": "2024-06-27T07:31:55.347293Z",
"url": "https://files.pythonhosted.org/packages/c4/16/4790bc46be727ff7a667e4da3d511773696321c32c85139507a343442818/cytimes-1.0.3-cp311-cp311-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c1d7b7c8b2048cb8b495f9c653ace4c55fa6712ef157974f0733a93aef5ee8ff",
"md5": "fc1c157cad139b7d864bfe90d44a28e3",
"sha256": "7cce8e7d97b2642f461375d432f25d67f7d68758eded8537e1a1a7866e680bcd"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "fc1c157cad139b7d864bfe90d44a28e3",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 1815997,
"upload_time": "2024-06-27T07:31:57",
"upload_time_iso_8601": "2024-06-27T07:31:57.543070Z",
"url": "https://files.pythonhosted.org/packages/c1/d7/b7c8b2048cb8b495f9c653ace4c55fa6712ef157974f0733a93aef5ee8ff/cytimes-1.0.3-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c5773db7f81676e1ac2a4b47d094aed5406079e2ca3178e262956e7985604531",
"md5": "51260d03249fe9694074e6ee198d9b36",
"sha256": "92ab13104c58609ff8e204c11d7e34f53f780104fa492e8dfc35659bf81a3c7a"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "51260d03249fe9694074e6ee198d9b36",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 1906272,
"upload_time": "2024-06-27T07:32:00",
"upload_time_iso_8601": "2024-06-27T07:32:00.094242Z",
"url": "https://files.pythonhosted.org/packages/c5/77/3db7f81676e1ac2a4b47d094aed5406079e2ca3178e262956e7985604531/cytimes-1.0.3-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1727bab1de38674482eee60011d26ed02bd143892da23aae1b2367c149785ce8",
"md5": "7c525322887fef400c2d4bb32ee405d7",
"sha256": "ae534039b94a9985b757d1ad9238816e088f1405eae6e39cb2b3c3f1ccc88b42"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp312-cp312-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "7c525322887fef400c2d4bb32ee405d7",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 2731473,
"upload_time": "2024-06-27T07:32:02",
"upload_time_iso_8601": "2024-06-27T07:32:02.388891Z",
"url": "https://files.pythonhosted.org/packages/17/27/bab1de38674482eee60011d26ed02bd143892da23aae1b2367c149785ce8/cytimes-1.0.3-cp312-cp312-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5ad4e3483f657fa39396e1e1f248fe1439d4e26c1028be96ec4d90cc087f8951",
"md5": "1be1cdbd2d8c27c65a2a9cb01f08714e",
"sha256": "2add145a841629c3d24ecbb5a6ef94cab4e3f6378c6bfc06138072ed6e6a8981"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp312-cp312-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "1be1cdbd2d8c27c65a2a9cb01f08714e",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 2027009,
"upload_time": "2024-06-27T07:32:05",
"upload_time_iso_8601": "2024-06-27T07:32:05.897855Z",
"url": "https://files.pythonhosted.org/packages/5a/d4/e3483f657fa39396e1e1f248fe1439d4e26c1028be96ec4d90cc087f8951/cytimes-1.0.3-cp312-cp312-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8a1d4768789961d66dcd97be28303f69aaf1e0648c6dd9d136c92740a26c8b64",
"md5": "8a0c57aadd6440202f1fff548e5cc104",
"sha256": "24ad4144f8a70654ebc3b54e5f97398f1f3a52937d4e025d48d75c6cd294c797"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "8a0c57aadd6440202f1fff548e5cc104",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 6043613,
"upload_time": "2024-06-27T07:32:09",
"upload_time_iso_8601": "2024-06-27T07:32:09.452697Z",
"url": "https://files.pythonhosted.org/packages/8a/1d/4768789961d66dcd97be28303f69aaf1e0648c6dd9d136c92740a26c8b64/cytimes-1.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "903aed115b5895e430371b318ce6838047189d82fd25566916a3bc19ce479298",
"md5": "204862302a136f150714e5f8480c09db",
"sha256": "480b4f0e0447bc80fce068883d63f4db9e8ac5a59e1788b8f16db3cda5db73fc"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp312-cp312-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "204862302a136f150714e5f8480c09db",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 6074582,
"upload_time": "2024-06-27T07:32:14",
"upload_time_iso_8601": "2024-06-27T07:32:14.416125Z",
"url": "https://files.pythonhosted.org/packages/90/3a/ed115b5895e430371b318ce6838047189d82fd25566916a3bc19ce479298/cytimes-1.0.3-cp312-cp312-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d3805c5e8b03a3aa87907c5e4719c16dfcce260e8bc44645532b8fac9c16e867",
"md5": "ffd8162176e5d916f4e709ee3816b289",
"sha256": "7ab000b5fe25cc5c2ca5ddfa898bada4758245af031f8786b1a428ec0936edeb"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp312-cp312-win32.whl",
"has_sig": false,
"md5_digest": "ffd8162176e5d916f4e709ee3816b289",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 1810579,
"upload_time": "2024-06-27T07:32:15",
"upload_time_iso_8601": "2024-06-27T07:32:15.965280Z",
"url": "https://files.pythonhosted.org/packages/d3/80/5c5e8b03a3aa87907c5e4719c16dfcce260e8bc44645532b8fac9c16e867/cytimes-1.0.3-cp312-cp312-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "12275a8a316712ea1862275760aeb10e29ca0cef8479b92b1645c561a659960b",
"md5": "060a42dd9a24a7dc5c087fc4bb702dcf",
"sha256": "d612fad1cb49fd5224a2a3442b17fc33d87ce5b2c9296fbad4e3603313db5dba"
},
"downloads": -1,
"filename": "cytimes-1.0.3-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "060a42dd9a24a7dc5c087fc4bb702dcf",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 1904366,
"upload_time": "2024-06-27T07:32:18",
"upload_time_iso_8601": "2024-06-27T07:32:18.830146Z",
"url": "https://files.pythonhosted.org/packages/12/27/5a8a316712ea1862275760aeb10e29ca0cef8479b92b1645c561a659960b/cytimes-1.0.3-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4c3525d17d0c38248246321f15dfc5f46f2803a3f5fd001dbc9d1388d92b687b",
"md5": "7501101bb164120c25b58b81a28e19f3",
"sha256": "80f09b2ceec6614a64f2c2d6706a539c21652a83397b07ec164e5332025f6acb"
},
"downloads": -1,
"filename": "cytimes-1.0.3.tar.gz",
"has_sig": false,
"md5_digest": "7501101bb164120c25b58b81a28e19f3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 1212423,
"upload_time": "2024-06-27T07:32:20",
"upload_time_iso_8601": "2024-06-27T07:32:20.723770Z",
"url": "https://files.pythonhosted.org/packages/4c/35/25d17d0c38248246321f15dfc5f46f2803a3f5fd001dbc9d1388d92b687b/cytimes-1.0.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-27 07:32:20",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "AresJef",
"github_project": "cyTimes",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "numpy",
"specs": [
[
">=",
"1.25.2"
]
]
},
{
"name": "pandas",
"specs": [
[
">=",
"2.1.0"
]
]
},
{
"name": "pyarrow",
"specs": [
[
">=",
"13.0.0"
]
]
},
{
"name": "python-dateutil",
"specs": [
[
">=",
"2.8.2"
]
]
}
],
"lcname": "cytimes"
}