dycw-utilities 0.151.11__tar.gz → 0.152.0__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.151.11 → dycw_utilities-0.152.0}/PKG-INFO +2 -2
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/pyproject.toml +5 -8
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_iterables.py +0 -22
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_polars.py +35 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_postgres.py +2 -4
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/iterables.py +1 -12
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/polars.py +34 -1
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/redis.py +2 -2
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/types.py +6 -22
- dycw_utilities-0.151.11/src/tests/test_dnspython.py +0 -14
- dycw_utilities-0.151.11/src/utilities/dnspython.py +0 -17
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/.gitignore +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/LICENSE +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/README.md +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_yield_access/__init__.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_yield_access/script.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_yield_access/script.sh +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/click.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/http.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/json.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/math.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/os.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/period.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/random.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/re.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/string.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/text.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/version.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: dycw-utilities
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.152.0
|
4
4
|
Author-email: Derek Wan <d.wan@icloud.com>
|
5
5
|
License-File: LICENSE
|
6
6
|
Requires-Python: >=3.12
|
@@ -12,7 +12,7 @@ Provides-Extra: logging
|
|
12
12
|
Requires-Dist: coloredlogs<15.1,>=15.0.1; extra == 'logging'
|
13
13
|
Provides-Extra: test
|
14
14
|
Requires-Dist: dycw-pytest-only<2.2,>=2.1.1; extra == 'test'
|
15
|
-
Requires-Dist: hypothesis<6.137,>=6.136.
|
15
|
+
Requires-Dist: hypothesis<6.137,>=6.136.6; extra == 'test'
|
16
16
|
Requires-Dist: pudb<2025.2,>=2025.1; extra == 'test'
|
17
17
|
Requires-Dist: pytest-asyncio<1.2,>=1.1.0; extra == 'test'
|
18
18
|
Requires-Dist: pytest-cov<6.3,>=6.2.1; extra == 'test'
|
@@ -49,9 +49,6 @@ dev = [
|
|
49
49
|
"pytest-cov >=6.2.1, <6.3",
|
50
50
|
"pytest-timeout >=2.4.0, <2.5",
|
51
51
|
]
|
52
|
-
dnspython = [
|
53
|
-
"dnspython >=2.7.0, <2.8",
|
54
|
-
]
|
55
52
|
eventkit = [
|
56
53
|
"eventkit >=1.0.3, <1.1",
|
57
54
|
]
|
@@ -72,7 +69,7 @@ http-test = [
|
|
72
69
|
"orjson",
|
73
70
|
]
|
74
71
|
hypothesis = [
|
75
|
-
"hypothesis >=6.136.
|
72
|
+
"hypothesis >=6.136.6, <6.137",
|
76
73
|
]
|
77
74
|
hypothesis-test = [
|
78
75
|
"libcst",
|
@@ -214,7 +211,7 @@ statsmodels = [
|
|
214
211
|
"statsmodels >=0.14.4, <0.15",
|
215
212
|
]
|
216
213
|
typed-settings = [
|
217
|
-
"typed-settings >=
|
214
|
+
"typed-settings >=25.0.0, <25.1",
|
218
215
|
]
|
219
216
|
tzdata = [
|
220
217
|
"tzdata >=2025.2, <2025.3",
|
@@ -232,7 +229,7 @@ dependencies = [
|
|
232
229
|
name = "dycw-utilities"
|
233
230
|
readme = "README.md"
|
234
231
|
requires-python = ">= 3.12"
|
235
|
-
version = "0.
|
232
|
+
version = "0.152.0"
|
236
233
|
|
237
234
|
[project.entry-points.pytest11]
|
238
235
|
pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
|
@@ -244,7 +241,7 @@ logging = [
|
|
244
241
|
]
|
245
242
|
test = [
|
246
243
|
"dycw-pytest-only >=2.1.1, <2.2",
|
247
|
-
"hypothesis >=6.136.
|
244
|
+
"hypothesis >=6.136.6, <6.137",
|
248
245
|
"pudb >=2025.1, <2025.2",
|
249
246
|
"pytest >=8.4.1, <8.5",
|
250
247
|
"pytest-asyncio >=1.1.0, <1.2",
|
@@ -265,7 +262,7 @@ test = [
|
|
265
262
|
# bump-my-version
|
266
263
|
[tool.bumpversion]
|
267
264
|
allow_dirty = true
|
268
|
-
current_version = "0.
|
265
|
+
current_version = "0.152.0"
|
269
266
|
|
270
267
|
[[tool.bumpversion.files]]
|
271
268
|
filename = "src/utilities/__init__.py"
|
@@ -68,7 +68,6 @@ from utilities.iterables import (
|
|
68
68
|
_RangePartitionsTotalError,
|
69
69
|
_sort_iterable_cmp_floats,
|
70
70
|
always_iterable,
|
71
|
-
always_iterable_hashable,
|
72
71
|
apply_bijection,
|
73
72
|
apply_to_tuple,
|
74
73
|
apply_to_varargs,
|
@@ -166,27 +165,6 @@ class TestAlwaysIterable:
|
|
166
165
|
assert list(always_iterable(yield_ints())) == [0, 1]
|
167
166
|
|
168
167
|
|
169
|
-
class TestAlwaysIterableHashable:
|
170
|
-
def test_none(self) -> None:
|
171
|
-
assert always_iterable_hashable(None) is None
|
172
|
-
|
173
|
-
@given(x=integers())
|
174
|
-
def test_integer(self, *, x: int) -> None:
|
175
|
-
assert always_iterable_hashable(x) == (x,)
|
176
|
-
|
177
|
-
@given(x=text())
|
178
|
-
def test_string(self, *, x: str) -> None:
|
179
|
-
assert always_iterable_hashable(x) == (x,)
|
180
|
-
|
181
|
-
@given(x=lists(integers()))
|
182
|
-
def test_list_of_integers(self, *, x: list[int]) -> None:
|
183
|
-
assert always_iterable_hashable(x) == tuple(x)
|
184
|
-
|
185
|
-
@given(x=lists(text()))
|
186
|
-
def test_list_of_strings(self, *, x: list[str]) -> None:
|
187
|
-
assert always_iterable_hashable(x) == tuple(x)
|
188
|
-
|
189
|
-
|
190
168
|
class TestApplyBijection:
|
191
169
|
@given(text=text_ascii())
|
192
170
|
def test_main(self, *, text: str) -> None:
|
@@ -147,6 +147,7 @@ from utilities.polars import (
|
|
147
147
|
cross_rolling_quantile,
|
148
148
|
dataclass_to_dataframe,
|
149
149
|
dataclass_to_schema,
|
150
|
+
decreasing_horizontal,
|
150
151
|
deserialize_dataframe,
|
151
152
|
deserialize_series,
|
152
153
|
drop_null_struct_series,
|
@@ -159,6 +160,7 @@ from utilities.polars import (
|
|
159
160
|
get_expr_name,
|
160
161
|
get_frequency_spectrum,
|
161
162
|
get_series_number_of_decimals,
|
163
|
+
increasing_horizontal,
|
162
164
|
insert_after,
|
163
165
|
insert_before,
|
164
166
|
insert_between,
|
@@ -1594,6 +1596,39 @@ class TestGetSeriesNumberOfDecimals:
|
|
1594
1596
|
_ = get_series_number_of_decimals(Series(dtype=Float64))
|
1595
1597
|
|
1596
1598
|
|
1599
|
+
class TestIncreasingAndDecreasingHorizontal:
|
1600
|
+
def test_main(self) -> None:
|
1601
|
+
df = DataFrame(
|
1602
|
+
data=[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)],
|
1603
|
+
schema={"x": Int64, "y": Int64, "z": Int64},
|
1604
|
+
orient="row",
|
1605
|
+
).with_columns(
|
1606
|
+
increasing_horizontal("x", "y", "z").alias("inc"),
|
1607
|
+
decreasing_horizontal("x", "y", "z").alias("dec"),
|
1608
|
+
)
|
1609
|
+
inc = Series(
|
1610
|
+
name="inc", values=[True, False, False, False, False, False], dtype=Boolean
|
1611
|
+
)
|
1612
|
+
assert_series_equal(df["inc"], inc)
|
1613
|
+
dec = Series(
|
1614
|
+
name="dec", values=[False, False, False, False, False, True], dtype=Boolean
|
1615
|
+
)
|
1616
|
+
assert_series_equal(df["dec"], dec)
|
1617
|
+
|
1618
|
+
def test_empty(self) -> None:
|
1619
|
+
df = (
|
1620
|
+
Series(name="x", values=[1, 2, 3], dtype=Int64)
|
1621
|
+
.to_frame()
|
1622
|
+
.with_columns(
|
1623
|
+
increasing_horizontal().alias("inc"),
|
1624
|
+
decreasing_horizontal().alias("dec"),
|
1625
|
+
)
|
1626
|
+
)
|
1627
|
+
expected = Series(values=[True, True, True], dtype=Boolean)
|
1628
|
+
assert_series_equal(df["inc"], expected, check_names=False)
|
1629
|
+
assert_series_equal(df["dec"], expected, check_names=False)
|
1630
|
+
|
1631
|
+
|
1597
1632
|
class TestInsertBeforeOrAfter:
|
1598
1633
|
df: ClassVar[DataFrame] = DataFrame(schema={"a": Int64, "b": Int64, "c": Int64})
|
1599
1634
|
|
@@ -23,8 +23,6 @@ from utilities.typing import get_literal_elements
|
|
23
23
|
if TYPE_CHECKING:
|
24
24
|
from pathlib import Path
|
25
25
|
|
26
|
-
from utilities.types import MaybeListStr
|
27
|
-
|
28
26
|
|
29
27
|
@composite
|
30
28
|
def tables(draw: DrawFn, /) -> list[Table | str]:
|
@@ -68,8 +66,8 @@ class TestPGDump:
|
|
68
66
|
format_: _PGDumpFormat,
|
69
67
|
jobs: int | None,
|
70
68
|
create: bool,
|
71
|
-
extension:
|
72
|
-
extension_exc:
|
69
|
+
extension: list[str] | None,
|
70
|
+
extension_exc: list[str] | None,
|
73
71
|
schema: list[str] | None,
|
74
72
|
schema_exc: list[str] | None,
|
75
73
|
table: list[Table | str] | None,
|
@@ -46,7 +46,7 @@ from utilities.types import SupportsAdd, SupportsLT
|
|
46
46
|
if TYPE_CHECKING:
|
47
47
|
from types import NoneType
|
48
48
|
|
49
|
-
from utilities.types import MaybeIterable,
|
49
|
+
from utilities.types import MaybeIterable, Sign, StrMapping
|
50
50
|
|
51
51
|
|
52
52
|
##
|
@@ -66,16 +66,6 @@ def always_iterable[T](obj: MaybeIterable[T], /) -> Iterable[T]:
|
|
66
66
|
##
|
67
67
|
|
68
68
|
|
69
|
-
def always_iterable_hashable[T](
|
70
|
-
obj: MaybeIterable[T] | None, /
|
71
|
-
) -> MaybeIterableHashable[T] | None:
|
72
|
-
"""Ensure an object is always hashable."""
|
73
|
-
return None if obj is None else tuple(always_iterable(obj))
|
74
|
-
|
75
|
-
|
76
|
-
##
|
77
|
-
|
78
|
-
|
79
69
|
def apply_bijection[T, U](
|
80
70
|
func: Callable[[T], U], iterable: Iterable[T], /
|
81
71
|
) -> Mapping[T, U]:
|
@@ -1489,7 +1479,6 @@ __all__ = [
|
|
1489
1479
|
"ResolveIncludeAndExcludeError",
|
1490
1480
|
"SortIterableError",
|
1491
1481
|
"always_iterable",
|
1492
|
-
"always_iterable_hashable",
|
1493
1482
|
"apply_bijection",
|
1494
1483
|
"apply_to_tuple",
|
1495
1484
|
"apply_to_varargs",
|
@@ -7,7 +7,7 @@ from collections.abc import Set as AbstractSet
|
|
7
7
|
from contextlib import suppress
|
8
8
|
from dataclasses import asdict, dataclass
|
9
9
|
from functools import partial, reduce
|
10
|
-
from itertools import chain, product
|
10
|
+
from itertools import chain, pairwise, product
|
11
11
|
from math import ceil, log
|
12
12
|
from pathlib import Path
|
13
13
|
from typing import TYPE_CHECKING, Any, Literal, assert_never, cast, overload, override
|
@@ -1471,6 +1471,37 @@ class _GetSeriesNumberOfDecimalsAllNullError(GetSeriesNumberOfDecimalsError):
|
|
1471
1471
|
##
|
1472
1472
|
|
1473
1473
|
|
1474
|
+
@overload
|
1475
|
+
def increasing_horizontal(*columns: ExprLike) -> Expr: ...
|
1476
|
+
@overload
|
1477
|
+
def increasing_horizontal(*columns: Series) -> Series: ...
|
1478
|
+
@overload
|
1479
|
+
def increasing_horizontal(*columns: IntoExprColumn) -> Expr | Series: ...
|
1480
|
+
def increasing_horizontal(*columns: IntoExprColumn) -> Expr | Series:
|
1481
|
+
"""Check if a set of columns are increasing."""
|
1482
|
+
columns2 = ensure_expr_or_series_many(*columns)
|
1483
|
+
if len(columns2) == 0:
|
1484
|
+
return lit(value=True, dtype=Boolean)
|
1485
|
+
return all_horizontal(prev < curr for prev, curr in pairwise(columns2))
|
1486
|
+
|
1487
|
+
|
1488
|
+
@overload
|
1489
|
+
def decreasing_horizontal(*columns: ExprLike) -> Expr: ...
|
1490
|
+
@overload
|
1491
|
+
def decreasing_horizontal(*columns: Series) -> Series: ...
|
1492
|
+
@overload
|
1493
|
+
def decreasing_horizontal(*columns: IntoExprColumn) -> Expr | Series: ...
|
1494
|
+
def decreasing_horizontal(*columns: IntoExprColumn) -> Expr | Series:
|
1495
|
+
"""Check if a set of columns are decreasing."""
|
1496
|
+
columns2 = ensure_expr_or_series_many(*columns)
|
1497
|
+
if len(columns2) == 0:
|
1498
|
+
return lit(value=True, dtype=Boolean)
|
1499
|
+
return all_horizontal(prev > curr for prev, curr in pairwise(columns2))
|
1500
|
+
|
1501
|
+
|
1502
|
+
##
|
1503
|
+
|
1504
|
+
|
1474
1505
|
def insert_after(df: DataFrame, column: str, value: IntoExprColumn, /) -> DataFrame:
|
1475
1506
|
"""Insert a series after an existing column; not in-place."""
|
1476
1507
|
columns = df.columns
|
@@ -2472,6 +2503,7 @@ __all__ = [
|
|
2472
2503
|
"cross",
|
2473
2504
|
"dataclass_to_dataframe",
|
2474
2505
|
"dataclass_to_schema",
|
2506
|
+
"decreasing_horizontal",
|
2475
2507
|
"deserialize_dataframe",
|
2476
2508
|
"drop_null_struct_series",
|
2477
2509
|
"ensure_data_type",
|
@@ -2483,6 +2515,7 @@ __all__ = [
|
|
2483
2515
|
"get_expr_name",
|
2484
2516
|
"get_frequency_spectrum",
|
2485
2517
|
"get_series_number_of_decimals",
|
2518
|
+
"increasing_horizontal",
|
2486
2519
|
"insert_after",
|
2487
2520
|
"insert_before",
|
2488
2521
|
"insert_between",
|
@@ -35,7 +35,7 @@ if TYPE_CHECKING:
|
|
35
35
|
from redis.typing import EncodableT
|
36
36
|
|
37
37
|
from utilities.iterables import MaybeIterable
|
38
|
-
from utilities.types import Delta,
|
38
|
+
from utilities.types import Delta, MaybeSequence, MaybeType, TypeLike
|
39
39
|
|
40
40
|
|
41
41
|
_PUBLISH_TIMEOUT: Delta = SECOND
|
@@ -583,7 +583,7 @@ class PublishError(Exception):
|
|
583
583
|
async def publish_many[T](
|
584
584
|
redis: Redis,
|
585
585
|
channel: str,
|
586
|
-
data: MaybeSequence[bytes |
|
586
|
+
data: MaybeSequence[bytes | str | T],
|
587
587
|
/,
|
588
588
|
*,
|
589
589
|
serializer: Callable[[T], EncodableT] | None = None,
|
@@ -2,15 +2,7 @@ from __future__ import annotations
|
|
2
2
|
|
3
3
|
import datetime as dt
|
4
4
|
from asyncio import Event
|
5
|
-
from collections.abc import
|
6
|
-
Callable,
|
7
|
-
Collection,
|
8
|
-
Coroutine,
|
9
|
-
Hashable,
|
10
|
-
Iterable,
|
11
|
-
Mapping,
|
12
|
-
Sequence,
|
13
|
-
)
|
5
|
+
from collections.abc import Callable, Collection, Coroutine, Iterable, Mapping
|
14
6
|
from enum import Enum
|
15
7
|
from ipaddress import IPv4Address, IPv6Address
|
16
8
|
from logging import Logger
|
@@ -123,20 +115,16 @@ IPv6AddressLike = MaybeStr[IPv6Address]
|
|
123
115
|
|
124
116
|
|
125
117
|
# iterables
|
126
|
-
type IterableHashable[T: Hashable] = tuple[T, ...] | frozenset[T]
|
127
118
|
type MaybeCollection[T] = T | Collection[T]
|
128
|
-
type MaybeIterableHashable[T: Hashable] = T | IterableHashable[T]
|
129
119
|
type MaybeIterable[T] = T | Iterable[T]
|
130
|
-
type
|
131
|
-
type
|
120
|
+
type MaybeSequence[T] = T | SequenceLT[T]
|
121
|
+
type SequenceLT[T] = list[T] | tuple[T, ...]
|
132
122
|
# iterables - str
|
133
|
-
type
|
134
|
-
|
135
|
-
|
123
|
+
type SequenceStr = SequenceLT[str]
|
124
|
+
type CollectionStr = dict[str, Any] | frozenset[str] | set[str] | SequenceStr
|
125
|
+
# iterables - maybe str
|
136
126
|
type MaybeCollectionStr = str | CollectionStr
|
137
|
-
type MaybeListStr = MaybeList[str]
|
138
127
|
type MaybeSequenceStr = str | SequenceStr
|
139
|
-
type SequenceStr = list[str] | tuple[str, ...]
|
140
128
|
|
141
129
|
|
142
130
|
# logging
|
@@ -288,7 +276,6 @@ __all__ = [
|
|
288
276
|
"ExceptionTypeLike",
|
289
277
|
"IPv4AddressLike",
|
290
278
|
"IPv6AddressLike",
|
291
|
-
"IterableHashable",
|
292
279
|
"LogLevel",
|
293
280
|
"LoggerOrName",
|
294
281
|
"MathRoundMode",
|
@@ -303,9 +290,6 @@ __all__ = [
|
|
303
290
|
"MaybeCollectionStr",
|
304
291
|
"MaybeCoro",
|
305
292
|
"MaybeIterable",
|
306
|
-
"MaybeIterableHashable",
|
307
|
-
"MaybeList",
|
308
|
-
"MaybeListStr",
|
309
293
|
"MaybeSequence",
|
310
294
|
"MaybeSequenceStr",
|
311
295
|
"MaybeStr",
|
@@ -1,14 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
from ipaddress import IPv4Address
|
4
|
-
|
5
|
-
from tests.conftest import SKIPIF_CI_AND_MAC
|
6
|
-
from utilities.dnspython import nslookup
|
7
|
-
|
8
|
-
|
9
|
-
class TestNSLookup:
|
10
|
-
@SKIPIF_CI_AND_MAC
|
11
|
-
def test_main(self) -> None:
|
12
|
-
result = nslookup("localhost")
|
13
|
-
expected = [IPv4Address("127.0.0.1")]
|
14
|
-
assert result == expected
|
@@ -1,17 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
from ipaddress import IPv4Address
|
4
|
-
|
5
|
-
from dns.resolver import resolve
|
6
|
-
|
7
|
-
from utilities.functools import cache
|
8
|
-
|
9
|
-
|
10
|
-
@cache
|
11
|
-
def nslookup(address: str, /) -> list[IPv4Address]:
|
12
|
-
"""Look up a set of addresses."""
|
13
|
-
ans = resolve(address) # skipif-ci-and-mac
|
14
|
-
return [IPv4Address(str(rd)) for rd in ans] # skipif-ci-and-mac
|
15
|
-
|
16
|
-
|
17
|
-
__all__ = ["nslookup"]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_with/outer_1.py
RENAMED
File without changes
|
{dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/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.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.151.11 → dycw_utilities-0.152.0}/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
|
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
|