Projet

Général

Profil

Logiciel » Create_look_up_table.py

Adam-Musharraf IMTHADULLA, 31/01/2025 23:59

 
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)
(4-4/8)