semvec/pypi-packages huggingface dataset:
to-naive-utc 0.1.2
Convert any datetime-like object in Python to naive UTC. No timezone - no problems
License: MIT
Requires Python: >=3.8

# to-naive-utc

Timezones are error-prone. The safest approach is to store and process datetimes in **naive UTC** and add timezones only at the presentation layer.

* `to_naive_utc`: converts any datetime-like value to a naive UTC `datetime.datetime`
* `to_timedelta`: converts any timedelta-like value to `datetime.timedelta`

```python
def to_naive_utc(value: Union[
    datetime,
    str,
    int,
    float,
    date,
    "pendulum.DateTime" # if pendulum installed
    "pd.Timestamp",   # if pandas installed
    "np.datetime64",  # if numpy installed
    "arrow.Arrow",    # if arrow installed
]) -> datetime: 
    """
      - Numbers are handled as timestamps (try seconds → milliseconds → microseconds)
      - Strings are converted as follows
        1. "now" → current time
        2. Try fixed patterns
          - %Y-%m-%d
          - %Y-%m-%d %H:%M:%S
          - %Y-%m-%dT%H:%M:%S
          - %Y-%m-%dT%H:%M:%SZ
          - %Y-%m-%d %H:%M:%S.%f
          - %Y-%m-%dT%H:%M:%S.%fZ
          - %Y%m%d
          - %Y%m%d%H%M%S
          - %Y-%m-%d %H:%M:%S%z
          - %Y-%m-%dT%H:%M:%S%z
        3. Fallback to dateutil.parser.parse
      - Common datetime-like objects are converted as expected (datetime, date, pd.Timestamp, ...)
    """
    pass

...

def to_timedelta(value: Union[
    list,
    int,
    float,
    str,
    timedelta,
    "pd.Timedelta",   # if pandas installed
    "np.timedelta64", # if numpy installed
    "pendulum.Duration", # if pendulum installed
]) -> timedelta:
    """
    - Numbers: interpreted as seconds.
    - Strings are converted as follows:
      1. Parse compact combo (\d+d\d+h\d+m\d+s, e.g. "3d5h12m40s")  
      2. Parse single-unit (\d+[dhms], e.g. "45m"),  
      3. Parse word form ("2 hours 5 minutes", e.g. "1 day 3 hours")
    - Common timedelta-like objects converted appropriately (timedelta, pd.Timedelta, ...)
    """
    pass

...

from to_naive_utc import to_naive_utc, to_timedelta

to_naive_utc("2024-01-01T15:00:00+03:00")  # -> datetime(2024, 1, 1, 12, 0, 0)
to_naive_utc(1754942420)  # -> datetime(2025, 08, 11, 20, 0, 20)

to_timedelta(120)    # -> timedelta(minutes=2)
to_timedelta("1h30m15s")    # -> timedelta(hours=1, minutes=30, seconds=15)
```
smartnoise-eval 0.3.1
Evaluation of differentially private tabular data
License: MIT
Requires Python: <3.13,>=3.9

# SmartNoise Evaluator

The SmartNoise Evaluator is designed to help assess the privacy and accuracy of differentially private queries. It includes:

* Analyze: Analyze a dataset and provide information about cardinality, data types, independencies, and other information that is useful for creating a privacy pipeline
* Evaluate: Compares the privatized results to the true results and provides information about the accuracy and bias

These tools currently require PySpark.

## Analyze

Analyze provides metrics about a single dataset.

* Percent of all dimension combinations that are unique, k < 5 and k < 10 (Count up to configurable “reporting length”)
* Report which columns are “most linkable”
* Marginal histograms up to n-way -- choose default with reasonable size (e.g. 10 per marginal, and up to 20 marginals -- allow override).  Trim and encode labels.
* Number of rows
* Number of distinct rows
* Count, Mean, Variance, Min, Max, Median, Percentiles for each marginal
* Classification AUC
* Individual Cardinalities
* Dimensionality, Sparsity
* Independencies


## Evaluate

Evaluate compares an original data file with one or more comparison files.  It can compare any of the single-file metrics computed in `Analyze` as well as a number of metrics that involve two datasets.  When more than one comparison dataset is provided, we can provide all of the two-way comparisons with the original, and allow the consumer to combine these measures (e.g. average over all datasets)

* How many dimension combinations are suppressed 
* How many dimension combinations are fabricated 
* How many redacted rows (fully redacted vs. partly redacted)
* Mean error in the count across categories by 1-way, 2-way, etc.
* Mean absolute error by 1-way, 2-way, etc. up to reporting length
  * Also do for user specified dimension combinations 
  * Report by bin size (e.g., < 1000, >= 1000) 
* Mean proportional error by 1-way, 2-way, etc.
molecule-plugins 25.8.12
Molecule Plugins
License: MIT
Requires Python: >=3.10
Keywords: ansible, testing, molecule, plugin

# molecule-plugins

This repository contains the following molecule plugins:

- azure
- containers
- docker
- ec2
- gce
- openstack
- podman
- vagrant

Installing `molecule-plugins` does not install dependencies specific to each,
plugin. To install these you need to install the extras for each plugin, like
`pip3 install 'molecule-plugins[azure]'`.

Before installing these plugins be sure that you uninstall their old standalone
packages, like `pip3 uninstall molecule-azure`. If you fail to do so, you will
end-up with a broken setup, as multiple plugins will have the same entry points,
registered.

## Creating new releases

The `release.yml` workflow generates the wheel and uploads the release to PyPI.
Here are the steps you need to kick that process off:

1. Use a calver tag in the format vYY.MM.DD.

2. Create a new tag and push it to the repo.

   ```bash
   git tag -s <NEW_VERSION> -m "Tag message"
   git push --tags upstream
   ```

   > It is possible to create lightweight tags using `git tag <NEW_VERSION>` but signed tags are preferred.

3. Publish the release with either the GitHub CLI or in a browser.
   See the [GitHub documentation about managing releases](https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository).
4. Check the [release workflow](https://github.com/ansible-community/molecule-plugins/actions/workflows/release.yml) runs successfully.
5. Verify the new version is available from the [molecule-plugins](https://pypi.org/project/molecule-plugins/) page on PyPI.