Eye prescription validation and conversion tools for eyeglasses and contact lenses.
Project description
👁️ EyeTestUtils — Eye Test & Contact Lens Utilities
EyeTestUtils is a Python library that helps you validate, convert, and format eye test and contact lens data easily.
It’s designed for developers building optical systems, clinics, or vision-related applications.
🚀 Features
- ✅ Validate eye test values (SPH, CYL, AXIS, PD, ADD)
- 🔄 Convert prescription data to contact lens parameters (Spheric / Toric)
- 🧮 Calculate and validate vertex distance
- 🧠 Normalize numeric formats (±00.00)
- ⚙️ Ready to integrate with Django, FastAPI, or desktop apps
📦 Installation
From PyPI:
pip install eyeTestUtils
From source:
pip install -e .
🧰 Basic Usage
1️⃣ Validate eye test values
from eyetools.validators import EyeTestValidator
validator = EyeTestValidator()
print(validator.is_multiple_of_quarter(1.25)) # ✅ True
print(validator.is_multiple_of_quarter(1.33)) # ❌ False
# Axis validation
print(validator.check_axis(180)) # ✅ True
print(validator.check_axis(-1)) # ❌ False
print(validator.check_axis(190)) # ❌ False
# Add validation
print(validator.check_add(2.25)) # ✅ True
print(validator.check_add(-2.25)) # ❌ False
2️⃣ Convert to contact lens values
from eyetools.validators import ContactLensValidator
validator = ContactLensValidator()
data = {
"SPH": "3.00",
"CY": "-1.25",
"AX": "90",
"BV": "12", # optional
"ADD": "0.00" # optional
}
toric_lens = validator.convert_to_toric(data)
print(toric_lens)
# Expected output:
# {
# "Exact SPH": "+03.11",
# "Exact CY": "-1.32",
# "SPH": "+03.00",
# "CY": "-1.25",
# "AX": "090",
# "BV": "12",
# "ADD": "0.00"
# }
spheric_lens = validator.convert_to_spheric(data)
print(spheric_lens)
# Expected output:
# {
# "Exact SPH": "+02.38",
# "SPH": "+02.50",
# "BV": "12",
# "ADD": "0.00"
# }
Format powers
from eyetools.validators import EyeTestValidator
validator = EyeTestValidator()
print(validator.is_valida_eye_test_power(-1.25)) # "-01.25"
print(validator.remove_sign("-2.50")) # "2.50"
Vertex distance check
from eyetools.validators import EyeTestValidator
validator = EyeTestValidator()
print(validator.Check_vertex_distance(12)) # ✅ True
print(validator.Check_vertex_distance(20)) # ❌ False
🧪 Testing
Run all tests using pytest:
pytest -v
eyetools/
├── eyetools/
│ ├── init.py
│ └── validators.py
├── tests/
│ ├── test_eye_validator.py
│ └── test_contact_validator.py
├── LICENSE
├── pyproject.toml
└── README.md
💡 Contributing
We welcome contributions! If you have suggestions for improving validation rules, finding bugs, or adding new features, please open an issue or submit a Pull Request.
GitHub Repository: https://github.com/Elhussin/eye-test-utils-python.git
👨💻 Author
Elhussini Taha Optical systems & Web developer 💡
💬 Support & Contact
If you have any questions, need technical support, or want to discuss features, feel free to reach out:
- Email: hasin3112@gmail.com
- GitHub Issues: Open an Issue here (The preferred way to report bugs)
📜 License
This project is licensed under the MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file eyetestutils-0.1.0.tar.gz.
File metadata
- Download URL: eyetestutils-0.1.0.tar.gz
- Upload date:
- Size: 7.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3f6bfac1b37a2e5b61023c363cd21b629c11623b8a56b428acf28c589d70777e
|
|
| MD5 |
9224bfd50d573fbe31ef4ba721103ffe
|
|
| BLAKE2b-256 |
5f04aa5e6454a53673ccb705eef7d8659833541569cd51e670c6499cc02c6c2b
|
File details
Details for the file eyetestutils-0.1.0-py3-none-any.whl.
File metadata
- Download URL: eyetestutils-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d83c860b155715a4f8f8429fd434862837c841da369c8bd09b3f4da002173b64
|
|
| MD5 |
789ac5abb210598f65d18cfd09044ead
|
|
| BLAKE2b-256 |
e6400304b2e06bb231edfd1652e45785284c0e9064d905eaf5753803eac867f2
|