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 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

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.

2. Cucina

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

3. Ricette

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

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

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

3. Gestione dello Stato

Gli ingredienti mantengono lo stato durante le operazioni di cottura:

Concetti Avanzati

1. Profili di Sapore

Gli ingredienti e i prodotti cotti hanno profili di sapore:

2. Conversione delle Unità

TomatoPy gestisce automaticamente le conversioni delle unità:

3. Gestione degli Errori

La libreria include una gestione degli errori robusta:

Migliori Pratiche

  1. Always Use Virtual Environments

  2. print("Attenzione: il pomodoro potrebbe essere troppo acerbo per risultati ottimali")

  3. return Ingredient(name=name, properties=properties)

Prossimi Passi

- Esplora l'intera API

- Impara tecniche avanzate

- Impara le migliori pratiche

- Dive deeper into specific modules

- Follow step-by-step guides

- Explore the full API documentation

Riferimento API
Tutorial
Migliori Pratiche
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
    }
)
from tomatopy import Kitchen

kitchen = Kitchen()
kitchen.set_temperature(180)  # Celsius
kitchen.set_humidity(65)      # Percentuale
from tomatopy import Recipe

# Crea una ricetta
marinara = Recipe("Marinara Classica")
marinara.add_ingredient(tomato)
marinara.set_cooking_method("sobbollire")
marinara.set_duration("30m")
# Accedi e modifica le proprietà
print(tomato.properties["water_content"])  # 0.95
tomato.properties["ripeness"] = 0.9
# Esegui operazioni di cottura
sauce = kitchen.cook(
    tomato,
    method="sobbollire",
    temperature=100,
    duration="30m"
)
# Controlla lo stato dell'ingrediente
print(tomato.state)  # "crudo"
sauce = kitchen.cook(tomato, method="sobbollire")
print(sauce.state)   # "cotto"
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
# Converti tra unità
tomato.convert_to_imperial()  # Converte da metrico a imperiale
sauce.convert_volume("ml", "cups")  # Converte tra unità di volume
prova:
    kitchen.cook(tomato, temperature=1000)  # Troppo caldo!
eccetto TemperatureError come e:
    print(f"Errore: {e}")  # "La temperatura supera il range di cottura sicuro"
python -m venv tomatopy-env
source tomatopy-env/bin/activate  # or `tomatopy-env\Scripts\activate` on Windows
if tomato.properties["ripeness"] < 0.5:
    print("Warning: Tomato may be too unripe for optimal results")
from typing import Dict, Any

def create_ingredient(name: str, properties: Dict[str, Any]) -> Ingredient:
    return Ingredient(name=name, properties=properties)
API Reference
Moduli Principali
Tutorials

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

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

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

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

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

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

Aggiunta di Condimenti

Personalizzazione Avanzata della Pizza

Personalizzazione della Pasta

Personalizzazione della Salsa

Cottura della Pizza

Cottura Base

Tecniche di Cottura Avanzate

Controllo Qualità

Analisi della Pizza

Metriche di Qualità

Tipi di Pizza Speciali

Pizza Napoletana

Stile New York

Chicago Deep Dish

Taglio della Pizza

Taglio Standard

Taglio Personalizzato

Gestione degli Errori

Migliori Pratiche

  1. Preparazione Corretta dell'Impasto

  2. Topping Distribution

  3. Temperature Control

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

- Scopri i metodi di cottura

- Create delicious pizzas

__init__() - Create delicious pizzas

- Analyze cooking results

- Control kitchen equipment

- Explore the full API

- Learn advanced techniques

- Impara a fare la pizza

- Master taste analysis

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

- Control pizza equipment

- Explore the full API

Operazioni di Cottura
Pizza Creation System
Pizza Creation System
Taste Testing Module
Kitchen Hardware Interface
API Reference
Tutorials
Produzione di Pizza Perfetta
Advanced Flavor Profiling
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"
)
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)
# 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
)
# 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
)
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"
)
# 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"
)
# 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}")
# 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}")
# Crea pizza napoletana autentica
neapolitan = Pizza.create_neapolitan(
    size="12inch",
    toppings=["san_marzano_tomatoes", "mozzarella", "basil"]
)
# Crea pizza in stile New York
ny_style = Pizza.create_ny_style(
    size="18inch",
    thickness="thin",
    toppings=["tomato_sauce", "mozzarella", "pepperoni"]
)
# Crea deep dish di Chicago
chicago = Pizza.create_chicago_style(
    size="10inch",
    thickness="deep",
    toppings=["tomato_sauce", "mozzarella", "sausage"]
)
# Tagliare la pizza a fette
fette = pizza.taglia(
    metodo="standard",
    fette=8,
    dimensione_fetta="uguale"
)
# Taglio personalizzato della pizza
fette = pizza.taglia(
    metodo="personalizzato",
    dimensioni_fette=["grande", "media", "piccola"],
    modello="radiale"
)
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"
# Assicurati che l'impasto fermenti correttamente
se impasto.tempo_fermentazione < "24h":
    print("Attenzione: L'impasto potrebbe non essere completamente fermentato")
# Check topping distribution
if pizza.get_topping_distribution() < 0.8:
    print("Warning: Toppings may not be evenly distributed")
# 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
Taste Testing Module
Kitchen Hardware Interface

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

# 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

Elaborazione in Batch

# 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

Ottimizzazione delle Prestazioni

Memorizzazione dei Risultati

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

Strutture Dati Efficaci

# 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

Gestione delle Risorse

Gestori di Contesto

# 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

Pooling delle Connessioni

# 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()

Ottimizzazione degli Algoritmi

Ricerca Efficiente

# 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

Elaborazione Parallela

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

Organizzazione del Codice

Design Modulare

# 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)

Interfacce Pulite

# 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

Gestione degli Errori

Recupero Efficiente degli Errori

# 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

Pulizia delle Risorse

# 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()

Test e Profilazione

Test delle Prestazioni

# 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

Profilazione della Memoria

# 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

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

  • Riferimento API - Esplora l'intera 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

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}
)

Configurazione avanzata

# 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"]
    }
)

Gestione delle risorse

Assegnazione delle attrezzature

# 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

Ottimizzazione dello spazio

# 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

Gestione del flusso di lavoro

Pianificazione delle attività

# 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)

Ottimizzazione del flusso di lavoro

# 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)

Controllo della temperatura

Gestione delle zone

# 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

Monitoraggio della temperatura

# 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

Gestione della sicurezza

Protocolli di sicurezza

# 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

Procedure di emergenza

# 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

Manutenzione

Manutenzione delle attrezzature

# 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

Protocolli di pulizia

# 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

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

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

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:

Passo 2: Analisi di base dei sapori

Iniziamo con un'analisi completa dei sapori:

Passo 3: Analisi avanzata degli aromi

Immergiamoci profondamente nella profilazione degli aromi:

Passo 4: Analisi della consistenza

Analizziamo il profilo della consistenza:

Passo 5: Analisi dell'equilibrio dei sapori

Analizziamo l'equilibrio dei sapori:

Passo 6: Analisi comparativa

Confrontiamo più ingredienti:

Passo 7: Ottimizzazione del sapore

Ottimizziamo il profilo del sapore:

Passo 8: Visualizzazione avanzata

Creiamo visualizzazioni dettagliate dei nostri profili di sapore:

Tecniche Avanzate

Analisi Multi-Dimensionale

Analisi Basata sul Tempo

Migliori Pratiche

Best Practices

  1. Proper Sample Preparation

  2. Comprehensive Analysis

  3. Data Validation

Next Steps

- Impara l'ottimizzazione della cucina

- Impara tecniche avanzate

- Explore the full API

- Learn advanced techniques

- Learn optimization techniques

- Master taste analysis

- Explore the full API

- Learn optimization techniques

- Explore the full API

- Learn optimization techniques

- Try more recipes

Gestione della Cucina Virtuale
Tutorial
API Reference
Tutorials
Code Efficiency
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"
    }
)
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"
)
# 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}")
# 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}")
# 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}")
# 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}")
# 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}")
# 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}")
# 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()
# 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}")
# 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')}")
# 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}")
# Ensure consistent sample preparation
if not tester.validate_sample(test_tomato):
    print("Warning: Sample may not be suitable for analysis")
# Use comprehensive analysis for detailed results
profile = tester.analyze(
    ingredient,
    depth="comprehensive",
    include_all_metrics=True
)
# Validate analysis results
if profile.is_valid():
    # Proceed with analysis
    print(profile.get_summary())
else:
    print("Warning: Analysis may be incomplete")
API Reference
Recipes Library
Advanced Flavor Profiling
Best Practices
API Reference
Best Practices