diff --git a/.github/scripts/README.md b/.github/scripts/README.md new file mode 100644 index 00000000..2779a2af --- /dev/null +++ b/.github/scripts/README.md @@ -0,0 +1,137 @@ +# Development Scripts + +Helper scripts for development, testing, and code quality checks. + +## Available Scripts + +### Setup Scripts + +#### `setup-dev.sh` / `setup-dev.ps1` +Sets up the development environment. + +**Bash (Linux/macOS):** +```bash +bash .github/scripts/setup-dev.sh +``` + +**PowerShell (Windows):** +```powershell +.github\scripts\setup-dev.ps1 +``` + +**What it does:** +- Checks Python version +- Creates virtual environment if needed +- Installs package with dev dependencies +- Sets up pre-commit hooks +- Verifies installation + +### Code Quality Scripts + +#### `check-code.sh` / `check-code.ps1` +Runs all code quality checks (formatting, linting, type checking). + +**Bash:** +```bash +bash .github/scripts/check-code.sh +``` + +**PowerShell:** +```powershell +.github\scripts\check-code.ps1 +``` + +**What it checks:** +- Code formatting (black) +- Import sorting (isort) +- Linting (flake8) +- Type checking (mypy - non-blocking) + +#### `format-code.sh` / `format-code.ps1` +Automatically formats code and sorts imports. + +**Bash:** +```bash +bash .github/scripts/format-code.sh +``` + +**PowerShell:** +```powershell +.github\scripts\format-code.ps1 +``` + +**What it does:** +- Formats code with black +- Sorts imports with isort + +### Testing Scripts + +#### `run-tests.sh` / `run-tests.ps1` +Runs tests with coverage reporting. + +**Bash:** +```bash +bash .github/scripts/run-tests.sh +``` + +**PowerShell:** +```powershell +.github\scripts\run-tests.ps1 +``` + +**What it does:** +- Runs pytest with coverage +- Generates HTML and terminal coverage reports +- Coverage report: `htmlcov/index.html` + +## Quick Start + +1. **Setup development environment:** + ```bash + # Linux/macOS + bash .github/scripts/setup-dev.sh + + # Windows + .github\scripts\setup-dev.ps1 + ``` + +2. **Before committing, run checks:** + ```bash + # Linux/macOS + bash .github/scripts/check-code.sh + + # Windows + .github\scripts\check-code.ps1 + ``` + +3. **If checks fail, format code:** + ```bash + # Linux/macOS + bash .github/scripts/format-code.sh + + # Windows + .github\scripts\format-code.ps1 + ``` + +4. **Run tests:** + ```bash + # Linux/macOS + bash .github/scripts/run-tests.sh + + # Windows + .github\scripts\run-tests.ps1 + ``` + +## Requirements + +- Python 3.10+ +- Virtual environment (created by setup script) +- Dev dependencies installed (`pip install -e ".[dev]"`) + +## Notes + +- All scripts automatically activate the virtual environment if it exists +- Scripts check for required directories before running +- Error messages provide helpful guidance +- Type checking (mypy) is non-blocking and won't fail the check + diff --git a/.github/scripts/check-code.ps1 b/.github/scripts/check-code.ps1 new file mode 100644 index 00000000..ae6a2bb1 --- /dev/null +++ b/.github/scripts/check-code.ps1 @@ -0,0 +1,62 @@ +# Code quality check script (PowerShell) +# Runs formatting, import sorting, linting, and type checking + +$ErrorActionPreference = "Stop" + +Write-Host "๐Ÿ” Running code quality checks..." -ForegroundColor Cyan + +# Activate virtual environment if it exists +if (Test-Path "venv") { + & .\venv\Scripts\Activate.ps1 +} + +# Check if directories exist +if (-not (Test-Path "semantica")) { + Write-Host "โŒ semantica/ directory not found" -ForegroundColor Red + exit 1 +} + +# Check formatting +Write-Host "๐Ÿ“ Checking code formatting (black)..." -ForegroundColor Yellow +try { + black --check semantica/ 2>&1 | Out-Null + Write-Host "โœ… Black check passed" -ForegroundColor Green +} catch { + Write-Host "โŒ Code formatting issues found" -ForegroundColor Red + Write-Host " Run: black semantica/" -ForegroundColor Yellow + exit 1 +} + +# Check import sorting +Write-Host "๐Ÿ“ฆ Checking import sorting (isort)..." -ForegroundColor Yellow +try { + isort --check-only semantica/ 2>&1 | Out-Null + Write-Host "โœ… isort check passed" -ForegroundColor Green +} catch { + Write-Host "โŒ Import sorting issues found" -ForegroundColor Red + Write-Host " Run: isort semantica/" -ForegroundColor Yellow + exit 1 +} + +# Lint with flake8 +Write-Host "๐Ÿ”Ž Linting with flake8..." -ForegroundColor Yellow +try { + flake8 semantica/ + Write-Host "โœ… flake8 check passed" -ForegroundColor Green +} catch { + Write-Host "โŒ Linting issues found" -ForegroundColor Red + exit 1 +} + +# Type check with mypy (non-blocking) +Write-Host "๐Ÿ”ฌ Type checking with mypy..." -ForegroundColor Yellow +try { + mypy semantica/ 2>&1 | Out-Null + Write-Host "โœ… mypy check passed" -ForegroundColor Green +} catch { + Write-Host "โš ๏ธ Type checking issues found (non-blocking)" -ForegroundColor Yellow +} + +Write-Host "" +Write-Host "โœ… All code quality checks passed!" -ForegroundColor Green + diff --git a/.github/scripts/check-code.sh b/.github/scripts/check-code.sh new file mode 100644 index 00000000..90a9c095 --- /dev/null +++ b/.github/scripts/check-code.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# Code quality check script +# Runs formatting, import sorting, linting, and type checking + +set -e + +echo "๐Ÿ” Running code quality checks..." + +# Activate virtual environment if it exists +if [ -d "venv" ]; then + source venv/bin/activate +fi + +# Check if directories exist +if [ ! -d "semantica" ]; then + echo "โŒ semantica/ directory not found" + exit 1 +fi + +# Check formatting +echo "๐Ÿ“ Checking code formatting (black)..." +if black --check semantica/ 2>/dev/null; then + echo "โœ… Black check passed" +else + echo "โŒ Code formatting issues found" + echo " Run: black semantica/" + exit 1 +fi + +# Check import sorting +echo "๐Ÿ“ฆ Checking import sorting (isort)..." +if isort --check-only semantica/ 2>/dev/null; then + echo "โœ… isort check passed" +else + echo "โŒ Import sorting issues found" + echo " Run: isort semantica/" + exit 1 +fi + +# Lint with flake8 +echo "๐Ÿ”Ž Linting with flake8..." +if flake8 semantica/; then + echo "โœ… flake8 check passed" +else + echo "โŒ Linting issues found" + exit 1 +fi + +# Type check with mypy (non-blocking) +echo "๐Ÿ”ฌ Type checking with mypy..." +if mypy semantica/ 2>/dev/null; then + echo "โœ… mypy check passed" +else + echo "โš ๏ธ Type checking issues found (non-blocking)" +fi + +echo "" +echo "โœ… All code quality checks passed!" + diff --git a/.github/scripts/format-code.ps1 b/.github/scripts/format-code.ps1 new file mode 100644 index 00000000..470b617d --- /dev/null +++ b/.github/scripts/format-code.ps1 @@ -0,0 +1,31 @@ +# Code formatting script (PowerShell) +# Formats code with black and sorts imports with isort + +$ErrorActionPreference = "Stop" + +Write-Host "๐ŸŽจ Formatting code..." -ForegroundColor Cyan + +# Activate virtual environment if it exists +if (Test-Path "venv") { + & .\venv\Scripts\Activate.ps1 +} + +# Check if directories exist +if (-not (Test-Path "semantica")) { + Write-Host "โŒ semantica/ directory not found" -ForegroundColor Red + exit 1 +} + +# Format with black +Write-Host "๐Ÿ“ Formatting with black..." -ForegroundColor Yellow +black semantica/ +Write-Host "โœ… Black formatting complete" -ForegroundColor Green + +# Sort imports with isort +Write-Host "๐Ÿ“ฆ Sorting imports with isort..." -ForegroundColor Yellow +isort semantica/ +Write-Host "โœ… Import sorting complete" -ForegroundColor Green + +Write-Host "" +Write-Host "โœ… Code formatting complete!" -ForegroundColor Green + diff --git a/.github/scripts/format-code.sh b/.github/scripts/format-code.sh new file mode 100644 index 00000000..22ab6918 --- /dev/null +++ b/.github/scripts/format-code.sh @@ -0,0 +1,32 @@ +#!/bin/bash +# Code formatting script +# Formats code with black and sorts imports with isort + +set -e + +echo "๐ŸŽจ Formatting code..." + +# Activate virtual environment if it exists +if [ -d "venv" ]; then + source venv/bin/activate +fi + +# Check if directories exist +if [ ! -d "semantica" ]; then + echo "โŒ semantica/ directory not found" + exit 1 +fi + +# Format with black +echo "๐Ÿ“ Formatting with black..." +black semantica/ +echo "โœ… Black formatting complete" + +# Sort imports with isort +echo "๐Ÿ“ฆ Sorting imports with isort..." +isort semantica/ +echo "โœ… Import sorting complete" + +echo "" +echo "โœ… Code formatting complete!" + diff --git a/.github/scripts/run-tests.ps1 b/.github/scripts/run-tests.ps1 new file mode 100644 index 00000000..974f125b --- /dev/null +++ b/.github/scripts/run-tests.ps1 @@ -0,0 +1,41 @@ +# Test runner script (PowerShell) +# Runs tests with coverage reporting + +$ErrorActionPreference = "Stop" + +Write-Host "๐Ÿงช Running tests..." -ForegroundColor Cyan + +# Activate virtual environment if it exists +if (Test-Path "venv") { + & .\venv\Scripts\Activate.ps1 +} + +# Check if tests directory exists +if (-not (Test-Path "tests")) { + Write-Host "โš ๏ธ No tests directory found" -ForegroundColor Yellow + Write-Host " Create tests/ directory and add test files" -ForegroundColor Yellow + exit 0 +} + +# Check if test files exist +$testFiles = Get-ChildItem -Path tests -Recurse -Include "test_*.py", "*_test.py" -ErrorAction SilentlyContinue +if (-not $testFiles) { + Write-Host "โš ๏ธ No test files found" -ForegroundColor Yellow + Write-Host " Add test files to tests/ directory" -ForegroundColor Yellow + exit 0 +} + +# Run tests with coverage +Write-Host "๐Ÿ“Š Running pytest with coverage..." -ForegroundColor Yellow +pytest ` + --cov=semantica ` + --cov-report=html ` + --cov-report=term-missing ` + --cov-report=xml ` + -v ` + tests/ + +Write-Host "" +Write-Host "โœ… Tests complete!" -ForegroundColor Green +Write-Host "๐Ÿ“Š Coverage report: htmlcov/index.html" -ForegroundColor Cyan + diff --git a/.github/scripts/run-tests.sh b/.github/scripts/run-tests.sh new file mode 100644 index 00000000..c9dcdcc0 --- /dev/null +++ b/.github/scripts/run-tests.sh @@ -0,0 +1,41 @@ +#!/bin/bash +# Test runner script +# Runs tests with coverage reporting + +set -e + +echo "๐Ÿงช Running tests..." + +# Activate virtual environment if it exists +if [ -d "venv" ]; then + source venv/bin/activate +fi + +# Check if tests directory exists +if [ ! -d "tests" ]; then + echo "โš ๏ธ No tests directory found" + echo " Create tests/ directory and add test files" + exit 0 +fi + +# Check if test files exist +if [ -z "$(find tests -name 'test_*.py' -o -name '*_test.py' 2>/dev/null)" ]; then + echo "โš ๏ธ No test files found" + echo " Add test files to tests/ directory" + exit 0 +fi + +# Run tests with coverage +echo "๐Ÿ“Š Running pytest with coverage..." +pytest \ + --cov=semantica \ + --cov-report=html \ + --cov-report=term-missing \ + --cov-report=xml \ + -v \ + tests/ + +echo "" +echo "โœ… Tests complete!" +echo "๐Ÿ“Š Coverage report: htmlcov/index.html" + diff --git a/.github/scripts/setup-dev.ps1 b/.github/scripts/setup-dev.ps1 new file mode 100644 index 00000000..bb1f8293 --- /dev/null +++ b/.github/scripts/setup-dev.ps1 @@ -0,0 +1,68 @@ +# Development environment setup script (PowerShell) +# Sets up Python virtual environment and installs dependencies + +$ErrorActionPreference = "Stop" + +Write-Host "๐Ÿš€ Setting up development environment..." -ForegroundColor Cyan + +# Check Python version +try { + $pythonVersion = python --version 2>&1 + Write-Host "๐Ÿ“ฆ $pythonVersion" -ForegroundColor Green +} catch { + Write-Host "โŒ Python not found. Please install Python 3.10 or higher" -ForegroundColor Red + exit 1 +} + +# Create virtual environment if it doesn't exist +if (-not (Test-Path "venv")) { + Write-Host "๐Ÿ“ฆ Creating virtual environment..." -ForegroundColor Yellow + python -m venv venv +} else { + Write-Host "โœ… Virtual environment already exists" -ForegroundColor Green +} + +# Activate virtual environment +Write-Host "๐Ÿ”Œ Activating virtual environment..." -ForegroundColor Yellow +& .\venv\Scripts\Activate.ps1 + +# Upgrade pip +Write-Host "โฌ†๏ธ Upgrading pip..." -ForegroundColor Yellow +python -m pip install --upgrade pip + +# Install project in editable mode with dev dependencies +Write-Host "๐Ÿ“ฅ Installing package with dev dependencies..." -ForegroundColor Yellow +pip install -e ".[dev]" + +# Install pre-commit hooks if available +try { + $precommit = Get-Command pre-commit -ErrorAction SilentlyContinue + if ($precommit) { + Write-Host "๐Ÿช Installing pre-commit hooks..." -ForegroundColor Yellow + pre-commit install + } else { + Write-Host "โš ๏ธ pre-commit not found, skipping hooks installation" -ForegroundColor Yellow + } +} catch { + Write-Host "โš ๏ธ Pre-commit installation skipped" -ForegroundColor Yellow +} + +# Verify installation +Write-Host "โœ… Verifying installation..." -ForegroundColor Yellow +try { + python -c "import semantica; print(f'Semantica version: {semantica.__version__}')" + Write-Host "โœ… Installation verified" -ForegroundColor Green +} catch { + Write-Host "โŒ Installation verification failed" -ForegroundColor Red + exit 1 +} + +Write-Host "" +Write-Host "โœจ Development environment setup complete!" -ForegroundColor Green +Write-Host "" +Write-Host "Next steps:" -ForegroundColor Cyan +Write-Host " .\venv\Scripts\Activate.ps1 # Activate virtual environment" -ForegroundColor White +Write-Host " pytest # Run tests" -ForegroundColor White +Write-Host " black semantica/ # Format code" -ForegroundColor White +Write-Host " .github\scripts\check-code.ps1 # Run all checks" -ForegroundColor White + diff --git a/.github/scripts/setup-dev.sh b/.github/scripts/setup-dev.sh new file mode 100644 index 00000000..f13e3bda --- /dev/null +++ b/.github/scripts/setup-dev.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# Development environment setup script +# Sets up Python virtual environment and installs dependencies + +set -e + +echo "๐Ÿš€ Setting up development environment..." + +# Check Python version +if ! command -v python3 &> /dev/null; then + echo "โŒ Python 3 not found. Please install Python 3.10 or higher" + exit 1 +fi + +python_version=$(python3 --version 2>&1 | awk '{print $2}') +echo "๐Ÿ“ฆ Python version: $python_version" + +# Create virtual environment if it doesn't exist +if [ ! -d "venv" ]; then + echo "๐Ÿ“ฆ Creating virtual environment..." + python3 -m venv venv +else + echo "โœ… Virtual environment already exists" +fi + +# Activate virtual environment +echo "๐Ÿ”Œ Activating virtual environment..." +source venv/bin/activate + +# Upgrade pip +echo "โฌ†๏ธ Upgrading pip..." +python -m pip install --upgrade pip + +# Install project in editable mode with dev dependencies +echo "๐Ÿ“ฅ Installing package with dev dependencies..." +pip install -e ".[dev]" + +# Install pre-commit hooks if available +if command -v pre-commit &> /dev/null; then + echo "๐Ÿช Installing pre-commit hooks..." + pre-commit install || echo "โš ๏ธ Pre-commit installation skipped" +else + echo "โš ๏ธ pre-commit not found, skipping hooks installation" +fi + +# Verify installation +echo "โœ… Verifying installation..." +if python -c "import semantica; print(f'Semantica version: {semantica.__version__}')" 2>/dev/null; then + echo "โœ… Installation verified" +else + echo "โŒ Installation verification failed" + exit 1 +fi + +echo "" +echo "โœจ Development environment setup complete!" +echo "" +echo "Next steps:" +echo " source venv/bin/activate # Activate virtual environment" +echo " pytest # Run tests" +echo " black semantica/ # Format code" +echo " .github/scripts/check-code.sh # Run all checks" + diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f4a6cd37..37db4093 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,9 +2,12 @@ name: CI on: push: - branches: [ main, develop ] + branches: [main, develop] pull_request: - branches: [ main, develop ] + branches: [main, develop] + +permissions: + contents: read jobs: test: @@ -16,75 +19,63 @@ jobs: python-version: ['3.10', '3.11', '3.12'] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} - - name: Cache pip packages - uses: actions/cache@v4 - with: - path: ~/.cache/pip - key: ubuntu-pip-${{ hashFiles('**/requirements*.txt', '**/pyproject.toml') }} - restore-keys: | - ubuntu-pip- + - name: Cache pip packages + uses: actions/cache@v4 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('**/pyproject.toml') }} + restore-keys: | + ${{ runner.os }}-pip- - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -e ".[dev]" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -e ".[dev]" - - name: Run tests - run: | - if [ -d "tests" ] && [ "$(find tests -name 'test_*.py' -o -name '*_test.py' | wc -l)" -gt 0 ]; then - pytest - else - echo "โš ๏ธ No tests directory or test files found. Skipping test execution." - echo "This is expected for initial setup. Add tests to the 'tests/' directory." - exit 0 - fi - continue-on-error: true + - name: Verify installation + run: python -c "import semantica; print(f'Version: {semantica.__version__}')" + + - name: Run tests + run: | + if [ -d "tests" ] && [ "$(find tests -name 'test_*.py' -o -name '*_test.py' | wc -l)" -gt 0 ]; then + pytest + else + echo "No tests found. Skipping." + fi + continue-on-error: true lint: name: Lint Code runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v4 - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: '3.11' + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -e ".[dev]" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -e ".[dev]" - - name: Run black - run: | - black --check semantica/ - if [ -d "tests" ] && [ "$(find tests -name '*.py' | wc -l)" -gt 0 ]; then - black --check tests/ - fi + - name: Check formatting (black) + run: black --check semantica/ - - name: Run isort - run: | - isort --check-only semantica/ - if [ -d "tests" ] && [ "$(find tests -name '*.py' | wc -l)" -gt 0 ]; then - isort --check-only tests/ - fi + - name: Check import sorting (isort) + run: isort --check-only semantica/ - - name: Run flake8 - run: | - flake8 semantica/ - if [ -d "tests" ] && [ "$(find tests -name '*.py' | wc -l)" -gt 0 ]; then - flake8 tests/ - fi - - - name: Run mypy - run: mypy semantica/ || echo "Type checking completed with errors (non-blocking)" - continue-on-error: true + - name: Run linter (flake8) + run: flake8 semantica/ + - name: Type check (mypy) + run: mypy semantica/ || echo "Type checking has errors (non-blocking)" + continue-on-error: true diff --git a/.github/workflows/docs-mkdocs.yml b/.github/workflows/docs-mkdocs.yml deleted file mode 100644 index bb4b32f5..00000000 --- a/.github/workflows/docs-mkdocs.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Deploy Documentation - -on: - push: - branches: - - main - paths: - - 'docs/**' - - 'mkdocs.yml' - - '.github/workflows/docs-mkdocs.yml' - workflow_dispatch: - -permissions: - contents: read - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: '3.11' - cache: 'pip' - - - name: Install dependencies - run: | - pip install -r requirements-docs.txt - - - name: Build documentation - run: | - mkdocs build - - - name: Deploy to Netlify - uses: nwtgck/actions-netlify@v3.0 - with: - publish-dir: './site' - production-branch: main - github-token: ${{ secrets.GITHUB_TOKEN }} - deploy-message: "Deploy docs from GitHub Actions" - enable-pull-request-comment: false - enable-commit-comment: true - env: - NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} - NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }} - timeout-minutes: 1 - diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 564e7e04..0461936d 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -1,55 +1,70 @@ -name: Documentation +name: Build and Deploy Documentation + +# Builds and deploys documentation to GitHub Pages +# Runs on: docs changes to main branch or manual trigger on: push: - branches: [ main ] - paths: - - 'docs/**' - - 'mkdocs.yml' - - '.github/workflows/docs.yml' - pull_request: - branches: [ main ] + branches: [main] paths: - 'docs/**' - 'mkdocs.yml' workflow_dispatch: - # Manual trigger for deploying documentation + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: false jobs: build: name: Build Documentation runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - name: Checkout code + uses: actions/checkout@v4 - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: '3.11' + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -r requirements-docs.txt - pip install mkdocs-material mkdocstrings[python] + - name: Install documentation dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements-docs.txt - - name: Build documentation - run: mkdocs build --strict + - name: Build documentation + run: mkdocs build --strict - - name: Check for broken links - run: | - pip install linkchecker || echo "linkchecker installation failed, skipping link check" - if [ -d "site" ]; then - linkchecker site/ --check-extern || echo "Link check completed with warnings" - fi - continue-on-error: true + - name: Check for broken links + run: | + pip install linkchecker || echo "Skipping link check" + if [ -d "site" ]; then + linkchecker site/ --check-extern || echo "Link check completed" + fi + continue-on-error: true - # Documentation deployment is manual for safety - # To deploy: Go to Actions tab -> Documentation workflow -> Run workflow - - name: Deploy to GitHub Pages (Manual) - if: github.event_name == 'workflow_dispatch' - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./site - keep_files: false + - name: Setup Pages + uses: actions/configure-pages@v4 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: ./site + + deploy: + name: Deploy to GitHub Pages + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml new file mode 100644 index 00000000..d956c74a --- /dev/null +++ b/.github/workflows/format.yml @@ -0,0 +1,63 @@ +name: Format Code + +# Automatically formats code with black and isort +# Runs on: pull requests or manual trigger + +on: + pull_request: + branches: [main, develop] + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + +jobs: + format: + name: Format Code + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install black isort + + - name: Format with black + run: black semantica/ + + - name: Sort imports with isort + run: isort semantica/ + + - name: Check for changes + id: verify-changed-files + run: | + if [ -n "$(git status --porcelain)" ]; then + echo "changed=true" >> $GITHUB_OUTPUT + else + echo "changed=false" >> $GITHUB_OUTPUT + fi + + - name: Create Pull Request + if: steps.verify-changed-files.outputs.changed == 'true' + uses: peter-evans/create-pull-request@v5 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: "style: Auto-format code with black and isort" + title: "Auto-format code" + body: | + This PR automatically formats code using black and isort. + + **Changes:** + - Code formatted with black + - Imports sorted with isort + branch: auto-format-code + delete-branch: true + diff --git a/.github/workflows/issue-bot.yml b/.github/workflows/label-issues.yml similarity index 80% rename from .github/workflows/issue-bot.yml rename to .github/workflows/label-issues.yml index c2c1d6f0..359ab9a2 100644 --- a/.github/workflows/issue-bot.yml +++ b/.github/workflows/label-issues.yml @@ -1,4 +1,7 @@ -name: Issue Helper Bot +name: Auto-label Issues + +# Automatically labels new issues based on content +# Provides help resources when requested on: issues: @@ -6,14 +9,18 @@ on: issue_comment: types: [created] -jobs: +permissions: + contents: read + issues: write + pull-requests: read - auto-label: - name: Auto-label Issues (Conservative) +jobs: + label: + name: Auto-label Issues runs-on: ubuntu-latest if: github.event.action == 'opened' steps: - - name: Label based on keywords (only clear matches) + - name: Add labels based on content uses: actions/github-script@v7 with: script: | @@ -24,39 +31,38 @@ jobs: const labels = []; - // Only label if there are clear, strong indicators - // Bug detection - must have multiple indicators + // Bug detection if ((text.match(/\b(bug|crash|broken|fails|doesn't work|not working)\b/) && text.match(/\b(error|exception|traceback|problem)\b/)) || title.startsWith('bug:') || title.startsWith('[bug]')) { labels.push('bug'); } - // Feature request - must be explicit + // Feature request else if (text.match(/\b(feature request|enhancement request|proposal)\b/) || title.startsWith('feature:') || title.startsWith('[feature]') || title.startsWith('enhancement:') || title.startsWith('[enhancement]')) { labels.push('enhancement'); } - // Documentation - must be explicit + // Documentation else if (text.match(/\b(documentation issue|doc fix|docs update)\b/) || title.startsWith('docs:') || title.startsWith('[docs]')) { labels.push('documentation'); } - // Security - must be explicit + // Security else if (text.match(/\b(security issue|vulnerability|security bug)\b/) || title.startsWith('security:') || title.startsWith('[security]')) { labels.push('security'); } - // Only add needs-triage if no labels and issue seems incomplete + // Needs triage for incomplete issues if (labels.length === 0 && (body.length < 50 || !body.includes('\n'))) { labels.push('needs-triage'); } - // Add labels only if we found something + // Add labels if found if (labels.length > 0) { await github.rest.issues.addLabels({ owner: context.repo.owner, @@ -66,19 +72,17 @@ jobs: }); } - respond-to-help-request: - name: Respond Only to Explicit Help Requests + help: + name: Provide Help Resources runs-on: ubuntu-latest if: | github.event.action == 'opened' && (contains(github.event.issue.body, '/help') || contains(github.event.issue.title, '/help')) steps: - - name: Provide help resources + - name: Post help resources uses: actions/github-script@v7 with: script: | - const issue = context.payload.issue; - const response = `๐Ÿ“š **Help Resources** Here are some helpful resources: @@ -92,7 +96,7 @@ Here are some helpful resources: ๐Ÿ’ก **Tip**: For questions, consider using [GitHub Discussions](https://github.com/${{ github.repository }}/discussions) instead of issues.`; await github.rest.issues.createComment({ - issue_number: issue.number, + issue_number: context.payload.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: response diff --git a/.github/workflows/discussion-bot.yml b/.github/workflows/mark-answered.yml similarity index 66% rename from .github/workflows/discussion-bot.yml rename to .github/workflows/mark-answered.yml index ae8ea291..0e6a0d3a 100644 --- a/.github/workflows/discussion-bot.yml +++ b/.github/workflows/mark-answered.yml @@ -1,20 +1,28 @@ -name: Discussion Helper Bot +name: Mark Discussion as Answered + +# Marks a discussion as answered when a maintainer comments /answered +# Only works for members, owners, and collaborators on: discussion_comment: types: [created] -jobs: +permissions: + contents: read + discussions: write +jobs: mark-answered: - name: Mark Discussions as Answered + name: Mark Discussion as Answered runs-on: ubuntu-latest if: | github.event.action == 'created' && contains(github.event.comment.body, '/answered') && - (github.event.comment.author_association == 'MEMBER' || github.event.comment.author_association == 'OWNER' || github.event.comment.author_association == 'COLLABORATOR') + (github.event.comment.author_association == 'MEMBER' || + github.event.comment.author_association == 'OWNER' || + github.event.comment.author_association == 'COLLABORATOR') steps: - - name: Mark as answered + - name: Mark discussion as answered uses: actions/github-script@v7 with: script: | @@ -38,6 +46,6 @@ jobs: repo: context.repo.repo }); } catch (error) { - console.log('Could not mark as answered (may require manual action):', error.message); + console.log('Could not mark as answered:', error.message); } diff --git a/.github/workflows/publish.yml b/.github/workflows/pypi.yml similarity index 80% rename from .github/workflows/publish.yml rename to .github/workflows/pypi.yml index b99350ff..e0d0d804 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/pypi.yml @@ -1,9 +1,12 @@ name: Publish to PyPI +# Publishes package to PyPI when a GitHub release is published +# Requires: PyPI API token configured in repository secrets + on: release: types: [published] - workflow_dispatch: # Allows manual triggering + workflow_dispatch: jobs: publish: @@ -12,28 +15,28 @@ jobs: environment: name: pypi url: https://pypi.org/project/semantica/${{ github.event.release.tag_name }}/ - + permissions: - id-token: write # Required for OIDC - contents: read # Required for checkout - + id-token: write + contents: read + steps: - name: Checkout code uses: actions/checkout@v4 - + - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.11" - + - name: Install build tools run: | python -m pip install --upgrade pip pip install build twine - + - name: Build package run: python -m build - + - name: Publish to PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8bd2a837..a1768f70 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,55 +1,58 @@ -name: Release +name: Create Release + +# Creates a GitHub release when a version tag is pushed +# Tag format: v1.2.3 on: push: tags: - 'v*' +permissions: + contents: write + id-token: write + jobs: release: name: Create Release runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: '3.11' + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install build twine + - name: Install build tools + run: | + python -m pip install --upgrade pip + pip install build twine - - name: Extract version from tag - id: tag - run: | - VERSION=${GITHUB_REF#refs/tags/v} - echo "VERSION=$VERSION" >> $GITHUB_OUTPUT - echo "Tag version: $VERSION" + - name: Extract version from tag + id: tag + run: | + VERSION=${GITHUB_REF#refs/tags/v} + echo "VERSION=$VERSION" >> $GITHUB_OUTPUT + echo "Version: $VERSION" - - name: Build package - run: python -m build + - name: Build package + run: python -m build - - name: Check package - run: twine check dist/* + - name: Validate package + run: twine check dist/* - - name: Create GitHub Release - uses: softprops/action-gh-release@v1 - with: - tag_name: ${{ github.ref_name }} - name: Release ${{ steps.tag.outputs.VERSION }} - body_path: CHANGELOG.md - draft: false - prerelease: false - generate_release_notes: true - - # PyPI publishing is intentionally disabled for manual control - # To publish to PyPI manually: - # 1. Ensure PYPI_API_TOKEN secret is configured in repository settings - # 2. Run: twine upload dist/* - # This prevents accidental publishing of wrong versions + - name: Create GitHub Release + uses: softprops/action-gh-release@v1 + with: + tag_name: ${{ github.ref_name }} + name: Release ${{ steps.tag.outputs.VERSION }} + body_path: CHANGELOG.md + draft: false + prerelease: false + generate_release_notes: true + files: dist/* diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml new file mode 100644 index 00000000..cccd876e --- /dev/null +++ b/.github/workflows/security.yml @@ -0,0 +1,95 @@ +name: Security Scan + +# Scans code and dependencies for security vulnerabilities +# Runs on: push, pull requests, or manual trigger + +on: + push: + branches: [main, develop] + pull_request: + branches: [main, develop] + schedule: + - cron: '0 0 * * 1' # Weekly on Monday + workflow_dispatch: + +permissions: + contents: read + security-events: write + +jobs: + dependency-scan: + name: Dependency Security Scan + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Install security tools + run: | + python -m pip install --upgrade pip + pip install safety pip-audit + + - name: Run pip-audit + run: | + pip-audit --requirement pyproject.toml --format json --output pip-audit-report.json || true + pip-audit --requirement pyproject.toml || echo "pip-audit completed with issues" + continue-on-error: true + + - name: Run safety check + run: | + safety check --json --output safety-report.json || true + safety check || echo "Safety check completed with issues" + continue-on-error: true + + - name: Upload security reports + if: always() + uses: actions/upload-artifact@v3 + with: + name: security-reports + path: | + pip-audit-report.json + safety-report.json + retention-days: 30 + + code-scan: + name: Code Security Scan + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Run Trivy vulnerability scanner + uses: aquasecurity/trivy-action@master + with: + scan-type: 'fs' + scan-ref: '.' + format: 'sarif' + output: 'trivy-results.sarif' + severity: 'CRITICAL,HIGH' + + - name: Upload Trivy results to GitHub Security + uses: github/codeql-action/upload-sarif@v2 + if: always() + with: + sarif_file: 'trivy-results.sarif' + + secret-scan: + name: Secret Scanning + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Run Gitleaks + uses: gitleaks/gitleaks-action@v2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + continue-on-error: true + diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..cbac29b9 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,67 @@ +name: Run Tests + +# Runs tests across multiple Python versions +# Runs on: push, pull requests, or manual trigger + +on: + push: + branches: [main, develop] + pull_request: + branches: [main, develop] + workflow_dispatch: + +permissions: + contents: read + +jobs: + test: + name: Test Python ${{ matrix.python-version }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ['3.10', '3.11', '3.12'] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Cache pip packages + uses: actions/cache@v4 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('**/pyproject.toml') }} + restore-keys: | + ${{ runner.os }}-pip- + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -e ".[dev]" + + - name: Verify installation + run: python -c "import semantica; print(f'Version: {semantica.__version__}')" + + - name: Run tests + run: | + if [ -d "tests" ] && [ "$(find tests -name 'test_*.py' -o -name '*_test.py' | wc -l)" -gt 0 ]; then + pytest --cov=semantica --cov-report=xml --cov-report=term-missing -v + else + echo "No tests found. Skipping test execution." + exit 0 + fi + + - name: Upload coverage to Codecov + if: matrix.python-version == '3.11' + uses: codecov/codecov-action@v3 + with: + file: ./coverage.xml + flags: unittests + name: codecov-umbrella + fail_ci_if_error: false + diff --git a/scripts/check-code.sh b/scripts/check-code.sh deleted file mode 100644 index 3f57fa0a..00000000 --- a/scripts/check-code.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -# Code quality check script for Semantica - -set -e - -echo "๐Ÿ” Running code quality checks..." - -# Activate virtual environment if it exists -if [ -d "venv" ]; then - source venv/bin/activate -fi - -# Check formatting -echo "Checking code formatting (black)..." -black --check semantica/ tests/ || { echo "โŒ Code formatting issues found. Run: black semantica/ tests/"; exit 1; } - -# Check import sorting -echo "Checking import sorting (isort)..." -isort --check-only semantica/ tests/ || { echo "โŒ Import sorting issues found. Run: isort semantica/ tests/"; exit 1; } - -# Lint with flake8 -echo "Linting with flake8..." -flake8 semantica/ tests/ || { echo "โŒ Linting issues found."; exit 1; } - -# Type check with mypy -echo "Type checking with mypy..." -mypy semantica/ || { echo "โš ๏ธ Type checking issues found (non-blocking)."; } - -echo "" -echo "โœ… All code quality checks passed!" - diff --git a/scripts/format-code.sh b/scripts/format-code.sh deleted file mode 100644 index 2827580c..00000000 --- a/scripts/format-code.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -# Code formatting script for Semantica - -set -e - -echo "๐ŸŽจ Formatting Semantica code..." - -# Activate virtual environment if it exists -if [ -d "venv" ]; then - source venv/bin/activate -fi - -# Format with black -echo "Formatting with black..." -black semantica/ tests/ - -# Sort imports with isort -echo "Sorting imports with isort..." -isort semantica/ tests/ - -echo "" -echo "โœ… Code formatting complete!" - diff --git a/scripts/run-tests.sh b/scripts/run-tests.sh deleted file mode 100644 index 7d3d6682..00000000 --- a/scripts/run-tests.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -# Test runner script for Semantica - -set -e - -echo "๐Ÿงช Running Semantica tests..." - -# Activate virtual environment if it exists -if [ -d "venv" ]; then - source venv/bin/activate -fi - -# Run tests with coverage -echo "Running pytest with coverage..." -pytest --cov=semantica --cov-report=html --cov-report=term-missing -v - -echo "" -echo "โœ… Tests complete!" -echo "๐Ÿ“Š Coverage report generated in htmlcov/index.html" - diff --git a/scripts/setup-dev.ps1 b/scripts/setup-dev.ps1 deleted file mode 100644 index 1307a415..00000000 --- a/scripts/setup-dev.ps1 +++ /dev/null @@ -1,50 +0,0 @@ -# Development environment setup script for Semantica (PowerShell) - -Write-Host "๐Ÿš€ Setting up Semantica development environment..." -ForegroundColor Cyan - -# Check Python version -$pythonVersion = python --version 2>&1 -Write-Host "๐Ÿ“ฆ $pythonVersion" -ForegroundColor Green - -# Create virtual environment if it doesn't exist -if (-not (Test-Path "venv")) { - Write-Host "๐Ÿ“ฆ Creating virtual environment..." -ForegroundColor Yellow - python -m venv venv -} - -# Activate virtual environment -Write-Host "๐Ÿ”Œ Activating virtual environment..." -ForegroundColor Yellow -& .\venv\Scripts\Activate.ps1 - -# Upgrade pip -Write-Host "โฌ†๏ธ Upgrading pip..." -ForegroundColor Yellow -python -m pip install --upgrade pip - -# Install project in editable mode with dev dependencies -Write-Host "๐Ÿ“ฅ Installing Semantica with dev dependencies..." -ForegroundColor Yellow -pip install -e ".[dev]" - -# Install pre-commit hooks -Write-Host "๐Ÿช Installing pre-commit hooks..." -ForegroundColor Yellow -pre-commit install - -# Verify installation -Write-Host "โœ… Verifying installation..." -ForegroundColor Yellow -python -c "import semantica; print(f'Semantica version: {semantica.__version__}')" - -Write-Host "" -Write-Host "โœจ Development environment setup complete!" -ForegroundColor Green -Write-Host "" -Write-Host "To activate the virtual environment in the future, run:" -ForegroundColor Cyan -Write-Host " .\venv\Scripts\Activate.ps1" -ForegroundColor White -Write-Host "" -Write-Host "To run tests:" -ForegroundColor Cyan -Write-Host " pytest" -ForegroundColor White -Write-Host "" -Write-Host "To format code:" -ForegroundColor Cyan -Write-Host " black semantica/ tests/" -ForegroundColor White -Write-Host " isort semantica/ tests/" -ForegroundColor White -Write-Host "" -Write-Host "To run all checks:" -ForegroundColor Cyan -Write-Host " pre-commit run --all-files" -ForegroundColor White - diff --git a/scripts/setup-dev.sh b/scripts/setup-dev.sh deleted file mode 100644 index 934405ff..00000000 --- a/scripts/setup-dev.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash -# Development environment setup script for Semantica - -set -e - -echo "๐Ÿš€ Setting up Semantica development environment..." - -# Check Python version -python_version=$(python3 --version 2>&1 | awk '{print $2}') -echo "๐Ÿ“ฆ Python version: $python_version" - -# Create virtual environment if it doesn't exist -if [ ! -d "venv" ]; then - echo "๐Ÿ“ฆ Creating virtual environment..." - python3 -m venv venv -fi - -# Activate virtual environment -echo "๐Ÿ”Œ Activating virtual environment..." -source venv/bin/activate - -# Upgrade pip -echo "โฌ†๏ธ Upgrading pip..." -pip install --upgrade pip - -# Install project in editable mode with dev dependencies -echo "๐Ÿ“ฅ Installing Semantica with dev dependencies..." -pip install -e ".[dev]" - -# Install pre-commit hooks -echo "๐Ÿช Installing pre-commit hooks..." -pre-commit install - -# Verify installation -echo "โœ… Verifying installation..." -python -c "import semantica; print(f'Semantica version: {semantica.__version__}')" - -echo "" -echo "โœจ Development environment setup complete!" -echo "" -echo "To activate the virtual environment in the future, run:" -echo " source venv/bin/activate" -echo "" -echo "To run tests:" -echo " pytest" -echo "" -echo "To format code:" -echo " black semantica/ tests/" -echo " isort semantica/ tests/" -echo "" -echo "To run all checks:" -echo " pre-commit run --all-files" - diff --git a/semantica/__init__.py b/semantica/__init__.py index 8ad8960c..273808c0 100644 --- a/semantica/__init__.py +++ b/semantica/__init__.py @@ -15,54 +15,54 @@ __version__ = "0.0.1" __author__ = "Semantica Contributors" __license__ = "MIT" -from typing import Any, Dict, List, Optional, Union +# Import submodules for dot notation access +import importlib from pathlib import Path +from typing import Any, Dict, List, Optional, Union # Core imports -from .core import Semantica, Config, ConfigManager, LifecycleManager, PluginRegistry - -# Pipeline imports -from .pipeline import ( - PipelineBuilder, - ExecutionEngine, - FailureHandler, - ParallelismManager, - ResourceScheduler, - PipelineValidator, -) +from .core import Config, ConfigManager, LifecycleManager, PluginRegistry, Semantica # KG Quality Assurance from .kg_qa import ( - KGQualityAssessor, - ConsistencyChecker, - CompletenessValidator, - QualityMetrics, - CompletenessMetrics, - ConsistencyMetrics, - ValidationEngine, - RuleValidator, - ConstraintValidator, - QualityReporter, - IssueTracker, - ImprovementSuggestions, AutomatedFixer, AutoMerger, AutoResolver, + CompletenessMetrics, + CompletenessValidator, + ConsistencyChecker, + ConsistencyMetrics, + ConstraintValidator, + ImprovementSuggestions, + IssueTracker, + KGQualityAssessor, + QualityMetrics, + QualityReporter, + RuleValidator, + ValidationEngine, +) + +# Pipeline imports +from .pipeline import ( + ExecutionEngine, + FailureHandler, + ParallelismManager, + PipelineBuilder, + PipelineValidator, + ResourceScheduler, ) # Visualization from .visualization import ( + AnalyticsVisualizer, + EmbeddingVisualizer, KGVisualizer, OntologyVisualizer, - EmbeddingVisualizer, - SemanticNetworkVisualizer, QualityVisualizer, - AnalyticsVisualizer, + SemanticNetworkVisualizer, TemporalVisualizer, ) -# Import submodules for dot notation access -import importlib # Module proxy class for submodule access class _ModuleProxy: diff --git a/semantica/conflicts/__init__.py b/semantica/conflicts/__init__.py index d33d4947..c3fcc6ec 100644 --- a/semantica/conflicts/__init__.py +++ b/semantica/conflicts/__init__.py @@ -82,26 +82,26 @@ Author: Semantica Contributors License: MIT """ -from .conflict_detector import ConflictDetector, Conflict, ConflictType -from .source_tracker import SourceTracker, SourceReference, PropertySource +from .config import ConflictsConfig, conflicts_config +from .conflict_analyzer import ConflictAnalyzer, ConflictPattern +from .conflict_detector import Conflict, ConflictDetector, ConflictType from .conflict_resolver import ConflictResolver, ResolutionResult, ResolutionStrategy from .investigation_guide import ( - InvestigationGuideGenerator, InvestigationGuide, + InvestigationGuideGenerator, InvestigationStep, ) -from .conflict_analyzer import ConflictAnalyzer, ConflictPattern -from .registry import MethodRegistry, method_registry from .methods import ( - detect_conflicts, - resolve_conflicts, analyze_conflicts, - track_sources, + detect_conflicts, generate_investigation_guide, get_conflict_method, list_available_methods, + resolve_conflicts, + track_sources, ) -from .config import ConflictsConfig, conflicts_config +from .registry import MethodRegistry, method_registry +from .source_tracker import PropertySource, SourceReference, SourceTracker def detect_and_resolve( diff --git a/semantica/conflicts/config.py b/semantica/conflicts/config.py index 591f1af4..8c69a150 100644 --- a/semantica/conflicts/config.py +++ b/semantica/conflicts/config.py @@ -40,8 +40,8 @@ License: MIT """ import os -from typing import Optional, Dict, Any from pathlib import Path +from typing import Any, Dict, Optional from ..utils.logging import get_logger diff --git a/semantica/conflicts/conflict_analyzer.py b/semantica/conflicts/conflict_analyzer.py index eb8cd300..44b84db3 100644 --- a/semantica/conflicts/conflict_analyzer.py +++ b/semantica/conflicts/conflict_analyzer.py @@ -63,14 +63,14 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional +from collections import Counter, defaultdict from dataclasses import dataclass, field -from collections import defaultdict, Counter from datetime import datetime +from typing import Any, Dict, List, Optional -from .conflict_detector import Conflict, ConflictType from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker +from .conflict_detector import Conflict, ConflictType @dataclass diff --git a/semantica/conflicts/conflict_detector.py b/semantica/conflicts/conflict_detector.py index 320e3f4c..5f166831 100644 --- a/semantica/conflicts/conflict_detector.py +++ b/semantica/conflicts/conflict_detector.py @@ -51,14 +51,14 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Set from dataclasses import dataclass, field from enum import Enum +from typing import Any, Dict, List, Optional, Set -from .source_tracker import SourceTracker, SourceReference -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker +from .source_tracker import SourceReference, SourceTracker class ConflictType(str, Enum): diff --git a/semantica/conflicts/conflict_resolver.py b/semantica/conflicts/conflict_resolver.py index cd54d402..79f4c92d 100644 --- a/semantica/conflicts/conflict_resolver.py +++ b/semantica/conflicts/conflict_resolver.py @@ -55,16 +55,16 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Callable, Union +from collections import Counter from dataclasses import dataclass, field from enum import Enum -from collections import Counter +from typing import Any, Callable, Dict, List, Optional, Union -from .conflict_detector import Conflict, ConflictType -from .source_tracker import SourceTracker -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker +from .conflict_detector import Conflict, ConflictType +from .source_tracker import SourceTracker class ResolutionStrategy(str, Enum): diff --git a/semantica/conflicts/investigation_guide.py b/semantica/conflicts/investigation_guide.py index 1c709e39..fdb46878 100644 --- a/semantica/conflicts/investigation_guide.py +++ b/semantica/conflicts/investigation_guide.py @@ -60,14 +60,14 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass, field from datetime import datetime +from typing import Any, Dict, List, Optional -from .conflict_detector import Conflict, ConflictType -from .source_tracker import SourceTracker from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker +from .conflict_detector import Conflict, ConflictType +from .source_tracker import SourceTracker @dataclass diff --git a/semantica/conflicts/methods.py b/semantica/conflicts/methods.py index b3ebd29c..a80e482e 100644 --- a/semantica/conflicts/methods.py +++ b/semantica/conflicts/methods.py @@ -112,16 +112,20 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union, Callable +from typing import Any, Callable, Dict, List, Optional, Union -from ..utils.logging import get_logger from ..utils.exceptions import ProcessingError -from .conflict_detector import ConflictDetector, Conflict, ConflictType -from .conflict_resolver import ConflictResolver, ResolutionResult, ResolutionStrategy +from ..utils.logging import get_logger from .conflict_analyzer import ConflictAnalyzer, ConflictPattern -from .source_tracker import SourceTracker, SourceReference, PropertySource -from .investigation_guide import InvestigationGuideGenerator, InvestigationGuide, InvestigationStep +from .conflict_detector import Conflict, ConflictDetector, ConflictType +from .conflict_resolver import ConflictResolver, ResolutionResult, ResolutionStrategy +from .investigation_guide import ( + InvestigationGuide, + InvestigationGuideGenerator, + InvestigationStep, +) from .registry import method_registry +from .source_tracker import PropertySource, SourceReference, SourceTracker logger = get_logger("conflicts_methods") diff --git a/semantica/conflicts/registry.py b/semantica/conflicts/registry.py index 20853723..233f910b 100644 --- a/semantica/conflicts/registry.py +++ b/semantica/conflicts/registry.py @@ -42,7 +42,7 @@ Author: Semantica Contributors License: MIT """ -from typing import Dict, Callable, Any, List, Optional +from typing import Any, Callable, Dict, List, Optional class MethodRegistry: diff --git a/semantica/conflicts/source_tracker.py b/semantica/conflicts/source_tracker.py index aed8b059..61251b06 100644 --- a/semantica/conflicts/source_tracker.py +++ b/semantica/conflicts/source_tracker.py @@ -58,10 +58,10 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Set +from collections import defaultdict from dataclasses import dataclass, field from datetime import datetime -from collections import defaultdict +from typing import Any, Dict, List, Optional, Set from ..utils.exceptions import ValidationError from ..utils.logging import get_logger diff --git a/semantica/context/__init__.py b/semantica/context/__init__.py index bf89d0df..aabf4b6d 100644 --- a/semantica/context/__init__.py +++ b/semantica/context/__init__.py @@ -89,23 +89,23 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union from pathlib import Path +from typing import Any, Dict, List, Optional, Union -from .context_graph import ContextGraphBuilder, ContextNode, ContextEdge -from .entity_linker import EntityLinker, EntityLink, LinkedEntity from .agent_memory import AgentMemory, MemoryItem +from .config import ContextConfig, context_config +from .context_graph import ContextEdge, ContextGraphBuilder, ContextNode from .context_retriever import ContextRetriever, RetrievedContext -from .registry import MethodRegistry, method_registry +from .entity_linker import EntityLink, EntityLinker, LinkedEntity from .methods import ( build_context_graph, - store_memory, - retrieve_context, - link_entities, get_context_method, + link_entities, list_available_methods, + retrieve_context, + store_memory, ) -from .config import ContextConfig, context_config +from .registry import MethodRegistry, method_registry __all__ = [ # Main classes diff --git a/semantica/context/agent_memory.py b/semantica/context/agent_memory.py index 99265d35..d0560c06 100644 --- a/semantica/context/agent_memory.py +++ b/semantica/context/agent_memory.py @@ -55,12 +55,12 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union +from collections import deque from dataclasses import dataclass, field from datetime import datetime, timedelta -from collections import deque +from typing import Any, Dict, List, Optional, Union -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.types import EntityDict, RelationshipDict diff --git a/semantica/context/config.py b/semantica/context/config.py index 96dd0e7e..115a51d2 100644 --- a/semantica/context/config.py +++ b/semantica/context/config.py @@ -40,8 +40,8 @@ License: MIT """ import os -from typing import Optional, Dict, Any from pathlib import Path +from typing import Any, Dict, Optional from ..utils.logging import get_logger diff --git a/semantica/context/context_graph.py b/semantica/context/context_graph.py index b8dc1869..5f182d25 100644 --- a/semantica/context/context_graph.py +++ b/semantica/context/context_graph.py @@ -58,15 +58,15 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Set, Union -from dataclasses import dataclass, field from collections import defaultdict +from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional, Set, Union -from .entity_linker import EntityLinker -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from ..utils.types import EntityDict, RelationshipDict +from .entity_linker import EntityLinker @dataclass @@ -501,8 +501,9 @@ class ContextGraphBuilder: def _load_conversation(self, file_path: str) -> Dict[str, Any]: """Load conversation from file.""" - from ..utils.helpers import read_json_file from pathlib import Path + + from ..utils.helpers import read_json_file path = Path(file_path) if not path.exists(): diff --git a/semantica/context/context_retriever.py b/semantica/context/context_retriever.py index 182ec343..19b30535 100644 --- a/semantica/context/context_retriever.py +++ b/semantica/context/context_retriever.py @@ -58,10 +58,10 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/context/entity_linker.py b/semantica/context/entity_linker.py index e748bb7a..5e648c03 100644 --- a/semantica/context/entity_linker.py +++ b/semantica/context/entity_linker.py @@ -56,12 +56,12 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Set, Tuple -from dataclasses import dataclass, field -from urllib.parse import quote import hashlib +from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional, Set, Tuple +from urllib.parse import quote -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from ..utils.types import EntityDict diff --git a/semantica/context/methods.py b/semantica/context/methods.py index 1bd24033..a57e479f 100644 --- a/semantica/context/methods.py +++ b/semantica/context/methods.py @@ -93,15 +93,15 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Callable, Union from pathlib import Path +from typing import Any, Callable, Dict, List, Optional, Union +from ..utils.exceptions import ConfigurationError, ProcessingError from ..utils.logging import get_logger -from ..utils.exceptions import ProcessingError, ConfigurationError -from .context_graph import ContextGraphBuilder, ContextNode, ContextEdge from .agent_memory import AgentMemory, MemoryItem +from .context_graph import ContextEdge, ContextGraphBuilder, ContextNode from .context_retriever import ContextRetriever, RetrievedContext -from .entity_linker import EntityLinker, EntityLink, LinkedEntity +from .entity_linker import EntityLink, EntityLinker, LinkedEntity from .registry import method_registry logger = get_logger("context_methods") diff --git a/semantica/context/registry.py b/semantica/context/registry.py index cb0f6cfd..f8226d36 100644 --- a/semantica/context/registry.py +++ b/semantica/context/registry.py @@ -40,7 +40,7 @@ Author: Semantica Contributors License: MIT """ -from typing import Dict, Callable, Any, List, Optional +from typing import Any, Callable, Dict, List, Optional class MethodRegistry: diff --git a/semantica/core/__init__.py b/semantica/core/__init__.py index cb3799d7..ab15ba3f 100644 --- a/semantica/core/__init__.py +++ b/semantica/core/__init__.py @@ -49,22 +49,22 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union from pathlib import Path +from typing import Any, Dict, List, Optional, Union -from .orchestrator import Semantica from .config_manager import Config, ConfigManager -from .lifecycle import LifecycleManager, SystemState, HealthStatus -from .plugin_registry import PluginRegistry, PluginInfo, LoadedPlugin -from .registry import MethodRegistry, method_registry +from .lifecycle import HealthStatus, LifecycleManager, SystemState from .methods import ( build_knowledge_base, - run_pipeline, - initialize_framework, - get_status, get_orchestration_method, - list_available_methods + get_status, + initialize_framework, + list_available_methods, + run_pipeline, ) +from .orchestrator import Semantica +from .plugin_registry import LoadedPlugin, PluginInfo, PluginRegistry +from .registry import MethodRegistry, method_registry __all__ = [ # Main orchestrator diff --git a/semantica/core/config_manager.py b/semantica/core/config_manager.py index 4fd4f6c1..36b89ede 100644 --- a/semantica/core/config_manager.py +++ b/semantica/core/config_manager.py @@ -51,23 +51,23 @@ Author: Semantica Contributors License: MIT """ -import os import json +import os from pathlib import Path from typing import Any, Dict, Optional, Union import yaml +from ..utils.constants import DEFAULT_CONFIG from ..utils.exceptions import ConfigurationError from ..utils.helpers import ( + get_nested_value, merge_dicts, read_json_file, - get_nested_value, set_nested_value, ) -from ..utils.validators import validate_config -from ..utils.constants import DEFAULT_CONFIG from ..utils.progress_tracker import get_progress_tracker +from ..utils.validators import validate_config class Config: diff --git a/semantica/core/lifecycle.py b/semantica/core/lifecycle.py index af68c7a2..3b60f70d 100644 --- a/semantica/core/lifecycle.py +++ b/semantica/core/lifecycle.py @@ -23,10 +23,10 @@ License: MIT """ import time +from collections import defaultdict +from dataclasses import dataclass, field from enum import Enum from typing import Any, Callable, Dict, List, Optional, Tuple -from dataclasses import dataclass, field -from collections import defaultdict from ..utils.exceptions import SemanticaError from ..utils.logging import get_logger diff --git a/semantica/core/methods.py b/semantica/core/methods.py index e66abd77..e1342201 100644 --- a/semantica/core/methods.py +++ b/semantica/core/methods.py @@ -79,13 +79,13 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union, Callable from pathlib import Path +from typing import Any, Callable, Dict, List, Optional, Union +from ..utils.exceptions import ConfigurationError, ProcessingError from ..utils.logging import get_logger -from ..utils.exceptions import ProcessingError, ConfigurationError -from .orchestrator import Semantica from .config_manager import Config, ConfigManager +from .orchestrator import Semantica from .registry import method_registry logger = get_logger("core_methods") diff --git a/semantica/core/orchestrator.py b/semantica/core/orchestrator.py index a97554a1..43d0d7c0 100644 --- a/semantica/core/orchestrator.py +++ b/semantica/core/orchestrator.py @@ -24,15 +24,15 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union from pathlib import Path +from typing import Any, Dict, List, Optional, Union -from .config_manager import Config, ConfigManager -from .lifecycle import LifecycleManager, SystemState -from .plugin_registry import PluginRegistry from ..utils.exceptions import ConfigurationError, ProcessingError from ..utils.logging import get_logger, log_execution_time from ..utils.progress_tracker import get_progress_tracker +from .config_manager import Config, ConfigManager +from .lifecycle import LifecycleManager, SystemState +from .plugin_registry import PluginRegistry class Semantica: @@ -426,10 +426,10 @@ class Semantica: try: # Import key modules to verify they're available # These imports don't create instances, just verify module availability - from ..kg import GraphBuilder - from ..pipeline import PipelineBuilder from ..ingest import FileIngestor + from ..kg import GraphBuilder from ..parse import DocumentParser + from ..pipeline import PipelineBuilder self.logger.debug("Framework modules verified and available") except ImportError as e: @@ -569,7 +569,7 @@ class Semantica: """ try: from ..kg import GraphBuilder - + # Extract entities and relationships from results graph_sources = [] for result in results: @@ -622,7 +622,7 @@ class Semantica: """ try: from ..embeddings import EmbeddingGenerator - + # Extract text content from results texts_to_embed = [] for result in results: @@ -759,8 +759,9 @@ class Semantica: # Try to get system metrics using psutil (optional dependency) try: - import psutil import os + + import psutil process = psutil.Process(os.getpid()) memory_info = process.memory_info() diff --git a/semantica/core/plugin_registry.py b/semantica/core/plugin_registry.py index 72766ffa..388a7505 100644 --- a/semantica/core/plugin_registry.py +++ b/semantica/core/plugin_registry.py @@ -25,9 +25,9 @@ import importlib import importlib.util import inspect import time +from dataclasses import dataclass, field from pathlib import Path from typing import Any, Dict, List, Optional, Type, Union -from dataclasses import dataclass, field from ..utils.exceptions import ConfigurationError, ValidationError from ..utils.logging import get_logger diff --git a/semantica/core/registry.py b/semantica/core/registry.py index 5ecc422b..1a698b8d 100644 --- a/semantica/core/registry.py +++ b/semantica/core/registry.py @@ -40,7 +40,7 @@ Author: Semantica Contributors License: MIT """ -from typing import Dict, Callable, Any, List, Optional +from typing import Any, Callable, Dict, List, Optional class MethodRegistry: diff --git a/semantica/deduplication/__init__.py b/semantica/deduplication/__init__.py index 138e272d..7b103bde 100644 --- a/semantica/deduplication/__init__.py +++ b/semantica/deduplication/__init__.py @@ -79,21 +79,26 @@ License: MIT from typing import Any, Dict, List, Optional, Union -from .entity_merger import EntityMerger, MergeOperation -from .similarity_calculator import SimilarityCalculator, SimilarityResult -from .duplicate_detector import DuplicateDetector, DuplicateCandidate, DuplicateGroup -from .merge_strategy import MergeStrategyManager, MergeStrategy, MergeResult, PropertyMergeRule -from .cluster_builder import ClusterBuilder, Cluster, ClusterResult -from .registry import MethodRegistry, method_registry -from .methods import ( - detect_duplicates, - merge_entities, - calculate_similarity, - build_clusters, - get_deduplication_method, - list_available_methods -) +from .cluster_builder import Cluster, ClusterBuilder, ClusterResult from .config import DeduplicationConfig, dedup_config +from .duplicate_detector import DuplicateCandidate, DuplicateDetector, DuplicateGroup +from .entity_merger import EntityMerger, MergeOperation +from .merge_strategy import ( + MergeResult, + MergeStrategy, + MergeStrategyManager, + PropertyMergeRule, +) +from .methods import ( + build_clusters, + calculate_similarity, + detect_duplicates, + get_deduplication_method, + list_available_methods, + merge_entities, +) +from .registry import MethodRegistry, method_registry +from .similarity_calculator import SimilarityCalculator, SimilarityResult __all__ = [ # Main classes diff --git a/semantica/deduplication/cluster_builder.py b/semantica/deduplication/cluster_builder.py index 1f6e8fa1..e6e4b5e6 100644 --- a/semantica/deduplication/cluster_builder.py +++ b/semantica/deduplication/cluster_builder.py @@ -41,8 +41,8 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Set, Tuple from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional, Set, Tuple from ..utils.exceptions import ProcessingError from ..utils.logging import get_logger diff --git a/semantica/deduplication/config.py b/semantica/deduplication/config.py index bf5e44c2..683ac603 100644 --- a/semantica/deduplication/config.py +++ b/semantica/deduplication/config.py @@ -40,8 +40,8 @@ License: MIT """ import os -from typing import Optional, Dict, Any from pathlib import Path +from typing import Any, Dict, Optional from ..utils.logging import get_logger diff --git a/semantica/deduplication/duplicate_detector.py b/semantica/deduplication/duplicate_detector.py index d9a2f4b2..64e54cf3 100644 --- a/semantica/deduplication/duplicate_detector.py +++ b/semantica/deduplication/duplicate_detector.py @@ -40,8 +40,8 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Set, Tuple from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional, Set, Tuple from ..utils.exceptions import ProcessingError from ..utils.logging import get_logger diff --git a/semantica/deduplication/entity_merger.py b/semantica/deduplication/entity_merger.py index 7ff4a284..c66a7354 100644 --- a/semantica/deduplication/entity_merger.py +++ b/semantica/deduplication/entity_merger.py @@ -42,14 +42,14 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass +from typing import Any, Dict, List, Optional from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .duplicate_detector import DuplicateDetector, DuplicateGroup -from .merge_strategy import MergeStrategyManager, MergeStrategy, MergeResult +from .merge_strategy import MergeResult, MergeStrategy, MergeStrategyManager @dataclass diff --git a/semantica/deduplication/merge_strategy.py b/semantica/deduplication/merge_strategy.py index 57f6b320..29bb5a9e 100644 --- a/semantica/deduplication/merge_strategy.py +++ b/semantica/deduplication/merge_strategy.py @@ -41,11 +41,11 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Callable from dataclasses import dataclass, field from enum import Enum +from typing import Any, Callable, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/deduplication/methods.py b/semantica/deduplication/methods.py index b3ec1991..6d5cff2b 100644 --- a/semantica/deduplication/methods.py +++ b/semantica/deduplication/methods.py @@ -94,16 +94,16 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union, Callable +from typing import Any, Callable, Dict, List, Optional, Union -from ..utils.logging import get_logger from ..utils.exceptions import ProcessingError -from .duplicate_detector import DuplicateDetector, DuplicateCandidate, DuplicateGroup +from ..utils.logging import get_logger +from .cluster_builder import Cluster, ClusterBuilder, ClusterResult +from .duplicate_detector import DuplicateCandidate, DuplicateDetector, DuplicateGroup from .entity_merger import EntityMerger, MergeOperation -from .similarity_calculator import SimilarityCalculator, SimilarityResult -from .cluster_builder import ClusterBuilder, Cluster, ClusterResult from .merge_strategy import MergeStrategy, MergeStrategyManager from .registry import method_registry +from .similarity_calculator import SimilarityCalculator, SimilarityResult logger = get_logger("deduplication_methods") diff --git a/semantica/deduplication/registry.py b/semantica/deduplication/registry.py index f555791b..96924cc6 100644 --- a/semantica/deduplication/registry.py +++ b/semantica/deduplication/registry.py @@ -40,7 +40,7 @@ Author: Semantica Contributors License: MIT """ -from typing import Dict, Callable, Any, List, Optional +from typing import Any, Callable, Dict, List, Optional class MethodRegistry: diff --git a/semantica/deduplication/similarity_calculator.py b/semantica/deduplication/similarity_calculator.py index 0ce038bc..a9ad3bbb 100644 --- a/semantica/deduplication/similarity_calculator.py +++ b/semantica/deduplication/similarity_calculator.py @@ -45,9 +45,9 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Tuple -from dataclasses import dataclass import math +from dataclasses import dataclass +from typing import Any, Dict, List, Optional, Tuple from ..utils.exceptions import ProcessingError from ..utils.logging import get_logger diff --git a/semantica/embeddings/__init__.py b/semantica/embeddings/__init__.py index 8ae788eb..d32faac7 100644 --- a/semantica/embeddings/__init__.py +++ b/semantica/embeddings/__init__.py @@ -105,47 +105,48 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union from pathlib import Path +from typing import Any, Dict, List, Optional, Union + import numpy as np -from .embedding_generator import EmbeddingGenerator -from .text_embedder import TextEmbedder -from .image_embedder import ImageEmbedder from .audio_embedder import AudioEmbedder -from .multimodal_embedder import MultimodalEmbedder -from .embedding_optimizer import EmbeddingOptimizer +from .config import EmbeddingsConfig, embeddings_config from .context_manager import ContextManager, ContextWindow -from .provider_adapters import ( - ProviderAdapter, - OpenAIAdapter, - BGEAdapter, - LlamaAdapter, - ProviderAdapterFactory, -) -from .pooling_strategies import ( - PoolingStrategy, - MeanPooling, - MaxPooling, - CLSPooling, - AttentionPooling, - HierarchicalPooling, - PoolingStrategyFactory, -) -from .registry import MethodRegistry, method_registry +from .embedding_generator import EmbeddingGenerator +from .embedding_optimizer import EmbeddingOptimizer +from .image_embedder import ImageEmbedder from .methods import ( - generate_embeddings, - embed_text, - embed_image, - embed_audio, - embed_multimodal, - optimize_embeddings, calculate_similarity, - pool_embeddings, + embed_audio, + embed_image, + embed_multimodal, + embed_text, + generate_embeddings, get_embedding_method, list_available_methods, + optimize_embeddings, + pool_embeddings, ) -from .config import EmbeddingsConfig, embeddings_config +from .multimodal_embedder import MultimodalEmbedder +from .pooling_strategies import ( + AttentionPooling, + CLSPooling, + HierarchicalPooling, + MaxPooling, + MeanPooling, + PoolingStrategy, + PoolingStrategyFactory, +) +from .provider_adapters import ( + BGEAdapter, + LlamaAdapter, + OpenAIAdapter, + ProviderAdapter, + ProviderAdapterFactory, +) +from .registry import MethodRegistry, method_registry +from .text_embedder import TextEmbedder __all__ = [ # Core Classes diff --git a/semantica/embeddings/config.py b/semantica/embeddings/config.py index cb18b0bb..b52dfe75 100644 --- a/semantica/embeddings/config.py +++ b/semantica/embeddings/config.py @@ -37,8 +37,8 @@ Example Usage: """ import os -from typing import Optional, Dict, Any from pathlib import Path +from typing import Any, Dict, Optional from ..utils.logging import get_logger diff --git a/semantica/embeddings/context_manager.py b/semantica/embeddings/context_manager.py index 5826dfcd..2c202c7e 100644 --- a/semantica/embeddings/context_manager.py +++ b/semantica/embeddings/context_manager.py @@ -154,7 +154,7 @@ class ContextManager: >>> print(window.context_id) """ import uuid - + # Generate unique context ID context_id = str(uuid.uuid4()) end_index = start_index + len(text) diff --git a/semantica/embeddings/embedding_generator.py b/semantica/embeddings/embedding_generator.py index b3e4959b..5225062a 100644 --- a/semantica/embeddings/embedding_generator.py +++ b/semantica/embeddings/embedding_generator.py @@ -31,11 +31,11 @@ import numpy as np from ..utils.exceptions import ProcessingError from ..utils.logging import get_logger -from .text_embedder import TextEmbedder -from .image_embedder import ImageEmbedder from .audio_embedder import AudioEmbedder -from .multimodal_embedder import MultimodalEmbedder from .embedding_optimizer import EmbeddingOptimizer +from .image_embedder import ImageEmbedder +from .multimodal_embedder import MultimodalEmbedder +from .text_embedder import TextEmbedder class EmbeddingGenerator: @@ -324,10 +324,11 @@ class EmbeddingGenerator: raise +from .embedding_optimizer import EmbeddingOptimizer as EmbeddingOptimizerImpl +from .multimodal_embedder import MultimodalEmbedder as MultimodalEmbedderImpl + # Re-export classes from other modules for convenience from .text_embedder import TextEmbedder as TextEmbedderImpl -from .multimodal_embedder import MultimodalEmbedder as MultimodalEmbedderImpl -from .embedding_optimizer import EmbeddingOptimizer as EmbeddingOptimizerImpl # Make classes available with same names TextEmbedder = TextEmbedderImpl diff --git a/semantica/embeddings/image_embedder.py b/semantica/embeddings/image_embedder.py index 46e03558..460318ac 100644 --- a/semantica/embeddings/image_embedder.py +++ b/semantica/embeddings/image_embedder.py @@ -31,8 +31,8 @@ from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger try: - import torch import clip + import torch CLIP_AVAILABLE = True except ImportError: CLIP_AVAILABLE = False diff --git a/semantica/embeddings/methods.py b/semantica/embeddings/methods.py index d57683f5..246a8bdc 100644 --- a/semantica/embeddings/methods.py +++ b/semantica/embeddings/methods.py @@ -116,22 +116,22 @@ Example Usage: >>> method = get_embedding_method("text", "custom_method") """ -from typing import Any, Dict, List, Optional, Callable, Union from pathlib import Path +from typing import Any, Callable, Dict, List, Optional, Union import numpy as np +from ..utils.exceptions import ConfigurationError, ProcessingError from ..utils.logging import get_logger -from ..utils.exceptions import ProcessingError, ConfigurationError -from .embedding_generator import EmbeddingGenerator -from .text_embedder import TextEmbedder -from .image_embedder import ImageEmbedder from .audio_embedder import AudioEmbedder -from .multimodal_embedder import MultimodalEmbedder +from .config import embeddings_config +from .embedding_generator import EmbeddingGenerator from .embedding_optimizer import EmbeddingOptimizer +from .image_embedder import ImageEmbedder +from .multimodal_embedder import MultimodalEmbedder from .pooling_strategies import PoolingStrategyFactory from .registry import method_registry -from .config import embeddings_config +from .text_embedder import TextEmbedder logger = get_logger("embeddings_methods") diff --git a/semantica/embeddings/multimodal_embedder.py b/semantica/embeddings/multimodal_embedder.py index c5666d3e..6ecce939 100644 --- a/semantica/embeddings/multimodal_embedder.py +++ b/semantica/embeddings/multimodal_embedder.py @@ -36,9 +36,9 @@ import numpy as np from ..utils.exceptions import ProcessingError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from .text_embedder import TextEmbedder -from .image_embedder import ImageEmbedder from .audio_embedder import AudioEmbedder +from .image_embedder import ImageEmbedder +from .text_embedder import TextEmbedder class MultimodalEmbedder: diff --git a/semantica/embeddings/registry.py b/semantica/embeddings/registry.py index 9472fcc0..7f6d37cb 100644 --- a/semantica/embeddings/registry.py +++ b/semantica/embeddings/registry.py @@ -42,7 +42,7 @@ Example Usage: >>> available = method_registry.list_all("text") """ -from typing import Dict, Callable, Any, List, Optional +from typing import Any, Callable, Dict, List, Optional class MethodRegistry: diff --git a/semantica/embeddings/text_embedder.py b/semantica/embeddings/text_embedder.py index 311a7232..9a373194 100644 --- a/semantica/embeddings/text_embedder.py +++ b/semantica/embeddings/text_embedder.py @@ -225,7 +225,7 @@ class TextEmbedder: np.ndarray: 128-dimensional hash-based embedding vector """ import hashlib - + # Generate hash from text hash_obj = hashlib.sha256(text.encode('utf-8')) hash_bytes = hash_obj.digest() diff --git a/semantica/export/__init__.py b/semantica/export/__init__.py index d30f7707..c0a0d3a1 100644 --- a/semantica/export/__init__.py +++ b/semantica/export/__init__.py @@ -122,39 +122,31 @@ Author: Semantica Contributors License: MIT """ -from .rdf_exporter import ( - RDFExporter, - RDFSerializer, - RDFValidator, - NamespaceManager, -) -from .json_exporter import JSONExporter +from .config import ExportConfig, export_config from .csv_exporter import CSVExporter from .graph_exporter import GraphExporter -from .yaml_exporter import ( - SemanticNetworkYAMLExporter, - YAMLSchemaExporter, -) -from .report_generator import ReportGenerator -from .owl_exporter import OWLExporter -from .vector_exporter import VectorExporter +from .json_exporter import JSONExporter from .lpg_exporter import LPGExporter -from .registry import MethodRegistry, method_registry from .methods import ( - export_rdf, - export_json, export_csv, export_graph, - export_yaml, - export_owl, - export_vector, - export_lpg, - generate_report, + export_json, export_knowledge_graph, + export_lpg, + export_owl, + export_rdf, + export_vector, + export_yaml, + generate_report, get_export_method, list_available_methods, ) -from .config import ExportConfig, export_config +from .owl_exporter import OWLExporter +from .rdf_exporter import NamespaceManager, RDFExporter, RDFSerializer, RDFValidator +from .registry import MethodRegistry, method_registry +from .report_generator import ReportGenerator +from .vector_exporter import VectorExporter +from .yaml_exporter import SemanticNetworkYAMLExporter, YAMLSchemaExporter __all__ = [ # Core Exporters diff --git a/semantica/export/config.py b/semantica/export/config.py index 9343f8b8..66f2f5d1 100644 --- a/semantica/export/config.py +++ b/semantica/export/config.py @@ -37,8 +37,8 @@ Example Usage: """ import os -from typing import Optional, Dict, Any from pathlib import Path +from typing import Any, Dict, Optional from ..utils.logging import get_logger diff --git a/semantica/export/csv_exporter.py b/semantica/export/csv_exporter.py index 53a69c3c..872c1d00 100644 --- a/semantica/export/csv_exporter.py +++ b/semantica/export/csv_exporter.py @@ -23,14 +23,14 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union -from pathlib import Path import csv from collections import defaultdict +from pathlib import Path +from typing import Any, Dict, List, Optional, Union -from ..utils.exceptions import ValidationError, ProcessingError -from ..utils.logging import get_logger +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.helpers import ensure_directory +from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/export/graph_exporter.py b/semantica/export/graph_exporter.py index 7bc13032..47e70367 100644 --- a/semantica/export/graph_exporter.py +++ b/semantica/export/graph_exporter.py @@ -22,13 +22,13 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union -from pathlib import Path import json +from pathlib import Path +from typing import Any, Dict, List, Optional, Union -from ..utils.exceptions import ValidationError, ProcessingError -from ..utils.logging import get_logger +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.helpers import ensure_directory +from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/export/json_exporter.py b/semantica/export/json_exporter.py index 43262b9a..b6d2e998 100644 --- a/semantica/export/json_exporter.py +++ b/semantica/export/json_exporter.py @@ -23,14 +23,14 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union -from pathlib import Path import json from datetime import datetime +from pathlib import Path +from typing import Any, Dict, List, Optional, Union -from ..utils.exceptions import ValidationError, ProcessingError -from ..utils.logging import get_logger +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.helpers import ensure_directory, write_json_file +from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/export/lpg_exporter.py b/semantica/export/lpg_exporter.py index bd821d49..ac849381 100644 --- a/semantica/export/lpg_exporter.py +++ b/semantica/export/lpg_exporter.py @@ -20,12 +20,12 @@ Example Usage: >>> exporter.export_to_neo4j(kg, uri="bolt://localhost:7687", username="neo4j", password="password") """ -from typing import Any, Dict, List, Optional, Union from pathlib import Path +from typing import Any, Dict, List, Optional, Union -from ..utils.exceptions import ValidationError, ProcessingError -from ..utils.logging import get_logger +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.helpers import ensure_directory +from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/export/methods.py b/semantica/export/methods.py index 3b111c22..f8da9f1c 100644 --- a/semantica/export/methods.py +++ b/semantica/export/methods.py @@ -151,22 +151,22 @@ Example Usage: >>> export_lpg(kg, "output.cypher", method="cypher") """ -from typing import Any, Dict, List, Optional, Callable, Union from pathlib import Path +from typing import Any, Callable, Dict, List, Optional, Union +from ..utils.exceptions import ConfigurationError, ProcessingError from ..utils.logging import get_logger -from ..utils.exceptions import ProcessingError, ConfigurationError -from .rdf_exporter import RDFExporter -from .json_exporter import JSONExporter +from .config import export_config from .csv_exporter import CSVExporter from .graph_exporter import GraphExporter -from .yaml_exporter import SemanticNetworkYAMLExporter, YAMLSchemaExporter -from .owl_exporter import OWLExporter -from .vector_exporter import VectorExporter +from .json_exporter import JSONExporter from .lpg_exporter import LPGExporter -from .report_generator import ReportGenerator +from .owl_exporter import OWLExporter +from .rdf_exporter import RDFExporter from .registry import method_registry -from .config import export_config +from .report_generator import ReportGenerator +from .vector_exporter import VectorExporter +from .yaml_exporter import SemanticNetworkYAMLExporter, YAMLSchemaExporter logger = get_logger("export_methods") diff --git a/semantica/export/owl_exporter.py b/semantica/export/owl_exporter.py index e3d9165b..e0e20587 100644 --- a/semantica/export/owl_exporter.py +++ b/semantica/export/owl_exporter.py @@ -22,13 +22,13 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union -from pathlib import Path from datetime import datetime +from pathlib import Path +from typing import Any, Dict, List, Optional, Union -from ..utils.exceptions import ValidationError, ProcessingError -from ..utils.logging import get_logger +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.helpers import ensure_directory +from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/export/rdf_exporter.py b/semantica/export/rdf_exporter.py index 03d63326..2be039f5 100644 --- a/semantica/export/rdf_exporter.py +++ b/semantica/export/rdf_exporter.py @@ -29,12 +29,12 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Set, Union from pathlib import Path +from typing import Any, Dict, List, Optional, Set, Union -from ..utils.exceptions import ValidationError, ProcessingError -from ..utils.logging import get_logger +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.helpers import ensure_directory +from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker @@ -417,7 +417,7 @@ class RDFSerializer: >>> jsonld = serializer.serialize_to_jsonld(rdf_data) """ import json - + # Initialize JSON-LD structure with context jsonld = { "@context": { diff --git a/semantica/export/registry.py b/semantica/export/registry.py index c094b620..979eb43f 100644 --- a/semantica/export/registry.py +++ b/semantica/export/registry.py @@ -43,7 +43,7 @@ Example Usage: >>> available = method_registry.list_all("json") """ -from typing import Dict, Callable, Any, List, Optional +from typing import Any, Callable, Dict, List, Optional class MethodRegistry: diff --git a/semantica/export/report_generator.py b/semantica/export/report_generator.py index 09bd8511..85f4178e 100644 --- a/semantica/export/report_generator.py +++ b/semantica/export/report_generator.py @@ -23,14 +23,14 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union -from pathlib import Path -from datetime import datetime import json +from datetime import datetime +from pathlib import Path +from typing import Any, Dict, List, Optional, Union -from ..utils.exceptions import ValidationError, ProcessingError -from ..utils.logging import get_logger +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.helpers import ensure_directory +from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/export/vector_exporter.py b/semantica/export/vector_exporter.py index 576ea319..ab6bf959 100644 --- a/semantica/export/vector_exporter.py +++ b/semantica/export/vector_exporter.py @@ -22,14 +22,15 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union -from pathlib import Path import json +from pathlib import Path +from typing import Any, Dict, List, Optional, Union + import numpy as np -from ..utils.exceptions import ValidationError, ProcessingError -from ..utils.logging import get_logger +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.helpers import ensure_directory, write_json_file +from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/export/yaml_exporter.py b/semantica/export/yaml_exporter.py index 5310c47e..bb82b039 100644 --- a/semantica/export/yaml_exporter.py +++ b/semantica/export/yaml_exporter.py @@ -21,13 +21,13 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union -from pathlib import Path from datetime import datetime +from pathlib import Path +from typing import Any, Dict, List, Optional, Union -from ..utils.exceptions import ValidationError, ProcessingError -from ..utils.logging import get_logger +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.helpers import ensure_directory +from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/ingest/__init__.py b/semantica/ingest/__init__.py index 85d3c8d5..198c26c4 100644 --- a/semantica/ingest/__init__.py +++ b/semantica/ingest/__init__.py @@ -110,42 +110,61 @@ Example Usage: >>> content = ingest_web("https://example.com", method="url") """ -from typing import Any, Dict, List, Optional, Union from pathlib import Path +from typing import Any, Dict, List, Optional, Union -from .file_ingestor import FileIngestor, FileObject, FileTypeDetector, CloudStorageIngestor -from .web_ingestor import WebIngestor, WebContent, RateLimiter, RobotsChecker, ContentExtractor, SitemapCrawler -from .feed_ingestor import FeedIngestor, FeedItem, FeedData, FeedParser, FeedMonitor -from .stream_ingestor import ( - StreamIngestor, - StreamMessage, - StreamProcessor, - KafkaProcessor, - RabbitMQProcessor, - KinesisProcessor, - PulsarProcessor, - StreamMonitor, +from .config import IngestConfig, ingest_config +from .db_ingestor import DatabaseConnector, DataExporter, DBIngestor, TableData +from .email_ingestor import AttachmentProcessor, EmailData, EmailIngestor +from .email_ingestor import EmailParser as EmailIngestorParser +from .feed_ingestor import FeedData, FeedIngestor, FeedItem, FeedMonitor, FeedParser +from .file_ingestor import ( + CloudStorageIngestor, + FileIngestor, + FileObject, + FileTypeDetector, ) -from .repo_ingestor import RepoIngestor, CodeFile, CommitInfo, CodeExtractor, GitAnalyzer -from .email_ingestor import EmailIngestor, EmailData, AttachmentProcessor, EmailParser as EmailIngestorParser -from .db_ingestor import DBIngestor, TableData, DatabaseConnector, DataExporter -from .mcp_ingestor import MCPIngestor, MCPData from .mcp_client import MCPClient, MCPResource, MCPTool -from .registry import MethodRegistry, method_registry +from .mcp_ingestor import MCPData, MCPIngestor from .methods import ( - ingest, - ingest_file, - ingest_web, - ingest_feed, - ingest_stream, - ingest_repository, - ingest_email, - ingest_database, - ingest_mcp, get_ingest_method, + ingest, + ingest_database, + ingest_email, + ingest_feed, + ingest_file, + ingest_mcp, + ingest_repository, + ingest_stream, + ingest_web, list_available_methods, ) -from .config import IngestConfig, ingest_config +from .registry import MethodRegistry, method_registry +from .repo_ingestor import ( + CodeExtractor, + CodeFile, + CommitInfo, + GitAnalyzer, + RepoIngestor, +) +from .stream_ingestor import ( + KafkaProcessor, + KinesisProcessor, + PulsarProcessor, + RabbitMQProcessor, + StreamIngestor, + StreamMessage, + StreamMonitor, + StreamProcessor, +) +from .web_ingestor import ( + ContentExtractor, + RateLimiter, + RobotsChecker, + SitemapCrawler, + WebContent, + WebIngestor, +) __all__ = [ # File ingestion diff --git a/semantica/ingest/config.py b/semantica/ingest/config.py index a21f0ace..cb91659c 100644 --- a/semantica/ingest/config.py +++ b/semantica/ingest/config.py @@ -37,8 +37,8 @@ Example Usage: """ import os -from typing import Optional, Dict, Any from pathlib import Path +from typing import Any, Dict, Optional from ..utils.logging import get_logger diff --git a/semantica/ingest/email_ingestor.py b/semantica/ingest/email_ingestor.py index 800aa4f9..1072e6df 100644 --- a/semantica/ingest/email_ingestor.py +++ b/semantica/ingest/email_ingestor.py @@ -848,7 +848,7 @@ class EmailIngestor: addresses = [] try: - from email.utils import parseaddr, getaddresses + from email.utils import getaddresses, parseaddr parsed_addresses = getaddresses([address_string]) addresses = [addr[1] for addr in parsed_addresses if addr[1]] except Exception: diff --git a/semantica/ingest/feed_ingestor.py b/semantica/ingest/feed_ingestor.py index aea90416..ea5195c2 100644 --- a/semantica/ingest/feed_ingestor.py +++ b/semantica/ingest/feed_ingestor.py @@ -28,15 +28,15 @@ Author: Semantica Contributors License: MIT """ -import time import threading +import time +import xml.etree.ElementTree as ET from dataclasses import dataclass, field from datetime import datetime from typing import Any, Dict, List, Optional from urllib.parse import urljoin, urlparse import requests -import xml.etree.ElementTree as ET from bs4 import BeautifulSoup from ..utils.exceptions import ProcessingError, ValidationError @@ -333,7 +333,7 @@ class FeedParser: def _parse_date(self, date_string: str) -> Optional[datetime]: """Parse date string to datetime.""" from datetime import datetime as dt - + # Try common date formats formats = [ "%a, %d %b %Y %H:%M:%S %z", # RFC 822 diff --git a/semantica/ingest/file_ingestor.py b/semantica/ingest/file_ingestor.py index c48c811b..6f6acad8 100644 --- a/semantica/ingest/file_ingestor.py +++ b/semantica/ingest/file_ingestor.py @@ -24,21 +24,21 @@ License: MIT import mimetypes import os -from pathlib import Path -from typing import Any, Dict, List, Optional, Union from dataclasses import dataclass, field from datetime import datetime +from pathlib import Path +from typing import Any, Dict, List, Optional, Union +from ..utils.constants import ( + FILE_SIZE_LIMITS, + SUPPORTED_AUDIO_FORMATS, + SUPPORTED_DOCUMENT_FORMATS, + SUPPORTED_IMAGE_FORMATS, + SUPPORTED_VIDEO_FORMATS, +) from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from ..utils.constants import ( - SUPPORTED_DOCUMENT_FORMATS, - SUPPORTED_IMAGE_FORMATS, - SUPPORTED_AUDIO_FORMATS, - SUPPORTED_VIDEO_FORMATS, - FILE_SIZE_LIMITS -) @dataclass diff --git a/semantica/ingest/mcp_client.py b/semantica/ingest/mcp_client.py index 0909cee1..f2603d9b 100644 --- a/semantica/ingest/mcp_client.py +++ b/semantica/ingest/mcp_client.py @@ -35,9 +35,9 @@ License: MIT import json import subprocess import sys -from typing import Any, Dict, List, Optional, Union from dataclasses import dataclass, field from datetime import datetime +from typing import Any, Dict, List, Optional, Union from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger diff --git a/semantica/ingest/methods.py b/semantica/ingest/methods.py index 9984ae8f..141cc1ef 100644 --- a/semantica/ingest/methods.py +++ b/semantica/ingest/methods.py @@ -139,21 +139,21 @@ Example Usage: >>> content = ingest_web("https://example.com", method="url") """ -from typing import Any, Dict, List, Optional, Callable, Union from pathlib import Path +from typing import Any, Callable, Dict, List, Optional, Union +from ..utils.exceptions import ConfigurationError, ProcessingError from ..utils.logging import get_logger -from ..utils.exceptions import ProcessingError, ConfigurationError -from .file_ingestor import FileIngestor, FileObject -from .web_ingestor import WebIngestor, WebContent -from .feed_ingestor import FeedIngestor, FeedData -from .stream_ingestor import StreamIngestor, StreamProcessor -from .repo_ingestor import RepoIngestor -from .email_ingestor import EmailIngestor, EmailData -from .db_ingestor import DBIngestor, TableData -from .mcp_ingestor import MCPIngestor, MCPData -from .registry import method_registry from .config import ingest_config +from .db_ingestor import DBIngestor, TableData +from .email_ingestor import EmailData, EmailIngestor +from .feed_ingestor import FeedData, FeedIngestor +from .file_ingestor import FileIngestor, FileObject +from .mcp_ingestor import MCPData, MCPIngestor +from .registry import method_registry +from .repo_ingestor import RepoIngestor +from .stream_ingestor import StreamIngestor, StreamProcessor +from .web_ingestor import WebContent, WebIngestor logger = get_logger("ingest_methods") diff --git a/semantica/ingest/registry.py b/semantica/ingest/registry.py index 5910169d..030f28c1 100644 --- a/semantica/ingest/registry.py +++ b/semantica/ingest/registry.py @@ -41,7 +41,7 @@ Example Usage: >>> available = method_registry.list_all("file") """ -from typing import Dict, Callable, Any, List, Optional +from typing import Any, Callable, Dict, List, Optional class MethodRegistry: diff --git a/semantica/ingest/web_ingestor.py b/semantica/ingest/web_ingestor.py index a28ade9b..c0cf8e95 100644 --- a/semantica/ingest/web_ingestor.py +++ b/semantica/ingest/web_ingestor.py @@ -31,8 +31,8 @@ Author: Semantica Contributors License: MIT """ -import time import re +import time import xml.etree.ElementTree as ET from dataclasses import dataclass, field from datetime import datetime diff --git a/semantica/kg/__init__.py b/semantica/kg/__init__.py index c0a8c324..69783b18 100644 --- a/semantica/kg/__init__.py +++ b/semantica/kg/__init__.py @@ -140,34 +140,38 @@ License: MIT from typing import Any, Dict, List, Optional, Union -from .graph_builder import GraphBuilder -from .entity_resolver import EntityResolver -from .graph_analyzer import GraphAnalyzer -from .temporal_query import TemporalGraphQuery, TemporalPatternDetector, TemporalVersionManager -from .conflict_detector import ConflictDetector -from .provenance_tracker import ProvenanceTracker from .centrality_calculator import CentralityCalculator from .community_detector import CommunityDetector +from .config import KGConfig, kg_config +from .conflict_detector import ConflictDetector from .connectivity_analyzer import ConnectivityAnalyzer from .deduplicator import Deduplicator +from .entity_resolver import EntityResolver +from .graph_analyzer import GraphAnalyzer +from .graph_builder import GraphBuilder from .graph_validator import GraphValidator -from .seed_manager import SeedManager -from .registry import MethodRegistry, method_registry from .methods import ( - build_kg, - analyze_graph, - resolve_entities, - validate_graph, - detect_conflicts, - calculate_centrality, - detect_communities, analyze_connectivity, + analyze_graph, + build_kg, + calculate_centrality, deduplicate_graph, - query_temporal, + detect_communities, + detect_conflicts, get_kg_method, list_available_methods, + query_temporal, + resolve_entities, + validate_graph, +) +from .provenance_tracker import ProvenanceTracker +from .registry import MethodRegistry, method_registry +from .seed_manager import SeedManager +from .temporal_query import ( + TemporalGraphQuery, + TemporalPatternDetector, + TemporalVersionManager, ) -from .config import KGConfig, kg_config __all__ = [ # Core Classes diff --git a/semantica/kg/centrality_calculator.py b/semantica/kg/centrality_calculator.py index 435304f5..a221a684 100644 --- a/semantica/kg/centrality_calculator.py +++ b/semantica/kg/centrality_calculator.py @@ -21,8 +21,8 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from collections import defaultdict, deque +from typing import Any, Dict, List, Optional from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/kg/community_detector.py b/semantica/kg/community_detector.py index dff09ee1..c1d462a1 100644 --- a/semantica/kg/community_detector.py +++ b/semantica/kg/community_detector.py @@ -26,8 +26,8 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from collections import defaultdict +from typing import Any, Dict, List, Optional from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/kg/config.py b/semantica/kg/config.py index b21510b0..c4d57729 100644 --- a/semantica/kg/config.py +++ b/semantica/kg/config.py @@ -37,8 +37,8 @@ Example Usage: """ import os -from typing import Optional, Dict, Any from pathlib import Path +from typing import Any, Dict, Optional from ..utils.logging import get_logger diff --git a/semantica/kg/conflict_detector.py b/semantica/kg/conflict_detector.py index dc8a52ab..e1b37410 100644 --- a/semantica/kg/conflict_detector.py +++ b/semantica/kg/conflict_detector.py @@ -27,10 +27,11 @@ License: MIT from typing import Any, Dict, List, Optional +from ..conflicts.conflict_detector import Conflict +from ..conflicts.conflict_detector import ConflictDetector as BaseConflictDetector +from ..conflicts.conflict_resolver import ConflictResolver from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from ..conflicts.conflict_detector import ConflictDetector as BaseConflictDetector, Conflict -from ..conflicts.conflict_resolver import ConflictResolver class ConflictDetector: diff --git a/semantica/kg/connectivity_analyzer.py b/semantica/kg/connectivity_analyzer.py index 7b3aa7e3..6795a5c2 100644 --- a/semantica/kg/connectivity_analyzer.py +++ b/semantica/kg/connectivity_analyzer.py @@ -28,8 +28,8 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Set, Tuple from collections import defaultdict, deque +from typing import Any, Dict, List, Optional, Set, Tuple from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/kg/deduplicator.py b/semantica/kg/deduplicator.py index a0d3c977..52d3d135 100644 --- a/semantica/kg/deduplicator.py +++ b/semantica/kg/deduplicator.py @@ -27,10 +27,10 @@ License: MIT from typing import Any, Dict, List, Optional -from ..utils.logging import get_logger -from ..utils.progress_tracker import get_progress_tracker from ..deduplication.duplicate_detector import DuplicateDetector, DuplicateGroup from ..deduplication.entity_merger import EntityMerger +from ..utils.logging import get_logger +from ..utils.progress_tracker import get_progress_tracker class Deduplicator: diff --git a/semantica/kg/entity_resolver.py b/semantica/kg/entity_resolver.py index a0d4e3e4..b4ca14d7 100644 --- a/semantica/kg/entity_resolver.py +++ b/semantica/kg/entity_resolver.py @@ -22,10 +22,10 @@ License: MIT from typing import Any, Dict, List, Optional -from ..utils.logging import get_logger -from ..utils.progress_tracker import get_progress_tracker from ..deduplication.duplicate_detector import DuplicateDetector from ..deduplication.entity_merger import EntityMerger +from ..utils.logging import get_logger +from ..utils.progress_tracker import get_progress_tracker class EntityResolver: diff --git a/semantica/kg/graph_analyzer.py b/semantica/kg/graph_analyzer.py index c936010a..ba197967 100644 --- a/semantica/kg/graph_analyzer.py +++ b/semantica/kg/graph_analyzer.py @@ -22,10 +22,10 @@ Author: Semantica Contributors License: MIT """ +from ..utils.progress_tracker import get_progress_tracker from .centrality_calculator import CentralityCalculator from .community_detector import CommunityDetector from .connectivity_analyzer import ConnectivityAnalyzer -from ..utils.progress_tracker import get_progress_tracker class GraphAnalyzer: diff --git a/semantica/kg/graph_builder.py b/semantica/kg/graph_builder.py index 8577191b..96967418 100644 --- a/semantica/kg/graph_builder.py +++ b/semantica/kg/graph_builder.py @@ -22,8 +22,8 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union from datetime import datetime +from typing import Any, Dict, List, Optional, Union class GraphBuilder: diff --git a/semantica/kg/graph_validator.py b/semantica/kg/graph_validator.py index 6df7bebe..4da2c1eb 100644 --- a/semantica/kg/graph_validator.py +++ b/semantica/kg/graph_validator.py @@ -26,8 +26,8 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass +from typing import Any, Dict, List, Optional from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/kg/methods.py b/semantica/kg/methods.py index 3cec7dcf..4a48f420 100644 --- a/semantica/kg/methods.py +++ b/semantica/kg/methods.py @@ -149,22 +149,22 @@ Example Usage: >>> centrality = calculate_centrality(kg, method="degree") """ -from typing import Any, Dict, List, Optional, Callable, Union +from typing import Any, Callable, Dict, List, Optional, Union +from ..utils.exceptions import ConfigurationError, ProcessingError from ..utils.logging import get_logger -from ..utils.exceptions import ProcessingError, ConfigurationError -from .graph_builder import GraphBuilder -from .graph_analyzer import GraphAnalyzer -from .entity_resolver import EntityResolver -from .graph_validator import GraphValidator -from .conflict_detector import ConflictDetector from .centrality_calculator import CentralityCalculator from .community_detector import CommunityDetector +from .config import kg_config +from .conflict_detector import ConflictDetector from .connectivity_analyzer import ConnectivityAnalyzer from .deduplicator import Deduplicator -from .temporal_query import TemporalGraphQuery +from .entity_resolver import EntityResolver +from .graph_analyzer import GraphAnalyzer +from .graph_builder import GraphBuilder +from .graph_validator import GraphValidator from .registry import method_registry -from .config import kg_config +from .temporal_query import TemporalGraphQuery logger = get_logger("kg_methods") diff --git a/semantica/kg/provenance_tracker.py b/semantica/kg/provenance_tracker.py index e7a6073b..9345fd94 100644 --- a/semantica/kg/provenance_tracker.py +++ b/semantica/kg/provenance_tracker.py @@ -26,8 +26,8 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from datetime import datetime +from typing import Any, Dict, List, Optional from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/kg/registry.py b/semantica/kg/registry.py index 6cd218e9..7e6b8036 100644 --- a/semantica/kg/registry.py +++ b/semantica/kg/registry.py @@ -43,7 +43,7 @@ Example Usage: >>> available = method_registry.list_all("build") """ -from typing import Dict, Callable, Any, List, Optional +from typing import Any, Callable, Dict, List, Optional class MethodRegistry: diff --git a/semantica/kg/seed_manager.py b/semantica/kg/seed_manager.py index 568e59a1..92a44c97 100644 --- a/semantica/kg/seed_manager.py +++ b/semantica/kg/seed_manager.py @@ -26,8 +26,8 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from datetime import datetime +from typing import Any, Dict, List, Optional from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/kg_qa/__init__.py b/semantica/kg_qa/__init__.py index 0cd4df37..d34f483a 100644 --- a/semantica/kg_qa/__init__.py +++ b/semantica/kg_qa/__init__.py @@ -107,30 +107,35 @@ License: MIT from typing import Any, Dict, List, Optional, Union -from .kg_quality_assessor import ( - KGQualityAssessor, - ConsistencyChecker, - CompletenessValidator, -) -from .quality_metrics import QualityMetrics, CompletenessMetrics, ConsistencyMetrics -from .validation_engine import ValidationEngine, RuleValidator, ConstraintValidator -from .reporting import QualityReporter, IssueTracker, ImprovementSuggestions, QualityReport from .automated_fixes import AutomatedFixer, AutoMerger, AutoResolver, FixResult -from .registry import MethodRegistry, method_registry +from .config import KGQAConfig, kg_qa_config +from .kg_quality_assessor import ( + CompletenessValidator, + ConsistencyChecker, + KGQualityAssessor, +) from .methods import ( assess_quality, - generate_quality_report, - identify_quality_issues, - check_consistency, - validate_completeness, calculate_quality_metrics, - validate_graph, + check_consistency, export_report, fix_issues, + generate_quality_report, get_qa_method, + identify_quality_issues, list_available_methods, + validate_completeness, + validate_graph, ) -from .config import KGQAConfig, kg_qa_config +from .quality_metrics import CompletenessMetrics, ConsistencyMetrics, QualityMetrics +from .registry import MethodRegistry, method_registry +from .reporting import ( + ImprovementSuggestions, + IssueTracker, + QualityReport, + QualityReporter, +) +from .validation_engine import ConstraintValidator, RuleValidator, ValidationEngine __all__ = [ # Main classes diff --git a/semantica/kg_qa/automated_fixes.py b/semantica/kg_qa/automated_fixes.py index 82b2771d..9f970537 100644 --- a/semantica/kg_qa/automated_fixes.py +++ b/semantica/kg_qa/automated_fixes.py @@ -26,8 +26,8 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass +from typing import Any, Dict, List, Optional from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/kg_qa/config.py b/semantica/kg_qa/config.py index 634b3f82..ffbbf6f6 100644 --- a/semantica/kg_qa/config.py +++ b/semantica/kg_qa/config.py @@ -37,8 +37,8 @@ Example Usage: """ import os -from typing import Optional, Dict, Any from pathlib import Path +from typing import Any, Dict, Optional from ..utils.logging import get_logger diff --git a/semantica/kg_qa/kg_quality_assessor.py b/semantica/kg_qa/kg_quality_assessor.py index d5317653..d685e76d 100644 --- a/semantica/kg_qa/kg_quality_assessor.py +++ b/semantica/kg_qa/kg_quality_assessor.py @@ -32,9 +32,9 @@ from typing import Any, Dict, List, Optional from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from .quality_metrics import QualityMetrics, CompletenessMetrics, ConsistencyMetrics +from .quality_metrics import CompletenessMetrics, ConsistencyMetrics, QualityMetrics +from .reporting import QualityReport, QualityReporter from .validation_engine import ValidationEngine -from .reporting import QualityReporter, QualityReport class KGQualityAssessor: diff --git a/semantica/kg_qa/methods.py b/semantica/kg_qa/methods.py index 6963f02b..51a0e640 100644 --- a/semantica/kg_qa/methods.py +++ b/semantica/kg_qa/methods.py @@ -106,17 +106,21 @@ Example Usage: >>> report = generate_quality_report(knowledge_graph, schema, method="default") """ -from typing import Any, Dict, List, Optional, Callable, Union +from typing import Any, Callable, Dict, List, Optional, Union +from ..utils.exceptions import ConfigurationError, ProcessingError from ..utils.logging import get_logger -from ..utils.exceptions import ProcessingError, ConfigurationError -from .kg_quality_assessor import KGQualityAssessor, ConsistencyChecker, CompletenessValidator -from .quality_metrics import QualityMetrics, CompletenessMetrics, ConsistencyMetrics -from .validation_engine import ValidationEngine -from .reporting import QualityReporter, QualityReport from .automated_fixes import AutomatedFixer, FixResult -from .registry import method_registry from .config import kg_qa_config +from .kg_quality_assessor import ( + CompletenessValidator, + ConsistencyChecker, + KGQualityAssessor, +) +from .quality_metrics import CompletenessMetrics, ConsistencyMetrics, QualityMetrics +from .registry import method_registry +from .reporting import QualityReport, QualityReporter +from .validation_engine import ValidationEngine logger = get_logger("kg_qa_methods") diff --git a/semantica/kg_qa/quality_metrics.py b/semantica/kg_qa/quality_metrics.py index e16ece8b..4e2f5540 100644 --- a/semantica/kg_qa/quality_metrics.py +++ b/semantica/kg_qa/quality_metrics.py @@ -27,8 +27,8 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass +from typing import Any, Dict, List, Optional from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/kg_qa/registry.py b/semantica/kg_qa/registry.py index 1b3aa9c8..ab61b9ef 100644 --- a/semantica/kg_qa/registry.py +++ b/semantica/kg_qa/registry.py @@ -40,7 +40,7 @@ Example Usage: >>> available = method_registry.list_all("assess") """ -from typing import Dict, Callable, Any, List, Optional +from typing import Any, Callable, Dict, List, Optional class MethodRegistry: diff --git a/semantica/kg_qa/reporting.py b/semantica/kg_qa/reporting.py index e221bb92..5bf88a8a 100644 --- a/semantica/kg_qa/reporting.py +++ b/semantica/kg_qa/reporting.py @@ -27,9 +27,9 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass, field from datetime import datetime +from typing import Any, Dict, List, Optional from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/kg_qa/validation_engine.py b/semantica/kg_qa/validation_engine.py index c6ee0743..900066ce 100644 --- a/semantica/kg_qa/validation_engine.py +++ b/semantica/kg_qa/validation_engine.py @@ -25,8 +25,8 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Callable from dataclasses import dataclass, field +from typing import Any, Callable, Dict, List, Optional from ..utils.exceptions import ValidationError from ..utils.logging import get_logger diff --git a/semantica/normalize/__init__.py b/semantica/normalize/__init__.py index 438b4512..8ee5dd59 100644 --- a/semantica/normalize/__init__.py +++ b/semantica/normalize/__init__.py @@ -119,62 +119,62 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union, Tuple +from typing import Any, Dict, List, Optional, Tuple, Union -from .text_normalizer import ( - TextNormalizer, - UnicodeNormalizer, - WhitespaceNormalizer, - SpecialCharacterProcessor, -) -from .entity_normalizer import ( - EntityNormalizer, - AliasResolver, - EntityDisambiguator, - NameVariantHandler, +from .config import NormalizeConfig, normalize_config +from .data_cleaner import ( + DataCleaner, + DataValidator, + DuplicateDetector, + DuplicateGroup, + MissingValueHandler, + ValidationResult, ) from .date_normalizer import ( DateNormalizer, - TimeZoneNormalizer, RelativeDateProcessor, TemporalExpressionParser, + TimeZoneNormalizer, ) -from .number_normalizer import ( - NumberNormalizer, - UnitConverter, - CurrencyNormalizer, - ScientificNotationHandler, -) -from .data_cleaner import ( - DataCleaner, - DuplicateDetector, - DataValidator, - MissingValueHandler, - DuplicateGroup, - ValidationResult, -) -from .text_cleaner import TextCleaner -from .language_detector import LanguageDetector from .encoding_handler import EncodingHandler -from .registry import MethodRegistry, method_registry +from .entity_normalizer import ( + AliasResolver, + EntityDisambiguator, + EntityNormalizer, + NameVariantHandler, +) +from .language_detector import LanguageDetector from .methods import ( - normalize_text, - clean_text, - normalize_entity, - resolve_aliases, - disambiguate_entity, - normalize_date, - normalize_time, - normalize_number, - normalize_quantity, clean_data, + clean_text, detect_duplicates, detect_language, - handle_encoding, + disambiguate_entity, get_normalize_method, + handle_encoding, list_available_methods, + normalize_date, + normalize_entity, + normalize_number, + normalize_quantity, + normalize_text, + normalize_time, + resolve_aliases, +) +from .number_normalizer import ( + CurrencyNormalizer, + NumberNormalizer, + ScientificNotationHandler, + UnitConverter, +) +from .registry import MethodRegistry, method_registry +from .text_cleaner import TextCleaner +from .text_normalizer import ( + SpecialCharacterProcessor, + TextNormalizer, + UnicodeNormalizer, + WhitespaceNormalizer, ) -from .config import NormalizeConfig, normalize_config __all__ = [ # Text normalization diff --git a/semantica/normalize/config.py b/semantica/normalize/config.py index 1dd44a36..75bea029 100644 --- a/semantica/normalize/config.py +++ b/semantica/normalize/config.py @@ -37,8 +37,8 @@ Example Usage: """ import os -from typing import Optional, Dict, Any from pathlib import Path +from typing import Any, Dict, Optional from ..utils.logging import get_logger diff --git a/semantica/normalize/data_cleaner.py b/semantica/normalize/data_cleaner.py index aa9ff221..4e0bdef1 100644 --- a/semantica/normalize/data_cleaner.py +++ b/semantica/normalize/data_cleaner.py @@ -29,11 +29,11 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union -from dataclasses import dataclass, field from collections import defaultdict +from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional, Union -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/normalize/date_normalizer.py b/semantica/normalize/date_normalizer.py index 359d6830..ac871e5b 100644 --- a/semantica/normalize/date_normalizer.py +++ b/semantica/normalize/date_normalizer.py @@ -34,7 +34,7 @@ import re from datetime import datetime, timedelta, timezone from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/normalize/encoding_handler.py b/semantica/normalize/encoding_handler.py index ffbb45a8..18d3fca4 100644 --- a/semantica/normalize/encoding_handler.py +++ b/semantica/normalize/encoding_handler.py @@ -27,10 +27,11 @@ Author: Semantica Contributors License: MIT """ -import chardet from pathlib import Path from typing import Any, Dict, List, Optional, Tuple, Union +import chardet + from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/normalize/entity_normalizer.py b/semantica/normalize/entity_normalizer.py index 86d0ccac..c724cac6 100644 --- a/semantica/normalize/entity_normalizer.py +++ b/semantica/normalize/entity_normalizer.py @@ -32,7 +32,7 @@ License: MIT import re from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/normalize/methods.py b/semantica/normalize/methods.py index 5582d80e..fb725fe7 100644 --- a/semantica/normalize/methods.py +++ b/semantica/normalize/methods.py @@ -121,20 +121,20 @@ Example Usage: >>> date = normalize_date("2023-01-15", method="default") """ -from typing import Any, Dict, List, Optional, Callable, Union, Tuple +from typing import Any, Callable, Dict, List, Optional, Tuple, Union +from ..utils.exceptions import ConfigurationError, ProcessingError from ..utils.logging import get_logger -from ..utils.exceptions import ProcessingError, ConfigurationError -from .text_normalizer import TextNormalizer -from .text_cleaner import TextCleaner -from .entity_normalizer import EntityNormalizer -from .date_normalizer import DateNormalizer -from .number_normalizer import NumberNormalizer -from .data_cleaner import DataCleaner -from .language_detector import LanguageDetector -from .encoding_handler import EncodingHandler -from .registry import method_registry from .config import normalize_config +from .data_cleaner import DataCleaner +from .date_normalizer import DateNormalizer +from .encoding_handler import EncodingHandler +from .entity_normalizer import EntityNormalizer +from .language_detector import LanguageDetector +from .number_normalizer import NumberNormalizer +from .registry import method_registry +from .text_cleaner import TextCleaner +from .text_normalizer import TextNormalizer logger = get_logger("normalize_methods") diff --git a/semantica/normalize/number_normalizer.py b/semantica/normalize/number_normalizer.py index cc56d5a5..5937209f 100644 --- a/semantica/normalize/number_normalizer.py +++ b/semantica/normalize/number_normalizer.py @@ -33,7 +33,7 @@ License: MIT import re from typing import Any, Dict, List, Optional, Union -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/normalize/registry.py b/semantica/normalize/registry.py index 96a1de0d..ca8e30a6 100644 --- a/semantica/normalize/registry.py +++ b/semantica/normalize/registry.py @@ -40,7 +40,7 @@ Example Usage: >>> available = method_registry.list_all("text") """ -from typing import Dict, Callable, Any, List, Optional +from typing import Any, Callable, Dict, List, Optional class MethodRegistry: diff --git a/semantica/normalize/text_normalizer.py b/semantica/normalize/text_normalizer.py index a031bd6c..90a396bb 100644 --- a/semantica/normalize/text_normalizer.py +++ b/semantica/normalize/text_normalizer.py @@ -33,7 +33,7 @@ import re import unicodedata from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .text_cleaner import TextCleaner diff --git a/semantica/ontology/__init__.py b/semantica/ontology/__init__.py index 703bf43d..b22ccee1 100644 --- a/semantica/ontology/__init__.py +++ b/semantica/ontology/__init__.py @@ -139,41 +139,46 @@ License: MIT from typing import Any, Dict, List, Optional, Union -from .ontology_generator import OntologyGenerator, ClassInferencer, PropertyInferencer, OntologyOptimizer +from .associative_class import AssociativeClass, AssociativeClassBuilder from .class_inferrer import ClassInferrer -from .property_generator import PropertyGenerator -from .ontology_validator import OntologyValidator, ValidationResult -from .owl_generator import OWLGenerator -from .ontology_evaluator import OntologyEvaluator, EvaluationResult -from .requirements_spec import RequirementsSpecManager, RequirementsSpec -from .competency_questions import CompetencyQuestionsManager, CompetencyQuestion -from .reuse_manager import ReuseManager, ReuseDecision -from .version_manager import VersionManager, OntologyVersion -from .namespace_manager import NamespaceManager -from .naming_conventions import NamingConventions -from .module_manager import ModuleManager, OntologyModule +from .competency_questions import CompetencyQuestion, CompetencyQuestionsManager +from .config import OntologyConfig, ontology_config from .domain_ontologies import DomainOntologies -from .ontology_documentation import OntologyDocumentationManager, OntologyDocumentation -from .associative_class import AssociativeClassBuilder, AssociativeClass -from .registry import MethodRegistry, method_registry from .methods import ( + add_competency_question, + create_associative_class, + create_requirements_spec, + create_version, + evaluate_ontology, generate_ontology, + generate_owl, + get_ontology_method, + import_external_ontology, infer_classes, infer_properties, - validate_ontology, - generate_owl, - evaluate_ontology, - create_requirements_spec, - add_competency_question, - research_ontology, - import_external_ontology, - create_version, - manage_namespace, - create_associative_class, - get_ontology_method, list_available_methods, + manage_namespace, + research_ontology, + validate_ontology, ) -from .config import OntologyConfig, ontology_config +from .module_manager import ModuleManager, OntologyModule +from .namespace_manager import NamespaceManager +from .naming_conventions import NamingConventions +from .ontology_documentation import OntologyDocumentation, OntologyDocumentationManager +from .ontology_evaluator import EvaluationResult, OntologyEvaluator +from .ontology_generator import ( + ClassInferencer, + OntologyGenerator, + OntologyOptimizer, + PropertyInferencer, +) +from .ontology_validator import OntologyValidator, ValidationResult +from .owl_generator import OWLGenerator +from .property_generator import PropertyGenerator +from .registry import MethodRegistry, method_registry +from .requirements_spec import RequirementsSpec, RequirementsSpecManager +from .reuse_manager import ReuseDecision, ReuseManager +from .version_manager import OntologyVersion, VersionManager __all__ = [ # Main generators diff --git a/semantica/ontology/associative_class.py b/semantica/ontology/associative_class.py index 842fd68c..0f2bb670 100644 --- a/semantica/ontology/associative_class.py +++ b/semantica/ontology/associative_class.py @@ -30,10 +30,10 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/ontology/class_inferrer.py b/semantica/ontology/class_inferrer.py index 4c88a63c..600f7f82 100644 --- a/semantica/ontology/class_inferrer.py +++ b/semantica/ontology/class_inferrer.py @@ -28,10 +28,10 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Set from collections import Counter, defaultdict +from typing import Any, Dict, List, Optional, Set -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .naming_conventions import NamingConventions diff --git a/semantica/ontology/competency_questions.py b/semantica/ontology/competency_questions.py index f2ce74ba..a69c23b9 100644 --- a/semantica/ontology/competency_questions.py +++ b/semantica/ontology/competency_questions.py @@ -29,11 +29,11 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass, field from datetime import datetime +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/ontology/config.py b/semantica/ontology/config.py index de3b411a..c76ddc5e 100644 --- a/semantica/ontology/config.py +++ b/semantica/ontology/config.py @@ -37,8 +37,8 @@ Example Usage: """ import os -from typing import Optional, Dict, Any from pathlib import Path +from typing import Any, Dict, Optional from ..utils.logging import get_logger diff --git a/semantica/ontology/domain_ontologies.py b/semantica/ontology/domain_ontologies.py index a152d3e5..f95e90cb 100644 --- a/semantica/ontology/domain_ontologies.py +++ b/semantica/ontology/domain_ontologies.py @@ -30,7 +30,7 @@ License: MIT from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .ontology_generator import OntologyGenerator diff --git a/semantica/ontology/methods.py b/semantica/ontology/methods.py index b12cb4f9..0375ebd5 100644 --- a/semantica/ontology/methods.py +++ b/semantica/ontology/methods.py @@ -126,24 +126,24 @@ Example Usage: >>> result = validate_ontology(ontology, method="default") """ -from typing import Any, Dict, List, Optional, Callable, Union +from typing import Any, Callable, Dict, List, Optional, Union +from ..utils.exceptions import ConfigurationError, ProcessingError from ..utils.logging import get_logger -from ..utils.exceptions import ProcessingError, ConfigurationError -from .ontology_generator import OntologyGenerator +from .associative_class import AssociativeClassBuilder from .class_inferrer import ClassInferrer -from .property_generator import PropertyGenerator +from .competency_questions import CompetencyQuestionsManager +from .config import ontology_config +from .namespace_manager import NamespaceManager +from .ontology_evaluator import OntologyEvaluator +from .ontology_generator import OntologyGenerator from .ontology_validator import OntologyValidator from .owl_generator import OWLGenerator -from .ontology_evaluator import OntologyEvaluator +from .property_generator import PropertyGenerator +from .registry import method_registry from .requirements_spec import RequirementsSpecManager -from .competency_questions import CompetencyQuestionsManager from .reuse_manager import ReuseManager from .version_manager import VersionManager -from .namespace_manager import NamespaceManager -from .associative_class import AssociativeClassBuilder -from .registry import method_registry -from .config import ontology_config logger = get_logger("ontology_methods") diff --git a/semantica/ontology/module_manager.py b/semantica/ontology/module_manager.py index 6c1a8dc6..55a37985 100644 --- a/semantica/ontology/module_manager.py +++ b/semantica/ontology/module_manager.py @@ -29,11 +29,11 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass, field from datetime import datetime +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/ontology/namespace_manager.py b/semantica/ontology/namespace_manager.py index 332b740c..b4991e24 100644 --- a/semantica/ontology/namespace_manager.py +++ b/semantica/ontology/namespace_manager.py @@ -30,11 +30,11 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional import re +from typing import Any, Dict, List, Optional from urllib.parse import urljoin -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/ontology/naming_conventions.py b/semantica/ontology/naming_conventions.py index f4a1775c..9e2924ae 100644 --- a/semantica/ontology/naming_conventions.py +++ b/semantica/ontology/naming_conventions.py @@ -32,7 +32,7 @@ License: MIT import re from typing import Any, Dict, List, Optional, Tuple -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/ontology/ontology_documentation.py b/semantica/ontology/ontology_documentation.py index d59fe9fb..df7ea5b3 100644 --- a/semantica/ontology/ontology_documentation.py +++ b/semantica/ontology/ontology_documentation.py @@ -29,15 +29,15 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union from dataclasses import dataclass, field from datetime import datetime from pathlib import Path +from typing import Any, Dict, List, Optional, Union -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError +from ..utils.helpers import ensure_directory from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from ..utils.helpers import ensure_directory @dataclass diff --git a/semantica/ontology/ontology_evaluator.py b/semantica/ontology/ontology_evaluator.py index 12788eb3..37360741 100644 --- a/semantica/ontology/ontology_evaluator.py +++ b/semantica/ontology/ontology_evaluator.py @@ -29,10 +29,10 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .competency_questions import CompetencyQuestionsManager diff --git a/semantica/ontology/ontology_generator.py b/semantica/ontology/ontology_generator.py index 5763e42b..66f1cb2c 100644 --- a/semantica/ontology/ontology_generator.py +++ b/semantica/ontology/ontology_generator.py @@ -30,16 +30,16 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from datetime import datetime +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .class_inferrer import ClassInferrer -from .property_generator import PropertyGenerator from .namespace_manager import NamespaceManager from .naming_conventions import NamingConventions +from .property_generator import PropertyGenerator class OntologyGenerator: diff --git a/semantica/ontology/ontology_validator.py b/semantica/ontology/ontology_validator.py index e26e5e60..37a7321c 100644 --- a/semantica/ontology/ontology_validator.py +++ b/semantica/ontology/ontology_validator.py @@ -31,10 +31,10 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/ontology/owl_generator.py b/semantica/ontology/owl_generator.py index 6df86f2f..142a28a5 100644 --- a/semantica/ontology/owl_generator.py +++ b/semantica/ontology/owl_generator.py @@ -27,18 +27,18 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union from pathlib import Path +from typing import Any, Dict, List, Optional, Union -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError +from ..utils.helpers import ensure_directory from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from ..utils.helpers import ensure_directory from .namespace_manager import NamespaceManager # Optional rdflib import try: - from rdflib import Graph, Namespace, URIRef, Literal, RDF, RDFS, OWL, XSD + from rdflib import OWL, RDF, RDFS, XSD, Graph, Literal, Namespace, URIRef from rdflib.namespace import NamespaceManager as RDFNamespaceManager HAS_RDFLIB = True except ImportError: diff --git a/semantica/ontology/property_generator.py b/semantica/ontology/property_generator.py index c5d96790..14a04e3b 100644 --- a/semantica/ontology/property_generator.py +++ b/semantica/ontology/property_generator.py @@ -27,10 +27,10 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from collections import Counter, defaultdict +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .naming_conventions import NamingConventions diff --git a/semantica/ontology/registry.py b/semantica/ontology/registry.py index af5830d0..530fd31e 100644 --- a/semantica/ontology/registry.py +++ b/semantica/ontology/registry.py @@ -43,7 +43,7 @@ Example Usage: >>> available = method_registry.list_all("generate") """ -from typing import Dict, Callable, Any, List, Optional +from typing import Any, Callable, Dict, List, Optional class MethodRegistry: diff --git a/semantica/ontology/requirements_spec.py b/semantica/ontology/requirements_spec.py index 7e4cf2fc..df7376ed 100644 --- a/semantica/ontology/requirements_spec.py +++ b/semantica/ontology/requirements_spec.py @@ -29,14 +29,14 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass, field from datetime import datetime +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from .competency_questions import CompetencyQuestionsManager, CompetencyQuestion +from .competency_questions import CompetencyQuestion, CompetencyQuestionsManager @dataclass diff --git a/semantica/ontology/reuse_manager.py b/semantica/ontology/reuse_manager.py index 5d54e8fb..8e1f0b6f 100644 --- a/semantica/ontology/reuse_manager.py +++ b/semantica/ontology/reuse_manager.py @@ -30,11 +30,11 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass, field from datetime import datetime +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/ontology/version_manager.py b/semantica/ontology/version_manager.py index 0f980272..44194193 100644 --- a/semantica/ontology/version_manager.py +++ b/semantica/ontology/version_manager.py @@ -34,12 +34,12 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional +import re from dataclasses import dataclass, field from datetime import datetime -import re +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .namespace_manager import NamespaceManager diff --git a/semantica/parse/__init__.py b/semantica/parse/__init__.py index ce61abec..a4834648 100644 --- a/semantica/parse/__init__.py +++ b/semantica/parse/__init__.py @@ -120,40 +120,54 @@ Author: Semantica Contributors License: MIT """ +from .code_parser import ( + CodeComment, + CodeParser, + CodeStructure, + CommentExtractor, + DependencyAnalyzer, + SyntaxTreeParser, +) +from .config import ParseConfig, parse_config +from .csv_parser import CSVData, CSVParser from .document_parser import DocumentParser -from .web_parser import WebParser, HTMLContentParser, JavaScriptRenderer -from .structured_data_parser import StructuredDataParser -from .email_parser import EmailParser, EmailHeaders, EmailBody, EmailData, MIMEParser, EmailThreadAnalyzer -from .code_parser import CodeParser, CodeStructure, CodeComment, SyntaxTreeParser, CommentExtractor, DependencyAnalyzer -from .media_parser import MediaParser -from .pdf_parser import PDFParser, PDFPage, PDFMetadata -from .docx_parser import DOCXParser, DocxSection, DocxMetadata -from .pptx_parser import PPTXParser, SlideContent, PPTXData -from .excel_parser import ExcelParser, ExcelSheet, ExcelData -from .html_parser import HTMLParser, HTMLMetadata, HTMLElement -from .json_parser import JSONParser, JSONData -from .csv_parser import CSVParser, CSVData -from .xml_parser import XMLParser, XMLElement, XMLData -from .image_parser import ImageParser, ImageMetadata, OCRResult +from .docx_parser import DocxMetadata, DOCXParser, DocxSection +from .email_parser import ( + EmailBody, + EmailData, + EmailHeaders, + EmailParser, + EmailThreadAnalyzer, + MIMEParser, +) +from .excel_parser import ExcelData, ExcelParser, ExcelSheet +from .html_parser import HTMLElement, HTMLMetadata, HTMLParser +from .image_parser import ImageMetadata, ImageParser, OCRResult +from .json_parser import JSONData, JSONParser from .mcp_parser import MCPParser +from .media_parser import MediaParser from .methods import ( - parse_document, - parse_web_content, - parse_structured_data, - parse_email, - parse_code, - parse_media, - parse_pdf, - parse_docx, - parse_json, - parse_csv, - parse_xml, - parse_image, get_parse_method, list_available_methods, + parse_code, + parse_csv, + parse_document, + parse_docx, + parse_email, + parse_image, + parse_json, + parse_media, + parse_pdf, + parse_structured_data, + parse_web_content, + parse_xml, ) -from .registry import method_registry, MethodRegistry -from .config import parse_config, ParseConfig +from .pdf_parser import PDFMetadata, PDFPage, PDFParser +from .pptx_parser import PPTXData, PPTXParser, SlideContent +from .registry import MethodRegistry, method_registry +from .structured_data_parser import StructuredDataParser +from .web_parser import HTMLContentParser, JavaScriptRenderer, WebParser +from .xml_parser import XMLData, XMLElement, XMLParser __all__ = [ # Main parsers diff --git a/semantica/parse/config.py b/semantica/parse/config.py index e4c308ab..49e1492b 100644 --- a/semantica/parse/config.py +++ b/semantica/parse/config.py @@ -37,8 +37,8 @@ Example Usage: """ import os -from typing import Optional, Dict, Any from pathlib import Path +from typing import Any, Dict, Optional from ..utils.logging import get_logger diff --git a/semantica/parse/document_parser.py b/semantica/parse/document_parser.py index f0b36f35..836ec8f0 100644 --- a/semantica/parse/document_parser.py +++ b/semantica/parse/document_parser.py @@ -34,9 +34,9 @@ from typing import Any, Dict, List, Optional, Union from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from .pdf_parser import PDFParser from .docx_parser import DOCXParser from .html_parser import HTMLParser +from .pdf_parser import PDFParser class DocumentParser: diff --git a/semantica/parse/docx_parser.py b/semantica/parse/docx_parser.py index 43527010..9024c65b 100644 --- a/semantica/parse/docx_parser.py +++ b/semantica/parse/docx_parser.py @@ -34,8 +34,8 @@ from typing import Any, Dict, List, Optional, Union from docx import Document from docx.document import Document as DocxDocument -from docx.oxml.text.paragraph import CT_P from docx.oxml.table import CT_Tbl +from docx.oxml.text.paragraph import CT_P from docx.table import Table from docx.text.paragraph import Paragraph diff --git a/semantica/parse/email_parser.py b/semantica/parse/email_parser.py index 118ea28c..c0684ce8 100644 --- a/semantica/parse/email_parser.py +++ b/semantica/parse/email_parser.py @@ -34,7 +34,7 @@ License: MIT import email from dataclasses import dataclass, field -from email import message_from_string, message_from_bytes +from email import message_from_bytes, message_from_string from email.header import decode_header from email.utils import parsedate_to_datetime from pathlib import Path diff --git a/semantica/parse/image_parser.py b/semantica/parse/image_parser.py index fcecc70b..d3c1ac9b 100644 --- a/semantica/parse/image_parser.py +++ b/semantica/parse/image_parser.py @@ -32,7 +32,7 @@ from dataclasses import dataclass, field from pathlib import Path from typing import Any, Dict, List, Optional, Union -from PIL import Image, ExifTags +from PIL import ExifTags, Image from PIL.Image import Image as PILImage from ..utils.exceptions import ProcessingError, ValidationError diff --git a/semantica/parse/mcp_parser.py b/semantica/parse/mcp_parser.py index 6c7c4277..8685a843 100644 --- a/semantica/parse/mcp_parser.py +++ b/semantica/parse/mcp_parser.py @@ -28,8 +28,8 @@ from typing import Any, Dict, List, Optional, Union from ..utils.exceptions import ProcessingError from ..utils.logging import get_logger -from .structured_data_parser import StructuredDataParser from .document_parser import DocumentParser +from .structured_data_parser import StructuredDataParser class MCPParser: diff --git a/semantica/parse/methods.py b/semantica/parse/methods.py index d5aafc2d..567dda79 100644 --- a/semantica/parse/methods.py +++ b/semantica/parse/methods.py @@ -119,25 +119,25 @@ Example Usage: >>> data = parse_json("data.json", method="default") """ -from typing import Any, Dict, List, Optional, Callable, Union from pathlib import Path +from typing import Any, Callable, Dict, List, Optional, Union +from ..utils.exceptions import ConfigurationError, ProcessingError from ..utils.logging import get_logger -from ..utils.exceptions import ProcessingError, ConfigurationError -from .document_parser import DocumentParser -from .web_parser import WebParser -from .structured_data_parser import StructuredDataParser -from .email_parser import EmailParser from .code_parser import CodeParser +from .config import parse_config +from .csv_parser import CSVParser +from .document_parser import DocumentParser +from .docx_parser import DOCXParser +from .email_parser import EmailParser +from .image_parser import ImageParser +from .json_parser import JSONParser from .media_parser import MediaParser from .pdf_parser import PDFParser -from .docx_parser import DOCXParser -from .json_parser import JSONParser -from .csv_parser import CSVParser -from .xml_parser import XMLParser -from .image_parser import ImageParser from .registry import method_registry -from .config import parse_config +from .structured_data_parser import StructuredDataParser +from .web_parser import WebParser +from .xml_parser import XMLParser logger = get_logger("parse_methods") diff --git a/semantica/parse/registry.py b/semantica/parse/registry.py index 729aabd7..fab47e5f 100644 --- a/semantica/parse/registry.py +++ b/semantica/parse/registry.py @@ -39,7 +39,7 @@ Example Usage: >>> available = method_registry.list_all("document") """ -from typing import Dict, Callable, Any, List, Optional +from typing import Any, Callable, Dict, List, Optional class MethodRegistry: diff --git a/semantica/parse/structured_data_parser.py b/semantica/parse/structured_data_parser.py index b98c8348..c51de610 100644 --- a/semantica/parse/structured_data_parser.py +++ b/semantica/parse/structured_data_parser.py @@ -302,8 +302,8 @@ class StructuredDataParser: def _convert_to_xml(self, data: Any, root_tag: str = "root") -> str: """Convert data to XML format.""" - from xml.etree.ElementTree import Element, tostring import xml.dom.minidom + from xml.etree.ElementTree import Element, tostring def dict_to_xml(d: Dict[str, Any], parent: Element): for key, value in d.items(): diff --git a/semantica/parse/web_parser.py b/semantica/parse/web_parser.py index b0d5147d..4730cbd6 100644 --- a/semantica/parse/web_parser.py +++ b/semantica/parse/web_parser.py @@ -339,9 +339,9 @@ class JavaScriptRenderer: # Wait for specific selector if requested if options.get("wait_for_selector"): - from selenium.webdriver.support.ui import WebDriverWait - from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By + from selenium.webdriver.support import expected_conditions as EC + from selenium.webdriver.support.ui import WebDriverWait WebDriverWait(self.driver, wait_time).until( EC.presence_of_element_located((By.CSS_SELECTOR, options["wait_for_selector"])) @@ -391,8 +391,8 @@ class JavaScriptRenderer: return False try: - from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC + from selenium.webdriver.support.ui import WebDriverWait WebDriverWait(self.driver, timeout).until( lambda driver: driver.execute_script('return document.readyState') == 'complete' diff --git a/semantica/pipeline/__init__.py b/semantica/pipeline/__init__.py index c2881250..215da89b 100644 --- a/semantica/pipeline/__init__.py +++ b/semantica/pipeline/__init__.py @@ -38,48 +38,42 @@ Author: Semantica Contributors License: MIT """ -from .pipeline_builder import ( - PipelineBuilder, - Pipeline, - PipelineStep, - StepStatus, - PipelineSerializer -) from .execution_engine import ( ExecutionEngine, ExecutionResult, PipelineStatus, - ProgressTracker + ProgressTracker, ) from .failure_handler import ( - FailureHandler, - RetryHandler, - FallbackHandler, ErrorRecovery, + ErrorSeverity, + FailureHandler, + FailureRecovery, + FallbackHandler, + RetryHandler, RetryPolicy, RetryStrategy, - ErrorSeverity, - FailureRecovery ) from .parallelism_manager import ( - ParallelismManager, + ParallelExecutionResult, ParallelExecutor, + ParallelismManager, Task, - ParallelExecutionResult ) +from .pipeline_builder import ( + Pipeline, + PipelineBuilder, + PipelineSerializer, + PipelineStep, + StepStatus, +) +from .pipeline_templates import PipelineTemplate, PipelineTemplateManager +from .pipeline_validator import PipelineValidator, ValidationResult from .resource_scheduler import ( - ResourceScheduler, Resource, ResourceAllocation, - ResourceType -) -from .pipeline_validator import ( - PipelineValidator, - ValidationResult -) -from .pipeline_templates import ( - PipelineTemplateManager, - PipelineTemplate + ResourceScheduler, + ResourceType, ) __all__ = [ diff --git a/semantica/pipeline/execution_engine.py b/semantica/pipeline/execution_engine.py index c38fb654..90447f67 100644 --- a/semantica/pipeline/execution_engine.py +++ b/semantica/pipeline/execution_engine.py @@ -32,19 +32,19 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Callable -from enum import Enum -from dataclasses import dataclass, field -from datetime import datetime import threading import time +from dataclasses import dataclass, field +from datetime import datetime +from enum import Enum +from typing import Any, Callable, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from .pipeline_builder import Pipeline, PipelineStep, StepStatus from .failure_handler import FailureHandler from .parallelism_manager import ParallelismManager +from .pipeline_builder import Pipeline, PipelineStep, StepStatus from .resource_scheduler import ResourceScheduler diff --git a/semantica/pipeline/failure_handler.py b/semantica/pipeline/failure_handler.py index 720b4c85..74f2776e 100644 --- a/semantica/pipeline/failure_handler.py +++ b/semantica/pipeline/failure_handler.py @@ -34,13 +34,13 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Callable -from dataclasses import dataclass, field -from enum import Enum import time import traceback +from dataclasses import dataclass, field +from enum import Enum +from typing import Any, Callable, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .pipeline_builder import PipelineStep diff --git a/semantica/pipeline/parallelism_manager.py b/semantica/pipeline/parallelism_manager.py index 23cffc25..3e6b0a10 100644 --- a/semantica/pipeline/parallelism_manager.py +++ b/semantica/pipeline/parallelism_manager.py @@ -30,13 +30,13 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Callable -from dataclasses import dataclass, field -from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor, as_completed import threading import time +from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor, as_completed +from dataclasses import dataclass, field +from typing import Any, Callable, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .pipeline_builder import Pipeline, PipelineStep diff --git a/semantica/pipeline/pipeline_builder.py b/semantica/pipeline/pipeline_builder.py index 016dd94f..134be8e3 100644 --- a/semantica/pipeline/pipeline_builder.py +++ b/semantica/pipeline/pipeline_builder.py @@ -30,11 +30,11 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Callable, Union from dataclasses import dataclass, field from enum import Enum +from typing import Any, Callable, Dict, List, Optional, Union -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .pipeline_validator import PipelineValidator diff --git a/semantica/pipeline/pipeline_templates.py b/semantica/pipeline/pipeline_templates.py index bafc7076..6edb21fc 100644 --- a/semantica/pipeline/pipeline_templates.py +++ b/semantica/pipeline/pipeline_templates.py @@ -26,10 +26,10 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .pipeline_builder import PipelineBuilder diff --git a/semantica/pipeline/pipeline_validator.py b/semantica/pipeline/pipeline_validator.py index 1a4439e9..abb2f280 100644 --- a/semantica/pipeline/pipeline_validator.py +++ b/semantica/pipeline/pipeline_validator.py @@ -26,14 +26,14 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union -from dataclasses import dataclass, field from collections import defaultdict, deque +from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional, Union -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from .pipeline_builder import PipelineBuilder, Pipeline, PipelineStep +from .pipeline_builder import Pipeline, PipelineBuilder, PipelineStep @dataclass diff --git a/semantica/pipeline/resource_scheduler.py b/semantica/pipeline/resource_scheduler.py index 11ec0c69..28c8356d 100644 --- a/semantica/pipeline/resource_scheduler.py +++ b/semantica/pipeline/resource_scheduler.py @@ -28,13 +28,13 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional -from dataclasses import dataclass, field -from enum import Enum import threading import time +from dataclasses import dataclass, field +from enum import Enum +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .pipeline_builder import Pipeline @@ -111,7 +111,7 @@ class ResourceScheduler: """Initialize available resources.""" try: import psutil - + # CPU resources cpu_count = psutil.cpu_count(logical=False) or 1 self.resources["cpu"] = Resource( diff --git a/semantica/reasoning/__init__.py b/semantica/reasoning/__init__.py index 5e75b8b6..860a4d24 100644 --- a/semantica/reasoning/__init__.py +++ b/semantica/reasoning/__init__.py @@ -96,51 +96,29 @@ Author: Semantica Contributors License: MIT """ -from .inference_engine import ( - InferenceEngine, - InferenceResult, - InferenceStrategy -) -from .sparql_reasoner import ( - SPARQLReasoner, - SPARQLQueryResult +from .abductive_reasoner import AbductiveReasoner +from .abductive_reasoner import Explanation as AbductiveExplanation +from .abductive_reasoner import Hypothesis, HypothesisRanking, Observation +from .deductive_reasoner import Argument, Conclusion, DeductiveReasoner, Premise, Proof +from .explanation_generator import ( + Explanation, + ExplanationGenerator, + Justification, + ReasoningPath, + ReasoningStep, ) +from .inference_engine import InferenceEngine, InferenceResult, InferenceStrategy from .rete_engine import ( - ReteEngine, - Fact, - Match, - ReteNode, AlphaNode, BetaNode, - TerminalNode -) -from .abductive_reasoner import ( - AbductiveReasoner, - Observation, - Hypothesis, - Explanation as AbductiveExplanation, - HypothesisRanking -) -from .deductive_reasoner import ( - DeductiveReasoner, - Premise, - Conclusion, - Proof, - Argument -) -from .rule_manager import ( - RuleManager, - Rule, - RuleExecution, - RuleType -) -from .explanation_generator import ( - ExplanationGenerator, - Explanation, - ReasoningStep, - ReasoningPath, - Justification + Fact, + Match, + ReteEngine, + ReteNode, + TerminalNode, ) +from .rule_manager import Rule, RuleExecution, RuleManager, RuleType +from .sparql_reasoner import SPARQLQueryResult, SPARQLReasoner __all__ = [ # Inference diff --git a/semantica/reasoning/abductive_reasoner.py b/semantica/reasoning/abductive_reasoner.py index 36ada08a..a9ec174e 100644 --- a/semantica/reasoning/abductive_reasoner.py +++ b/semantica/reasoning/abductive_reasoner.py @@ -31,14 +31,14 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass, field from enum import Enum +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from .rule_manager import RuleManager, Rule +from .rule_manager import Rule, RuleManager class HypothesisRanking(Enum): diff --git a/semantica/reasoning/deductive_reasoner.py b/semantica/reasoning/deductive_reasoner.py index 77f92b5a..bc74ab32 100644 --- a/semantica/reasoning/deductive_reasoner.py +++ b/semantica/reasoning/deductive_reasoner.py @@ -30,13 +30,13 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Set from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional, Set -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from .rule_manager import RuleManager, Rule +from .rule_manager import Rule, RuleManager @dataclass diff --git a/semantica/reasoning/explanation_generator.py b/semantica/reasoning/explanation_generator.py index 640bd5f5..198f8f8e 100644 --- a/semantica/reasoning/explanation_generator.py +++ b/semantica/reasoning/explanation_generator.py @@ -30,16 +30,16 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker +from .abductive_reasoner import Explanation as AbductiveExplanation +from .deductive_reasoner import Conclusion, Proof from .inference_engine import InferenceResult from .rule_manager import Rule -from .abductive_reasoner import Explanation as AbductiveExplanation -from .deductive_reasoner import Proof, Conclusion @dataclass diff --git a/semantica/reasoning/inference_engine.py b/semantica/reasoning/inference_engine.py index 2e28d498..b59140fc 100644 --- a/semantica/reasoning/inference_engine.py +++ b/semantica/reasoning/inference_engine.py @@ -29,14 +29,14 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Callable, Set from dataclasses import dataclass, field from enum import Enum +from typing import Any, Callable, Dict, List, Optional, Set -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from .rule_manager import RuleManager, Rule +from .rule_manager import Rule, RuleManager class InferenceStrategy(Enum): diff --git a/semantica/reasoning/rete_engine.py b/semantica/reasoning/rete_engine.py index 5670d1ff..61dee190 100644 --- a/semantica/reasoning/rete_engine.py +++ b/semantica/reasoning/rete_engine.py @@ -33,11 +33,11 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Set, Tuple -from dataclasses import dataclass, field from collections import defaultdict +from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional, Set, Tuple -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .rule_manager import Rule diff --git a/semantica/reasoning/rule_manager.py b/semantica/reasoning/rule_manager.py index 1ea985d4..581cac75 100644 --- a/semantica/reasoning/rule_manager.py +++ b/semantica/reasoning/rule_manager.py @@ -30,13 +30,13 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Callable -from dataclasses import dataclass, field -from enum import Enum -from datetime import datetime import re +from dataclasses import dataclass, field +from datetime import datetime +from enum import Enum +from typing import Any, Callable, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/reasoning/sparql_reasoner.py b/semantica/reasoning/sparql_reasoner.py index 674ae52d..c1918ad4 100644 --- a/semantica/reasoning/sparql_reasoner.py +++ b/semantica/reasoning/sparql_reasoner.py @@ -29,14 +29,14 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Set -from dataclasses import dataclass, field import re +from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional, Set -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from .rule_manager import RuleManager, Rule +from .rule_manager import Rule, RuleManager @dataclass diff --git a/semantica/seed/__init__.py b/semantica/seed/__init__.py index 15bcee0c..361e0ec0 100644 --- a/semantica/seed/__init__.py +++ b/semantica/seed/__init__.py @@ -80,11 +80,7 @@ Author: Semantica Contributors License: MIT """ -from .seed_manager import ( - SeedDataManager, - SeedDataSource, - SeedData, -) +from .seed_manager import SeedData, SeedDataManager, SeedDataSource __all__ = [ "SeedDataManager", diff --git a/semantica/seed/seed_manager.py b/semantica/seed/seed_manager.py index 71569de0..1be81cd6 100644 --- a/semantica/seed/seed_manager.py +++ b/semantica/seed/seed_manager.py @@ -31,18 +31,18 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union -from dataclasses import dataclass, field -from pathlib import Path -import json import csv +import json +from dataclasses import dataclass, field from datetime import datetime +from pathlib import Path +from typing import Any, Dict, List, Optional, Union -from ..utils.exceptions import ValidationError, ProcessingError -from ..utils.logging import get_logger +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.helpers import read_json_file, write_json_file -from ..utils.types import EntityDict, RelationshipDict +from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker +from ..utils.types import EntityDict, RelationshipDict @dataclass @@ -362,7 +362,7 @@ class SeedDataManager: """ try: from ..ingest.db_ingestor import DBIngestor - + # Initialize DB ingestor db_ingestor = DBIngestor(config={"connection_string": connection_string}) @@ -439,7 +439,7 @@ class SeedDataManager: """ try: import requests - + # Build full URL if endpoint: full_url = f"{api_url.rstrip('/')}/{endpoint.lstrip('/')}" diff --git a/semantica/semantic_extract/__init__.py b/semantica/semantic_extract/__init__.py index 1cca26ff..20ae40e7 100644 --- a/semantica/semantic_extract/__init__.py +++ b/semantica/semantic_extract/__init__.py @@ -42,86 +42,70 @@ License: MIT from typing import Any, Dict, List, Optional, Union -from .named_entity_recognizer import ( - NamedEntityRecognizer, - EntityClassifier, - EntityConfidenceScorer, - CustomEntityDetector -) -from .ner_extractor import ( - NERExtractor, - Entity -) -from .relation_extractor import ( - RelationExtractor, - Relation +from .config import Config, config +from .coreference_resolver import ( + CoreferenceChain, + CoreferenceChainBuilder, + CoreferenceResolver, + EntityCoreferenceDetector, + Mention, + PronounResolver, ) from .event_detector import ( - EventDetector, Event, EventClassifier, + EventDetector, + EventRelationshipExtractor, TemporalEventProcessor, - EventRelationshipExtractor ) -from .coreference_resolver import ( - CoreferenceResolver, - Mention, - CoreferenceChain, - PronounResolver, - EntityCoreferenceDetector, - CoreferenceChainBuilder -) -from .triple_extractor import ( - TripleExtractor, - Triple, - TripleValidator, - RDFSerializer, - TripleQualityChecker -) -from .semantic_analyzer import ( - SemanticAnalyzer, - SemanticRole, - SemanticCluster, - SimilarityAnalyzer, - RoleLabeler, - SemanticClusterer -) -from .semantic_network_extractor import ( - SemanticNetworkExtractor, - SemanticNode, - SemanticEdge, - SemanticNetwork -) -from .llm_enhancer import ( - LLMEnhancer, - LLMResponse -) -from .extraction_validator import ( - ExtractionValidator, - ValidationResult +from .extraction_validator import ExtractionValidator, ValidationResult +from .llm_enhancer import LLMEnhancer, LLMResponse +from .methods import get_entity_method, get_relation_method, get_triple_method +from .named_entity_recognizer import ( + CustomEntityDetector, + EntityClassifier, + EntityConfidenceScorer, + NamedEntityRecognizer, ) +from .ner_extractor import Entity, NERExtractor from .providers import ( + AnthropicProvider, BaseProvider, - OpenAIProvider, GeminiProvider, GroqProvider, - AnthropicProvider, - OllamaProvider, HuggingFaceLLMProvider, HuggingFaceModelLoader, - create_provider + OllamaProvider, + OpenAIProvider, + create_provider, ) from .registry import ( - ProviderRegistry, MethodRegistry, + ProviderRegistry, + method_registry, provider_registry, - method_registry ) -from .config import Config, config -from .methods import ( - get_entity_method, - get_relation_method, - get_triple_method +from .relation_extractor import Relation, RelationExtractor +from .semantic_analyzer import ( + RoleLabeler, + SemanticAnalyzer, + SemanticCluster, + SemanticClusterer, + SemanticRole, + SimilarityAnalyzer, +) +from .semantic_network_extractor import ( + SemanticEdge, + SemanticNetwork, + SemanticNetworkExtractor, + SemanticNode, +) +from .triple_extractor import ( + RDFSerializer, + Triple, + TripleExtractor, + TripleQualityChecker, + TripleValidator, ) __all__ = [ diff --git a/semantica/semantic_extract/config.py b/semantica/semantic_extract/config.py index a69fd49f..641f0907 100644 --- a/semantica/semantic_extract/config.py +++ b/semantica/semantic_extract/config.py @@ -40,8 +40,8 @@ License: MIT """ import os -from typing import Optional, Dict from pathlib import Path +from typing import Dict, Optional from ..utils.logging import get_logger diff --git a/semantica/semantic_extract/coreference_resolver.py b/semantica/semantic_extract/coreference_resolver.py index 477cfd28..f99c894a 100644 --- a/semantica/semantic_extract/coreference_resolver.py +++ b/semantica/semantic_extract/coreference_resolver.py @@ -57,8 +57,8 @@ Author: Semantica Contributors License: MIT """ -from dataclasses import dataclass, field import re +from dataclasses import dataclass, field from typing import Any, Dict, List, Optional, Tuple, Union from ..utils.exceptions import ProcessingError diff --git a/semantica/semantic_extract/llm_enhancer.py b/semantica/semantic_extract/llm_enhancer.py index ae1ebf43..3392885a 100644 --- a/semantica/semantic_extract/llm_enhancer.py +++ b/semantica/semantic_extract/llm_enhancer.py @@ -67,8 +67,8 @@ from ..utils.exceptions import ProcessingError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .ner_extractor import Entity -from .relation_extractor import Relation from .providers import create_provider +from .relation_extractor import Relation @dataclass diff --git a/semantica/semantic_extract/methods.py b/semantica/semantic_extract/methods.py index ec110bdf..6b59f2a3 100644 --- a/semantica/semantic_extract/methods.py +++ b/semantica/semantic_extract/methods.py @@ -106,13 +106,13 @@ License: MIT """ import re -from typing import List, Dict, Any, Optional, Union +from typing import Any, Dict, List, Optional, Union -from ..utils.logging import get_logger from ..utils.exceptions import ProcessingError -from .providers import create_provider, HuggingFaceModelLoader -from .registry import method_registry +from ..utils.logging import get_logger from .ner_extractor import Entity +from .providers import HuggingFaceModelLoader, create_provider +from .registry import method_registry from .relation_extractor import Relation from .triple_extractor import Triple diff --git a/semantica/semantic_extract/providers.py b/semantica/semantic_extract/providers.py index 7647f14c..44502286 100644 --- a/semantica/semantic_extract/providers.py +++ b/semantica/semantic_extract/providers.py @@ -69,9 +69,10 @@ Author: Semantica Contributors License: MIT """ -import os import json +import os from typing import Any, Dict, List, Optional + import torch from ..utils.exceptions import ProcessingError @@ -412,7 +413,7 @@ class HuggingFaceLLMProvider(BaseProvider): def _init_model(self): """Initialize HuggingFace model.""" try: - from transformers import AutoTokenizer, AutoModelForCausalLM + from transformers import AutoModelForCausalLM, AutoTokenizer self.tokenizer = AutoTokenizer.from_pretrained(self.model_name) self.model = AutoModelForCausalLM.from_pretrained(self.model_name) @@ -518,7 +519,7 @@ class HuggingFaceModelLoader: return self._cache[cache_key] try: - from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM + from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, pipeline tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSeq2SeqLM.from_pretrained(model_name) diff --git a/semantica/semantic_extract/registry.py b/semantica/semantic_extract/registry.py index 4f1ff493..2b3ecb7f 100644 --- a/semantica/semantic_extract/registry.py +++ b/semantica/semantic_extract/registry.py @@ -47,7 +47,7 @@ Author: Semantica Contributors License: MIT """ -from typing import Dict, Type, Callable, Any, List, Optional +from typing import Any, Callable, Dict, List, Optional, Type class ProviderRegistry: diff --git a/semantica/semantic_extract/relation_extractor.py b/semantica/semantic_extract/relation_extractor.py index e657eaee..fad01758 100644 --- a/semantica/semantic_extract/relation_extractor.py +++ b/semantica/semantic_extract/relation_extractor.py @@ -69,8 +69,8 @@ from typing import Any, Dict, List, Optional, Tuple, Union from ..utils.exceptions import ProcessingError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from .ner_extractor import Entity from .methods import get_relation_method +from .ner_extractor import Entity @dataclass diff --git a/semantica/semantic_extract/semantic_network_extractor.py b/semantica/semantic_extract/semantic_network_extractor.py index b58e8f5b..72c3efa5 100644 --- a/semantica/semantic_extract/semantic_network_extractor.py +++ b/semantica/semantic_extract/semantic_network_extractor.py @@ -150,7 +150,7 @@ class SemanticNetworkExtractor: try: from .ner_extractor import NERExtractor from .relation_extractor import RelationExtractor - + # Extract entities if not provided if entities is None: self.progress_tracker.update_tracking(tracking_id, message="Extracting entities...") diff --git a/semantica/semantic_extract/triple_extractor.py b/semantica/semantic_extract/triple_extractor.py index f0e4eaa6..8b7c40d7 100644 --- a/semantica/semantic_extract/triple_extractor.py +++ b/semantica/semantic_extract/triple_extractor.py @@ -70,9 +70,9 @@ from urllib.parse import quote from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker +from .methods import get_triple_method from .ner_extractor import Entity from .relation_extractor import Relation -from .methods import get_triple_method @dataclass @@ -154,7 +154,7 @@ class TripleExtractor: try: from .ner_extractor import NERExtractor from .relation_extractor import RelationExtractor - + # Extract entities if not provided if entities is None: self.progress_tracker.update_tracking(tracking_id, message="Extracting entities...") diff --git a/semantica/split/__init__.py b/semantica/split/__init__.py index b903dfd4..566fcf9b 100644 --- a/semantica/split/__init__.py +++ b/semantica/split/__init__.py @@ -69,39 +69,39 @@ Author: Semantica Contributors License: MIT """ -from .semantic_chunker import SemanticChunker, Chunk -from .structural_chunker import StructuralChunker -from .sliding_window_chunker import SlidingWindowChunker -from .table_chunker import TableChunker from .chunk_validator import ChunkValidator -from .provenance_tracker import ProvenanceTracker -from .splitter import TextSplitter +from .config import SplitConfig, split_config from .kg_chunkers import ( EntityAwareChunker, - RelationAwareChunker, GraphBasedChunker, + HierarchicalChunker, OntologyAwareChunker, - HierarchicalChunker + RelationAwareChunker, ) from .methods import ( get_split_method, list_available_methods, - split_recursive, - split_by_tokens, - split_by_sentences, - split_by_paragraphs, split_by_characters, + split_by_paragraphs, + split_by_sentences, + split_by_tokens, split_by_words, - split_semantic_transformer, - split_llm, split_entity_aware, - split_relation_aware, split_graph_based, + split_hierarchical, + split_llm, split_ontology_aware, - split_hierarchical + split_recursive, + split_relation_aware, + split_semantic_transformer, ) -from .config import SplitConfig, split_config +from .provenance_tracker import ProvenanceTracker from .registry import MethodRegistry, method_registry +from .semantic_chunker import Chunk, SemanticChunker +from .sliding_window_chunker import SlidingWindowChunker +from .splitter import TextSplitter +from .structural_chunker import StructuralChunker +from .table_chunker import TableChunker __all__ = [ # Unified splitter diff --git a/semantica/split/config.py b/semantica/split/config.py index 59d5b462..82191249 100644 --- a/semantica/split/config.py +++ b/semantica/split/config.py @@ -40,8 +40,8 @@ License: MIT """ import os -from typing import Optional, Dict, Any from pathlib import Path +from typing import Any, Dict, Optional from ..utils.logging import get_logger diff --git a/semantica/split/kg_chunkers.py b/semantica/split/kg_chunkers.py index d0693b95..11053bda 100644 --- a/semantica/split/kg_chunkers.py +++ b/semantica/split/kg_chunkers.py @@ -43,17 +43,18 @@ Author: Semantica Contributors License: MIT """ -from typing import List, Dict, Any, Optional, Union -from .semantic_chunker import Chunk -from .methods import ( - split_entity_aware, - split_relation_aware, - split_graph_based, - split_ontology_aware, - split_hierarchical -) +from typing import Any, Dict, List, Optional, Union + from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker +from .methods import ( + split_entity_aware, + split_graph_based, + split_hierarchical, + split_ontology_aware, + split_relation_aware, +) +from .semantic_chunker import Chunk logger = get_logger("kg_chunkers") diff --git a/semantica/split/methods.py b/semantica/split/methods.py index 32aed8bc..b42a02f1 100644 --- a/semantica/split/methods.py +++ b/semantica/split/methods.py @@ -86,11 +86,11 @@ License: MIT """ import re -from typing import List, Dict, Any, Optional, Union, Callable from dataclasses import dataclass +from typing import Any, Callable, Dict, List, Optional, Union -from ..utils.logging import get_logger from ..utils.exceptions import ProcessingError +from ..utils.logging import get_logger from .semantic_chunker import Chunk logger = get_logger("split_methods") @@ -144,8 +144,8 @@ except ImportError: # Import from semantic_extract for entity/relation extraction try: - from ..semantic_extract.providers import create_provider from ..semantic_extract.ner_extractor import NERExtractor + from ..semantic_extract.providers import create_provider from ..semantic_extract.relation_extractor import RelationExtractor SEMANTIC_EXTRACT_AVAILABLE = True except ImportError: diff --git a/semantica/split/registry.py b/semantica/split/registry.py index e8b40a12..d2556bd9 100644 --- a/semantica/split/registry.py +++ b/semantica/split/registry.py @@ -37,7 +37,7 @@ Author: Semantica Contributors License: MIT """ -from typing import Dict, Callable, Any, List, Optional +from typing import Any, Callable, Dict, List, Optional class MethodRegistry: diff --git a/semantica/split/splitter.py b/semantica/split/splitter.py index 21912c58..3058cb9d 100644 --- a/semantica/split/splitter.py +++ b/semantica/split/splitter.py @@ -39,12 +39,13 @@ Author: Semantica Contributors License: MIT """ -from typing import List, Optional, Union, Dict, Any -from .semantic_chunker import Chunk -from .methods import get_split_method, list_available_methods -from .config import split_config -from ..utils.logging import get_logger +from typing import Any, Dict, List, Optional, Union + from ..utils.exceptions import ProcessingError +from ..utils.logging import get_logger +from .config import split_config +from .methods import get_split_method, list_available_methods +from .semantic_chunker import Chunk logger = get_logger("text_splitter") diff --git a/semantica/triple_store/__init__.py b/semantica/triple_store/__init__.py index 63272245..67729403 100644 --- a/semantica/triple_store/__init__.py +++ b/semantica/triple_store/__init__.py @@ -107,54 +107,30 @@ Author: Semantica Contributors License: MIT """ -from .triple_manager import ( - TripleManager, - TripleStore -) -from .blazegraph_adapter import ( - BlazegraphAdapter -) -from .jena_adapter import ( - JenaAdapter -) -from .rdf4j_adapter import ( - RDF4JAdapter -) -from .virtuoso_adapter import ( - VirtuosoAdapter -) -from .query_engine import ( - QueryEngine, - QueryResult, - QueryPlan -) -from .bulk_loader import ( - BulkLoader, - LoadProgress -) +from .blazegraph_adapter import BlazegraphAdapter +from .bulk_loader import BulkLoader, LoadProgress +from .config import TripleStoreConfig, triple_store_config +from .jena_adapter import JenaAdapter from .methods import ( - register_store, add_triple, add_triples, - get_triples, + bulk_load, delete_triple, - update_triple, execute_query, + get_triple_store_method, + get_triples, + list_available_methods, optimize_query, plan_query, - bulk_load, + register_store, + update_triple, validate_triples, - get_triple_store_method, - list_available_methods, -) -from .config import ( - TripleStoreConfig, - triple_store_config, -) -from .registry import ( - MethodRegistry, - method_registry, ) +from .query_engine import QueryEngine, QueryPlan, QueryResult +from .rdf4j_adapter import RDF4JAdapter +from .registry import MethodRegistry, method_registry +from .triple_manager import TripleManager, TripleStore +from .virtuoso_adapter import VirtuosoAdapter __all__ = [ # Triple management diff --git a/semantica/triple_store/blazegraph_adapter.py b/semantica/triple_store/blazegraph_adapter.py index 977104f4..7aff16e6 100644 --- a/semantica/triple_store/blazegraph_adapter.py +++ b/semantica/triple_store/blazegraph_adapter.py @@ -28,13 +28,14 @@ License: MIT """ from typing import Any, Dict, List, Optional -import requests from urllib.parse import urljoin -from ..utils.exceptions import ValidationError, ProcessingError +import requests + +from ..semantic_extract.triple_extractor import Triple +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from ..semantic_extract.triple_extractor import Triple class BlazegraphAdapter: diff --git a/semantica/triple_store/bulk_loader.py b/semantica/triple_store/bulk_loader.py index 77558bb6..d3dc248e 100644 --- a/semantica/triple_store/bulk_loader.py +++ b/semantica/triple_store/bulk_loader.py @@ -28,15 +28,15 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional +import time from dataclasses import dataclass, field from datetime import datetime -import time +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..semantic_extract.triple_extractor import Triple +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from ..semantic_extract.triple_extractor import Triple @dataclass diff --git a/semantica/triple_store/config.py b/semantica/triple_store/config.py index 92b101cf..145206e7 100644 --- a/semantica/triple_store/config.py +++ b/semantica/triple_store/config.py @@ -37,8 +37,8 @@ Example Usage: """ import os -from typing import Optional, Dict, Any from pathlib import Path +from typing import Any, Dict, Optional from ..utils.logging import get_logger diff --git a/semantica/triple_store/jena_adapter.py b/semantica/triple_store/jena_adapter.py index 148f674a..d53d25c5 100644 --- a/semantica/triple_store/jena_adapter.py +++ b/semantica/triple_store/jena_adapter.py @@ -28,14 +28,14 @@ License: MIT from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..semantic_extract.triple_extractor import Triple +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from ..semantic_extract.triple_extractor import Triple # Optional Jena imports try: - from rdflib import Graph, Namespace, URIRef, Literal, RDF + from rdflib import RDF, Graph, Literal, Namespace, URIRef from rdflib.plugins.stores.sparqlstore import SPARQLStore HAS_JENA_RDFLIB = True except ImportError: diff --git a/semantica/triple_store/methods.py b/semantica/triple_store/methods.py index 12901e11..5a9be4ac 100644 --- a/semantica/triple_store/methods.py +++ b/semantica/triple_store/methods.py @@ -106,12 +106,13 @@ Example Usage: """ from typing import Any, Dict, List, Optional, Union + from ..semantic_extract.triple_extractor import Triple -from .triple_manager import TripleManager, TripleStore -from .query_engine import QueryEngine, QueryResult, QueryPlan from .bulk_loader import BulkLoader, LoadProgress -from .registry import method_registry from .config import triple_store_config +from .query_engine import QueryEngine, QueryPlan, QueryResult +from .registry import method_registry +from .triple_manager import TripleManager, TripleStore # Global manager instances _global_manager: Optional[TripleManager] = None diff --git a/semantica/triple_store/query_engine.py b/semantica/triple_store/query_engine.py index e8d42efd..5cb61d16 100644 --- a/semantica/triple_store/query_engine.py +++ b/semantica/triple_store/query_engine.py @@ -30,12 +30,12 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional +import time from dataclasses import dataclass, field from datetime import datetime -import time +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker diff --git a/semantica/triple_store/rdf4j_adapter.py b/semantica/triple_store/rdf4j_adapter.py index 10736a0b..7aa41994 100644 --- a/semantica/triple_store/rdf4j_adapter.py +++ b/semantica/triple_store/rdf4j_adapter.py @@ -27,12 +27,13 @@ License: MIT """ from typing import Any, Dict, List, Optional + import requests -from ..utils.exceptions import ValidationError, ProcessingError +from ..semantic_extract.triple_extractor import Triple +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from ..semantic_extract.triple_extractor import Triple class RDF4JAdapter: diff --git a/semantica/triple_store/registry.py b/semantica/triple_store/registry.py index fd624f5e..9c8d8e6f 100644 --- a/semantica/triple_store/registry.py +++ b/semantica/triple_store/registry.py @@ -42,7 +42,7 @@ Example Usage: >>> available = method_registry.list_all("add") """ -from typing import Dict, Callable, Any, List, Optional +from typing import Any, Callable, Dict, List, Optional class MethodRegistry: diff --git a/semantica/triple_store/triple_manager.py b/semantica/triple_store/triple_manager.py index 6d643c29..994ce3f5 100644 --- a/semantica/triple_store/triple_manager.py +++ b/semantica/triple_store/triple_manager.py @@ -29,13 +29,13 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional -from ..utils.exceptions import ValidationError, ProcessingError +from ..semantic_extract.triple_extractor import Triple +from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from ..semantic_extract.triple_extractor import Triple @dataclass diff --git a/semantica/triple_store/virtuoso_adapter.py b/semantica/triple_store/virtuoso_adapter.py index d5fb345d..8087ad23 100644 --- a/semantica/triple_store/virtuoso_adapter.py +++ b/semantica/triple_store/virtuoso_adapter.py @@ -27,12 +27,13 @@ License: MIT """ from typing import Any, Dict, List, Optional -import requests from urllib.parse import urljoin -from ..utils.exceptions import ValidationError, ProcessingError -from ..utils.logging import get_logger +import requests + from ..semantic_extract.triple_extractor import Triple +from ..utils.exceptions import ProcessingError, ValidationError +from ..utils.logging import get_logger class VirtuosoAdapter: diff --git a/semantica/utils/__init__.py b/semantica/utils/__init__.py index 95908ec9..6614735f 100644 --- a/semantica/utils/__init__.py +++ b/semantica/utils/__init__.py @@ -37,120 +37,114 @@ Author: Semantica Contributors License: MIT """ -from .logging import ( - setup_logging, - get_logger, - log_performance, - log_error, - log_data_quality, - log_execution_time, -) -from .exceptions import ( - SemanticaError, - ValidationError, - ProcessingError, - ConfigurationError, - QualityError, - handle_exception, - format_exception, -) -from .validators import ( - validate_data, - validate_config, - validate_schema, - validate_types, - validate_required_fields, - validate_string_constraints, - validate_numeric_constraints, - validate_list_constraints, - validate_entity, - validate_relationship, - validate_file_path, - validate_url, - validate_email, -) -from .helpers import ( - format_data, - clean_text, - normalize_entities, - hash_data, - safe_filename, - ensure_directory, - read_json_file, - write_json_file, - get_file_size, - format_timestamp, - parse_timestamp, - merge_dicts, - chunk_list, - flatten_dict, - get_nested_value, - set_nested_value, - retry_on_error, -) from .constants import ( - SUPPORTED_DOCUMENT_FORMATS, - SUPPORTED_IMAGE_FORMATS, + API_ENDPOINTS, + CACHE_CONFIG, + DATA_TYPES, + DEFAULT_CONFIG, + ENTITY_TYPES, + ERROR_CODES, + FILE_SIZE_LIMITS, + PERFORMANCE_THRESHOLDS, + PROCESSING_STATUS, + QUALITY_LEVELS, + RELATIONSHIP_TYPES, + RETRY_CONFIG, SUPPORTED_AUDIO_FORMATS, - SUPPORTED_VIDEO_FORMATS, + SUPPORTED_DOCUMENT_FORMATS, + SUPPORTED_GRAPH_DBS, + SUPPORTED_IMAGE_FORMATS, SUPPORTED_RDF_FORMATS, SUPPORTED_VECTOR_STORES, - SUPPORTED_GRAPH_DBS, - DEFAULT_CONFIG, - ERROR_CODES, - PERFORMANCE_THRESHOLDS, - QUALITY_LEVELS, - ENTITY_TYPES, - RELATIONSHIP_TYPES, - PROCESSING_STATUS, - DATA_TYPES, - API_ENDPOINTS, - FILE_SIZE_LIMITS, - RETRY_CONFIG, - CACHE_CONFIG, + SUPPORTED_VIDEO_FORMATS, ) -from .types import ( - # Type Aliases - JSONType, - EntityDict, - RelationshipDict, - ConfigDict, - DataDict, - # Enums - EntityType, - DataType, - ProcessingStatus, - QualityLevel, - RelationshipType, - # Data Classes - Entity, - Relationship, - ProcessingResult, - QualityMetrics, - # Generic Types - Result, - BatchResult, - # Type Guards - is_entity_dict, - is_relationship_dict, - is_processing_result, - # Conversion Functions - entity_to_dict, - dict_to_entity, - relationship_to_dict, - dict_to_relationship, +from .exceptions import ( + ConfigurationError, + ProcessingError, + QualityError, + SemanticaError, + ValidationError, + format_exception, + handle_exception, +) +from .helpers import ( + chunk_list, + clean_text, + ensure_directory, + flatten_dict, + format_data, + format_timestamp, + get_file_size, + get_nested_value, + hash_data, + merge_dicts, + normalize_entities, + parse_timestamp, + read_json_file, + retry_on_error, + safe_filename, + set_nested_value, + write_json_file, +) +from .logging import ( + get_logger, + log_data_quality, + log_error, + log_execution_time, + log_performance, + setup_logging, ) from .progress_tracker import ( - ProgressTracker, - ProgressDisplay, ConsoleProgressDisplay, - JupyterProgressDisplay, FileProgressDisplay, - ProgressItem, + JupyterProgressDisplay, ModuleDetector, + ProgressDisplay, + ProgressItem, + ProgressTracker, get_progress_tracker, track_progress, ) +from .types import ( # Type Aliases; Enums; Data Classes; Generic Types; Type Guards; Conversion Functions + BatchResult, + ConfigDict, + DataDict, + DataType, + Entity, + EntityDict, + EntityType, + JSONType, + ProcessingResult, + ProcessingStatus, + QualityLevel, + QualityMetrics, + Relationship, + RelationshipDict, + RelationshipType, + Result, + dict_to_entity, + dict_to_relationship, + entity_to_dict, + is_entity_dict, + is_processing_result, + is_relationship_dict, + relationship_to_dict, +) +from .validators import ( + validate_config, + validate_data, + validate_email, + validate_entity, + validate_file_path, + validate_list_constraints, + validate_numeric_constraints, + validate_relationship, + validate_required_fields, + validate_schema, + validate_string_constraints, + validate_types, + validate_url, +) __all__ = [ # Logging diff --git a/semantica/utils/exceptions.py b/semantica/utils/exceptions.py index 3c411985..cee92d01 100644 --- a/semantica/utils/exceptions.py +++ b/semantica/utils/exceptions.py @@ -39,8 +39,8 @@ Author: Semantica Contributors License: MIT """ -import traceback import sys +import traceback from typing import Any, Dict, Optional, Type diff --git a/semantica/utils/helpers.py b/semantica/utils/helpers.py index 226206d0..e474ad1a 100644 --- a/semantica/utils/helpers.py +++ b/semantica/utils/helpers.py @@ -55,13 +55,13 @@ Author: Semantica Contributors License: MIT """ +import hashlib +import json import os import re -import json -import hashlib from datetime import datetime, timezone -from typing import Any, Dict, List, Optional, Union, Tuple from pathlib import Path +from typing import Any, Dict, List, Optional, Tuple, Union def format_data(data: Any, format_type: str = "json") -> str: @@ -489,8 +489,8 @@ def retry_on_error( Returns: Decorator function """ - import time import functools + import time def decorator(func): @functools.wraps(func) diff --git a/semantica/utils/logging.py b/semantica/utils/logging.py index 55071255..b36d8465 100644 --- a/semantica/utils/logging.py +++ b/semantica/utils/logging.py @@ -46,10 +46,10 @@ License: MIT import logging import sys +from datetime import datetime from logging.handlers import RotatingFileHandler, TimedRotatingFileHandler from pathlib import Path from typing import Any, Dict, Optional, Union -from datetime import datetime from .constants import DEFAULT_CONFIG diff --git a/semantica/utils/progress_tracker.py b/semantica/utils/progress_tracker.py index ade10ab2..226fa9d8 100644 --- a/semantica/utils/progress_tracker.py +++ b/semantica/utils/progress_tracker.py @@ -31,23 +31,23 @@ Author: Semantica Contributors License: MIT """ -import sys import inspect +import sys import threading import time from abc import ABC, abstractmethod +from contextlib import contextmanager from dataclasses import dataclass, field from datetime import datetime -from typing import Any, Dict, List, Optional, Callable, Union, Tuple from pathlib import Path -from contextlib import contextmanager +from typing import Any, Callable, Dict, List, Optional, Tuple, Union from .logging import get_logger # Try to import IPython for Jupyter support try: - from IPython.display import display, clear_output, HTML from IPython import get_ipython + from IPython.display import HTML, clear_output, display IPYTHON_AVAILABLE = True except ImportError: IPYTHON_AVAILABLE = False diff --git a/semantica/utils/types.py b/semantica/utils/types.py index 632880e2..49073185 100644 --- a/semantica/utils/types.py +++ b/semantica/utils/types.py @@ -53,24 +53,23 @@ Author: Semantica Contributors License: MIT """ +from dataclasses import dataclass, field +from datetime import datetime +from enum import Enum from typing import ( Any, - Dict, - List, - Optional, - Union, - Tuple, Callable, - Protocol, - TypeVar, + Dict, Generic, Iterator, + List, + Optional, + Protocol, Sequence, + Tuple, + TypeVar, + Union, ) -from dataclasses import dataclass, field -from enum import Enum -from datetime import datetime - # Type Aliases JSONType = Union[Dict[str, Any], List[Any], str, int, float, bool, None] diff --git a/semantica/utils/validators.py b/semantica/utils/validators.py index 35e5915d..cd6eb53a 100644 --- a/semantica/utils/validators.py +++ b/semantica/utils/validators.py @@ -51,11 +51,11 @@ License: MIT """ import re -from typing import Any, Dict, List, Optional, Tuple, Union, Callable from pathlib import Path +from typing import Any, Callable, Dict, List, Optional, Tuple, Union from .exceptions import ValidationError -from .types import EntityDict, RelationshipDict, Entity, Relationship +from .types import Entity, EntityDict, Relationship, RelationshipDict def validate_data( diff --git a/semantica/vector_store/__init__.py b/semantica/vector_store/__init__.py index d4fbcc89..9ded3b91 100644 --- a/semantica/vector_store/__init__.py +++ b/semantica/vector_store/__init__.py @@ -123,83 +123,38 @@ Author: Semantica Contributors License: MIT """ -from .vector_store import ( - VectorStore, - VectorIndexer, - VectorRetriever, - VectorManager +from .config import VectorStoreConfig, vector_store_config +from .faiss_adapter import FAISSAdapter, FAISSIndex, FAISSIndexBuilder, FAISSSearch +from .hybrid_search import HybridSearch, MetadataFilter, SearchRanker +from .metadata_store import MetadataIndex, MetadataSchema, MetadataStore +from .methods import ( + create_index, + delete_vectors, + filter_metadata, + get_vector_store_method, + hybrid_search, + list_available_methods, + manage_namespace, + search_vectors, + store_vectors, + update_vectors, ) - -from .faiss_adapter import ( - FAISSAdapter, - FAISSIndex, - FAISSSearch, - FAISSIndexBuilder -) - +from .milvus_adapter import MilvusAdapter, MilvusClient, MilvusCollection, MilvusSearch +from .namespace_manager import Namespace, NamespaceManager from .pinecone_adapter import ( PineconeAdapter, PineconeIndex, + PineconeMetadata, PineconeQuery, - PineconeMetadata ) - +from .qdrant_adapter import QdrantAdapter, QdrantClient, QdrantCollection, QdrantSearch +from .registry import MethodRegistry, method_registry +from .vector_store import VectorIndexer, VectorManager, VectorRetriever, VectorStore from .weaviate_adapter import ( WeaviateAdapter, WeaviateClient, + WeaviateQuery, WeaviateSchema, - WeaviateQuery -) - -from .qdrant_adapter import ( - QdrantAdapter, - QdrantClient, - QdrantCollection, - QdrantSearch -) - -from .milvus_adapter import ( - MilvusAdapter, - MilvusClient, - MilvusCollection, - MilvusSearch -) - -from .hybrid_search import ( - HybridSearch, - MetadataFilter, - SearchRanker -) - -from .metadata_store import ( - MetadataStore, - MetadataIndex, - MetadataSchema -) - -from .namespace_manager import ( - NamespaceManager, - Namespace -) -from .methods import ( - store_vectors, - search_vectors, - update_vectors, - delete_vectors, - create_index, - hybrid_search, - filter_metadata, - manage_namespace, - get_vector_store_method, - list_available_methods, -) -from .config import ( - VectorStoreConfig, - vector_store_config, -) -from .registry import ( - MethodRegistry, - method_registry, ) __all__ = [ diff --git a/semantica/vector_store/config.py b/semantica/vector_store/config.py index 07be7945..76445a5d 100644 --- a/semantica/vector_store/config.py +++ b/semantica/vector_store/config.py @@ -37,8 +37,8 @@ Example Usage: """ import os -from typing import Optional, Dict, Any from pathlib import Path +from typing import Any, Dict, Optional from ..utils.logging import get_logger diff --git a/semantica/vector_store/faiss_adapter.py b/semantica/vector_store/faiss_adapter.py index 9ae0f4ba..439223d1 100644 --- a/semantica/vector_store/faiss_adapter.py +++ b/semantica/vector_store/faiss_adapter.py @@ -35,9 +35,10 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Tuple, Union -import numpy as np from pathlib import Path +from typing import Any, Dict, List, Optional, Tuple, Union + +import numpy as np from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger diff --git a/semantica/vector_store/hybrid_search.py b/semantica/vector_store/hybrid_search.py index 3c0c1e0e..bbc7150c 100644 --- a/semantica/vector_store/hybrid_search.py +++ b/semantica/vector_store/hybrid_search.py @@ -36,6 +36,7 @@ License: MIT """ from typing import Any, Dict, List, Optional, Tuple, Union + import numpy as np from ..utils.exceptions import ProcessingError, ValidationError diff --git a/semantica/vector_store/metadata_store.py b/semantica/vector_store/metadata_store.py index c114e920..e260847f 100644 --- a/semantica/vector_store/metadata_store.py +++ b/semantica/vector_store/metadata_store.py @@ -35,9 +35,9 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Set, Union -from collections import defaultdict import json +from collections import defaultdict +from typing import Any, Dict, List, Optional, Set, Union from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger diff --git a/semantica/vector_store/methods.py b/semantica/vector_store/methods.py index cda6f744..8246f0f2 100644 --- a/semantica/vector_store/methods.py +++ b/semantica/vector_store/methods.py @@ -91,13 +91,15 @@ Example Usage: """ from typing import Any, Dict, List, Optional, Union + import numpy as np -from .vector_store import VectorStore, VectorIndexer, VectorRetriever, VectorManager -from .hybrid_search import HybridSearch, MetadataFilter, SearchRanker -from .metadata_store import MetadataStore, MetadataIndex, MetadataSchema -from .namespace_manager import NamespaceManager, Namespace -from .registry import method_registry + from .config import vector_store_config +from .hybrid_search import HybridSearch, MetadataFilter, SearchRanker +from .metadata_store import MetadataIndex, MetadataSchema, MetadataStore +from .namespace_manager import Namespace, NamespaceManager +from .registry import method_registry +from .vector_store import VectorIndexer, VectorManager, VectorRetriever, VectorStore # Global manager instances _global_store: Optional[VectorStore] = None diff --git a/semantica/vector_store/milvus_adapter.py b/semantica/vector_store/milvus_adapter.py index e4273b7b..d8861cc9 100644 --- a/semantica/vector_store/milvus_adapter.py +++ b/semantica/vector_store/milvus_adapter.py @@ -36,6 +36,7 @@ License: MIT """ from typing import Any, Dict, List, Optional, Union + import numpy as np from ..utils.exceptions import ProcessingError, ValidationError @@ -45,8 +46,13 @@ from ..utils.progress_tracker import get_progress_tracker # Optional Milvus import try: from pymilvus import ( - connections, Collection, FieldSchema, CollectionSchema, DataType, - utility, MilvusException + Collection, + CollectionSchema, + DataType, + FieldSchema, + MilvusException, + connections, + utility, ) MILVUS_AVAILABLE = True except ImportError: diff --git a/semantica/vector_store/namespace_manager.py b/semantica/vector_store/namespace_manager.py index 5edfcb2a..f2050a79 100644 --- a/semantica/vector_store/namespace_manager.py +++ b/semantica/vector_store/namespace_manager.py @@ -35,8 +35,8 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Set from datetime import datetime +from typing import Any, Dict, List, Optional, Set from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger diff --git a/semantica/vector_store/pinecone_adapter.py b/semantica/vector_store/pinecone_adapter.py index f5dd01f5..6fee775f 100644 --- a/semantica/vector_store/pinecone_adapter.py +++ b/semantica/vector_store/pinecone_adapter.py @@ -34,6 +34,7 @@ License: MIT """ from typing import Any, Dict, List, Optional, Union + import numpy as np from ..utils.exceptions import ProcessingError, ValidationError @@ -43,7 +44,7 @@ from ..utils.progress_tracker import get_progress_tracker # Optional Pinecone import try: import pinecone - from pinecone import Pinecone, ServerlessSpec, PodSpec + from pinecone import Pinecone, PodSpec, ServerlessSpec PINECONE_AVAILABLE = True except ImportError: PINECONE_AVAILABLE = False diff --git a/semantica/vector_store/qdrant_adapter.py b/semantica/vector_store/qdrant_adapter.py index b6ddef7c..58ef0ddf 100644 --- a/semantica/vector_store/qdrant_adapter.py +++ b/semantica/vector_store/qdrant_adapter.py @@ -34,6 +34,7 @@ License: MIT """ from typing import Any, Dict, List, Optional, Union + import numpy as np from ..utils.exceptions import ProcessingError, ValidationError @@ -44,8 +45,13 @@ from ..utils.progress_tracker import get_progress_tracker try: from qdrant_client import QdrantClient as QdrantClientLib from qdrant_client.models import ( - Distance, VectorParams, PointStruct, Filter, FieldCondition, - MatchValue, CollectionStatus + CollectionStatus, + Distance, + FieldCondition, + Filter, + MatchValue, + PointStruct, + VectorParams, ) QDRANT_AVAILABLE = True except ImportError: diff --git a/semantica/vector_store/registry.py b/semantica/vector_store/registry.py index ff9eb920..d1e65c51 100644 --- a/semantica/vector_store/registry.py +++ b/semantica/vector_store/registry.py @@ -39,7 +39,7 @@ Example Usage: >>> available = method_registry.list_all("store") """ -from typing import Dict, Callable, Any, List, Optional +from typing import Any, Callable, Dict, List, Optional class MethodRegistry: diff --git a/semantica/vector_store/vector_store.py b/semantica/vector_store/vector_store.py index 3cfe2be6..16d12501 100644 --- a/semantica/vector_store/vector_store.py +++ b/semantica/vector_store/vector_store.py @@ -38,6 +38,7 @@ License: MIT """ from typing import Any, Dict, List, Optional, Tuple + import numpy as np from ..utils.exceptions import ProcessingError, ValidationError diff --git a/semantica/vector_store/weaviate_adapter.py b/semantica/vector_store/weaviate_adapter.py index ce6d6b7d..809230bc 100644 --- a/semantica/vector_store/weaviate_adapter.py +++ b/semantica/vector_store/weaviate_adapter.py @@ -35,6 +35,7 @@ License: MIT """ from typing import Any, Dict, List, Optional, Union + import numpy as np from ..utils.exceptions import ProcessingError, ValidationError diff --git a/semantica/visualization/__init__.py b/semantica/visualization/__init__.py index 374b2393..7aa6b460 100644 --- a/semantica/visualization/__init__.py +++ b/semantica/visualization/__init__.py @@ -124,32 +124,26 @@ Author: Semantica Contributors License: MIT """ -from .kg_visualizer import KGVisualizer -from .ontology_visualizer import OntologyVisualizer -from .embedding_visualizer import EmbeddingVisualizer -from .semantic_network_visualizer import SemanticNetworkVisualizer -from .quality_visualizer import QualityVisualizer from .analytics_visualizer import AnalyticsVisualizer -from .temporal_visualizer import TemporalVisualizer +from .config import VisualizationConfig, visualization_config +from .embedding_visualizer import EmbeddingVisualizer +from .kg_visualizer import KGVisualizer from .methods import ( - visualize_kg, - visualize_ontology, - visualize_embeddings, - visualize_semantic_network, - visualize_quality, - visualize_analytics, - visualize_temporal, get_visualization_method, list_available_methods, + visualize_analytics, + visualize_embeddings, + visualize_kg, + visualize_ontology, + visualize_quality, + visualize_semantic_network, + visualize_temporal, ) -from .config import ( - VisualizationConfig, - visualization_config, -) -from .registry import ( - MethodRegistry, - method_registry, -) +from .ontology_visualizer import OntologyVisualizer +from .quality_visualizer import QualityVisualizer +from .registry import MethodRegistry, method_registry +from .semantic_network_visualizer import SemanticNetworkVisualizer +from .temporal_visualizer import TemporalVisualizer __all__ = [ # Visualizers diff --git a/semantica/visualization/analytics_visualizer.py b/semantica/visualization/analytics_visualizer.py index 716644b9..a078520e 100644 --- a/semantica/visualization/analytics_visualizer.py +++ b/semantica/visualization/analytics_visualizer.py @@ -31,16 +31,16 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union from pathlib import Path +from typing import Any, Dict, List, Optional, Union import numpy as np -import plotly.graph_objects as go import plotly.express as px +import plotly.graph_objects as go from plotly.subplots import make_subplots -from ..utils.logging import get_logger from ..utils.exceptions import ProcessingError +from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .utils.color_schemes import ColorPalette, ColorScheme from .utils.export_formats import export_plotly_figure diff --git a/semantica/visualization/config.py b/semantica/visualization/config.py index 289edd70..c95ec245 100644 --- a/semantica/visualization/config.py +++ b/semantica/visualization/config.py @@ -37,8 +37,8 @@ Example Usage: """ import os -from typing import Optional, Dict, Any from pathlib import Path +from typing import Any, Dict, Optional from ..utils.logging import get_logger diff --git a/semantica/visualization/embedding_visualizer.py b/semantica/visualization/embedding_visualizer.py index 6e35dc8b..5636acfb 100644 --- a/semantica/visualization/embedding_visualizer.py +++ b/semantica/visualization/embedding_visualizer.py @@ -30,15 +30,15 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union, Tuple from pathlib import Path +from typing import Any, Dict, List, Optional, Tuple, Union -import numpy as np -import plotly.graph_objects as go -import plotly.express as px -from plotly.subplots import make_subplots import matplotlib.pyplot as plt +import numpy as np +import plotly.express as px +import plotly.graph_objects as go import seaborn as sns +from plotly.subplots import make_subplots from sklearn.decomposition import PCA from sklearn.manifold import TSNE @@ -47,11 +47,11 @@ try: except ImportError: umap = None -from ..utils.logging import get_logger from ..utils.exceptions import ProcessingError +from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .utils.color_schemes import ColorPalette, ColorScheme -from .utils.export_formats import export_plotly_figure, export_matplotlib_figure +from .utils.export_formats import export_matplotlib_figure, export_plotly_figure class EmbeddingVisualizer: diff --git a/semantica/visualization/kg_visualizer.py b/semantica/visualization/kg_visualizer.py index d014cc53..7aed7ba5 100644 --- a/semantica/visualization/kg_visualizer.py +++ b/semantica/visualization/kg_visualizer.py @@ -30,22 +30,30 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union, Tuple from pathlib import Path +from typing import Any, Dict, List, Optional, Tuple, Union -import numpy as np -import plotly.graph_objects as go -import plotly.express as px -from plotly.subplots import make_subplots -import matplotlib.pyplot as plt import matplotlib.patches as mpatches +import matplotlib.pyplot as plt +import numpy as np +import plotly.express as px +import plotly.graph_objects as go +from plotly.subplots import make_subplots -from ..utils.logging import get_logger from ..utils.exceptions import ProcessingError +from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from .utils.layout_algorithms import ForceDirectedLayout, HierarchicalLayout, CircularLayout from .utils.color_schemes import ColorPalette, ColorScheme -from .utils.export_formats import export_plotly_figure, export_matplotlib_figure, save_html +from .utils.export_formats import ( + export_matplotlib_figure, + export_plotly_figure, + save_html, +) +from .utils.layout_algorithms import ( + CircularLayout, + ForceDirectedLayout, + HierarchicalLayout, +) class KGVisualizer: diff --git a/semantica/visualization/methods.py b/semantica/visualization/methods.py index f119fc5d..4b86157d 100644 --- a/semantica/visualization/methods.py +++ b/semantica/visualization/methods.py @@ -86,19 +86,20 @@ Example Usage: >>> fig = visualize_embeddings(embeddings, labels, method="2d_projection", output="interactive") """ -from typing import Any, Dict, List, Optional, Union from pathlib import Path +from typing import Any, Dict, List, Optional, Union + import numpy as np +from .analytics_visualizer import AnalyticsVisualizer +from .config import visualization_config +from .embedding_visualizer import EmbeddingVisualizer from .kg_visualizer import KGVisualizer from .ontology_visualizer import OntologyVisualizer -from .embedding_visualizer import EmbeddingVisualizer -from .semantic_network_visualizer import SemanticNetworkVisualizer from .quality_visualizer import QualityVisualizer -from .analytics_visualizer import AnalyticsVisualizer -from .temporal_visualizer import TemporalVisualizer from .registry import method_registry -from .config import visualization_config +from .semantic_network_visualizer import SemanticNetworkVisualizer +from .temporal_visualizer import TemporalVisualizer # Global visualizer instances _global_kg_visualizer: Optional[KGVisualizer] = None diff --git a/semantica/visualization/ontology_visualizer.py b/semantica/visualization/ontology_visualizer.py index 28208923..3bd7db10 100644 --- a/semantica/visualization/ontology_visualizer.py +++ b/semantica/visualization/ontology_visualizer.py @@ -32,27 +32,31 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union from pathlib import Path +from typing import Any, Dict, List, Optional, Union -import plotly.graph_objects as go -import plotly.express as px -from plotly.subplots import make_subplots -import matplotlib.pyplot as plt import matplotlib.patches as mpatches +import matplotlib.pyplot as plt +import plotly.express as px +import plotly.graph_objects as go from matplotlib.patches import FancyBboxPatch +from plotly.subplots import make_subplots try: import graphviz except ImportError: graphviz = None -from ..utils.logging import get_logger from ..utils.exceptions import ProcessingError +from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from .utils.layout_algorithms import HierarchicalLayout from .utils.color_schemes import ColorPalette, ColorScheme -from .utils.export_formats import export_plotly_figure, export_matplotlib_figure, save_html +from .utils.export_formats import ( + export_matplotlib_figure, + export_plotly_figure, + save_html, +) +from .utils.layout_algorithms import HierarchicalLayout class OntologyVisualizer: diff --git a/semantica/visualization/quality_visualizer.py b/semantica/visualization/quality_visualizer.py index 260aaaa5..8db8b469 100644 --- a/semantica/visualization/quality_visualizer.py +++ b/semantica/visualization/quality_visualizer.py @@ -30,15 +30,15 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union from pathlib import Path +from typing import Any, Dict, List, Optional, Union -import plotly.graph_objects as go import plotly.express as px +import plotly.graph_objects as go from plotly.subplots import make_subplots -from ..utils.logging import get_logger from ..utils.exceptions import ProcessingError +from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .utils.color_schemes import ColorScheme from .utils.export_formats import export_plotly_figure diff --git a/semantica/visualization/registry.py b/semantica/visualization/registry.py index 1e530749..74bc3113 100644 --- a/semantica/visualization/registry.py +++ b/semantica/visualization/registry.py @@ -40,7 +40,7 @@ Example Usage: >>> available = method_registry.list_all("kg") """ -from typing import Dict, Callable, Any, List, Optional +from typing import Any, Callable, Dict, List, Optional class MethodRegistry: diff --git a/semantica/visualization/semantic_network_visualizer.py b/semantica/visualization/semantic_network_visualizer.py index d7134f14..e70cbd68 100644 --- a/semantica/visualization/semantic_network_visualizer.py +++ b/semantica/visualization/semantic_network_visualizer.py @@ -30,18 +30,18 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union from pathlib import Path +from typing import Any, Dict, List, Optional, Union -import plotly.graph_objects as go import plotly.express as px +import plotly.graph_objects as go -from ..utils.logging import get_logger from ..utils.exceptions import ProcessingError +from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker -from .utils.layout_algorithms import ForceDirectedLayout from .utils.color_schemes import ColorPalette, ColorScheme from .utils.export_formats import export_plotly_figure +from .utils.layout_algorithms import ForceDirectedLayout class SemanticNetworkVisualizer: diff --git a/semantica/visualization/temporal_visualizer.py b/semantica/visualization/temporal_visualizer.py index fa310491..96f86ea0 100644 --- a/semantica/visualization/temporal_visualizer.py +++ b/semantica/visualization/temporal_visualizer.py @@ -30,15 +30,15 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Union from pathlib import Path +from typing import Any, Dict, List, Optional, Union -import plotly.graph_objects as go import plotly.express as px +import plotly.graph_objects as go from plotly.subplots import make_subplots -from ..utils.logging import get_logger from ..utils.exceptions import ProcessingError +from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .utils.color_schemes import ColorPalette, ColorScheme from .utils.export_formats import export_plotly_figure diff --git a/semantica/visualization/utils/__init__.py b/semantica/visualization/utils/__init__.py index 7394b15a..b075c256 100644 --- a/semantica/visualization/utils/__init__.py +++ b/semantica/visualization/utils/__init__.py @@ -32,9 +32,14 @@ Author: Semantica Contributors License: MIT """ -from .layout_algorithms import LayoutAlgorithm, ForceDirectedLayout, HierarchicalLayout, CircularLayout -from .color_schemes import ColorScheme, get_color_scheme, ColorPalette -from .export_formats import export_plotly_figure, export_matplotlib_figure, save_html +from .color_schemes import ColorPalette, ColorScheme, get_color_scheme +from .export_formats import export_matplotlib_figure, export_plotly_figure, save_html +from .layout_algorithms import ( + CircularLayout, + ForceDirectedLayout, + HierarchicalLayout, + LayoutAlgorithm, +) __all__ = [ "LayoutAlgorithm", diff --git a/semantica/visualization/utils/color_schemes.py b/semantica/visualization/utils/color_schemes.py index 994487a2..dddc241e 100644 --- a/semantica/visualization/utils/color_schemes.py +++ b/semantica/visualization/utils/color_schemes.py @@ -28,8 +28,8 @@ Author: Semantica Contributors License: MIT """ -from typing import List, Dict, Optional from enum import Enum +from typing import Dict, List, Optional class ColorScheme(Enum): diff --git a/semantica/visualization/utils/export_formats.py b/semantica/visualization/utils/export_formats.py index b60c9711..ffab2f4d 100644 --- a/semantica/visualization/utils/export_formats.py +++ b/semantica/visualization/utils/export_formats.py @@ -30,11 +30,11 @@ Author: Semantica Contributors License: MIT """ -from typing import Optional, Union from pathlib import Path +from typing import Optional, Union -from ...utils.logging import get_logger from ...utils.exceptions import ProcessingError +from ...utils.logging import get_logger def export_plotly_figure(fig, file_path: Union[str, Path], format: str = "html", **options) -> None: diff --git a/semantica/visualization/utils/layout_algorithms.py b/semantica/visualization/utils/layout_algorithms.py index 5ae6a5ea..34fa94ef 100644 --- a/semantica/visualization/utils/layout_algorithms.py +++ b/semantica/visualization/utils/layout_algorithms.py @@ -35,11 +35,11 @@ Author: Semantica Contributors License: MIT """ -from typing import Any, Dict, List, Optional, Tuple from abc import ABC, abstractmethod +from typing import Any, Dict, List, Optional, Tuple -import numpy as np import networkx as nx +import numpy as np from ...utils.logging import get_logger