semvec/pypi-packages huggingface dataset:
py-dual-sorter 0.2.0
Sort content by two keys
Requires Python: >=3.9
Keywords: iteration, utilities

* website: <https://arrizza.com/py-dual-sorter.html>
* installation: see <https://arrizza.com/setup-common.html>

## Summary

This project is for content that needs to be iterated in two different ways.
It allows two keys ("left" and "right") to be defined at the same time.

## How to use

#### load()

Use ```load(path)``` to load a json file.
Use ```load(path, validate=True)``` to check for duplicate keys.

Sample json content is:

```text
[
    [
        "left3",    # <== the "left" key
        "right2",   # <== the "right" key
        "infoA"     # <== info for this entry & keys; Can be "null" if there is no info
    ],
    [
        "left2",
        "right3",
        null
    ],
]
```

#### save()

Use ```save(path)``` to save the current content to a json file.

#### add()

Use ```add(left, right, info)``` to add a new entry.
The left and right keys have to be unique, otherwise an exception is thrown.

Note that info is optional ```add(left, right)``` or explicitly set to None.

#### all_by_left() and all_by_right()

To iterate in sorted order by the left key, use:

```python
pds = PyDualSorter()
pds.load('path/to/file')
for left, right, info in pds.all_by_left():
    print(f'left key is  {left}')
    print(f'right key is {left}')
    print(f'info is      {info}')
```

To iterate in sorted order by the right key, use:

```python
pds = PyDualSorter()
pds.load('path/to/file')
for left, right, info in pds.all_by_left():   # <== note that left key is still present
    print(f'left key is  {left}')
    print(f'right key is {left}')
    print(f'info is      {info}')
```

#### is_left() and is_right()

Use ```is_left(val)``` to check if a value is a left key.
Use ```is_right(val)``` to check if a value is a right key.

#### get_left_info() and get_right_info()

Use ```info = pds.get_left_info(left)``` to get the info associated with the given left key.
Use ```info = pds.get_right_info(right)``` to get the info associated with the given right key.

#### get_left() and get_right()

Use ```right = pds.get_right(left)``` to get the matching right key for the given left key.
Use ```left = pds.get_left(right)``` to get the matching left key for the given right key.
agentiq-zep-cloud 1.2.0rc4
Transitional package for aiqtoolkit-zep-cloud, this package is deprecated and will be removed in the future.

<!--
SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: Apache-2.0

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

# Transitional Package for `aiqtoolkit-zep-cloud`
This is a transitional package for `aiqtoolkit-zep-cloud` to help ease the migration to `aiqtoolkit-zep-cloud`, and will be removed in a future release. It is recommended to use `aiqtoolkit-zep-cloud` directly for new projects.

For more information about AIQ toolkit, please visit the [AIQ toolkit package](https://pypi.org/project/aiqtoolkit-zep-cloud/).
aiqtoolkit-opentelemetry 1.2.0rc4
Subpackage for OpenTelemetry integration in AIQtoolkit
Requires Python: <3.13,>=3.11
Keywords: ai, observability, opentelemetry

<!--
SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
SPDX-License-Identifier: Apache-2.0

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

![NVIDIA Agent Intelligence Toolkit](https://media.githubusercontent.com/media/NVIDIA/NeMo-Agent-Toolkit/refs/heads/main/docs/source/_static/aiqtoolkit_banner.png "AIQ toolkit banner image"

# NVIDIA Agent Intelligence Toolkit Subpackage
This is a subpackage for OpenTelemetry integration for observability.

For more information about AIQ toolkit, please visit the [AIQ toolkit package](https://pypi.org/project/aiqtoolkit/).
gui-api-tkinter 1.2.1
GUI API for interfacing and testing with tkinter
Requires Python: >=3.9
Keywords: gui, tkinter, test, verification

* website: <https://arrizza.com/python-gui-api-tkinter.html>
* installation: see <https://arrizza.com/setup-common.html>

## Summary

This module contains a set of simple base classes that can be
used for test or verification purposes on GUIs based on Tkinter.

A test harness can connect to this class using a TCPIP socket and
get the current screen content, press an x,y coordinate, and
invoke a menu item.

The typical scenario is to create a Tkinter GUI app and add the
gui-api-tkinter server into it. Then a test harness is built
using gui_api_harness and that is used by pytest (or whatever
other test driver you wish) to run tests against the GUI.

For a more detailed description of the available commands and
responses see gui_api.md

## Scripts

* See [Quick Start](https://arrizza.com/user-guide-quick-start) for information on using scripts.
* See [xplat-utils submodule](https://arrizza.com/xplat-utils) for information on the submodule.

## Sample code

See the sample directory for a sample client and server. Use
doit script to run the sample server.

```bash
./doit
```

This runs the code in the sample directory. The gui
subdirectory contains a sample Tkinter GUI app which has some
buttons and labels on it. The test harness is then used to
press buttons on the GUI and check that the GUI perform
s the expected behavior. The file sample/test_gui.py runs
those tests.

The pom/ subdirectory holds Page Object Model classes to
simplify the interactions between the test_gui code and the
GUI app.

For a more complex example, see ./ver directory. Invoke those tests using:

```bash
./do_ver
./do_ver -k tp001   # for the first test protocol
# etc.
```

## Other scripts and files

- do_doc: generates doxygen
- do_install: installs python environment
- do_lint: runs static analysis tools
- do_publish: publish the python module
- do_ver: runs verification scripts
- doit: runs a sample GUI client and a sample test harness
- srs.json: holds a list of requirements for the gui api and
  the test harness must adhere to
- todo.md known issues to fix/address
socket-oneline 1.1.1
server and client for simple, one line communication protocol
Requires Python: >=3.9
Keywords: socket, client server, simple

* website: <https://arrizza.com/python-socket-oneline.html>
* installation: see <https://arrizza.com/setup-common.html>

## Summary

This module contains a simple base class for handling sockets

The communication protocol has these basic rules:

- socket based using TCPIP; only one server per port
- only one client connected at any time. When that client
  disconnects, another client is allowed to connect.
- a "packet" is terminated by a line feed (0x0A).
- a client sends a packet (aka "command") to the server.
- Alternatively the server may respond with zero, one or more
  packets (aka "responses")
- The server cannot initiate a response asynchronously by
  itself i.e. it must wait for an incoming command to send
  any packets to the client.
- the following commands are predefined:
    - "ping" : the server will respond with "pong". The client
      can use this to confirm that the socket and communication
      channel are alive and responsive
    - "disconnect" : the server will initiate a disconnect
      from the current client
    - "shutdown" : the server will disconnect and then
      shutdown
    - "invalid" - the server has caught an exception when
      converting the incoming packet to ASCII (e.g. decode
      ('utf-8'))

## More details

- The server reads the incoming characters from the client one
  character at a time.
- Once it sees the 0x0A character, it sets up a string
  buffer of all ASCII characters seen so far (less the 0x0A) and
  calls a callback function with that string.
- The user must define that callback function.
- The following is up to the user to define:
    - Which incoming commands are legal
    - What response to send if an illegal command is received
    - What response or responses should be sent for all legal
      commands
    - Determine whether an empty string is a legal command
    - How to handle the scenario when a linefeed needs to be
      part of a command
    - How to handle non-ASCII scenarios e.g. Unicode or byte
      strings.

## Scripts

* See [Quick Start](https://arrizza.com/user-guide-quick-start) for information on using scripts.
* See [xplat-utils submodule](https://arrizza.com/xplat-utils) for information on the submodule.

## Sample code

see the sample directory for a sample client and server. Use
doit script to run the sample server.

```bash
./doit
```

- starts a server as a background process
- starts a client and sends various commands to the server
- stops that client
- starts another client
- sends some additional commands to the server
- asks the server to shutdown

## Other scripts and files

- do_doc: generates doxygen
- do_install: installs python environment
- do_lint: runs static analysis tools
- do_publish: publish the python module
- do_ver: runs verification scripts
- doit: runs a sample client & server
- srs.json: holds a list of requirements the client/server
  must adhere to
- test_ver.py: run by do_ver to perform verification
- todo.md known issues to fix/address
t-fujita 2.0.1
pipx run t-fujita
Requires Python: <4.0,>=3.8

# t-fujita-card

Generate profile cards with random effects!

![card](./t-fujita-cards.gif)

```
pipx run t-fujita
```

or

```
uvx t-fujita
```

[PYPI](https://pypi.org/project/t-fujita/)
net-kusto-client 0.1.2
A Kusto client package
Requires Python: >=3.9
Keywords: network, kusto, client

# net-kusto-client

This package is used to query and ingest data into kusto

## To Install

Create a free kusto cluster following these instructions, https://learn.microsoft.com/en-us/azure/data-explorer/start-for-free-web-ui
```
py -m pip install net-kusto-client
```

Please create local.settings.json file in your home folder, you can also copy example.csv to home folder for testing.

```
~/
├── local.settings.json
├── example.csv
```

The client_id in local.settings.json can be either the aad application id or the user-assigned managed identity. The client_secret is used as the application key.

## Usage
```
import net_kusto_client
k_client = net_kusto_client.NetKustoClient()
k_client.create_sample_table()
k_client.ingest_sample_data()
k_client.execute_sample_query()
k_client.execute_stormevents_sample_query()
```

On the kusto database you can delete the table using 
.drop table DeviceInfo
limipy 1.0.1
The LimiPlake Python Package- for students AND teachers.
Requires Python: >=3.9

# `limipy` – The LimiPlake Python Package

Welcome to **limipy**, the official Python package from **LimiPlake**!  
This package is made for **students** and **teachers** learning computer science and programming in fun and easy levels.

🌐 Visit [limiplake.com](https://limiplake.com) to learn more.

---

## 🚀 Features

- 🔐 Ask for PIN codes (student or teacher)
- 📚 Show descriptions of LimiPlake levels (ScratchJr to Web Dev!)
- 🧠 Fun mini-quizzes for each level
- 🎓 Create PINs for students
- 🏫 Make class lists with student names and their PINs

---

## 🧪 Levels Available

```
1. ScratchJr
2. Scratch
3. Logo
4. Python
5. Grodemate
6. AppLab (Code.org)
7. HTML, CSS, JS (Web Dev)
```

## 📦 How to Install

```
pip install limipy
```

## ✨ Example Usage

```
import limipy

limipy.ask_PIN()
print(limipy.get_README_level_description(3))
limipy.level_quiz(4)

students = ["Avi", "Vihaan", "Arrya"]
print(limipy.create_class_list(students))
```