dycw-utilities 0.109.15__tar.gz → 0.109.16__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/PKG-INFO +1 -1
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/pyproject.toml +2 -2
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_numpy.py +31 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/numpy.py +48 -2
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/.gitignore +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/LICENSE +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/README.md +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/scripts/__init__.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/scripts/test_async_service/__init__.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/scripts/test_async_service/__main__.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/scripts/test_async_service/run.sh +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/scripts/test_queue_processor/__init__.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/scripts/test_queue_processor/__main__.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/scripts/test_queue_processor/run.sh +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_astor.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_rich.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/astor.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/click.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/git.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/http.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/math.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/os.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/period.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/random.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/re.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/rich.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/text.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/types.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/version.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/utilities/zoneinfo.py +0 -0
@@ -92,7 +92,7 @@ dependencies = [
|
|
92
92
|
name = "dycw-utilities"
|
93
93
|
readme = "README.md"
|
94
94
|
requires-python = ">= 3.12"
|
95
|
-
version = "0.109.
|
95
|
+
version = "0.109.16"
|
96
96
|
|
97
97
|
[project.optional-dependencies]
|
98
98
|
test = [
|
@@ -335,7 +335,7 @@ zzz-test-zoneinfo = [
|
|
335
335
|
# bump-my-version
|
336
336
|
[tool.bumpversion]
|
337
337
|
allow_dirty = true
|
338
|
-
current_version = "0.109.
|
338
|
+
current_version = "0.109.16"
|
339
339
|
|
340
340
|
[[tool.bumpversion.files]]
|
341
341
|
filename = "src/utilities/__init__.py"
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
3
3
|
from re import escape
|
4
4
|
from typing import TYPE_CHECKING, Any, Literal
|
5
5
|
|
6
|
+
import numpy as np
|
6
7
|
from hypothesis import assume, given
|
7
8
|
from hypothesis.strategies import DataObject, data, floats, integers, none
|
8
9
|
from numpy import (
|
@@ -12,13 +13,16 @@ from numpy import (
|
|
12
13
|
full,
|
13
14
|
inf,
|
14
15
|
isclose,
|
16
|
+
linspace,
|
15
17
|
median,
|
16
18
|
nan,
|
17
19
|
ndarray,
|
18
20
|
ones,
|
21
|
+
pi,
|
19
22
|
zeros,
|
20
23
|
zeros_like,
|
21
24
|
)
|
25
|
+
from numpy.fft import fft, fftfreq
|
22
26
|
from numpy.random import Generator
|
23
27
|
from numpy.testing import assert_equal
|
24
28
|
from pytest import mark, param, raises
|
@@ -36,7 +40,9 @@ from utilities.numpy import (
|
|
36
40
|
as_int,
|
37
41
|
discretize,
|
38
42
|
fillna,
|
43
|
+
filter_frequencies,
|
39
44
|
flatn0,
|
45
|
+
get_frequency_spectrum,
|
40
46
|
has_dtype,
|
41
47
|
is_at_least,
|
42
48
|
is_at_least_or_nan,
|
@@ -268,6 +274,19 @@ class TestFillNa:
|
|
268
274
|
assert_equal(result, expected)
|
269
275
|
|
270
276
|
|
277
|
+
class TestFilterFrequencies:
|
278
|
+
def test_main(self) -> None:
|
279
|
+
n = 1000
|
280
|
+
x = linspace(0, 2 * pi, n)
|
281
|
+
noise = DEFAULT_RNG.normal(scale=0.25, size=n)
|
282
|
+
y = x + noise
|
283
|
+
result = filter_frequencies(y, lambda f: np.abs(f) <= 0.02)
|
284
|
+
assert result.shape == (n,)
|
285
|
+
fft_vals = fft(result)
|
286
|
+
freqs = fftfreq(n)
|
287
|
+
assert np.allclose(fft_vals[np.abs(freqs) > 0.02], 0.0)
|
288
|
+
|
289
|
+
|
271
290
|
class TestFlatN0:
|
272
291
|
@given(data=data(), n=integers(1, 10))
|
273
292
|
def test_main(self, *, data: DataObject, n: int) -> None:
|
@@ -288,6 +307,18 @@ class TestFlatN0:
|
|
288
307
|
_ = flatn0(ones(2, dtype=bool))
|
289
308
|
|
290
309
|
|
310
|
+
class TestGetFrequencySpectrum:
|
311
|
+
def test_main(self) -> None:
|
312
|
+
n = 1000
|
313
|
+
x = linspace(0, 2 * pi, n)
|
314
|
+
noise = DEFAULT_RNG.normal(scale=0.25, size=n)
|
315
|
+
y = x + noise
|
316
|
+
y2 = filter_frequencies(y, lambda f: np.abs(f) <= 0.02)
|
317
|
+
result = get_frequency_spectrum(y2)
|
318
|
+
assert result.shape == (n, 2)
|
319
|
+
assert np.allclose(result[result[:, 0] > 0.02, 1], 0.0)
|
320
|
+
|
321
|
+
|
291
322
|
class TestHasDtype:
|
292
323
|
@mark.parametrize(("dtype", "expected"), [param(float, True), param(int, False)])
|
293
324
|
@mark.parametrize("is_tuple", [param(True), param(False)])
|
@@ -1,19 +1,22 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
from dataclasses import dataclass
|
4
|
-
from functools import reduce
|
4
|
+
from functools import partial, reduce
|
5
5
|
from itertools import repeat
|
6
6
|
from typing import TYPE_CHECKING, Any, overload, override
|
7
7
|
|
8
8
|
import numpy as np
|
9
9
|
from numpy import (
|
10
|
+
argsort,
|
10
11
|
array,
|
11
12
|
bool_,
|
13
|
+
complex128,
|
12
14
|
digitize,
|
13
15
|
dtype,
|
14
16
|
errstate,
|
15
17
|
flatnonzero,
|
16
18
|
float64,
|
19
|
+
floating,
|
17
20
|
full_like,
|
18
21
|
inf,
|
19
22
|
int64,
|
@@ -30,6 +33,7 @@ from numpy import (
|
|
30
33
|
roll,
|
31
34
|
where,
|
32
35
|
)
|
36
|
+
from numpy.fft import fft, fftfreq, ifft
|
33
37
|
from numpy.linalg import det, eig
|
34
38
|
from numpy.random import default_rng
|
35
39
|
from numpy.typing import NDArray
|
@@ -37,7 +41,7 @@ from numpy.typing import NDArray
|
|
37
41
|
from utilities.iterables import is_iterable_not_str
|
38
42
|
|
39
43
|
if TYPE_CHECKING:
|
40
|
-
from collections.abc import Iterable
|
44
|
+
from collections.abc import Callable, Iterable
|
41
45
|
|
42
46
|
|
43
47
|
##
|
@@ -160,6 +164,33 @@ def fillna(array: NDArrayF, /, *, value: float = 0.0) -> NDArrayF:
|
|
160
164
|
##
|
161
165
|
|
162
166
|
|
167
|
+
def filter_frequencies(
|
168
|
+
array: NDArrayF,
|
169
|
+
/,
|
170
|
+
*filters: Callable[[NDArray[floating[Any]]], NDArrayB],
|
171
|
+
d: int = 1,
|
172
|
+
) -> NDArrayF:
|
173
|
+
"""Filter an array by the frequencies of its FFT."""
|
174
|
+
(n,) = array.shape
|
175
|
+
fft_vals = fft(array)
|
176
|
+
freqs = fftfreq(n, d=d)
|
177
|
+
reduced = reduce(partial(_filter_frequencies_one, freqs=freqs), filters, fft_vals)
|
178
|
+
return ifft(reduced).real
|
179
|
+
|
180
|
+
|
181
|
+
def _filter_frequencies_one(
|
182
|
+
acc: NDArray[complex128],
|
183
|
+
el: Callable[[NDArray[floating[Any]]], NDArrayB],
|
184
|
+
/,
|
185
|
+
*,
|
186
|
+
freqs: NDArray[floating[Any]],
|
187
|
+
) -> NDArray[complex128]:
|
188
|
+
return where(el(freqs), acc, 0.0)
|
189
|
+
|
190
|
+
|
191
|
+
##
|
192
|
+
|
193
|
+
|
163
194
|
def flatn0(array: NDArrayB, /) -> int:
|
164
195
|
"""Return the index of the unique True element."""
|
165
196
|
if not array.any():
|
@@ -193,6 +224,19 @@ class FlatN0MultipleError(FlatN0Error):
|
|
193
224
|
##
|
194
225
|
|
195
226
|
|
227
|
+
def get_frequency_spectrum(array: NDArrayF, /, *, d: int = 1) -> NDArray[floating[Any]]:
|
228
|
+
"""Get the frequency spectrum."""
|
229
|
+
(n,) = array.shape
|
230
|
+
fft_vals = fft(array)
|
231
|
+
freqs = fftfreq(n, d=d)
|
232
|
+
amplitudes = np.abs(fft_vals)
|
233
|
+
data = np.hstack([freqs.reshape(-1, 1), amplitudes.reshape(-1, 1)])
|
234
|
+
return data[argsort(data[:, 0])]
|
235
|
+
|
236
|
+
|
237
|
+
##
|
238
|
+
|
239
|
+
|
196
240
|
def has_dtype(x: Any, dtype: Any, /) -> bool:
|
197
241
|
"""Check if an object has the required dtype."""
|
198
242
|
if is_iterable_not_str(dtype):
|
@@ -851,7 +895,9 @@ __all__ = [
|
|
851
895
|
"datetime64us",
|
852
896
|
"discretize",
|
853
897
|
"fillna",
|
898
|
+
"filter_frequencies",
|
854
899
|
"flatn0",
|
900
|
+
"get_frequency_spectrum",
|
855
901
|
"has_dtype",
|
856
902
|
"is_at_least",
|
857
903
|
"is_at_least_or_nan",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_with/outer_1.py
RENAMED
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_with/outer_2.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/modules/package_without/module_2.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/scripts/test_async_service/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/scripts/test_async_service/__main__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/scripts/test_async_service/run.sh
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/scripts/test_queue_processor/run.sh
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/decorated_sync.py
RENAMED
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/error_bind.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/recursive.py
RENAMED
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/task_group_one.py
RENAMED
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/task_group_two.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_traceback_funcs/untraced.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_typing_funcs/no_future.py
RENAMED
File without changes
|
{dycw_utilities-0.109.15 → dycw_utilities-0.109.16}/src/tests/test_typing_funcs/with_future.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|