|
import itertools
|
|
import pandas as pd
|
|
|
|
class State:
|
|
"""
|
|
Classe pour gérer l'état précédent des sorties latched.
|
|
"""
|
|
def __init__(self):
|
|
self.SS1 = 1 # État précédent de noc Latched
|
|
self.SS2 = 1 # État précédent de nov Latched
|
|
|
|
# Initialiser l'état global
|
|
state = State()
|
|
|
|
def generate_truth_table(num_inputs, output_conditions, categories):
|
|
"""
|
|
Génère une table de vérité avec des conditions personnalisées sur les sorties et une colonne supplémentaire pour les catégories.
|
|
|
|
:param num_inputs: Nombre d'entrées (colonnes d'entrée).
|
|
:param output_conditions: Fonction qui prend une liste d'entrées et retourne une liste de sorties.
|
|
:param categories: Liste des catégories possibles pour la première colonne.
|
|
:return: Table de vérité sous forme de DataFrame.
|
|
"""
|
|
# Générer toutes les combinaisons possibles des entrées (0 ou 1)
|
|
inputs = list(itertools.product([0, 1], repeat=num_inputs))
|
|
|
|
# Répéter chaque combinaison pour chaque catégorie
|
|
extended_data = []
|
|
for category in categories:
|
|
for input_row in inputs:
|
|
output_row = output_conditions(input_row, category)
|
|
extended_data.append([category] + list(input_row) + output_row)
|
|
|
|
# Créer une DataFrame avec les entrées, catégories et sorties
|
|
columns = ["Category"] + [f"E{i+1}" for i in range(num_inputs)] + [f"S{i+1}" for i in range(len(extended_data[0]) - num_inputs - 1)]
|
|
|
|
return pd.DataFrame(extended_data, columns=columns)
|
|
|
|
# Exemple de conditions pour les sorties
|
|
def example_output_conditions(inputs, category):
|
|
"""
|
|
Exemple de conditions pour générer les sorties à partir des entrées et de la catégorie.
|
|
|
|
:param inputs: Liste des entrées (0 ou 1).
|
|
:param category: Catégorie actuelle ("A", "B", "C").
|
|
:return: Liste des sorties (0 ou 1).
|
|
"""
|
|
global state
|
|
|
|
# Mettre à jour SS1 (noc Latched)
|
|
if not inputs[7] and not inputs[8]:
|
|
state.SS1 = 0
|
|
elif not inputs[7] and inputs[8]:
|
|
state.SS1 = 1 # Mettre à jour l'état
|
|
elif inputs[7] and not inputs[8]:
|
|
state.SS1 = 0 # Conserver l'état précédent
|
|
elif inputs[7] and inputs[8]:
|
|
state.SS1 = state.SS1
|
|
|
|
|
|
# Mettre à jour SS2 (nov Latched)
|
|
if not inputs[7] and (category > 1241):
|
|
state.SS2 = 0
|
|
elif not inputs[7] and (category < 1241):
|
|
state.SS2 = 1
|
|
elif inputs[7] and (category > 1241):
|
|
state.SS2 = 0
|
|
elif inputs[7] and (category < 1241) :
|
|
state.SS2 = state.SS2 # Conserver l'état précédent
|
|
|
|
# Définir les autres sorties
|
|
S1 = 1 if not (state.SS1 and state.SS2 and inputs[3] and inputs[4] and inputs[5] and inputs[0] and inputs[1] and inputs[2]) else 0
|
|
S2 = state.SS1
|
|
S3 = state.SS2
|
|
S4 = 1 if (not (state.SS1 and state.SS2 and inputs[3] and inputs[4] and inputs[5] and inputs[0] and inputs[9] and inputs[10])) and (not (inputs[6] and (inputs[4] or inputs[5]) and inputs[0])) else 0
|
|
S5 = 1 if (not (state.SS1 and state.SS2 and inputs[3] and inputs[4] and inputs[5] and inputs[0] and inputs[9] and inputs[10])) and ((inputs[4] or inputs[5]) and inputs[6] and inputs[0]) else 0
|
|
|
|
return [S1, S2, S3, S4, S5]
|
|
|
|
# Générer la table de vérité avec 11 entrées et 3 catégories
|
|
num_inputs = 11
|
|
categories = [500, 2000, 3000]
|
|
truth_table = generate_truth_table(num_inputs, example_output_conditions, categories)
|
|
|
|
# Afficher la table de vérité
|
|
print(truth_table)
|
|
|
|
# Sauvegarder la table dans un fichier CSV si nécessaire
|
|
truth_table.to_csv("/Users/a.imthadulla/Desktop/Punch/look_up_table_unformatted.csv", index=False)
|