Only this pageAll pages
Powered by GitBook
1 of 17

TomatoPy - Italian

Loading...

Loading...

Loading...

Loading...

Moduli Fondamentali

Loading...

Loading...

Loading...

Loading...

Loading...

Migliori Pratiche

Loading...

Loading...

Tutorial

Loading...

Loading...

Loading...

Iniziare

Concetti di base

Guida all'installazione

Concetti di Base
Guida all'Installazione

Guida all'Installazione

Questa guida ti aiuterà a far funzionare TomatoPy nel tuo ambiente Python.

Requisiti

  • Python 3.8 o superiore

  • pip (Python package installer)

  • A virtual environment (recommended)

Metodi di Installazione

Utilizzando pip (Consigliato)

pip install tomatopy

Da Sorgente

git clone https://github.com/tomatopy/tomatopy.git
cd tomatopy
pip install -e .

Impostazione dell'Ambiente Virtuale

Ti consigliamo di utilizzare un ambiente virtuale per gestire la tua installazione di TomatoPy:

# Crea un ambiente virtuale
python -m venv tomatopy-env

# Activate the virtual environment
# On Windows:
tomatopy-env\Scripts\activate
# On macOS/Linux:
source tomatopy-env/bin/activate

# Install TomatoPy
pip install tomatopy

Verifica

Per verificare la tua installazione, esegui Python e prova a importare TomatoPy:

import tomatopy
print(tomatopy.__version__)  # Should print the installed version

Risoluzione dei Problemi

Problemi Comuni

  1. ImportError: Nessun modulo chiamato 'tomatopy'

    • Ensure you've activated your virtual environment

    • Verify the installation was successful with pip list | grep tomatopy

  2. Version Compatibility

    • Check that you're using Python 3.8 or higher

    • Verify package dependencies are correctly installed

Getting Help

Richiesta di Aiuto

Next Steps

  • API Reference

Check our

Join our

Visit our

GitHub Issues
Discord Community
Stack Overflow Tag
Quick Start Guide
Basic Concepts

Concetti di Base

Comprendere i concetti fondamentali di TomatoPy ti aiuterà a sfruttare al meglio la libreria. Questa guida introduce le idee e i componenti fondamentali.

Componenti Fondamentali

1. Ingredienti

Gli ingredienti sono i mattoni di TomatoPy. Ogni ingrediente ha proprietà che influenzano il suo comportamento durante le operazioni di cottura.

from tomatopy import Ingredient

# Crea un ingrediente di base
tomato = Ingredient(
    name="tomato",
    amount=1,
    unit="whole",
    properties={
        "ripeness": 0.8,
        "water_content": 0.95,
        "sugar_content": 0.03
    }
)

2. Cucina

La classe Kitchen rappresenta il tuo ambiente di cottura virtuale. Gestisce le operazioni di cottura e mantiene le condizioni ambientali.

from tomatopy import Kitchen

kitchen = Kitchen()
kitchen.set_temperature(180)  # Celsius
kitchen.set_humidity(65)      # Percentuale

3. Ricette

Le ricette combinano più ingredienti e definiscono come devono essere preparati.

from tomatopy import Recipe

# Crea una ricetta
marinara = Recipe("Marinara Classica")
marinara.add_ingredient(tomato)
marinara.set_cooking_method("sobbollire")
marinara.set_duration("30m")

Concetti Chiave

1. Sistema di Proprietà

Gli ingredienti hanno proprietà che influenzano il loro comportamento:

  • Physical Properties: weight, volume, density

  • Chemical Properties: pH, water content, sugar content

  • Culinary Properties: ripeness, freshness, texture

# Accedi e modifica le proprietà
print(tomato.properties["water_content"])  # 0.95
tomato.properties["ripeness"] = 0.9

2. Operazioni di Cottura

Le operazioni di cottura trasformano gli ingredienti attraverso vari metodi:

  • Heat Application: simmering, boiling, roasting

  • Mechanical Action: chopping, blending, kneading

  • Chemical Changes: fermentation, curing

# Esegui operazioni di cottura
sauce = kitchen.cook(
    tomato,
    method="sobbollire",
    temperature=100,
    duration="30m"
)

3. Gestione dello Stato

Gli ingredienti mantengono lo stato durante le operazioni di cottura:

# Controlla lo stato dell'ingrediente
print(tomato.state)  # "crudo"
sauce = kitchen.cook(tomato, method="sobbollire")
print(sauce.state)   # "cotto"

Concetti Avanzati

1. Profili di Sapore

Gli ingredienti e i prodotti cotti hanno profili di sapore:

from tomatopy import TasteTester

tester = TasteTester()
profile = tester.analyze(sauce)

# Accedi ai componenti del sapore
print(profile.acidity)     # 0.7
print(profile.sweetness)   # 0.3
print(profile.umami)       # 0.8

2. Conversione delle Unità

TomatoPy gestisce automaticamente le conversioni delle unità:

# Converti tra unità
tomato.convert_to_imperial()  # Converte da metrico a imperiale
sauce.convert_volume("ml", "cups")  # Converte tra unità di volume

3. Gestione degli Errori

La libreria include una gestione degli errori robusta:

prova:
    kitchen.cook(tomato, temperature=1000)  # Troppo caldo!
eccetto TemperatureError come e:
    print(f"Errore: {e}")  # "La temperatura supera il range di cottura sicuro"

Migliori Pratiche

  1. Always Use Virtual Environments

    python -m venv tomatopy-env
    source tomatopy-env/bin/activate  # or `tomatopy-env\Scripts\activate` on Windows
  2. print("Attenzione: il pomodoro potrebbe essere troppo acerbo per risultati ottimali")

    if tomato.properties["ripeness"] < 0.5:
        print("Warning: Tomato may be too unripe for optimal results")
  3. return Ingredient(name=name, properties=properties)

    from typing import Dict, Any
    
    def create_ingredient(name: str, properties: Dict[str, Any]) -> Ingredient:
        return Ingredient(name=name, properties=properties)

Prossimi Passi

  • API Reference - Explore the full API documentation

- Dive deeper into specific modules

- Follow step-by-step guides

Moduli Principali
Tutorials

Operazioni di Cottura

Il modulo delle operazioni di cottura fornisce un insieme completo di strumenti per simulare vari metodi e processi di cottura in TomatoPy.

Impostazione della cucina

Configurazione di base della cucina

from tomatopy import Kitchen

# Inizializza una cucina
kitchen = Kitchen()

# Configura le impostazioni di base
kitchen.set_temperature(180)  # Celsius
kitchen.set_humidity(65)      # Percentuale
kitchen.set_pressure(101.3)   # kPa (pressione atmosferica)

Impostazioni avanzate della cucina

# Configura impostazioni avanzate
kitchen.set_ventilation("high")
kitchen.set_lighting("bright")
kitchen.set_equipment({
    "stove": {"type": "gas", "burners": 4},
    "oven": {"type": "convection", "capacity": "large"},
    "blender": {"type": "high_speed", "capacity": "1.5L"}
})

Metodi di cottura di base

Cottura a fuoco lento

# Cuocere gli ingredienti a fuoco lento
sauce = kitchen.cook(
    tomato,
    method="simmer",
    temperature=100,
    duration="30m",
    stirring_frequency="occasional"
)

Bollitura

# Bollire gli ingredienti
pasta = kitchen.cook(
    spaghetti,
    method="boil",
    temperature=100,
    duration="8m",
    salt_concentration=0.02  # 2% sale
)

Arrostire

# Arrostire gli ingredienti
roasted_tomatoes = kitchen.cook(
    tomatoes,
    method="roast",
    temperature=200,
    duration="45m",
    turning_frequency="every_15m"
)

Tecniche di cottura avanzate

Cottura a pressione

# Cuocere a pressione gli ingredienti
beans = kitchen.cook(
    dried_beans,
    method="pressure_cook",
    pressure=103.4,  # kPa
    temperature=121,  # Celsius
    duration="30m"
)

Sous Vide

# Cottura sous vide
steak = kitchen.cook(
    beef,
    method="sous_vide",
    temperature=55,
    duration="2h",
    vacuum_sealed=True
)

Affumicatura

# Affumicare gli ingredienti
smoked_tomatoes = kitchen.cook(
    tomatoes,
    method="smoke",
    temperature=100,
    duration="4h",
    wood_type="hickory",
    smoke_intensity="medium"
)

Gestione delle ricette

Creazione di ricette

from tomatopy import Recipe

# Crea una ricetta
marinara = Recipe("Marinara Classica")
marinara.add_ingredient(tomato)
marinara.add_ingredient(garlic)
marinara.add_ingredient(basil)

# Imposta i parametri di cottura
marinara.set_cooking_method("simmer")
marinara.set_duration("30m")
marinara.set_temperature(100)

Cottura in batch

# Cuocere più ricette
recipes = [marinara, pizza_sauce, tomato_soup]
results = kitchen.cook_batch(recipes)

# Elabora i risultati
for recipe, result in zip(recipes, results):
    print(f"{recipe.name}: {result.consistency}")

Controllo della temperatura

Monitoraggio della temperatura

# Monitora la temperatura durante la cottura
with kitchen.temperature_monitor() as monitor:
    sauce = kitchen.cook(tomato, method="simmer")
    temperature_history = monitor.get_history()
    print(f"Temperatura media: {monitor.get_average()}°C")

Avvisi sulla temperatura

# Imposta avvisi sulla temperatura
kitchen.set_temperature_alert(
    min_temp=95,
    max_temp=105,
    callback=lambda temp: print(f"Avviso temperatura: {temp}°C")
)

Validazione della cottura

Controlli di sicurezza

# Esegui controlli di sicurezza
se cucina.validate_cooking_parameters(
    temperatura=200,
    durata="2h",
    pressione=103.4
):
    # Procedi con la cottura
    risultato = cucina.cook(...)
altrimenti:
    print("Parametri di cottura non validi")

Valutazione della qualità

# Valuta i risultati della cottura
report_di_qualità = cucina.assess_cooking_result(salsa)
print(f"Qualità complessiva: {report_di_qualità.score}")
print(f"Raccomandazioni: {report_di_qualità.recommendations}")

Gestione degli errori

prova:
    # Tenta un'operazione di cottura non valida
    cucina.cook(
        pomodoro,
        metodo="metodo_non_valido",
        temperatura=1000  # Troppo caldo!
    )
eccetto CookingError come e:
    print(f"Errore: {e}")  # "Metodo di cottura non valido"

prova:
    # Tenta una temperatura non sicura
    cucina.set_temperature(500)  # Troppo caldo!
eccetto TemperatureError come e:
    print(f"Errore: {e}")  # "La temperatura supera il limite di sicurezza"

Migliori pratiche

  1. Convalida sempre i parametri

    se cucina.validate_cooking_parameters(
        temperatura=temp,
        durata=durata,
        pressione=pressione
    ):
        # Procedi con la cottura
  2. Monitor Temperature

    with kitchen.temperature_monitor() as monitor:
        result = kitchen.cook(...)
        if monitor.get_max() > safety_threshold:
            print("Warning: Temperature exceeded safety threshold")
  3. Use Appropriate Methods

    # Choose method based on ingredient
    if ingredient.requires_gentle_cooking:
        method = "simmer"
    else:
        method = "boil"

API Reference

Classes

  • Kitchen: Main class for cooking operations

  • Recipe: Recipe management class

  • TemperatureMonitor: Temperature monitoring class

  • QualityReport: Cooking quality assessment class

Classi

Kitchen Class

  • __init__()

  • set_temperature(temp)

  • set_humidity(humidity)

  • set_pressure(pressure)

  • set_ventilation(level)

  • set_lighting(level)

  • set_equipment(equipment)

  • cook(ingredient, method, **params)

  • cook_batch(recipes)

  • validate_cooking_parameters(**params)

  • assess_cooking_result(result)

  • temperature_monitor()

Classe Cucina

  • API Reference - Explore the full API

Gestione della Cucina Virtuale

Questa guida delinea le migliori pratiche per gestire le cucine virtuali in modo efficiente in TomatoPy.

Impostazione della cucina

Configurazione di base

Configurazione avanzata

Gestione delle risorse

Assegnazione delle attrezzature

Ottimizzazione dello spazio

Gestione del flusso di lavoro

Pianificazione delle attività

Ottimizzazione del flusso di lavoro

Controllo della temperatura

Gestione delle zone

Monitoraggio della temperatura

Gestione della sicurezza

Protocolli di sicurezza

Procedure di emergenza

Manutenzione

Manutenzione delle attrezzature

Protocolli di pulizia

Riepilogo delle migliori pratiche

  1. Gestione delle risorse

    • Efficient equipment allocation

    • Space optimization

    • Resource tracking

  2. Workflow Management

    • Task scheduling

    • Workflow optimization

    • Dependency management

  3. Temperature Control

    • Zone management

    • Temperature monitoring

    • Alert systems

  4. Safety Management

    • Safety protocols

    • Emergency procedures

    • Violation handling

  5. Maintenance

    • Equipment maintenance

    • Cleaning protocols

    • Schedule management

Next Steps

__init__() - Create delicious pizzas

- Analyze cooking results

- Explore the full API

- Learn advanced techniques

- Learn optimization techniques

Pizza Creation System
Taste Testing Module
from tomatopy import Kitchen, KitchenHardware

# Inizializza la cucina con impostazioni di base
kitchen = Kitchen(
    temperature=22,  # Celsius
    humidity=0.65,
    ventilation="standard",
    lighting="bright"
)

# Configura l'hardware
hardware = KitchenHardware()
hardware.configure(
    oven={"type": "convection", "capacity": "large"},
    stove={"burners": 4, "type": "gas"},
    refrigerator={"capacity": "medium", "temperature": 4}
)
# Configura impostazioni avanzate
kitchen.configure(
    temperature_control={
        "precision": 0.1,
        "zones": ["prep", "cooking", "storage"]
    },
    humidity_control={
        "precision": 0.05,
        "zones": ["prep", "cooking", "storage"]
    },
    ventilation={
        "type": "smart",
        "zones": ["prep", "cooking", "storage"],
        "filters": ["grease", "smoke", "odor"]
    }
)
# Buono: Assegnazione efficiente delle attrezzature
class KitchenManager:
    def __init__(self):
        self.equipment_pool = {}
        self.allocations = {}

    def allocate_equipment(self, recipe):
        required = recipe.get_required_equipment()
        available = self.get_available_equipment()
        
        for item in required:
            if item in available:
                self.allocations[recipe.id] = item
                return True
        return False

# Cattivo: Nessuna gestione delle attrezzature
def cook_recipe(recipe):
    # Nessuna assegnazione delle attrezzature
    pass
# Buono: Ottimizza lo spazio in cucina
class KitchenLayout:
    def __init__(self):
        self.workstations = {}
        self.workflow = {}

    def optimize_layout(self, recipes):
        for recipe in recipes:
            required_space = recipe.get_required_space()
            available_space = self.get_available_space()
            
            if self.can_fit(required_space, available_space):
                self.allocate_space(recipe, available_space)

# Cattivo: Nessuna ottimizzazione dello spazio
def prepare_recipe(recipe):
    # Nessuna gestione dello spazio
    pass
# Buono: Pianificazione efficiente delle attività
class KitchenScheduler:
    def __init__(self):
        self.tasks = []
        self.resources = {}

    def schedule_tasks(self, recipes):
        for recipe in recipes:
            tasks = recipe.get_tasks()
            for task in tasks:
                if self.can_schedule(task):
                    self.tasks.append(task)
                else:
                    self.handle_scheduling_conflict(task)

# Cattivo: Nessuna pianificazione delle attività
def process_recipes(recipes):
    for recipe in recipes:
        # Nessuna pianificazione
        process_recipe(recipe)
# Buono: Ottimizza il flusso di lavoro
class WorkflowOptimizer:
    def optimize_workflow(self, tasks):
        # Ordina le attività per priorità e dipendenze
        sorted_tasks = self.topological_sort(tasks)
        
        # Raggruppa le attività compatibili
        task_groups = self.group_tasks(sorted_tasks)
        
        # Pianifica i gruppi in modo efficiente
        return self.schedule_groups(task_groups)

# Cattivo: Nessuna ottimizzazione del flusso di lavoro
def process_tasks(tasks):
    for task in tasks:
        # Nessuna ottimizzazione
        process_task(task)
# Buono: Gestisci le zone di temperatura
class TemperatureManager:
    def __init__(self):
        self.zones = {}
        self.controllers = {}

    def manage_zones(self):
        for zone, settings in self.zones.items():
            current_temp = self.get_zone_temperature(zone)
            target_temp = settings["target"]
            
            if abs(current_temp - target_temp) > settings["tolerance"]:
                self.adjust_zone_temperature(zone, target_temp)

# Cattivo: Nessuna gestione delle zone
def set_temperature(temp):
    # Nessun controllo delle zone
    pass
# Buono: Monitora le temperature
class TemperatureMonitor:
    def __init__(self):
        self.sensors = {}
        self.alerts = []

    def monitor_temperatures(self):
        for zone, sensor in self.sensors.items():
            temp = sensor.read()
            if self.is_temperature_unsafe(temp, zone):
                self.trigger_alert(zone, temp)

# Cattivo: Nessun monitoraggio della temperatura
def check_temperature():
    # Nessun monitoraggio
    pass
# Buono: Implementa protocolli di sicurezza
class SafetyManager:
    def __init__(self):
        self.protocols = {}
        self.violations = []

    def enforce_safety(self, operation):
        if not self.check_safety_protocols(operation):
            self.handle_safety_violation(operation)
            return False
        return True

# Cattivo: Nessun protocollo di sicurezza
def perform_operation(operation):
    # Nessun controllo di sicurezza
    pass
# Buono: Gestisci le emergenze
class EmergencyManager:
    def __init__(self):
        self.procedures = {}
        self.emergency_contacts = []

    def handle_emergency(self, emergency_type):
        if emergency_type in self.procedures:
            self.execute_procedure(emergency_type)
            self.notify_emergency_contacts(emergency_type)

# Cattivo: Nessuna gestione delle emergenze
def handle_problem(problem):
    # Nessuna procedura di emergenza
    pass
# Buono: Gestisci la manutenzione delle attrezzature
class MaintenanceManager:
    def __init__(self):
        self.schedule = {}
        self.maintenance_history = []

    def schedule_maintenance(self, equipment):
        if equipment.needs_maintenance():
            self.add_to_schedule(equipment)
            self.notify_maintenance_team(equipment)

# Cattivo: Nessuna pianificazione della manutenzione
def fix_equipment(equipment):
    # Nessuna gestione della manutenzione
    pass
# Buono: Implementare protocolli di pulizia
class CleaningManager:
    def __init__(self):
        self.protocols = {}
        self.cleaning_schedule = []

    def manage_cleaning(self):
        for area in self.get_areas():
            if area.needs_cleaning():
                self.schedule_cleaning(area)
                self.notify_cleaning_staff(area)

# Cattivo: Nessuna gestione della pulizia
def clean_area(area):
    # Nessun protocollo di pulizia
    pass
API Reference
Tutorials
Code Efficiency

Profilazione Avanzata dei Sapori

Questo tutorial ti guiderà attraverso tecniche avanzate per analizzare e ottimizzare i profili di sapore utilizzando le capacità di test del gusto di TomatoPy.

Prerequisiti

Prima di iniziare, assicurati di avere:

  • Comprensione di base di Python

  • TomatoPy installed

  • Understanding of basic taste concepts

  • Experience with basic flavor analysis

Passo 1: Impostare l'ambiente di test del gusto

Per prima cosa, inizializziamo il nostro ambiente di test del gusto:

from tomatopy import TasteTester, TasteProfile

# Inizializza il tester del gusto
tester = TasteTester()

# Configura l'ambiente di test
tester.configure(
    temperature=22,  # Celsius
    humidity=0.65,
    lighting="standard",
    background_noise="minimal"
)

Passo 2: Analisi di base dei sapori

Iniziamo con un'analisi completa dei sapori:

# Crea un ingrediente di test
from tomatopy import Tomato

test_tomato = Tomato(
    ripeness=0.9,
    variety="San Marzano",
    weight=150  # grammi
)

# Esegui un'analisi completa
profile = tester.analyze(
    test_tomato,
    depth="comprehensive",
    include_aroma=True,
    include_texture=True
)

# Accedi alle metriche di base
print(f"Dolcezza: {profile.sweetness}")
print(f"Acidità: {profile.acidity}")
print(f"Umami: {profile.umami}")

Passo 3: Analisi avanzata degli aromi

Immergiamoci profondamente nella profilazione degli aromi:

# Ottieni un profilo aromatico dettagliato
aroma_profile = tester.analyze_aroma(
    test_tomato,
    include_secondary_notes=True,
    include_tertiary_notes=True
)

# Accedi alle metriche aromatiche
print("Note Primarie:")
for note in aroma_profile.primary_notes:
    print(f"- {note.name}: {note.intensity}")

print("\nNote Secondarie:")
for note in aroma_profile.secondary_notes:
    print(f"- {note.name}: {note.intensity}")

print("\nNote Terziarie:")
for note in aroma_profile.tertiary_notes:
    print(f"- {note.name}: {note.intensity}")

Passo 4: Analisi della consistenza

Analizziamo il profilo della consistenza:

# Ottieni un profilo di consistenza dettagliato
texture_profile = tester.analyze_texture(
    test_tomato,
    include_mouthfeel=True,
    include_structural_analysis=True
)

# Accedi alle metriche di consistenza
print(f"Fermità: {texture_profile.firmness}")
print(f"Succosità: {texture_profile.juiciness}")
print(f"Sensazione in bocca: {texture_profile.mouthfeel}")
print(f"Integrità strutturale: {texture_profile.structural_integrity}")

Passo 5: Analisi dell'equilibrio dei sapori

Analizziamo l'equilibrio dei sapori:

# Analizza l'equilibrio dei sapori
balance = tester.analyze_balance(test_tomato)

# Accedi alle metriche di equilibrio
print(f"Equilibrio complessivo: {balance.overall_score}")
print(f"Rapporto dolce-acido: {balance.sweet_sour_ratio}")
print(f"Miglioramento umami: {balance.umami_enhancement}")
print(f"Complessità del sapore: {balance.complexity}")

Passo 6: Analisi comparativa

Confrontiamo più ingredienti:

# Crea più ingredienti di test
tomato1 = Tomato(ripeness=0.8, variety="San Marzano")
tomato2 = Tomato(ripeness=0.9, variety="Roma")
tomato3 = Tomato(ripeness=0.7, variety="Cherry")

# Esegui un'analisi comparativa
comparison = tester.compare(
    [tomato1, tomato2, tomato3],
    metrics=["sweetness", "acidity", "umami", "aroma"]
)

# Accedi ai risultati del confronto
print("\nConfronto Dolcezza:")
for tomato, score in comparison.get_rankings("sweetness"):
    print(f"- {tomato.variety}: {score}")

print("\nConfronto Acidità:")
for tomato, score in comparison.get_rankings("acidity"):
    print(f"- {tomato.variety}: {score}")

Passo 7: Ottimizzazione del sapore

Ottimizziamo il profilo del sapore:

# Crea un profilo target
target_profile = TasteProfile(
    sweetness=0.7,
    acidity=0.6,
    umami=0.8,
    aroma_intensity=0.75
)

# Analizza il profilo attuale
current_profile = tester.analyze(test_tomato)

# Ottieni raccomandazioni per l'ottimizzazione
recommendations = tester.get_optimization_recommendations(
    current_profile,
    target_profile
)

# Stampa le raccomandazioni
print("\nRaccomandazioni per l'ottimizzazione:")
for rec in recommendations:
    print(f"- {rec}")

Passo 8: Visualizzazione avanzata

Creiamo visualizzazioni dettagliate dei nostri profili di sapore:

# Crea una visualizzazione di base
viz = tester.visualize_profile(profile)

# Personalizza la visualizzazione
viz.set_color_scheme("tomato")
viz.set_scale("logarithmic")
viz.set_style("radar")

# Aggiungi metriche aggiuntive
viz.add_metrics(["aroma", "texture"])

# Mostra la visualizzazione
viz.show()

Tecniche Avanzate

Analisi Multi-Dimensionale

# Esegui analisi multidimensionale
analisi = tester.analyze_multi_dimensional(
    test_tomato,
    dimensions=[
        "gusto",
        "aroma",
        "texture",
        "sensazione in bocca",
        "retrogusto"
    ]
)

# Accedi ai risultati multidimensionali
print("\nAnalisi Multidimensionale:")
for dimension, metrics in analisi.items():
    print(f"\n{dimension.upper()}:")
    for metric, value in metrics.items():
        print(f"- {metric}: {value}")

Analisi Basata sul Tempo

# Analyze flavor development over time
# Esegui analisi statistica
stats = tester.analyze_statistics(
    [tomato1, tomato2, tomato3],
    metrics=["dolcezza", "acidità", "umami"]
)

# Accedi ai risultati statistici
print("\nAnalisi Statistica:")
print(f"Media dolcezza: {stats.mean('sweetness')}")

Migliori Pratiche

# Perform statistical analysis
stats = tester.analyze_statistics(
    [tomato1, tomato2, tomato3],
    metrics=["sweetness", "acidity", "umami"]
)

# Access statistical results
print("\nStatistical Analysis:")
print(f"Mean sweetness: {stats.mean('sweetness')}")
print(f"Standard deviation: {stats.std('sweetness')}")
print(f"Correlation matrix: {stats.correlation_matrix}")

Best Practices

  1. Proper Sample Preparation

    # Ensure consistent sample preparation
    if not tester.validate_sample(test_tomato):
        print("Warning: Sample may not be suitable for analysis")
  2. Comprehensive Analysis

    # Use comprehensive analysis for detailed results
    profile = tester.analyze(
        ingredient,
        depth="comprehensive",
        include_all_metrics=True
    )
  3. Data Validation

    # Validate analysis results
    if profile.is_valid():
        # Proceed with analysis
        print(profile.get_summary())
    else:
        print("Warning: Analysis may be incomplete")

Next Steps

  • Recipes Library - Try more recipes

Produzione della Pizza Perfetta

Questo tutorial ti guiderà nella creazione di una pizza perfetta utilizzando TomatoPy. Copriremo tutto, dalla preparazione dell'impasto alla cottura finale e alla valutazione della qualità.

Requisiti

Prima di iniziare, assicurati di avere:

  • Comprensione di base di Python

  • TomatoPy installed

  • Virtual environment set up

  • Understanding of basic pizza concepts

Passo 1: Configurare la tua cucina

Per prima cosa, iniziamo la nostra cucina virtuale e configuriamo il forno per la pizza:

Passo 2: Preparare l'impasto

Creiamo l'impasto per pizza perfetto con una corretta fermentazione:

Passo 3: Creare la salsa

Prepariamo una salsa per pizza classica:

Passo 4: Preparare i condimenti

Impostiamo i nostri condimenti con le proporzioni corrette:

Passo 5: Assemblare la pizza

Ora, creiamo e assembliamo la nostra pizza:

Passo 6: Processo di cottura

Eseguiamo il processo di cottura con un controllo della temperatura adeguato:

Passo 7: Valutazione della qualità

Analizziamo la nostra pizza per assicurarci che soddisfi i nostri standard:

Passo 8: Tagliare e servire

Tagliamo la nostra pizza in fette perfette:

Risoluzione dei problemi

Problemi comuni

  1. Crosta Molliccia

  2. Distribuzione Irregolare dei Condimenti

  3. Formaggio Stracotto

Migliori Pratiche

  1. Fermentazione Corretta dell'Impasto

  2. Controllo della Temperatura

  3. Equilibrio dei Condimenti

Tecniche Avanzate

Creazione di Pizze Multiple

Custom Crust Development

Next Steps

- Explore the full API

- Learn optimization techniques

- Master taste analysis

- Explore the full API

- Learn optimization techniques

API Reference
Best Practices
from tomatopy import Kitchen, KitchenHardware

# Inizializza la cucina
cucina = Kitchen()

# Configura l'hardware
hardware = KitchenHardware()
forno = hardware.get_oven()

# Configura il forno per la pizza
forno.configure(
    temperatura=450,  # Celsius
    fonte_di_calore="legna",
    umidità=0.65,
    zone_di_calore={
        "centro": 450,
        "bordo": 480,
        "alto": 460
    }
)
from tomatopy import PizzaDough

# Crea l'impasto per pizza
impasto = PizzaDough(
    spessore="medio",
    dimensione="14pollici",
    stile="napoletano",
    idratazione=0.65,  # 65% di idratazione
    tempo_di_fermentazione="24h",
    tipo_di_farina="00",
    contenuto_di_sale=0.02  # 2% di sale
)

# Controlla le proprietà dell'impasto
print(f"Idratazione dell'impasto: {impasto.get_hydration()}")
print(f"Stato di fermentazione: {impasto.get_fermentation_status()}")
from tomatopy import PizzaSauce, Tomato, Garlic, Basil

# Crea gli ingredienti della salsa
pomodori = Tomato(
    maturazione=0.9,
    varietà="San Marzano",
    peso=400  # grammi
)

aglio = Garlic(
    spicchi=3,
    freschezza=0.95,
    dimensione="media"
)

basilico = Basil(
    foglie=10,
    freschezza=0.95,
    varietà="Genovese"
)

# Crea la salsa per pizza
salsa = PizzaSauce(
    base="pomodoro",
    consistenza="liscia",
    livello_di_condimento="medio",
    erbe=["basilico", "origano"],
    contenuto_di_aglio=0.05,  # 5% di aglio
    contenuto_di_zucchero=0.02    # 2% di zucchero
)
from tomatopy import Topping

# Crea i condimenti
mozzarella = Topping(
    nome="mozzarella",
    quantità=200,  # grammi
    distribuzione="uniforme",
    contenuto_di_umidità=0.52
)

pepperoni = Topping(
    nome="pepperoni",
    quantità=100,  # grammi
    distribuzione="sparsa",
    piccantezza="media"
)

basilico = Topping(
    nome="basilico",
    quantità=10,  # foglie
    distribuzione="sparsa",
    freschezza=0.95
)
from tomatopy import Pizza

# Crea la pizza
pizza = Pizza(
    impasto=impasto,
    salsa=salsa,
    dimensione="14pollici",
    stile="napoletano"
)

# Aggiungi i condimenti
pizza.add_topping(mozzarella)
pizza.add_topping(pepperoni)
pizza.add_topping(basilico)

# Controlla la distribuzione dei condimenti
distribuzione = pizza.get_topping_distribution()
print(f"Punteggio di distribuzione dei condimenti: {distribuzione}")
# Preriscalda il forno
forno.preheat(
    temperatura=450,
    durata="30m",
    zone_di_calore={
        "centro": 450,
        "bordo": 480,
        "alto": 460
    }
)
# Cuoci la pizza
pizza_cotta = forno.bake(
    pizza,
    durata="2m",
    frequenza_di_rotazione="30s",
    iniezione_di_vapore=True,
    sviluppo_della_crosta="alto"
)
)
# Monitora il processo di cottura
with forno.temperature_monitor() as monitor:
    print(f"Temperatura centrale: {monitor.get_center_temp()}°C")
    print(f"Temperatura del bordo: {monitor.get_edge_temp()}°C")
    print(f"Edge temperature: {monitor.get_edge_temp()}°C")
from tomatopy import TasteTester

# Crea il tester di gusto
tester = TasteTester()

# Analizza la pizza
profilo = tester.analyze(pizza_cotta)

# Controlla le metriche di qualità
print(f"Croccantezza della crosta: {profilo.crust_crispness}")
print(f"Fusione del formaggio: {profilo.cheese_melt}")
print(f"Distribuzione dei condimenti: {profilo.topping_distribution}")

# Ottieni l'analisi della consistenza
consistenza = tester.analyze_texture(pizza_cotta)
print(f"Consistenza della crosta: {consistenza.crust_texture}")
print(f"Consistenza del formaggio: {consistenza.cheese_texture}")
# Taglia la pizza in fette
fette = pizza_cotta.cut(
    metodo="standard",
    fette=8,
    dimensione_fetta="uguale"
)

# Analizza la qualità delle fette
for i, fetta in enumerate(fette):
    print(f"Qualità della fetta {i+1}: {fetta.get_quality_score()}")
# Regola la temperatura del forno e il tempo di cottura
baked_pizza = oven.bake(
    pizza,
    temperature=480,  # Temperatura più alta
    duration="1m30s"  # Durata più breve
)
# Ridistribuisci i condimenti
pizza.redistribute_toppings(
    method="even",
    target_distribution=0.9
)
# Regola lo strato di formaggio
pizza.adjust_cheese_layer(
    thickness="medium",
    distribution="even"
)
# Controlla la fermentazione
if dough.fermentation_time < "24h":
    print("Warning: Dough may not be fully fermented")
# Monitora la temperatura del forno
with oven.temperature_monitor() as monitor:
    if monitor.get_max() > 500:
        print("Attenzione: Temperatura del forno troppo alta")
# Controlla l'equilibrio dei condimenti
if pizza.get_topping_balance() < 0.8:
    print("Warning: Toppings may not be balanced")
# Crea un lotto di pizze
pizzas = [
    Pizza.create_neapolitan(size="12inch"),
    Pizza.create_ny_style(size="18inch"),
    Pizza.create_chicago_style(size="10inch")
]

# Bake batch
baked_pizzas = oven.bake_batch(
    pizzas,
    rotation_frequency="30s",
    steam_injection=True
)
# Configure advanced crust development
baked_pizza = oven.bake(
    pizza,
    crust_development={
        "bottom": "crispy",
        "edges": "chewy",
        "top": "golden"
    }
)
API Reference
Advanced Flavor Profiling
Best Practices

Guida Rapida

Inizia a utilizzare TomatoPy in pochi minuti! Questa guida ti accompagnerà attraverso le basi della creazione e manipolazione degli ingredienti virtuali.

Utilizzo di base

Creare il tuo primo pomodoro

from tomatopy import Tomato

# Create a fresh tomato
my_tomato = Tomato(
    ripeness=0.8,  # 80% ripe
    variety="San Marzano",
    weight=150  # grams
)

# Check tomato properties
print(my_tomato.ripeness)  # 0.8
print(my_tomato.variety)   # "San Marzano"

Impostare la tua cucina virtuale

from tomatopy import Kitchen

# Initialize your kitchen
kitchen = Kitchen()

# Configure kitchen settings
kitchen.set_temperature(180)  # Celsius
kitchen.set_humidity(65)      # Percentage

Operazioni di cottura di base

# Crea una salsa dal tuo pomodoro
sauce = kitchen.cook(
    my_tomato,
    method="simmer",
    duration="30m",
    temperature=100
)

# Check sauce properties
print(sauce.consistency)  # "smooth"
print(sauce.volume)       # 250  # ml

Lavorare con più ingredienti

from tomatopy import Ingredient, Recipe

# Create additional ingredients
garlic = Ingredient("garlic", amount=3, unit="cloves")
basil = Ingredient("basil", amount=10, unit="leaves")

# Create a recipe
marinara = Recipe("Classic Marinara")
marinara.add_ingredient(my_tomato)
marinara.add_ingredient(garlic)
marinara.add_ingredient(basil)

# Cook the recipe
sauce = kitchen.cook_recipe(marinara)

Test di assaggio

from tomatopy import TasteTester

# Create a taste tester
tester = TasteTester()

# Analyze your sauce
profile = tester.analyze(sauce)

# Get taste metrics
print(profile.acidity)     # 0.7
print(profile.sweetness)   # 0.3
print(profile.umami)       # 0.8

Prossimi passi

  • API Reference - Explore the full API

Tips and Tricks

Pro Tip: Use the debug() method to inspect ingredient properties:

my_tomato.debug()  # Prints detailed information about the tomato

Note: All measurements in TomatoPy use the metric system by default. Use the convert_to_imperial() method if needed.

ti consente di affettare, tagliare, cucinare e assaporare i pomodori usando solo Python!

- Scopri i concetti fondamentali di TomatoPy

- Follow a complete tutorial

TomatoPy
Concetti di base
Making Your First Marinara

Interfaccia Hardware della Cucina

L'interfaccia hardware della cucina fornisce strumenti per controllare e monitorare le attrezzature da cucina virtuali in TomatoPy.

Controllo delle attrezzature di base

Inizializzazione delle attrezzature

from tomatopy import KitchenHardware

# Inizializza l'hardware della cucina
hardware = KitchenHardware()

# Inizializza attrezzature specifiche
oven = hardware.get_oven()
stove = hardware.get_stove()
blender = hardware.get_blender()

Controllo delle attrezzature di base

# Controlla il forno
oven.set_temperature(180)  # Celsius
oven.set_mode("bake")
oven.set_timer("30m")

# Controlla il fornello
stove.set_burner(1, temperature=100)  # Celsius
stove.set_burner(2, temperature=200)

# Controlla il frullatore
blender.set_speed("high")
blender.set_duration("1m")

Controllo avanzato delle attrezzature

Controllo del forno

# Configura le impostazioni avanzate del forno
oven.configure(
    temperature=180,
    mode="convection",
    humidity=0.65,
    fan_speed="high",
    steam_injection=True,
    heat_zones={
        "top": 190,
        "bottom": 170,
        "rear": 180
    }
)

Controllo del fornello

# Configura le impostazioni avanzate del fornello
stove.configure(
    burners={
        1: {"temperature": 100, "size": "small"},
        2: {"temperature": 200, "size": "large"},
        3: {"temperature": 150, "size": "medium"},
        4: {"temperature": 180, "size": "medium"}
    },
    griddle_temperature=200,
    ventilation="high"
)

Controllo del frullatore

# Configura le impostazioni avanzate del frullatore
blender.configure(
    speed="high",
    duration="1m",
    pulse_pattern="intermittent",
    container_size="1.5L",
    blade_type="multi-purpose"
)

Monitoraggio delle attrezzature

Monitoraggio di base

# Monitora lo stato delle attrezzature
print(f"Temperatura del forno: {oven.get_temperature()}°C")
print(f"Stato del fornello 1: {stove.get_burner_status(1)}")
print(f"Velocità del frullatore: {blender.get_speed()}")

Monitoraggio avanzato

# Configura un monitoraggio completo
with hardware.monitor() as monitor:
    # Monitora più parametri
    monitor.track_temperature(oven)
    monitor.track_power_usage(stove)
    monitor.track_vibration(blender)
    
    # Ottieni i dati di monitoraggio
    data = monitor.get_data()
    print(f"Storico delle temperature: {data.temperature_history}")
    print(f"Consumo energetico: {data.power_usage}")
    print(f"Livelli di vibrazione: {data.vibration_levels}")

Caratteristiche di sicurezza

Controlli di sicurezza di base

# Esegui controlli di sicurezza
if hardware.check_safety():
    # Procedi con l'operazione
    oven.start()
else:
    print("Controllo di sicurezza fallito")

Monitoraggio avanzato della sicurezza

# Configura il monitoraggio della sicurezza
hardware.set_safety_monitoring(
    temperature_limits={
        "max": 300,  # Celsius
        "min": 50
    },
    power_limits={
        "max": 5000,  # Watts
        "min": 0
    },
    ventilation_required=True,
    emergency_shutdown=True
)

Manutenzione delle attrezzature

Manutenzione di base

# Controlla lo stato delle attrezzature
status = hardware.check_status()

# Esegui manutenzione di base
if status.needs_cleaning:
    hardware.clean_equipment()
if status.needs_calibration:
    hardware.calibrate_equipment()

Manutenzione avanzata

# Pianifica la manutenzione
hardware.schedule_maintenance(
    oven,
    tasks=["clean", "calibrate", "inspect"],
    frequency="weekly"
)

# Ottieni la cronologia della manutenzione
history = hardware.get_maintenance_history()
print(f"Ultima pulizia: {history.last_cleaning}")
print(f"Ultima calibrazione: {history.last_calibration}")

Gestione degli errori

try:
    # Tentativo di temperatura non valida
    oven.set_temperature(1000)  # Troppo caldo!
except TemperatureError as e:
    print(f"Errore: {e}")  # "La temperatura supera il limite di sicurezza"

try:
    # Tentativo di operazione non valida
    blender.set_speed("invalid_speed")
except OperationError as e:
    print(f"Errore: {e}")  # "Impostazione della velocità non valida"

Migliori Pratiche

  1. Controlla sempre lo stato dell'attrezzatura

    # Check status before use
    if hardware.check_status().is_ready:
        # Proceed with operation
        oven.start()
    else:
        print("Equipment not ready")
  2. Monitora la Temperatura

    # Monitora la temperatura durante l'operazione
    with hardware.temperature_monitor() as monitor:
        oven.start()
        se monitor.get_max() > safety_threshold:
            print("Attenzione: Temperatura troppo alta")
  3. Manutenzione Regolare

    # Pianifica manutenzione regolare
    hardware.schedule_maintenance(
        equipment,
        tasks=["pulire", "calibrare"],
        frequency="giornaliero"
    )

Riferimento API

Classi

  • KitchenHardware: Classe principale di controllo dell'hardware

  • Oven: Oven control class

  • Stove: Stove control class

  • Blender: Blender control class

  • Monitor: Equipment monitoring class

  • Maintenance: Maintenance management class

Metodi

Classe KitchenHardware

  • __init__()

  • get_oven()

  • get_stove()

  • get_blender()

  • check_safety()

  • check_status()

  • monitor()

  • schedule_maintenance()

  • get_maintenance_history()

  • set_safety_monitoring()

Prossimi Passi

Manipolazione degli Ingredienti

Il modulo di manipolazione degli ingredienti fornisce strumenti per creare, modificare e analizzare ingredienti virtuali in TomatoPy.

Creazione degli Ingredienti

Creazione di Ingredienti di Base

from tomatopy import Ingredient

# Crea un ingrediente di base
tomato = Ingredient(
    name="tomato",
    amount=1,
    unit="whole",
    properties={
        "ripeness": 0.8,
        "water_content": 0.95,
        "sugar_content": 0.03
    }
)

Classi di Ingredienti Specializzati

from tomatopy import Tomato, Garlic, Basil

# Crea ingredienti specializzati
san_marzano = Tomato(
    ripeness=0.8,
    variety="San Marzano",
    weight=150
)

fresh_garlic = Garlic(
    cloves=3,
    freshness=0.9,
    size="medium"
)

sweet_basil = Basil(
    leaves=10,
    freshness=0.95,
    variety="Genovese"
)

Modifica degli Ingredienti

Aggiornamenti delle Proprietà

# Aggiorna le proprietà dell'ingrediente
tomato.properties["ripeness"] = 0.9
tomato.properties["water_content"] = 0.92

# Aggiornamento batch delle proprietà
tomato.update_properties({
    "ripeness": 0.9,
    "water_content": 0.92,
    "sugar_content": 0.04
})

Conversione delle Unità

# Converti tra unità
tomato.convert_to_imperial()  # Converte da metrico a imperiale
tomato.convert_volume("ml", "cups")  # Converte tra unità di volume

# Ottieni misurazioni in diverse unità
print(tomato.get_weight("g"))  # 150
print(tomato.get_weight("oz"))  # 5.29

Analisi degli Ingredienti

Proprietà Fisiche

# Ottieni proprietà fisiche
print(tomato.get_density())  # 1.02 g/ml
print(tomato.get_volume())   # 147 ml
print(tomato.get_surface_area())  # 150 cm²

Analisi Chimica

# Analizza le proprietà chimiche
print(tomato.get_ph())  # 4.5
print(tomato.get_water_content())  # 0.95
print(tomato.get_sugar_content())  # 0.03

Operazioni sugli Ingredienti

Taglio e Tritatura

# Taglia gli ingredienti
diced_tomato = tomato.cut(
    method="dice",
    size="medium",
    consistency="uniform"
)

# Tritura gli ingredienti
chopped_garlic = fresh_garlic.chop(
    fineness="medium",
    method="mince"
)

Combinazione degli Ingredienti

# Combina gli ingredienti
mixture = tomato.combine(
    fresh_garlic,
    sweet_basil,
    method="mix",
    consistency="chunky"
)

Controllo della Qualità

Controllo della Freschezza

# Controlla la freschezza dell'ingrediente
if tomato.is_fresh():
    print("L'ingrediente è fresco")
else:
    print("L'ingrediente potrebbe essere scaduto")

# Ottieni punteggio di freschezza
freshness_score = tomato.get_freshness_score()  # 0.85

Valutazione della Qualità

# Valuta la qualità dell'ingrediente
quality_report = tomato.assess_quality()
print(quality_report.overall_score)  # 0.92
print(quality_report.recommendations)  # ["Consider using within 2 days"]

Gestione degli Errori

try:
    # Tentativo di operazione non valida
    tomato.cut(method="invalid_method")
except IngredientError as e:
    print(f"Errore: {e}")  # "Metodo di taglio non valido"

try:
    # Tentativo di aggiornamento proprietà non valido
    tomato.update_properties({"invalid_property": 1.0})
except PropertyError as e:
    print(f"Errore: {e}")  # "Nome proprietà non valido"

Migliori Pratiche

  1. Controlla sempre lo stato dell'ingrediente

    if tomato.state == "fresh":
        # Procedi con l'operazione
  2. Use Type Hints

    from typing import Dict, Any
    
    def create_ingredient(
        name: str,
        properties: Dict[str, Any]
    ) -> Ingredient:
        return Ingredient(name=name, properties=properties)
  3. Handle Unit Conversions Carefully

    # Always specify units explicitly
    weight_grams = tomato.get_weight("g")
    weight_ounces = tomato.get_weight("oz")

Riferimento API

Classi

  • Ingrediente: Classe base per tutti gli ingredienti

  • Pomodoro: Ingrediente di pomodoro specializzato

  • Aglio: Ingrediente di aglio specializzato

  • Basilico: Ingrediente di basilico specializzato

Metodi

Classe Ingrediente

  • __init__(nome, quantità, unità, proprietà)

  • aggiorna_proprietà(proprietà)

  • converti_in_imperiale()

  • converti_volume(dall'unità, all'unità)

  • ottieni_densità()

  • ottieni_volume()

  • ottieni_area_superficiale()

  • ottieni_ph()

  • ottieni_contenuto_acqua()

  • ottieni_contenuto_zucchero()

  • taglia(metodo, dimensione, consistenza)

  • trita(fineness, metodo)

  • combina(*ingredienti, metodo, consistenza)

  • è_fresco()

  • ottieni_punteggio_freschezza()

  • valuta_qualità()

Prossimi Passi

  • API Reference - Explore the full API

- Esplora l'intera API

- Impara tecniche avanzate

- Impara le migliori pratiche

- Scopri i metodi di cottura

- Create delicious pizzas

Riferimento API
Tutorial
Migliori Pratiche
Operazioni di Cottura
Pizza Creation System

Preparare la Tua Prima Marinara

Questo tutorial ti guiderà nella creazione di una classica salsa marinara utilizzando TomatoPy. Copriremo tutto, dalla selezione degli ingredienti al test finale del gusto.

Prerequisiti

Prima di iniziare, assicurati di avere:

  • Comprensione di base di Python

  • TomatoPy installed

  • Virtual environment set up

Passo 1: Configurare la tua cucina

Per prima cosa, iniziamo a configurare la nostra cucina virtuale e a configurare l'attrezzatura:

from tomatopy import Kitchen, KitchenHardware

# Inizializza la cucina
cucina = Kitchen()

# Configura l'hardware
hardware = KitchenHardware()
fornello = hardware.get_stove()
frullatore = hardware.get_blender()

# Configura il fornello
fornello.configure(
    bruciatori={
        1: {"temperatura": 100, "dimensione": "media"},  # Per sobbollire
        2: {"temperatura": 200, "dimensione": "grande"}    # Per la cottura iniziale
    }
)

Passo 2: Preparazione degli ingredienti

Creiamo i nostri ingredienti con proprietà ottimali:

from tomatopy import Tomato, Garlic, Basil, OliveOil

# Crea pomodori San Marzano
pomodori = Tomato(
    maturazione=0.9,
    varietà="San Marzano",
    peso=800  # grammi
)

# Crea aglio fresco
aglio = Garlic(
    spicchi=4,
    freschezza=0.95,
    dimensione="media"
)

# Crea basilico fresco
basilico = Basil(
    foglie=20,
    freschezza=0.95,
    varietà="Genovese"
)

# Crea olio d'oliva
olio_d'oliva = OliveOil(
    quantità=60,  # ml
    qualità="extra_vergine",
    acidità=0.3  # %
)

Passo 3: Creare la ricetta

Impostiamo la nostra ricetta con proporzioni adeguate e istruzioni di cottura:

from tomatopy import Recipe

# Crea la ricetta marinara
marinara = Recipe("Marinara Classica")

# Aggiungi ingredienti
marinara.add_ingredient(pomodori)
marinara.add_ingredient(aglio)
marinara.add_ingredient(basilico)
marinara.add_ingredient(olio_d'oliva)

# Imposta i parametri di cottura
marinara.set_cooking_method("sobbollire")
marinara.set_duration("45m")
marinara.set_temperature(100)  # Celsius

Passo 4: Processo di cottura

Ora, eseguiamo il processo di cottura passo dopo passo:

# Passo 1: Riscalda olio e aglio
olio_aglio = cucina.cook(
    [olio_d'oliva, aglio],
    metodo="sauté",
    temperatura=160,
    durata="5m",
    frequenza_mescolamento="costante"
)

# Passo 2: Aggiungi e cuoci i pomodori
miscela_di_pomodoro = cucina.cook(
    [olio_aglio, pomodori],
    metodo="sobbollire",
    temperatura=100,
    durata="30m",
    frequenza_mescolamento="occasionale"
)

# Passo 3: Frulla la salsa
salsa = frullatore.blend(
    miscela_di_pomodoro,
    velocità="media",
    durata="1m",
    consistenza="liscia"
)

# Passo 4: Aggiungi basilico e termina
salsa_finale = cucina.cook(
    [salsa, basilico],
    metodo="sobbollire",
    temperatura=90,
    durata="10m",
    frequenza_mescolamento="occasionale"
)

Passo 5: Controllo qualità

Analizziamo la nostra salsa per assicurarci che soddisfi i nostri standard:

from tomatopy import TasteTester

# Crea un assaggiatore
tester = TasteTester()

# Analizza la salsa
profilo = tester.analyze(salsa_finale)

# Controlla le metriche di qualità
print(f"Dolcezza: {profilo.sweetness}")
print(f"Acidità: {profilo.acidity}")
print(f"Umami: {profilo.umami}")
print(f"Equilibrio complessivo: {profilo.balance}")

# Ottieni analisi della consistenza
texture = tester.analyze_texture(salsa_finale)
print(f"Consistenza: {texture.consistency}")
print(f"Liscihezza: {texture.smoothness}")

Passo 6: Regolazioni e perfezionamenti

In base alla nostra analisi, possiamo apportare modifiche se necessario:

# Se è troppo acida, aggiungi un pizzico di zucchero
if profilo.acidity > 0.7:
    salsa_finale = cucina.adjust(
        salsa_finale,
        ingrediente="zucchero",
        quantità=5,  # grammi
        metodo="mescola"
    )

# Se è troppo densa, aggiungi un po' d'acqua
if texture.consistency > 0.8:
    salsa_finale = cucina.adjust(
        salsa_finale,
        ingrediente="acqua",
        quantità=50,  # ml
        metodo="mescola"
    )

Passo 7: Controllo qualità finale

Eseguiamo una valutazione finale della qualità:

# Ottieni rapporto di qualità completo
rapporto_di_qualità = tester.assess_quality(salsa_finale)

# Stampa le metriche di qualità
print(f"Qualità complessiva: {rapporto_di_qualità.overall_score}")
print(f"Punteggio equilibrio: {rapporto_di_qualità.balance_score}")
print(f"Punteggio consistenza: {rapporto_di_qualità.texture_score}")

# Ottieni raccomandazioni
print("Raccomandazioni:")
for rec in rapporto_di_qualità.recommendations:
    print(f"- {rec}")

Risoluzione dei problemi

Problemi comuni

  1. Salsa troppo acida

    # Aggiungi zucchero per bilanciare l'acidità
    sauce = kitchen.adjust(sauce, ingredient="sugar", amount=5)
  2. Salsa troppo densa

    # Aggiungi acqua per assottigliare la salsa
    sauce = kitchen.adjust(sauce, ingredient="water", amount=50)
  3. Gusto insufficiente

    # Aggiungi più aglio o basilico
    sauce = kitchen.adjust(sauce, ingredient="garlic", amount=2)

Migliori pratiche

  1. Controlla sempre la qualità degli ingredienti

    if not all(ing.is_fresh() for ing in [pomodori, aglio, basilico]):
        print("Warning: Some ingredients may not be fresh")
  2. Monitora la temperatura

    with cucina.temperature_monitor() as monitor:
        sauce = kitchen.cook(...)
        if monitor.get_max() > 110:
            print("Warning: Temperature too high")
  3. Mescolare regolarmente

    # Imposta mescolamento automatico
    kitchen.set_stirring_frequency("every_5m")

Prossimi Passi

  • API Reference - Explore the full API

Modulo di Test del Gusto

Il Modulo di Assaggio fornisce strumenti per analizzare e confrontare i profili di sapore degli ingredienti e dei prodotti cotti in TomatoPy.

Analisi del Sapore di Base

Test di Sapore Semplice

from tomatopy import TasteTester

# Crea un tester di sapore
tester = TasteTester()

# Analizza un ingrediente di base
profile = tester.analyze(tomato)

# Ottieni metriche di sapore di base
print(f"Dolcezza: {profile.sweetness}")
print(f"Acidità: {profile.acidity}")
print(f"Umami: {profile.umami}")

Analisi Completa

# Ottieni profilo di sapore dettagliato
profile = tester.analyze(
    ingredient,
    depth="comprehensive",
    include_aroma=True,
    include_texture=True
)

# Accedi a metriche dettagliate
print(f"Dolcezza: {profile.sweetness}")
print(f"Acidità: {profile.acidity}")
print(f"Umami: {profile.umami}")
print(f"Intensità dell'aroma: {profile.aroma.intensity}")
print(f"Punteggio della consistenza: {profile.texture.score}")

Analisi Avanzata del Sapore

Confronto dei Profili di Sapore

# Confronta più ingredienti
comparison = tester.compare(
    [tomato1, tomato2, tomato3],
    metrics=["sweetness", "acidity", "umami"]
)

# Ottieni risultati del confronto
print(f"Il più dolce: {comparison.get_highest('sweetness')}")
print(f"Il più acido: {comparison.get_highest('acidity')}")
print(f"Il più umami: {comparison.get_highest('umami')}")

Analisi dell'Equilibrio del Sapore

# Analizza l'equilibrio del sapore
balance = tester.analyze_balance(sauce)

# Ottieni metriche di equilibrio
print(f"Equilibrio complessivo: {balance.overall_score}")
print(f"Rapporto dolce-acido: {balance.sweet_sour_ratio}")
print(f"Miglioramento umami: {balance.umami_enhancement}")

Analisi dell'Aroma

Test di Aroma di Base

# Analizza l'aroma
aroma_profile = tester.analyze_aroma(tomato)

# Ottieni metriche dell'aroma
print(f"Intensità dell'aroma: {aroma_profile.intensity}")
print(f"Complessità dell'aroma: {aroma_profile.complexity}")
print(f"Note primarie: {aroma_profile.primary_notes}")

Analisi Dettagliata dell'Aroma

# Ottieni profilo di aroma dettagliato
aroma_profile = tester.analyze_aroma(
    ingredient,
    include_secondary_notes=True,
    include_tertiary_notes=True
)

# Accedi a metriche dettagliate dell'aroma
print(f"Note primarie: {aroma_profile.primary_notes}")
print(f"Note secondarie: {aroma_profile.secondary_notes}")
print(f"Note terziarie: {aroma_profile.tertiary_notes}")

Analisi della Consistenza

Test di Consistenza di Base

# Analizza la consistenza
texture_profile = tester.analyze_texture(tomato)

# Ottieni metriche della consistenza
print(f"Firmezza: {texture_profile.firmness}")
print(f"Succosità: {texture_profile.juiciness}")
print(f"Consistenza complessiva: {texture_profile.overall_score}")

Analisi Dettagliata della Consistenza

# Ottieni profilo di consistenza dettagliato
texture_profile = tester.analyze_texture(
    ingredient,
    include_mouthfeel=True,
    include_structural_analysis=True
)

# Accedi a metriche dettagliate della consistenza
print(f"Firmezza: {texture_profile.firmness}")
print(f"Succosità: {texture_profile.juiciness}")
print(f"Sensazione in bocca: {texture_profile.mouthfeel}")
print(f"Integrità strutturale: {texture_profile.structural_integrity}")

Valutazione della Qualità

Test di Qualità di Base

# Valuta la qualità
quality = tester.assess_quality(tomato)

# Ottieni metriche di qualità
print(f"Qualità complessiva: {quality.overall_score}")
print(f"Freschezza: {quality.freshness}")
print(f"Maturazione: {quality.ripeness}")

Valutazione Completa della Qualità

# Ottieni valutazione della qualità completa
quality = tester.assess_quality(
    ingredient,
    include_safety=True,
    include_shelf_life=True
)

# Accedi a metriche dettagliate di qualità
print(f"Qualità complessiva: {quality.overall_score}")
print(f"Punteggio di sicurezza: {quality.safety_score}")
print(f"Stima della durata di conservazione: {quality.shelf_life}")

Visualizzazione del Profilo di Sapore

Visualizzazione di Base

# Crea visualizzazione del profilo di sapore
viz = tester.visualize_profile(profile)

# Mostra visualizzazione
viz.show()

Visualizzazione Avanzata

# Crea una visualizzazione dettagliata
viz = tester.visualize_profile(
    profilo,
    include_aroma=True,
    include_texture=True,
    style="radar"
)

# Personalizza la visualizzazione
viz.set_color_scheme("pomodoro")
viz.set_scale("logaritmica")
viz.show()

Gestione degli errori

try:
    # Attempt invalid analysis
    tester.analyze("invalid_ingredient")
except TasteError as e:
    print(f"Error: {e}")  # "Invalid ingredient type"

try:
    # Attempt invalid comparison
    tester.compare([], metrics=["sweetness"])
except ComparisonError as e:
    print(f"Error: {e}")  # "No ingredients provided for comparison"

Riferimento API

  1. Use Appropriate Analysis Depth

    # Choose analysis depth based on needs
    if needs_detailed_analysis:
        profile = tester.analyze(ingredient, depth="comprehensive")
    else:
        profile = tester.analyze(ingredient, depth="basic")
  2. Validate Results

    # Check result validity
    if profile.is_valid():
        # Proceed with analysis
        print(profile.get_summary())
    else:
        print("Warning: Analysis may be incomplete")
  3. Handle Edge Cases

    # Handle special cases
    if ingredient.is_overripe():
        print("Warning: Ingredient may affect taste analysis")

API Reference

Classes

  • TasteTester: Main taste testing class

  • TasteProfile: Taste profile data class

  • AromaProfile: Aroma profile data class

  • TextureProfile: Texture profile data class

  • QualityProfile: Quality profile data class

  • TasteVisualizer: Visualization class

Methods

TasteTester Class

  • __init__()

  • analyze(ingredient, **params)

  • compare(ingredients, metrics)

  • analyze_balance(ingredient)

  • analyze_aroma(ingredient, **params)

  • analyze_texture(ingredient, **params)

  • assess_quality(ingredient, **params)

  • visualize_profile(profile, **params)

Next Steps

- Impara a fare la pizza

- Master taste analysis

- Control kitchen equipment

- Explore the full API

- Learn advanced techniques

Produzione di Pizza Perfetta
Advanced Flavor Profiling
Kitchen Hardware Interface
API Reference
Tutorials

Sistema di Creazione della Pizza

Il Sistema di Creazione della Pizza fornisce strumenti specializzati per creare e personalizzare pizze virtuali in TomatoPy.

Creazione di Pizza Base

Creare una Pizza Base

from tomatopy import Pizza, PizzaDough, PizzaSauce

# Crea componenti della pizza
dough = PizzaDough(
    thickness="medium",
    size="12inch",
    style="neapolitan"
)

sauce = PizzaSauce(
    base="tomato",
    consistency="smooth",
    seasoning_level="medium"
)

# Crea una pizza
pizza = Pizza(
    dough=dough,
    sauce=sauce,
    size="12inch",
    style="neapolitan"
)

Aggiunta di Condimenti

from tomatopy import Topping

# Crea condimenti
mozzarella = Topping(
    name="mozzarella",
    amount=200,  # grammi
    distribution="even"
)

basil = Topping(
    name="basil",
    amount=10,  # foglie
    distribution="scattered"
)

# Aggiungi condimenti alla pizza
pizza.add_topping(mozzarella)
pizza.add_topping(basil)

Personalizzazione Avanzata della Pizza

Personalizzazione della Pasta

# Crea pasta personalizzata
custom_dough = PizzaDough(
    thickness="thin",
    size="14inch",
    style="new_york",
    hydration=0.65,  # 65% idratazione
    fermentation_time="24h",
    flour_type="00",
    salt_content=0.02  # 2% sale
)

Personalizzazione della Salsa

# Crea salsa personalizzata
custom_sauce = PizzaSauce(
    base="tomato",
    consistency="chunky",
    seasoning_level="high",
    herbs=["basil", "oregano"],
    garlic_content=0.05,  # 5% aglio
    sugar_content=0.02    # 2% zucchero
)

Cottura della Pizza

Cottura Base

from tomatopy import PizzaOven

# Configura il forno per pizza
oven = PizzaOven(
    temperature=450,  # Celsius
    heat_source="wood",
    humidity=0.65
)

# Cuoci la pizza
baked_pizza = oven.bake(
    pizza,
    duration="2m",
    rotation_frequency="30s"
)

Tecniche di Cottura Avanzate

# Configura cottura avanzata
baked_pizza = oven.bake(
    pizza,
    duration="2m",
    rotation_frequency="30s",
    heat_zones={
        "center": 450,
        "edges": 480,
        "top": 460
    },
    steam_injection=True,
    crust_development="high"
)

Controllo Qualità

Analisi della Pizza

# Analizza la qualità della pizza
analysis = pizza.analyze()
print(f"Crispness della crosta: {analysis.crust_crispness}")
print(f"Fusione del formaggio: {analysis.cheese_melt}")
print(f"Distribuzione dei condimenti: {analysis.topping_distribution}")

Metriche di Qualità

# Ottieni metriche di qualità dettagliate
metrics = pizza.get_quality_metrics()
print(f"Punteggio complessivo: {metrics.overall_score}")
print(f"Punteggio di equilibrio: {metrics.balance_score}")
print(f"Punteggio di consistenza: {metrics.texture_score}")

Tipi di Pizza Speciali

Pizza Napoletana

# Crea pizza napoletana autentica
neapolitan = Pizza.create_neapolitan(
    size="12inch",
    toppings=["san_marzano_tomatoes", "mozzarella", "basil"]
)

Stile New York

# Crea pizza in stile New York
ny_style = Pizza.create_ny_style(
    size="18inch",
    thickness="thin",
    toppings=["tomato_sauce", "mozzarella", "pepperoni"]
)

Chicago Deep Dish

# Crea deep dish di Chicago
chicago = Pizza.create_chicago_style(
    size="10inch",
    thickness="deep",
    toppings=["tomato_sauce", "mozzarella", "sausage"]
)

Taglio della Pizza

Taglio Standard

# Tagliare la pizza a fette
fette = pizza.taglia(
    metodo="standard",
    fette=8,
    dimensione_fetta="uguale"
)

Taglio Personalizzato

# Taglio personalizzato della pizza
fette = pizza.taglia(
    metodo="personalizzato",
    dimensioni_fette=["grande", "media", "piccola"],
    modello="radiale"
)

Gestione degli Errori

prova:
    # Tentativo di aggiungere un condimento non valido
    pizza.aggiungi_condimento("condimento_non_valido")
eccetto ToppingError come e:
    print(f"Errore: {e}")  # "Tipo di condimento non valido"

prova:
    # Tentativo di impostare una temperatura di cottura non valida
    forno.imposta_temperatura(1000)  # Troppo caldo!
eccetto TemperatureError come e:
    print(f"Errore: {e}")  # "La temperatura supera il limite di sicurezza"

Migliori Pratiche

  1. Preparazione Corretta dell'Impasto

    # Assicurati che l'impasto fermenti correttamente
    se impasto.tempo_fermentazione < "24h":
        print("Attenzione: L'impasto potrebbe non essere completamente fermentato")
  2. Topping Distribution

    # Check topping distribution
    if pizza.get_topping_distribution() < 0.8:
        print("Warning: Toppings may not be evenly distributed")
  3. Temperature Control

    # Monitor oven temperature
    with oven.temperature_monitor() as monitor:
        pizza = oven.bake(...)
        if monitor.get_max() > 500:
            print("Warning: Oven temperature too high")

API Reference

Classes

  • Pizza: Main pizza class

  • PizzaDough: Dough management class

  • PizzaSauce: Sauce management class

  • Topping: Topping management class

  • PizzaOven: Oven management class

Classi

Pizza Class

  • __init__(dough, sauce, size, style)

  • add_topping(topping)

  • remove_topping(topping)

  • cut(method, **params)

  • analyze()

  • get_quality_metrics()

  • create_neapolitan(**params)

  • create_ny_style(**params)

  • create_chicago_style(**params)

Classe Pizza

  • API Reference - Explore the full API

Migliori Pratiche per l'Efficienza del Codice

Questa guida delinea le migliori pratiche per scrivere codice efficiente e performante con TomatoPy.

Gestione della Memoria

Creazione Efficiente degli Ingredienti

Elaborazione in Batch

Ottimizzazione delle Prestazioni

Memorizzazione dei Risultati

Strutture Dati Efficaci

Gestione delle Risorse

Gestori di Contesto

Pooling delle Connessioni

Ottimizzazione degli Algoritmi

Ricerca Efficiente

Elaborazione Parallela

Organizzazione del Codice

Design Modulare

Interfacce Pulite

Gestione degli Errori

Recupero Efficiente degli Errori

Pulizia delle Risorse

Test e Profilazione

Test delle Prestazioni

Profilazione della Memoria

Riepilogo delle Migliori Pratiche

  1. Gestione della Memoria

    • Use efficient data structures

    • Implement batch processing

    • Avoid unnecessary copies

  2. Ottimizzazione delle Prestazioni

    • Cache expensive computations

    • Use appropriate algorithms

    • Implement parallel processing

  3. Gestione delle Risorse

    • Use context managers

    • Implement connection pooling

    • Clean up resources properly

  4. Organizzazione del Codice

    • Follow modular design

    • Create clean interfaces

    • Maintain separation of concerns

  5. Gestione degli Errori

    • Implement graceful recovery

    • Clean up resources properly

    • Log errors appropriately

Prossimi Passi

__init__(impasto, salsa, dimensione, stile) - Analyze pizza taste

- Control pizza equipment

- Impara l'ottimizzazione della cucina

- Esplora l'intera API

- Impara tecniche avanzate

Taste Testing Module
Kitchen Hardware Interface
# Buono: Crea ingredienti con un uso minimo della memoria
tomato = Tomato(
    ripeness=0.8,
    variety="San Marzano",
    weight=150
)

# Cattivo: Creare copie non necessarie
tomato_copy = tomato.copy()  # Uso di memoria non necessario
# Buono: Elabora ingredienti in batch
def process_ingredients(ingredients, batch_size=100):
    for i in range(0, len(ingredients), batch_size):
        batch = ingredients[i:i + batch_size]
        process_batch(batch)

# Cattivo: Elaborazione uno alla volta
for ingredient in ingredients:
    process_single(ingredient)  # Meno efficiente
from functools import lru_cache

# Buono: Memorizza calcoli costosi
@lru_cache(maxsize=128)
def analyze_ingredient(ingredient):
    return TasteTester().analyze(ingredient)

# Cattivo: Ricalcolare ogni volta
def analyze_ingredient(ingredient):
    return TasteTester().analyze(ingredient)  # Nessuna memorizzazione
# Buono: Usa strutture dati appropriate
from collections import defaultdict

class Recipe:
    def __init__(self):
        self.ingredients = defaultdict(float)  # Efficiente per il tracciamento degli ingredienti

# Cattivo: Uso di strutture inefficienti
class Recipe:
    def __init__(self):
        self.ingredients = []  # Meno efficiente per le ricerche
# Buono: Usa gestori di contesto per la pulizia delle risorse
with kitchen.temperature_monitor() as monitor:
    result = kitchen.cook(ingredient)
    data = monitor.get_data()

# Cattivo: Gestione manuale delle risorse
monitor = kitchen.temperature_monitor()
try:
    result = kitchen.cook(ingredient)
    data = monitor.get_data()
finally:
    monitor.cleanup()  # Più soggetto a errori
# Buono: Usa il pooling delle connessioni
from tomatopy import ConnectionPool

pool = ConnectionPool(max_connections=10)
with pool.get_connection() as conn:
    conn.execute_operation()

# Cattivo: Creare nuove connessioni ogni volta
conn = create_connection()  # Meno efficiente
conn.execute_operation()
conn.close()
# Buono: Usa la ricerca binaria per dati ordinati
def find_optimal_temperature(sorted_temps, target):
    left, right = 0, len(sorted_temps) - 1
    while left <= right:
        mid = (left + right) // 2
        if sorted_temps[mid] == target:
            return mid
        elif sorted_temps[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1

# Cattivo: Ricerca lineare
def find_optimal_temperature(temps, target):
    for i, temp in enumerate(temps):
        if temp == target:
            return i
    return -1
from concurrent.futures import ThreadPoolExecutor

# Buono: Elabora più ingredienti in parallelo
def process_ingredients_parallel(ingredients):
    with ThreadPoolExecutor(max_workers=4) as executor:
        results = list(executor.map(process_ingredient, ingredients))
    return results

# Cattivo: Elaborazione sequenziale
def process_ingredients_sequential(ingredients):
    results = []
    for ingredient in ingredients:
        results.append(process_ingredient(ingredient))
    return results
# Buono: Struttura del codice modulare
class IngredientProcessor:
    def process(self, ingredient):
        self.validate(ingredient)
        self.prepare(ingredient)
        self.analyze(ingredient)

# Cattivo: Funzioni monolitiche
def process_ingredient(ingredient):
    # Tutto il processo in una funzione
    validate_ingredient(ingredient)
    prepare_ingredient(ingredient)
    analyze_ingredient(ingredient)
# Buono: Design dell'interfaccia pulita
class Kitchen:
    def cook(self, ingredient, **kwargs):
        self._validate_parameters(kwargs)
        self._prepare_environment()
        return self._execute_cooking(ingredient, kwargs)

# Cattivo: Interfaccia complessa
def cook(ingredient, temperature=None, duration=None, method=None, 
         stirring_frequency=None, humidity=None, pressure=None):
    # Troppi parametri
    pass
# Buono: Recupero degli errori elegante
def process_recipe(recipe):
    try:
        result = kitchen.cook_recipe(recipe)
        return result
    except TemperatureError:
        # Gestisci l'errore di temperatura
        return adjust_temperature(recipe)
    except IngredientError:
        # Gestisci l'errore di ingrediente
        return substitute_ingredients(recipe)
    finally:
        cleanup_resources()

# Cattivo: Nessun recupero degli errori
def process_recipe(recipe):
    result = kitchen.cook_recipe(recipe)
    return result  # Nessuna gestione degli errori
# Buono: Pulizia adeguata delle risorse
classe Cucina:
    def __init__(self):
        self.resources = []

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.cleanup()

# Cattivo: Pulizia manuale
def use_kitchen():
    cucina = Cucina()
    try:
        # Usa la cucina
        pass
    finally:
        cucina.cleanup()
# Buono: test delle prestazioni
import time
import cProfile

def profile_operation(func):
    def wrapper(*args, **kwargs):
        profiler = cProfile.Profile()
        result = profiler.runcall(func, *args, **kwargs)
        profiler.print_stats()
        return result
    return wrapper

# Cattivo: nessun test delle prestazioni
def operation():
    # Nessun monitoraggio delle prestazioni
    pass
# Buono: profilazione della memoria
from memory_profiler import profile

@profile
def memory_intensive_operation():
    # Operazione da profilare
    pass

# Cattivo: nessuna profilazione della memoria
def memory_intensive_operation():
    # Nessun monitoraggio della memoria
    pass
Riferimento API
Gestione della Cucina Virtuale
Tutorial