final presentation, restructure of the repository, updated code to have weighted probabilities and more
@@ -2,10 +2,10 @@ FROM python:3.14-slim
|
|||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
COPY ./main.py /app
|
COPY requirements.txt /app/
|
||||||
COPY ./simulator.py /app
|
|
||||||
COPY ./requirements.txt /app
|
|
||||||
|
|
||||||
RUN pip install -r requirements.txt
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
COPY main.py simulator.py /app/
|
||||||
|
|
||||||
CMD ["python", "main.py"]
|
CMD ["python", "main.py"]
|
||||||
|
|||||||
298
code/main.py
@@ -30,18 +30,6 @@ def Continue(title="") -> None:
|
|||||||
print()
|
print()
|
||||||
|
|
||||||
|
|
||||||
# def MainMenu() -> None:
|
|
||||||
# global currentFunction
|
|
||||||
# options = ["Simulator", "Calculator", "Quit"]
|
|
||||||
# actions: list[Callable[[], None]] = [SimulatorMenu, StopApplication]
|
|
||||||
|
|
||||||
# selectedIndex = ShowMenu(
|
|
||||||
# options, title="Boolean Network Simulator\nby Tom Zuidberg"
|
|
||||||
# )
|
|
||||||
|
|
||||||
# currentFunction = actions[selectedIndex]
|
|
||||||
|
|
||||||
|
|
||||||
def StopApplication() -> None:
|
def StopApplication() -> None:
|
||||||
quit()
|
quit()
|
||||||
|
|
||||||
@@ -151,11 +139,14 @@ def BooleanNetworkMenu(
|
|||||||
functionStrings: list = [None for _ in range(3)]
|
functionStrings: list = [None for _ in range(3)]
|
||||||
functionsDirtyFlag = False
|
functionsDirtyFlag = False
|
||||||
current_highlight = 0
|
current_highlight = 0
|
||||||
|
functions_highlight = 0
|
||||||
|
probFunctionStrings: list[list[str]] = [[] for _ in range(3)]
|
||||||
|
|
||||||
if bn is not None and funcStrings is not None and funcs is not None:
|
if bn is not None and funcStrings is not None and funcs is not None:
|
||||||
boolNetwork = bn
|
boolNetwork = bn
|
||||||
functions = funcs
|
functions = funcs
|
||||||
functionStrings = funcStrings
|
functionStrings = funcStrings
|
||||||
|
probFunctionStrings = [[] for _ in range(boolNetwork.size)]
|
||||||
|
|
||||||
def Menu() -> None:
|
def Menu() -> None:
|
||||||
nonlocal current_highlight
|
nonlocal current_highlight
|
||||||
@@ -164,10 +155,7 @@ def BooleanNetworkMenu(
|
|||||||
f"Set size (current: {boolNetwork.size}) WARNING: this will reset all other options!",
|
f"Set size (current: {boolNetwork.size}) WARNING: this will reset all other options!",
|
||||||
f"Set state (current: {str(boolNetwork)[-boolNetwork.size :]})",
|
f"Set state (current: {str(boolNetwork)[-boolNetwork.size :]})",
|
||||||
f"Set update scheme (current: {boolNetwork.updateScheme})",
|
f"Set update scheme (current: {boolNetwork.updateScheme})",
|
||||||
*[
|
"Edit update functions",
|
||||||
f"Set update function of node x{i} (current: {functionStrings[i - 1]})"
|
|
||||||
for i in range(1, boolNetwork.size + 1)
|
|
||||||
],
|
|
||||||
None,
|
None,
|
||||||
"Update once (hold ENTER for continuous updates)",
|
"Update once (hold ENTER for continuous updates)",
|
||||||
"Update multiple times",
|
"Update multiple times",
|
||||||
@@ -182,7 +170,7 @@ def BooleanNetworkMenu(
|
|||||||
SetSizeHelper,
|
SetSizeHelper,
|
||||||
SetStateHelper,
|
SetStateHelper,
|
||||||
SetUpdateSchemeHelper,
|
SetUpdateSchemeHelper,
|
||||||
*[partial(SetFunctionHelper, i) for i in range(boolNetwork.size)],
|
FunctionsMenu,
|
||||||
None,
|
None,
|
||||||
UpdateHelper,
|
UpdateHelper,
|
||||||
MultiUpdateHelper,
|
MultiUpdateHelper,
|
||||||
@@ -204,7 +192,7 @@ def BooleanNetworkMenu(
|
|||||||
actions[selectedIndex]()
|
actions[selectedIndex]()
|
||||||
|
|
||||||
def SetSizeHelper() -> None:
|
def SetSizeHelper() -> None:
|
||||||
nonlocal boolNetwork, functions, functionStrings
|
nonlocal boolNetwork, functions, functionStrings, probFunctionStrings
|
||||||
while True:
|
while True:
|
||||||
size = input("Set new size (Leave empty to cancel):\n").strip()
|
size = input("Set new size (Leave empty to cancel):\n").strip()
|
||||||
if size == "":
|
if size == "":
|
||||||
@@ -219,6 +207,7 @@ def BooleanNetworkMenu(
|
|||||||
boolNetwork = BooleanNetwork(size)
|
boolNetwork = BooleanNetwork(size)
|
||||||
functions = [None for _ in range(size)]
|
functions = [None for _ in range(size)]
|
||||||
functionStrings = [None for _ in range(size)]
|
functionStrings = [None for _ in range(size)]
|
||||||
|
probFunctionStrings = [[] for _ in range(size)]
|
||||||
return
|
return
|
||||||
|
|
||||||
def SetStateHelper() -> None:
|
def SetStateHelper() -> None:
|
||||||
@@ -237,9 +226,32 @@ def BooleanNetworkMenu(
|
|||||||
print("Invalid input:", e)
|
print("Invalid input:", e)
|
||||||
|
|
||||||
def SetUpdateSchemeHelper() -> None:
|
def SetUpdateSchemeHelper() -> None:
|
||||||
nonlocal boolNetwork
|
nonlocal boolNetwork, functions, functionStrings, functionsDirtyFlag
|
||||||
|
|
||||||
|
def AdoptFromProbabilistic() -> None:
|
||||||
|
nonlocal functionsDirtyFlag
|
||||||
|
|
||||||
|
for i in range(boolNetwork.size):
|
||||||
|
if probFunctionStrings[i]:
|
||||||
|
funcString = probFunctionStrings[i][0]
|
||||||
|
func = eval(
|
||||||
|
"lambda "
|
||||||
|
+ ",".join(f"x{j}" for j in range(1, boolNetwork.size + 1))
|
||||||
|
+ ":"
|
||||||
|
+ funcString
|
||||||
|
)
|
||||||
|
functions[i] = func
|
||||||
|
functionStrings[i] = funcString
|
||||||
|
functionsDirtyFlag = True
|
||||||
|
|
||||||
|
def SwitchToSynchronous() -> None:
|
||||||
|
wasProbabilistic = boolNetwork.updateScheme == "probabilistic"
|
||||||
|
boolNetwork.UseSynchronousScheme()
|
||||||
|
if wasProbabilistic:
|
||||||
|
AdoptFromProbabilistic()
|
||||||
|
|
||||||
def SetSequentialHelper() -> None:
|
def SetSequentialHelper() -> None:
|
||||||
|
wasProbabilistic = boolNetwork.updateScheme == "probabilistic"
|
||||||
while True:
|
while True:
|
||||||
seq = input(
|
seq = input(
|
||||||
"Set sequence. (Leave empty to cancel)\nFormat example: '1,4,3,2'\n"
|
"Set sequence. (Leave empty to cancel)\nFormat example: '1,4,3,2'\n"
|
||||||
@@ -252,26 +264,24 @@ def BooleanNetworkMenu(
|
|||||||
try:
|
try:
|
||||||
seq = [int(i) for i in seq]
|
seq = [int(i) for i in seq]
|
||||||
boolNetwork.UseSequentialScheme(seq)
|
boolNetwork.UseSequentialScheme(seq)
|
||||||
|
if wasProbabilistic:
|
||||||
|
AdoptFromProbabilistic()
|
||||||
return
|
return
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("Invalid input:", e)
|
print("Invalid input:", e)
|
||||||
|
|
||||||
def SetProbabilisticHelper() -> None:
|
def SwitchToAsyncRandom() -> None:
|
||||||
while True:
|
wasProbabilistic = boolNetwork.updateScheme == "probabilistic"
|
||||||
chance = input(
|
boolNetwork.UseAsynchronousRandomScheme()
|
||||||
"Set flip chance as float between 0.0 and 1.0. (Leave empty to cancel)\n"
|
if wasProbabilistic:
|
||||||
).strip()
|
AdoptFromProbabilistic()
|
||||||
if chance == "":
|
|
||||||
print("Cancelled")
|
|
||||||
return
|
|
||||||
|
|
||||||
try:
|
def SwitchToProbabilistic() -> None:
|
||||||
chance = float(chance)
|
for i in range(boolNetwork.size):
|
||||||
boolNetwork.UseProbabilisticScheme(chance)
|
if not probFunctionStrings[i] and functions[i] is not None:
|
||||||
return
|
boolNetwork.AddProbabilisticFunction(i, functions[i], 1.0)
|
||||||
|
probFunctionStrings[i].append(functionStrings[i])
|
||||||
except Exception as e:
|
boolNetwork.UseProbabilisticScheme()
|
||||||
print("Invalid input:", e)
|
|
||||||
|
|
||||||
title = "Select update scheme:"
|
title = "Select update scheme:"
|
||||||
options = [
|
options = [
|
||||||
@@ -282,15 +292,120 @@ def BooleanNetworkMenu(
|
|||||||
"Cancel",
|
"Cancel",
|
||||||
]
|
]
|
||||||
actions = [
|
actions = [
|
||||||
lambda: boolNetwork.UseSynchronousScheme(),
|
SwitchToSynchronous,
|
||||||
SetSequentialHelper,
|
SetSequentialHelper,
|
||||||
SetProbabilisticHelper,
|
SwitchToProbabilistic,
|
||||||
lambda: boolNetwork.UseAsynchronousRandomScheme(),
|
SwitchToAsyncRandom,
|
||||||
lambda: None,
|
lambda: None,
|
||||||
]
|
]
|
||||||
|
|
||||||
actions[ShowMenu(options=options, title=title)]()
|
actions[ShowMenu(options=options, title=title)]()
|
||||||
|
|
||||||
|
def FunctionsMenu() -> None:
|
||||||
|
nonlocal functions_highlight
|
||||||
|
done: bool = False
|
||||||
|
|
||||||
|
def Menu() -> None:
|
||||||
|
nonlocal functions_highlight
|
||||||
|
title = "Edit update functions:"
|
||||||
|
deleteTargets: list = []
|
||||||
|
|
||||||
|
if boolNetwork.updateScheme in ("synchronous", "sequential", None):
|
||||||
|
options = [
|
||||||
|
*[
|
||||||
|
f"Set update function of node x{i} (current: {functionStrings[i - 1]})"
|
||||||
|
for i in range(1, boolNetwork.size + 1)
|
||||||
|
],
|
||||||
|
None,
|
||||||
|
"Return",
|
||||||
|
]
|
||||||
|
actions = [
|
||||||
|
*[partial(SetFunctionHelper, i) for i in range(boolNetwork.size)],
|
||||||
|
None,
|
||||||
|
ReturnHelper,
|
||||||
|
]
|
||||||
|
elif boolNetwork.updateScheme == "asynchronous_random":
|
||||||
|
options = [
|
||||||
|
*[
|
||||||
|
f"Set update function of node x{i} (current: {functionStrings[i - 1]})"
|
||||||
|
for i in range(1, boolNetwork.size + 1)
|
||||||
|
],
|
||||||
|
None,
|
||||||
|
*[
|
||||||
|
f"Set selection weight of node x{i} (current: {boolNetwork.node_selection_weights[i - 1]})"
|
||||||
|
for i in range(1, boolNetwork.size + 1)
|
||||||
|
],
|
||||||
|
None,
|
||||||
|
"Return",
|
||||||
|
]
|
||||||
|
actions = [
|
||||||
|
*[partial(SetFunctionHelper, i) for i in range(boolNetwork.size)],
|
||||||
|
None,
|
||||||
|
*[partial(SetNodeWeightHelper, i) for i in range(boolNetwork.size)],
|
||||||
|
None,
|
||||||
|
ReturnHelper,
|
||||||
|
]
|
||||||
|
else: # probabilistic
|
||||||
|
title = "Edit update functions:\n(highlight a function entry and press 'd' to delete it)"
|
||||||
|
options = []
|
||||||
|
actions = []
|
||||||
|
for i in range(boolNetwork.size):
|
||||||
|
for j in range(len(probFunctionStrings[i])):
|
||||||
|
options.append(
|
||||||
|
f"Set update function #{j + 1} of node x{i + 1} (current: {probFunctionStrings[i][j]})"
|
||||||
|
)
|
||||||
|
actions.append(partial(EditProbFunctionHelper, i, j))
|
||||||
|
deleteTargets.append((i, j))
|
||||||
|
options.append(
|
||||||
|
f"Set weight of function #{j + 1} of node x{i + 1} (current: {boolNetwork.probabilistic_weights[i][j]})"
|
||||||
|
)
|
||||||
|
actions.append(partial(EditProbWeightHelper, i, j))
|
||||||
|
deleteTargets.append(None)
|
||||||
|
options.append(f"Add new function for node x{i + 1}")
|
||||||
|
actions.append(partial(AddProbFunctionHelper, i))
|
||||||
|
deleteTargets.append(None)
|
||||||
|
options.append(None)
|
||||||
|
actions.append(None)
|
||||||
|
deleteTargets.append(None)
|
||||||
|
options.append("Return")
|
||||||
|
actions.append(ReturnHelper)
|
||||||
|
deleteTargets.append(None)
|
||||||
|
|
||||||
|
if boolNetwork.updateScheme == "probabilistic":
|
||||||
|
menu = TerminalMenu(
|
||||||
|
menu_entries=options,
|
||||||
|
title=title,
|
||||||
|
multi_select=False,
|
||||||
|
cursor_index=functions_highlight,
|
||||||
|
accept_keys=("enter", "d"),
|
||||||
|
)
|
||||||
|
selectedIndex = menu.show()
|
||||||
|
if selectedIndex is None:
|
||||||
|
selectedIndex = len(options) - 1
|
||||||
|
acceptKey = "enter"
|
||||||
|
else:
|
||||||
|
acceptKey = menu.chosen_accept_key
|
||||||
|
functions_highlight = selectedIndex
|
||||||
|
|
||||||
|
if acceptKey == "d" and deleteTargets[selectedIndex] is not None:
|
||||||
|
DeleteProbFunctionHelper(*deleteTargets[selectedIndex])
|
||||||
|
else:
|
||||||
|
actions[selectedIndex]()
|
||||||
|
return
|
||||||
|
|
||||||
|
selectedIndex = ShowMenu(
|
||||||
|
options=options, title=title, highlight_entry=functions_highlight
|
||||||
|
)
|
||||||
|
functions_highlight = selectedIndex
|
||||||
|
actions[selectedIndex]()
|
||||||
|
|
||||||
|
def ReturnHelper() -> None:
|
||||||
|
nonlocal done
|
||||||
|
done = True
|
||||||
|
|
||||||
|
while not done:
|
||||||
|
Menu()
|
||||||
|
|
||||||
def UpdateHelper() -> None:
|
def UpdateHelper() -> None:
|
||||||
nonlocal functions, boolNetwork, functionsDirtyFlag
|
nonlocal functions, boolNetwork, functionsDirtyFlag
|
||||||
if functionsDirtyFlag:
|
if functionsDirtyFlag:
|
||||||
@@ -377,6 +492,115 @@ def BooleanNetworkMenu(
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("Error while parsing function:", e)
|
print("Error while parsing function:", e)
|
||||||
|
|
||||||
|
def SetNodeWeightHelper(index: int) -> None:
|
||||||
|
nonlocal boolNetwork
|
||||||
|
while True:
|
||||||
|
weight = input(
|
||||||
|
f"Set new selection weight for node x{index + 1}. Must be a positive number. (Leave empty to cancel)\n"
|
||||||
|
).strip()
|
||||||
|
if weight == "":
|
||||||
|
print("Cancelled")
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
weight = float(weight)
|
||||||
|
boolNetwork.SetNodeSelectionWeight(index, weight)
|
||||||
|
return
|
||||||
|
except Exception as e:
|
||||||
|
print("Invalid input:", e)
|
||||||
|
|
||||||
|
def AddProbFunctionHelper(index: int) -> None:
|
||||||
|
nonlocal boolNetwork, probFunctionStrings
|
||||||
|
while True:
|
||||||
|
funcString = input(
|
||||||
|
f"Set new function for node x{index + 1}. The function will receive all nodes in form of x1, x2, ..., x[size]. (Leave empty to cancel)\n"
|
||||||
|
)
|
||||||
|
if funcString == "":
|
||||||
|
print("Cancelled")
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
func = (
|
||||||
|
"lambda "
|
||||||
|
+ ",".join(f"x{i}" for i in range(1, boolNetwork.size + 1))
|
||||||
|
+ ":"
|
||||||
|
+ funcString
|
||||||
|
)
|
||||||
|
func = eval(func)
|
||||||
|
if not isinstance(func, FunctionType):
|
||||||
|
print("Please enter a valid function. Got: " + func)
|
||||||
|
continue
|
||||||
|
except Exception as e:
|
||||||
|
print("Error while parsing function:", e)
|
||||||
|
continue
|
||||||
|
|
||||||
|
weight = 1.0
|
||||||
|
weightInput = input(
|
||||||
|
"Set weight for this function. Must be a positive number. (Leave empty for default 1.0)\n"
|
||||||
|
).strip()
|
||||||
|
if weightInput != "":
|
||||||
|
try:
|
||||||
|
weight = float(weightInput)
|
||||||
|
except ValueError:
|
||||||
|
print("Invalid weight, using default 1.0")
|
||||||
|
weight = 1.0
|
||||||
|
|
||||||
|
try:
|
||||||
|
boolNetwork.AddProbabilisticFunction(index, func, weight)
|
||||||
|
probFunctionStrings[index].append(funcString)
|
||||||
|
return
|
||||||
|
except Exception as e:
|
||||||
|
print("Error while adding function:", e)
|
||||||
|
|
||||||
|
def EditProbFunctionHelper(index: int, function_index: int) -> None:
|
||||||
|
nonlocal boolNetwork, probFunctionStrings
|
||||||
|
while True:
|
||||||
|
funcString = input(
|
||||||
|
f"Set new function for node x{index + 1}, function #{function_index + 1}. (Leave empty to cancel)\n"
|
||||||
|
)
|
||||||
|
if funcString == "":
|
||||||
|
print("Cancelled")
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
func = (
|
||||||
|
"lambda "
|
||||||
|
+ ",".join(f"x{i}" for i in range(1, boolNetwork.size + 1))
|
||||||
|
+ ":"
|
||||||
|
+ funcString
|
||||||
|
)
|
||||||
|
func = eval(func)
|
||||||
|
if not isinstance(func, FunctionType):
|
||||||
|
print("Please enter a valid function. Got: " + func)
|
||||||
|
continue
|
||||||
|
boolNetwork.SetProbabilisticFunction(index, function_index, func)
|
||||||
|
probFunctionStrings[index][function_index] = funcString
|
||||||
|
return
|
||||||
|
except Exception as e:
|
||||||
|
print("Error while parsing function:", e)
|
||||||
|
|
||||||
|
def EditProbWeightHelper(index: int, function_index: int) -> None:
|
||||||
|
nonlocal boolNetwork
|
||||||
|
while True:
|
||||||
|
weight = input(
|
||||||
|
f"Set new weight for node x{index + 1}, function #{function_index + 1}. Must be a positive number. (Leave empty to cancel)\n"
|
||||||
|
).strip()
|
||||||
|
if weight == "":
|
||||||
|
print("Cancelled")
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
weight = float(weight)
|
||||||
|
boolNetwork.SetProbabilisticFunctionWeight(index, function_index, weight)
|
||||||
|
return
|
||||||
|
except Exception as e:
|
||||||
|
print("Invalid input:", e)
|
||||||
|
|
||||||
|
def DeleteProbFunctionHelper(index: int, function_index: int) -> None:
|
||||||
|
nonlocal boolNetwork, probFunctionStrings
|
||||||
|
try:
|
||||||
|
boolNetwork.RemoveProbabilisticFunction(index, function_index)
|
||||||
|
del probFunctionStrings[index][function_index]
|
||||||
|
except Exception as e:
|
||||||
|
print("Error while deleting function:", e)
|
||||||
|
Continue()
|
||||||
|
|
||||||
def ToggleWriteToFileHelper():
|
def ToggleWriteToFileHelper():
|
||||||
nonlocal writeToFile
|
nonlocal writeToFile
|
||||||
writeToFile = not writeToFile
|
writeToFile = not writeToFile
|
||||||
|
|||||||
@@ -7,6 +7,19 @@ import numpy as np
|
|||||||
import scipy.linalg
|
import scipy.linalg
|
||||||
|
|
||||||
|
|
||||||
|
def _wrap_bool_function(
|
||||||
|
function: Callable[Concatenate[bool, ...], bool],
|
||||||
|
) -> Callable[Concatenate[bool, ...], bool]:
|
||||||
|
def wrap(*args, **kwargs) -> bool:
|
||||||
|
result = function(*args, **kwargs)
|
||||||
|
assert type(result) is bool, (
|
||||||
|
f"Function error: Boolean network functions must always return a bool, however got type {type(result)}, {result=}"
|
||||||
|
)
|
||||||
|
return result
|
||||||
|
|
||||||
|
return wrap
|
||||||
|
|
||||||
|
|
||||||
class BooleanNetwork:
|
class BooleanNetwork:
|
||||||
def __init__(self, size: int) -> None:
|
def __init__(self, size: int) -> None:
|
||||||
assert type(size) is int and size > 0, (
|
assert type(size) is int and size > 0, (
|
||||||
@@ -17,8 +30,7 @@ class BooleanNetwork:
|
|||||||
self.__has_update_functions = False
|
self.__has_update_functions = False
|
||||||
self.__has_update_scheme = False
|
self.__has_update_scheme = False
|
||||||
self.__has_sequence = False
|
self.__has_sequence = False
|
||||||
self.__has_flip_chance = False
|
self.__has_probabilistic_functions = False
|
||||||
self.flip_chance: float = 0
|
|
||||||
self.sequence: list[int] = list()
|
self.sequence: list[int] = list()
|
||||||
self.seed: int | None = None
|
self.seed: int | None = None
|
||||||
self.time_step = 0
|
self.time_step = 0
|
||||||
@@ -29,21 +41,23 @@ class BooleanNetwork:
|
|||||||
lambda x: x for _ in range(size)
|
lambda x: x for _ in range(size)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# asynchronous_random: relative likelihood that node i is the one picked
|
||||||
|
# to update on a given time step. Doesn't need to sum to 1 - it is
|
||||||
|
# normalised (weight_i / sum(weights)) whenever it is used.
|
||||||
|
self.node_selection_weights: list[float] = [1.0 for _ in range(size)]
|
||||||
|
|
||||||
|
# probabilistic: each node may have any number of candidate update
|
||||||
|
# functions. On every update, one candidate per node is drawn
|
||||||
|
# according to its weight (again normalised at use-time, not
|
||||||
|
# required to sum to 1) and applied synchronously.
|
||||||
|
self.probabilistic_functions: list[
|
||||||
|
list[Callable[Concatenate[bool, ...], bool]]
|
||||||
|
] = [list() for _ in range(size)]
|
||||||
|
self.probabilistic_weights: list[list[float]] = [list() for _ in range(size)]
|
||||||
|
|
||||||
def SetFunctions(
|
def SetFunctions(
|
||||||
self, functions: Iterable[Callable[Concatenate[bool, ...], bool]]
|
self, functions: Iterable[Callable[Concatenate[bool, ...], bool]]
|
||||||
) -> Self:
|
) -> Self:
|
||||||
def wrapper(
|
|
||||||
function: Callable[Concatenate[bool, ...], bool],
|
|
||||||
) -> Callable[Concatenate[bool, ...], bool]:
|
|
||||||
def wrap(*args, **kwargs) -> bool:
|
|
||||||
result = function(*args, **kwargs)
|
|
||||||
assert type(result) is bool, (
|
|
||||||
f"Function error: Boolean network functions must always return a bool, however got type {type(result)}, {result=}"
|
|
||||||
)
|
|
||||||
return result
|
|
||||||
|
|
||||||
return wrap
|
|
||||||
|
|
||||||
funcs: list[Callable[Concatenate[bool, ...], bool]] = list(functions)
|
funcs: list[Callable[Concatenate[bool, ...], bool]] = list(functions)
|
||||||
|
|
||||||
assert len(funcs) == self.size, (
|
assert len(funcs) == self.size, (
|
||||||
@@ -56,7 +70,7 @@ class BooleanNetwork:
|
|||||||
f"Function error: Function arg amount mismatch. Given function takes {len(inspect.signature(func).parameters)} arguments, expected {self.size}"
|
f"Function error: Function arg amount mismatch. Given function takes {len(inspect.signature(func).parameters)} arguments, expected {self.size}"
|
||||||
)
|
)
|
||||||
|
|
||||||
self.functions[i] = wrapper(func)
|
self.functions[i] = _wrap_bool_function(func)
|
||||||
|
|
||||||
self.__has_update_functions = True
|
self.__has_update_functions = True
|
||||||
return self
|
return self
|
||||||
@@ -64,22 +78,101 @@ class BooleanNetwork:
|
|||||||
def SetFunction(
|
def SetFunction(
|
||||||
self, index: int, function: Callable[Concatenate[bool, ...], bool]
|
self, index: int, function: Callable[Concatenate[bool, ...], bool]
|
||||||
) -> Self:
|
) -> Self:
|
||||||
def wrapper(
|
|
||||||
function: Callable[Concatenate[bool, ...], bool],
|
|
||||||
) -> Callable[Concatenate[bool, ...], bool]:
|
|
||||||
def wrap(*args, **kwargs) -> bool:
|
|
||||||
result = function(*args, **kwargs)
|
|
||||||
assert type(result) is bool, (
|
|
||||||
f"Function error: Boolean network functions must always return a bool, however got type {type(result)}, {result=}"
|
|
||||||
)
|
|
||||||
return result
|
|
||||||
|
|
||||||
return wrap
|
|
||||||
|
|
||||||
assert 0 <= index < self.size, (
|
assert 0 <= index < self.size, (
|
||||||
f"Function error: cannot set function at index {index} - out of bound."
|
f"Function error: cannot set function at index {index} - out of bound."
|
||||||
)
|
)
|
||||||
self.functions[index] = wrapper(function)
|
assert len(inspect.signature(function).parameters) == self.size, (
|
||||||
|
f"Function error: Function arg amount mismatch. Given function takes {len(inspect.signature(function).parameters)} arguments, expected {self.size}"
|
||||||
|
)
|
||||||
|
self.functions[index] = _wrap_bool_function(function)
|
||||||
|
return self
|
||||||
|
|
||||||
|
def SetNodeSelectionWeight(self, index: int, weight: float) -> Self:
|
||||||
|
assert 0 <= index < self.size, (
|
||||||
|
f"Weight error: cannot set selection weight at index {index} - out of bound."
|
||||||
|
)
|
||||||
|
assert type(weight) is float and weight > 0, (
|
||||||
|
f"Weight error: weight must be a positive float. got {weight=}"
|
||||||
|
)
|
||||||
|
self.node_selection_weights[index] = weight
|
||||||
|
return self
|
||||||
|
|
||||||
|
def AddProbabilisticFunction(
|
||||||
|
self,
|
||||||
|
index: int,
|
||||||
|
function: Callable[Concatenate[bool, ...], bool],
|
||||||
|
weight: float = 1.0,
|
||||||
|
) -> Self:
|
||||||
|
assert 0 <= index < self.size, (
|
||||||
|
f"Function error: cannot add function at index {index} - out of bound."
|
||||||
|
)
|
||||||
|
assert len(inspect.signature(function).parameters) == self.size, (
|
||||||
|
f"Function error: Function arg amount mismatch. Given function takes {len(inspect.signature(function).parameters)} arguments, expected {self.size}"
|
||||||
|
)
|
||||||
|
assert type(weight) is float and weight > 0, (
|
||||||
|
f"Weight error: weight must be a positive float. got {weight=}"
|
||||||
|
)
|
||||||
|
|
||||||
|
self.probabilistic_functions[index].append(_wrap_bool_function(function))
|
||||||
|
self.probabilistic_weights[index].append(weight)
|
||||||
|
self.__has_probabilistic_functions = all(
|
||||||
|
len(functions) > 0 for functions in self.probabilistic_functions
|
||||||
|
)
|
||||||
|
return self
|
||||||
|
|
||||||
|
def SetProbabilisticFunction(
|
||||||
|
self,
|
||||||
|
index: int,
|
||||||
|
function_index: int,
|
||||||
|
function: Callable[Concatenate[bool, ...], bool],
|
||||||
|
) -> Self:
|
||||||
|
assert 0 <= index < self.size, (
|
||||||
|
f"Function error: cannot set function at index {index} - out of bound."
|
||||||
|
)
|
||||||
|
assert 0 <= function_index < len(self.probabilistic_functions[index]), (
|
||||||
|
f"Function error: node {index} has no function at position {function_index}."
|
||||||
|
)
|
||||||
|
assert len(inspect.signature(function).parameters) == self.size, (
|
||||||
|
f"Function error: Function arg amount mismatch. Given function takes {len(inspect.signature(function).parameters)} arguments, expected {self.size}"
|
||||||
|
)
|
||||||
|
|
||||||
|
self.probabilistic_functions[index][function_index] = _wrap_bool_function(
|
||||||
|
function
|
||||||
|
)
|
||||||
|
return self
|
||||||
|
|
||||||
|
def SetProbabilisticFunctionWeight(
|
||||||
|
self, index: int, function_index: int, weight: float
|
||||||
|
) -> Self:
|
||||||
|
assert 0 <= index < self.size, (
|
||||||
|
f"Weight error: cannot set weight at index {index} - out of bound."
|
||||||
|
)
|
||||||
|
assert 0 <= function_index < len(self.probabilistic_weights[index]), (
|
||||||
|
f"Weight error: node {index} has no function at position {function_index}."
|
||||||
|
)
|
||||||
|
assert type(weight) is float and weight > 0, (
|
||||||
|
f"Weight error: weight must be a positive float. got {weight=}"
|
||||||
|
)
|
||||||
|
|
||||||
|
self.probabilistic_weights[index][function_index] = weight
|
||||||
|
return self
|
||||||
|
|
||||||
|
def RemoveProbabilisticFunction(self, index: int, function_index: int) -> Self:
|
||||||
|
assert 0 <= index < self.size, (
|
||||||
|
f"Function error: cannot remove function at index {index} - out of bound."
|
||||||
|
)
|
||||||
|
assert 0 <= function_index < len(self.probabilistic_functions[index]), (
|
||||||
|
f"Function error: node {index} has no function at position {function_index}."
|
||||||
|
)
|
||||||
|
assert len(self.probabilistic_functions[index]) > 1, (
|
||||||
|
f"Function error: node {index} must keep at least one probabilistic function."
|
||||||
|
)
|
||||||
|
|
||||||
|
del self.probabilistic_functions[index][function_index]
|
||||||
|
del self.probabilistic_weights[index][function_index]
|
||||||
|
self.__has_probabilistic_functions = all(
|
||||||
|
len(functions) > 0 for functions in self.probabilistic_functions
|
||||||
|
)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def UseSynchronousScheme(self) -> Self:
|
def UseSynchronousScheme(self) -> Self:
|
||||||
@@ -127,16 +220,9 @@ class BooleanNetwork:
|
|||||||
self.__has_update_scheme = True
|
self.__has_update_scheme = True
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def UseProbabilisticScheme(self, flip_chance: float) -> Self:
|
def UseProbabilisticScheme(self) -> Self:
|
||||||
if flip_chance is not None:
|
|
||||||
assert type(flip_chance) is float, (
|
|
||||||
f"Probabilistic error: given flip_chance is not a float: got {flip_chance}"
|
|
||||||
)
|
|
||||||
self.flip_chance = flip_chance
|
|
||||||
|
|
||||||
self.updateScheme = "probabilistic"
|
self.updateScheme = "probabilistic"
|
||||||
self.__has_update_scheme = True
|
self.__has_update_scheme = True
|
||||||
self.__has_flip_chance = True
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def __synchronous_update(self) -> None:
|
def __synchronous_update(self) -> None:
|
||||||
@@ -150,15 +236,21 @@ class BooleanNetwork:
|
|||||||
self.nodes[i] = self.functions[i](*self.nodes)
|
self.nodes[i] = self.functions[i](*self.nodes)
|
||||||
|
|
||||||
def __asynchronous_random_update(self) -> None:
|
def __asynchronous_random_update(self) -> None:
|
||||||
index = random.randrange(0, self.size)
|
index = random.choices(
|
||||||
|
range(self.size), weights=self.node_selection_weights, k=1
|
||||||
|
)[0]
|
||||||
self.nodes[index] = self.functions[index](*self.nodes)
|
self.nodes[index] = self.functions[index](*self.nodes)
|
||||||
|
|
||||||
def __probabilistic_update(self) -> None:
|
def __probabilistic_update(self) -> None:
|
||||||
self.__synchronous_update()
|
temp = list()
|
||||||
for i in range(self.size):
|
for i in range(self.size):
|
||||||
rng = random.random()
|
chosen = random.choices(
|
||||||
if rng <= self.flip_chance:
|
self.probabilistic_functions[i],
|
||||||
self.nodes[i] = not self.nodes[i]
|
weights=self.probabilistic_weights[i],
|
||||||
|
k=1,
|
||||||
|
)[0]
|
||||||
|
temp.append(chosen(*self.nodes))
|
||||||
|
self.nodes = temp
|
||||||
|
|
||||||
def SetState(self, state: str | list[bool] | tuple[bool, ...]) -> Self:
|
def SetState(self, state: str | list[bool] | tuple[bool, ...]) -> Self:
|
||||||
assert isinstance(state, (str, list, tuple)), (
|
assert isinstance(state, (str, list, tuple)), (
|
||||||
@@ -192,7 +284,9 @@ class BooleanNetwork:
|
|||||||
assert type(n) is int and n >= 0, (
|
assert type(n) is int and n >= 0, (
|
||||||
f"Update error: amount of updates must be an integer and positive. got {n=}"
|
f"Update error: amount of updates must be an integer and positive. got {n=}"
|
||||||
)
|
)
|
||||||
assert self.__has_update_functions, "Update error: no update functions defined"
|
assert self.updateScheme == "probabilistic" or self.__has_update_functions, (
|
||||||
|
"Update error: no update functions defined"
|
||||||
|
)
|
||||||
assert self.__has_update_scheme, "Update error: no update scheme defined"
|
assert self.__has_update_scheme, "Update error: no update scheme defined"
|
||||||
assert type(verbose) is bool, "Update error: verbose must be a bool"
|
assert type(verbose) is bool, "Update error: verbose must be a bool"
|
||||||
assert type(writeToFile) is bool, "Update error: writeToFile must be a bool"
|
assert type(writeToFile) is bool, "Update error: writeToFile must be a bool"
|
||||||
@@ -208,7 +302,9 @@ class BooleanNetwork:
|
|||||||
case "asynchronous_random":
|
case "asynchronous_random":
|
||||||
selected_update = self.__asynchronous_random_update
|
selected_update = self.__asynchronous_random_update
|
||||||
case "probabilistic":
|
case "probabilistic":
|
||||||
assert self.__has_flip_chance, "Update error: no flip_chance defined"
|
assert self.__has_probabilistic_functions, (
|
||||||
|
"Update error: no probabilistic functions defined for every node"
|
||||||
|
)
|
||||||
selected_update = self.__probabilistic_update
|
selected_update = self.__probabilistic_update
|
||||||
case _:
|
case _:
|
||||||
raise Exception("Update error: update scheme selection went wrong")
|
raise Exception("Update error: update scheme selection went wrong")
|
||||||
@@ -261,36 +357,37 @@ class BooleanNetwork:
|
|||||||
matrix: np.ndarray = np.zeros((dimension, dimension))
|
matrix: np.ndarray = np.zeros((dimension, dimension))
|
||||||
|
|
||||||
if self.updateScheme == "probabilistic":
|
if self.updateScheme == "probabilistic":
|
||||||
flipChance = self.flip_chance
|
|
||||||
self.UseSynchronousScheme()
|
|
||||||
for i, state in enumerate(product((False, True), repeat=self.size)):
|
for i, state in enumerate(product((False, True), repeat=self.size)):
|
||||||
self.SetState(state)
|
choice_ranges = [
|
||||||
self.Update()
|
range(len(self.probabilistic_functions[n]))
|
||||||
for flips in product((False, True), repeat=self.size):
|
for n in range(self.size)
|
||||||
flipped = int(
|
]
|
||||||
"".join(
|
for combo in product(*choice_ranges):
|
||||||
str(
|
|
||||||
int(
|
|
||||||
self.nodes[j] if not flips[j] else not self.nodes[j]
|
|
||||||
)
|
|
||||||
)
|
|
||||||
for j in range(self.size)
|
|
||||||
),
|
|
||||||
2,
|
|
||||||
)
|
|
||||||
prob = np.float64(1)
|
prob = np.float64(1)
|
||||||
for flip in flips:
|
result: list[bool] = []
|
||||||
prob *= flipChance if flip else 1 - flipChance
|
for n in range(self.size):
|
||||||
matrix[i][flipped] = prob
|
weights = self.probabilistic_weights[n]
|
||||||
self.UseProbabilisticScheme(flipChance)
|
total_weight = sum(weights)
|
||||||
|
chosen_index = combo[n]
|
||||||
|
prob *= weights[chosen_index] / total_weight
|
||||||
|
result.append(
|
||||||
|
self.probabilistic_functions[n][chosen_index](*state)
|
||||||
|
)
|
||||||
|
result_index = int(
|
||||||
|
"".join(str(int(b)) for b in result), 2
|
||||||
|
)
|
||||||
|
matrix[i][result_index] += prob
|
||||||
return matrix
|
return matrix
|
||||||
|
|
||||||
if self.updateScheme == "asynchronous_random":
|
if self.updateScheme == "asynchronous_random":
|
||||||
|
total_weight = sum(self.node_selection_weights)
|
||||||
for i, state in enumerate(product((False, True), repeat=self.size)):
|
for i, state in enumerate(product((False, True), repeat=self.size)):
|
||||||
for j in range(self.size):
|
for j in range(self.size):
|
||||||
self.SetState(state)
|
self.SetState(state)
|
||||||
self.nodes[j] = self.functions[j](*self.nodes)
|
self.nodes[j] = self.functions[j](*self.nodes)
|
||||||
matrix[i][int(self.state, 2)] += np.float64(1) / self.size
|
matrix[i][int(self.state, 2)] += (
|
||||||
|
np.float64(self.node_selection_weights[j]) / total_weight
|
||||||
|
)
|
||||||
return matrix
|
return matrix
|
||||||
|
|
||||||
for i, state in enumerate(product((False, True), repeat=self.size)):
|
for i, state in enumerate(product((False, True), repeat=self.size)):
|
||||||
|
|||||||
BIN
finished-docs/Boolean Network & Update Schemes.pptx
Normal file
|
Before Width: | Height: | Size: 227 KiB After Width: | Height: | Size: 227 KiB |
0
IEEE-conference-template.pdf → paper-source/IEEE-conference-template.pdf
Executable file → Normal file
@@ -1,447 +1,447 @@
|
|||||||
|
|
||||||
IEEEabrv.bib
|
IEEEabrv.bib
|
||||||
V1.12 (2007/01/11)
|
V1.12 (2007/01/11)
|
||||||
Copyright (c) 2002-2007 by Michael Shell
|
Copyright (c) 2002-2007 by Michael Shell
|
||||||
See: http://www.michaelshell.org/
|
See: http://www.michaelshell.org/
|
||||||
for current contact information.
|
for current contact information.
|
||||||
|
|
||||||
BibTeX bibliography string definitions of the ABBREVIATED titles of
|
BibTeX bibliography string definitions of the ABBREVIATED titles of
|
||||||
IEEE journals and magazines and online publications.
|
IEEE journals and magazines and online publications.
|
||||||
|
|
||||||
This file is designed for bibliography styles that require
|
This file is designed for bibliography styles that require
|
||||||
abbreviated titles and is not for use in bibliographies that
|
abbreviated titles and is not for use in bibliographies that
|
||||||
require full-length titles.
|
require full-length titles.
|
||||||
|
|
||||||
Support sites:
|
Support sites:
|
||||||
http://www.michaelshell.org/tex/ieeetran/
|
http://www.michaelshell.org/tex/ieeetran/
|
||||||
http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/
|
http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/
|
||||||
and/or
|
and/or
|
||||||
http://www.ieee.org/
|
http://www.ieee.org/
|
||||||
|
|
||||||
Special thanks to Laura Hyslop and ken Rawson of IEEE for their help
|
Special thanks to Laura Hyslop and ken Rawson of IEEE for their help
|
||||||
in obtaining the information needed to compile this file. Also,
|
in obtaining the information needed to compile this file. Also,
|
||||||
Volker Kuhlmann and Moritz Borgmann kindly provided some corrections
|
Volker Kuhlmann and Moritz Borgmann kindly provided some corrections
|
||||||
and additions.
|
and additions.
|
||||||
|
|
||||||
*************************************************************************
|
*************************************************************************
|
||||||
Legal Notice:
|
Legal Notice:
|
||||||
This code is offered as-is without any warranty either expressed or
|
This code is offered as-is without any warranty either expressed or
|
||||||
implied; without even the implied warranty of MERCHANTABILITY or
|
implied; without even the implied warranty of MERCHANTABILITY or
|
||||||
FITNESS FOR A PARTICULAR PURPOSE!
|
FITNESS FOR A PARTICULAR PURPOSE!
|
||||||
User assumes all risk.
|
User assumes all risk.
|
||||||
In no event shall IEEE or any contributor to this code be liable for
|
In no event shall IEEE or any contributor to this code be liable for
|
||||||
any damages or losses, including, but not limited to, incidental,
|
any damages or losses, including, but not limited to, incidental,
|
||||||
consequential, or any other damages, resulting from the use or misuse
|
consequential, or any other damages, resulting from the use or misuse
|
||||||
of any information contained here.
|
of any information contained here.
|
||||||
|
|
||||||
All comments are the opinions of their respective authors and are not
|
All comments are the opinions of their respective authors and are not
|
||||||
necessarily endorsed by the IEEE.
|
necessarily endorsed by the IEEE.
|
||||||
|
|
||||||
This work is distributed under the LaTeX Project Public License (LPPL)
|
This work is distributed under the LaTeX Project Public License (LPPL)
|
||||||
( http://www.latex-project.org/ ) version 1.3, and may be freely used,
|
( http://www.latex-project.org/ ) version 1.3, and may be freely used,
|
||||||
distributed and modified. A copy of the LPPL, version 1.3, is included
|
distributed and modified. A copy of the LPPL, version 1.3, is included
|
||||||
in the base LaTeX documentation of all distributions of LaTeX released
|
in the base LaTeX documentation of all distributions of LaTeX released
|
||||||
2003/12/01 or later.
|
2003/12/01 or later.
|
||||||
Retain all contribution notices and credits.
|
Retain all contribution notices and credits.
|
||||||
** Modified files should be clearly indicated as such, including **
|
** Modified files should be clearly indicated as such, including **
|
||||||
** renaming them and changing author support contact information. **
|
** renaming them and changing author support contact information. **
|
||||||
|
|
||||||
File list of work: IEEEabrv.bib, IEEEfull.bib, IEEEexample.bib,
|
File list of work: IEEEabrv.bib, IEEEfull.bib, IEEEexample.bib,
|
||||||
IEEEtran.bst, IEEEtranS.bst, IEEEtranSA.bst,
|
IEEEtran.bst, IEEEtranS.bst, IEEEtranSA.bst,
|
||||||
IEEEtranN.bst, IEEEtranSN.bst, IEEEtran_bst_HOWTO.pdf
|
IEEEtranN.bst, IEEEtranSN.bst, IEEEtran_bst_HOWTO.pdf
|
||||||
*************************************************************************
|
*************************************************************************
|
||||||
|
|
||||||
|
|
||||||
USAGE:
|
USAGE:
|
||||||
|
|
||||||
\bibliographystyle{mybstfile}
|
\bibliographystyle{mybstfile}
|
||||||
\bibliography{IEEEabrv,mybibfile}
|
\bibliography{IEEEabrv,mybibfile}
|
||||||
|
|
||||||
where the IEEE titles in the .bib database entries use the strings
|
where the IEEE titles in the .bib database entries use the strings
|
||||||
defined here. e.g.,
|
defined here. e.g.,
|
||||||
|
|
||||||
|
|
||||||
journal = IEEE_J_AC,
|
journal = IEEE_J_AC,
|
||||||
|
|
||||||
|
|
||||||
to yield "{IEEE} Trans. Automat. Contr."
|
to yield "{IEEE} Trans. Automat. Contr."
|
||||||
|
|
||||||
|
|
||||||
IEEE uses abbreviated journal titles in their bibliographies -
|
IEEE uses abbreviated journal titles in their bibliographies -
|
||||||
this file is suitable for work that is to be submitted to the IEEE.
|
this file is suitable for work that is to be submitted to the IEEE.
|
||||||
|
|
||||||
|
|
||||||
For work that requires full-length titles, you should use the full
|
For work that requires full-length titles, you should use the full
|
||||||
titles provided in the companion file, IEEEfull.bib.
|
titles provided in the companion file, IEEEfull.bib.
|
||||||
|
|
||||||
|
|
||||||
** NOTES **
|
** NOTES **
|
||||||
|
|
||||||
1. Journals have been grouped according to subject in order to make it
|
1. Journals have been grouped according to subject in order to make it
|
||||||
easier to locate and extract the definitions for related journals -
|
easier to locate and extract the definitions for related journals -
|
||||||
as most works use references that are confined to a single topic.
|
as most works use references that are confined to a single topic.
|
||||||
Magazines are listed in straight alphabetical order.
|
Magazines are listed in straight alphabetical order.
|
||||||
|
|
||||||
2. String names are closely based on IEEE's own internal acronyms.
|
2. String names are closely based on IEEE's own internal acronyms.
|
||||||
|
|
||||||
3. Abbreviations follow IEEE's style.
|
3. Abbreviations follow IEEE's style.
|
||||||
|
|
||||||
4. Older, out-of-print IEEE titles are included (but not including titles
|
4. Older, out-of-print IEEE titles are included (but not including titles
|
||||||
dating prior to IEEE's formation from the IRE and AIEE in 1963).
|
dating prior to IEEE's formation from the IRE and AIEE in 1963).
|
||||||
|
|
||||||
5. The following NEW/current journal definitions have been disabled because
|
5. The following NEW/current journal definitions have been disabled because
|
||||||
their abbreviations have not yet been verified:
|
their abbreviations have not yet been verified:
|
||||||
|
|
||||||
STRING{IEEE_J_CBB = "{IEEE/ACM} Trans. Comput. Biology Bioinformatics"}
|
STRING{IEEE_J_CBB = "{IEEE/ACM} Trans. Comput. Biology Bioinformatics"}
|
||||||
STRING{IEEE_J_CJECE = "Canadian J. Elect. Comput. Eng."}
|
STRING{IEEE_J_CJECE = "Canadian J. Elect. Comput. Eng."}
|
||||||
STRING{IEEE_J_DSC = "{IEEE} Trans. Dependable Secure Comput."}
|
STRING{IEEE_J_DSC = "{IEEE} Trans. Dependable Secure Comput."}
|
||||||
STRING{IEEE_O_DSO = "{IEEE} Distrib. Syst. Online"}
|
STRING{IEEE_O_DSO = "{IEEE} Distrib. Syst. Online"}
|
||||||
|
|
||||||
6. The following OLD journal definitions have been disabled because
|
6. The following OLD journal definitions have been disabled because
|
||||||
their abbreviations have not yet been found/verified:
|
their abbreviations have not yet been found/verified:
|
||||||
|
|
||||||
STRING{IEEE_J_BCTV = "{IEEE} Trans. Broadcast Television Receivers"}
|
STRING{IEEE_J_BCTV = "{IEEE} Trans. Broadcast Television Receivers"}
|
||||||
STRING{IEEE_J_EWS = "{IEEE} Trans. Eng. Writing Speech"}
|
STRING{IEEE_J_EWS = "{IEEE} Trans. Eng. Writing Speech"}
|
||||||
|
|
||||||
If you know what the proper abbreviation is for a string in #5 or #6 above,
|
If you know what the proper abbreviation is for a string in #5 or #6 above,
|
||||||
email me and I will correct them in the next release.
|
email me and I will correct them in the next release.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
IEEE Journals
|
IEEE Journals
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
aerospace and military
|
aerospace and military
|
||||||
@STRING{IEEE_J_AES = "{IEEE} Trans. Aerosp. Electron. Syst."}
|
@STRING{IEEE_J_AES = "{IEEE} Trans. Aerosp. Electron. Syst."}
|
||||||
@STRING{IEEE_J_ANE = "{IEEE} Trans. Aerosp. Navig. Electron."}
|
@STRING{IEEE_J_ANE = "{IEEE} Trans. Aerosp. Navig. Electron."}
|
||||||
@STRING{IEEE_J_ANNE = "{IEEE} Trans. Aeronaut. Navig. Electron."}
|
@STRING{IEEE_J_ANNE = "{IEEE} Trans. Aeronaut. Navig. Electron."}
|
||||||
@STRING{IEEE_J_AS = "{IEEE} Trans. Aerosp."}
|
@STRING{IEEE_J_AS = "{IEEE} Trans. Aerosp."}
|
||||||
@STRING{IEEE_J_AIRE = "{IEEE} Trans. Airborne Electron."}
|
@STRING{IEEE_J_AIRE = "{IEEE} Trans. Airborne Electron."}
|
||||||
@STRING{IEEE_J_MIL = "{IEEE} Trans. Mil. Electron."}
|
@STRING{IEEE_J_MIL = "{IEEE} Trans. Mil. Electron."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
autos, transportation and vehicles (non-aerospace)
|
autos, transportation and vehicles (non-aerospace)
|
||||||
@STRING{IEEE_J_ITS = "{IEEE} Trans. Intell. Transp. Syst."}
|
@STRING{IEEE_J_ITS = "{IEEE} Trans. Intell. Transp. Syst."}
|
||||||
@STRING{IEEE_J_VT = "{IEEE} Trans. Veh. Technol."}
|
@STRING{IEEE_J_VT = "{IEEE} Trans. Veh. Technol."}
|
||||||
@STRING{IEEE_J_VC = "{IEEE} Trans. Veh. Commun."}
|
@STRING{IEEE_J_VC = "{IEEE} Trans. Veh. Commun."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
circuits, signals, systems, audio and controls
|
circuits, signals, systems, audio and controls
|
||||||
@STRING{IEEE_J_SPL = "{IEEE} Signal Process. Lett."}
|
@STRING{IEEE_J_SPL = "{IEEE} Signal Process. Lett."}
|
||||||
@STRING{IEEE_J_ASSP = "{IEEE} Trans. Acoust., Speech, Signal Process."}
|
@STRING{IEEE_J_ASSP = "{IEEE} Trans. Acoust., Speech, Signal Process."}
|
||||||
@STRING{IEEE_J_AU = "{IEEE} Trans. Audio"}
|
@STRING{IEEE_J_AU = "{IEEE} Trans. Audio"}
|
||||||
@STRING{IEEE_J_AUEA = "{IEEE} Trans. Audio Electroacoust."}
|
@STRING{IEEE_J_AUEA = "{IEEE} Trans. Audio Electroacoust."}
|
||||||
@STRING{IEEE_J_AC = "{IEEE} Trans. Autom. Control"}
|
@STRING{IEEE_J_AC = "{IEEE} Trans. Autom. Control"}
|
||||||
@STRING{IEEE_J_CAS = "{IEEE} Trans. Circuits Syst."}
|
@STRING{IEEE_J_CAS = "{IEEE} Trans. Circuits Syst."}
|
||||||
@STRING{IEEE_J_CASVT = "{IEEE} Trans. Circuits Syst. Video Technol."}
|
@STRING{IEEE_J_CASVT = "{IEEE} Trans. Circuits Syst. Video Technol."}
|
||||||
@STRING{IEEE_J_CASI = "{IEEE} Trans. Circuits Syst. {I}"}
|
@STRING{IEEE_J_CASI = "{IEEE} Trans. Circuits Syst. {I}"}
|
||||||
@STRING{IEEE_J_CASII = "{IEEE} Trans. Circuits Syst. {II}"}
|
@STRING{IEEE_J_CASII = "{IEEE} Trans. Circuits Syst. {II}"}
|
||||||
in 2004 CASI and CASII renamed part title to CASI_RP and CASII_EB, respectively.
|
in 2004 CASI and CASII renamed part title to CASI_RP and CASII_EB, respectively.
|
||||||
@STRING{IEEE_J_CASI_RP = "{IEEE} Trans. Circuits Syst. {I}"}
|
@STRING{IEEE_J_CASI_RP = "{IEEE} Trans. Circuits Syst. {I}"}
|
||||||
@STRING{IEEE_J_CASII_EB = "{IEEE} Trans. Circuits Syst. {II}"}
|
@STRING{IEEE_J_CASII_EB = "{IEEE} Trans. Circuits Syst. {II}"}
|
||||||
@STRING{IEEE_J_CT = "{IEEE} Trans. Circuit Theory"}
|
@STRING{IEEE_J_CT = "{IEEE} Trans. Circuit Theory"}
|
||||||
@STRING{IEEE_J_CST = "{IEEE} Trans. Control Syst. Technol."}
|
@STRING{IEEE_J_CST = "{IEEE} Trans. Control Syst. Technol."}
|
||||||
@STRING{IEEE_J_SP = "{IEEE} Trans. Signal Process."}
|
@STRING{IEEE_J_SP = "{IEEE} Trans. Signal Process."}
|
||||||
@STRING{IEEE_J_SU = "{IEEE} Trans. Sonics Ultrason."}
|
@STRING{IEEE_J_SU = "{IEEE} Trans. Sonics Ultrason."}
|
||||||
@STRING{IEEE_J_SAP = "{IEEE} Trans. Speech Audio Process."}
|
@STRING{IEEE_J_SAP = "{IEEE} Trans. Speech Audio Process."}
|
||||||
@STRING{IEEE_J_UE = "{IEEE} Trans. Ultrason. Eng."}
|
@STRING{IEEE_J_UE = "{IEEE} Trans. Ultrason. Eng."}
|
||||||
@STRING{IEEE_J_UFFC = "{IEEE} Trans. Ultrason., Ferroelectr., Freq. Control"}
|
@STRING{IEEE_J_UFFC = "{IEEE} Trans. Ultrason., Ferroelectr., Freq. Control"}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
communications
|
communications
|
||||||
@STRING{IEEE_J_COML = "{IEEE} Commun. Lett."}
|
@STRING{IEEE_J_COML = "{IEEE} Commun. Lett."}
|
||||||
@STRING{IEEE_J_JSAC = "{IEEE} J. Sel. Areas Commun."}
|
@STRING{IEEE_J_JSAC = "{IEEE} J. Sel. Areas Commun."}
|
||||||
@STRING{IEEE_J_COM = "{IEEE} Trans. Commun."}
|
@STRING{IEEE_J_COM = "{IEEE} Trans. Commun."}
|
||||||
@STRING{IEEE_J_COMT = "{IEEE} Trans. Commun. Technol."}
|
@STRING{IEEE_J_COMT = "{IEEE} Trans. Commun. Technol."}
|
||||||
@STRING{IEEE_J_WCOM = "{IEEE} Trans. Wireless Commun."}
|
@STRING{IEEE_J_WCOM = "{IEEE} Trans. Wireless Commun."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
components, packaging and manufacturing
|
components, packaging and manufacturing
|
||||||
@STRING{IEEE_J_ADVP = "{IEEE} Trans. Adv. Packag."}
|
@STRING{IEEE_J_ADVP = "{IEEE} Trans. Adv. Packag."}
|
||||||
@STRING{IEEE_J_CHMT = "{IEEE} Trans. Compon., Hybrids, Manuf. Technol."}
|
@STRING{IEEE_J_CHMT = "{IEEE} Trans. Compon., Hybrids, Manuf. Technol."}
|
||||||
@STRING{IEEE_J_CPMTA = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {A}"}
|
@STRING{IEEE_J_CPMTA = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {A}"}
|
||||||
@STRING{IEEE_J_CPMTB = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {B}"}
|
@STRING{IEEE_J_CPMTB = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {B}"}
|
||||||
@STRING{IEEE_J_CPMTC = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {C}"}
|
@STRING{IEEE_J_CPMTC = "{IEEE} Trans. Compon., Packag., Manuf. Technol. {C}"}
|
||||||
@STRING{IEEE_J_CAPT = "{IEEE} Trans. Compon. Packag. Technol."}
|
@STRING{IEEE_J_CAPT = "{IEEE} Trans. Compon. Packag. Technol."}
|
||||||
@STRING{IEEE_J_CAPTS = "{IEEE} Trans. Compon. Packag. Technol."}
|
@STRING{IEEE_J_CAPTS = "{IEEE} Trans. Compon. Packag. Technol."}
|
||||||
@STRING{IEEE_J_CPART = "{IEEE} Trans. Compon. Parts"}
|
@STRING{IEEE_J_CPART = "{IEEE} Trans. Compon. Parts"}
|
||||||
@STRING{IEEE_J_EPM = "{IEEE} Trans. Electron. Packag. Manuf."}
|
@STRING{IEEE_J_EPM = "{IEEE} Trans. Electron. Packag. Manuf."}
|
||||||
@STRING{IEEE_J_MFT = "{IEEE} Trans. Manuf. Technol."}
|
@STRING{IEEE_J_MFT = "{IEEE} Trans. Manuf. Technol."}
|
||||||
@STRING{IEEE_J_PHP = "{IEEE} Trans. Parts, Hybrids, Packag."}
|
@STRING{IEEE_J_PHP = "{IEEE} Trans. Parts, Hybrids, Packag."}
|
||||||
@STRING{IEEE_J_PMP = "{IEEE} Trans. Parts, Mater., Packag."}
|
@STRING{IEEE_J_PMP = "{IEEE} Trans. Parts, Mater., Packag."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CAD
|
CAD
|
||||||
@STRING{IEEE_J_TCAD = "{IEEE} J. Technol. Comput. Aided Design"}
|
@STRING{IEEE_J_TCAD = "{IEEE} J. Technol. Comput. Aided Design"}
|
||||||
@STRING{IEEE_J_CAD = "{IEEE} Trans. Comput.-Aided Design Integr. Circuits Syst."}
|
@STRING{IEEE_J_CAD = "{IEEE} Trans. Comput.-Aided Design Integr. Circuits Syst."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
coding, data, information, knowledge
|
coding, data, information, knowledge
|
||||||
@STRING{IEEE_J_IT = "{IEEE} Trans. Inf. Theory"}
|
@STRING{IEEE_J_IT = "{IEEE} Trans. Inf. Theory"}
|
||||||
@STRING{IEEE_J_KDE = "{IEEE} Trans. Knowl. Data Eng."}
|
@STRING{IEEE_J_KDE = "{IEEE} Trans. Knowl. Data Eng."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
computers, computation, networking and software
|
computers, computation, networking and software
|
||||||
@STRING{IEEE_J_C = "{IEEE} Trans. Comput."}
|
@STRING{IEEE_J_C = "{IEEE} Trans. Comput."}
|
||||||
@STRING{IEEE_J_CAL = "{IEEE} Comput. Archit. Lett."}
|
@STRING{IEEE_J_CAL = "{IEEE} Comput. Archit. Lett."}
|
||||||
disabled till definition is verified
|
disabled till definition is verified
|
||||||
STRING{IEEE_J_DSC = "{IEEE} Trans. Dependable Secure Comput."}
|
STRING{IEEE_J_DSC = "{IEEE} Trans. Dependable Secure Comput."}
|
||||||
@STRING{IEEE_J_ECOMP = "{IEEE} Trans. Electron. Comput."}
|
@STRING{IEEE_J_ECOMP = "{IEEE} Trans. Electron. Comput."}
|
||||||
@STRING{IEEE_J_EVC = "{IEEE} Trans. Evol. Comput."}
|
@STRING{IEEE_J_EVC = "{IEEE} Trans. Evol. Comput."}
|
||||||
@STRING{IEEE_J_FUZZ = "{IEEE} Trans. Fuzzy Syst."}
|
@STRING{IEEE_J_FUZZ = "{IEEE} Trans. Fuzzy Syst."}
|
||||||
@STRING{IEEE_J_IFS = "{IEEE} Trans. Inf. Forensics Security"}
|
@STRING{IEEE_J_IFS = "{IEEE} Trans. Inf. Forensics Security"}
|
||||||
@STRING{IEEE_J_MC = "{IEEE} Trans. Mobile Comput."}
|
@STRING{IEEE_J_MC = "{IEEE} Trans. Mobile Comput."}
|
||||||
@STRING{IEEE_J_NET = "{IEEE/ACM} Trans. Netw."}
|
@STRING{IEEE_J_NET = "{IEEE/ACM} Trans. Netw."}
|
||||||
@STRING{IEEE_J_NN = "{IEEE} Trans. Neural Netw."}
|
@STRING{IEEE_J_NN = "{IEEE} Trans. Neural Netw."}
|
||||||
@STRING{IEEE_J_PDS = "{IEEE} Trans. Parallel Distrib. Syst."}
|
@STRING{IEEE_J_PDS = "{IEEE} Trans. Parallel Distrib. Syst."}
|
||||||
@STRING{IEEE_J_SE = "{IEEE} Trans. Softw. Eng."}
|
@STRING{IEEE_J_SE = "{IEEE} Trans. Softw. Eng."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
computer graphics, imaging, and multimedia
|
computer graphics, imaging, and multimedia
|
||||||
@STRING{IEEE_J_JDT = "{IEEE/OSA} J. Display Technol."}
|
@STRING{IEEE_J_JDT = "{IEEE/OSA} J. Display Technol."}
|
||||||
@STRING{IEEE_J_IP = "{IEEE} Trans. Image Process."}
|
@STRING{IEEE_J_IP = "{IEEE} Trans. Image Process."}
|
||||||
@STRING{IEEE_J_MM = "{IEEE} Trans. Multimedia"}
|
@STRING{IEEE_J_MM = "{IEEE} Trans. Multimedia"}
|
||||||
@STRING{IEEE_J_VCG = "{IEEE} Trans. Vis. Comput. Graphics"}
|
@STRING{IEEE_J_VCG = "{IEEE} Trans. Vis. Comput. Graphics"}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cybernetics, ergonomics, robots, man-machine, and automation
|
cybernetics, ergonomics, robots, man-machine, and automation
|
||||||
@STRING{IEEE_J_ASE = "{IEEE} Trans. Autom. Sci. Eng."}
|
@STRING{IEEE_J_ASE = "{IEEE} Trans. Autom. Sci. Eng."}
|
||||||
@STRING{IEEE_J_JRA = "{IEEE} J. Robot. Autom."}
|
@STRING{IEEE_J_JRA = "{IEEE} J. Robot. Autom."}
|
||||||
@STRING{IEEE_J_HFE = "{IEEE} Trans. Hum. Factors Electron."}
|
@STRING{IEEE_J_HFE = "{IEEE} Trans. Hum. Factors Electron."}
|
||||||
@STRING{IEEE_J_MMS = "{IEEE} Trans. Man-Mach. Syst."}
|
@STRING{IEEE_J_MMS = "{IEEE} Trans. Man-Mach. Syst."}
|
||||||
@STRING{IEEE_J_PAMI = "{IEEE} Trans. Pattern Anal. Mach. Intell."}
|
@STRING{IEEE_J_PAMI = "{IEEE} Trans. Pattern Anal. Mach. Intell."}
|
||||||
in 1989 JRA became RA
|
in 1989 JRA became RA
|
||||||
in August 2004, RA split into ASE and RO
|
in August 2004, RA split into ASE and RO
|
||||||
@STRING{IEEE_J_RA = "{IEEE} Trans. Robot. Autom."}
|
@STRING{IEEE_J_RA = "{IEEE} Trans. Robot. Autom."}
|
||||||
@STRING{IEEE_J_RO = "{IEEE} Trans. Robot."}
|
@STRING{IEEE_J_RO = "{IEEE} Trans. Robot."}
|
||||||
@STRING{IEEE_J_SMC = "{IEEE} Trans. Syst., Man, Cybern."}
|
@STRING{IEEE_J_SMC = "{IEEE} Trans. Syst., Man, Cybern."}
|
||||||
@STRING{IEEE_J_SMCA = "{IEEE} Trans. Syst., Man, Cybern. {A}"}
|
@STRING{IEEE_J_SMCA = "{IEEE} Trans. Syst., Man, Cybern. {A}"}
|
||||||
@STRING{IEEE_J_SMCB = "{IEEE} Trans. Syst., Man, Cybern. {B}"}
|
@STRING{IEEE_J_SMCB = "{IEEE} Trans. Syst., Man, Cybern. {B}"}
|
||||||
@STRING{IEEE_J_SMCC = "{IEEE} Trans. Syst., Man, Cybern. {C}"}
|
@STRING{IEEE_J_SMCC = "{IEEE} Trans. Syst., Man, Cybern. {C}"}
|
||||||
@STRING{IEEE_J_SSC = "{IEEE} Trans. Syst. Sci. Cybern."}
|
@STRING{IEEE_J_SSC = "{IEEE} Trans. Syst. Sci. Cybern."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
earth, wind, fire and water
|
earth, wind, fire and water
|
||||||
@STRING{IEEE_J_GE = "{IEEE} Trans. Geosci. Electron."}
|
@STRING{IEEE_J_GE = "{IEEE} Trans. Geosci. Electron."}
|
||||||
@STRING{IEEE_J_GRS = "{IEEE} Trans. Geosci. Remote Sens."}
|
@STRING{IEEE_J_GRS = "{IEEE} Trans. Geosci. Remote Sens."}
|
||||||
@STRING{IEEE_J_GRSL = "{IEEE} Geosci. Remote Sens. Lett."}
|
@STRING{IEEE_J_GRSL = "{IEEE} Geosci. Remote Sens. Lett."}
|
||||||
@STRING{IEEE_J_OE = "{IEEE} J. Ocean. Eng."}
|
@STRING{IEEE_J_OE = "{IEEE} J. Ocean. Eng."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
education, engineering, history, IEEE, professional
|
education, engineering, history, IEEE, professional
|
||||||
disabled till definition is verified
|
disabled till definition is verified
|
||||||
STRING{IEEE_J_CJECE = "Canadian J. Elect. Comput. Eng."}
|
STRING{IEEE_J_CJECE = "Canadian J. Elect. Comput. Eng."}
|
||||||
@STRING{IEEE_J_PROC = "Proc. {IEEE}"}
|
@STRING{IEEE_J_PROC = "Proc. {IEEE}"}
|
||||||
@STRING{IEEE_J_EDU = "{IEEE} Trans. Educ."}
|
@STRING{IEEE_J_EDU = "{IEEE} Trans. Educ."}
|
||||||
@STRING{IEEE_J_EM = "{IEEE} Trans. Eng. Manag."}
|
@STRING{IEEE_J_EM = "{IEEE} Trans. Eng. Manag."}
|
||||||
disabled till definition is verified
|
disabled till definition is verified
|
||||||
STRING{IEEE_J_EWS = "{IEEE} Trans. Eng. Writing Speech"}
|
STRING{IEEE_J_EWS = "{IEEE} Trans. Eng. Writing Speech"}
|
||||||
@STRING{IEEE_J_PC = "{IEEE} Trans. Prof. Commun."}
|
@STRING{IEEE_J_PC = "{IEEE} Trans. Prof. Commun."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
electromagnetics, antennas, EMI, magnetics and microwave
|
electromagnetics, antennas, EMI, magnetics and microwave
|
||||||
@STRING{IEEE_J_AWPL = "{IEEE} Antennas Wireless Propag. Lett."}
|
@STRING{IEEE_J_AWPL = "{IEEE} Antennas Wireless Propag. Lett."}
|
||||||
@STRING{IEEE_J_MGWL = "{IEEE} Microw. Guided Wave Lett."}
|
@STRING{IEEE_J_MGWL = "{IEEE} Microw. Guided Wave Lett."}
|
||||||
IEEE seems to want "Compon." here, not "Comp."
|
IEEE seems to want "Compon." here, not "Comp."
|
||||||
@STRING{IEEE_J_MWCL = "{IEEE} Microw. Wireless Compon. Lett."}
|
@STRING{IEEE_J_MWCL = "{IEEE} Microw. Wireless Compon. Lett."}
|
||||||
@STRING{IEEE_J_AP = "{IEEE} Trans. Antennas Propag."}
|
@STRING{IEEE_J_AP = "{IEEE} Trans. Antennas Propag."}
|
||||||
@STRING{IEEE_J_EMC = "{IEEE} Trans. Electromagn. Compat."}
|
@STRING{IEEE_J_EMC = "{IEEE} Trans. Electromagn. Compat."}
|
||||||
@STRING{IEEE_J_MAG = "{IEEE} Trans. Magn."}
|
@STRING{IEEE_J_MAG = "{IEEE} Trans. Magn."}
|
||||||
@STRING{IEEE_J_MTT = "{IEEE} Trans. Microw. Theory Tech."}
|
@STRING{IEEE_J_MTT = "{IEEE} Trans. Microw. Theory Tech."}
|
||||||
@STRING{IEEE_J_RFI = "{IEEE} Trans. Radio Freq. Interference"}
|
@STRING{IEEE_J_RFI = "{IEEE} Trans. Radio Freq. Interference"}
|
||||||
@STRING{IEEE_J_TJMJ = "{IEEE} Transl. J. Magn. Jpn."}
|
@STRING{IEEE_J_TJMJ = "{IEEE} Transl. J. Magn. Jpn."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
energy and power
|
energy and power
|
||||||
@STRING{IEEE_J_EC = "{IEEE} Trans. Energy Convers."}
|
@STRING{IEEE_J_EC = "{IEEE} Trans. Energy Convers."}
|
||||||
@STRING{IEEE_J_PEL = "{IEEE} Power Electron. Lett."}
|
@STRING{IEEE_J_PEL = "{IEEE} Power Electron. Lett."}
|
||||||
@STRING{IEEE_J_PWRAS = "{IEEE} Trans. Power App. Syst."}
|
@STRING{IEEE_J_PWRAS = "{IEEE} Trans. Power App. Syst."}
|
||||||
@STRING{IEEE_J_PWRD = "{IEEE} Trans. Power Del."}
|
@STRING{IEEE_J_PWRD = "{IEEE} Trans. Power Del."}
|
||||||
@STRING{IEEE_J_PWRE = "{IEEE} Trans. Power Electron."}
|
@STRING{IEEE_J_PWRE = "{IEEE} Trans. Power Electron."}
|
||||||
@STRING{IEEE_J_PWRS = "{IEEE} Trans. Power Syst."}
|
@STRING{IEEE_J_PWRS = "{IEEE} Trans. Power Syst."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
industrial, commercial and consumer
|
industrial, commercial and consumer
|
||||||
@STRING{IEEE_J_APPIND = "{IEEE} Trans. Appl. Ind."}
|
@STRING{IEEE_J_APPIND = "{IEEE} Trans. Appl. Ind."}
|
||||||
@STRING{IEEE_J_BC = "{IEEE} Trans. Broadcast."}
|
@STRING{IEEE_J_BC = "{IEEE} Trans. Broadcast."}
|
||||||
disabled till definition is verified
|
disabled till definition is verified
|
||||||
STRING{IEEE_J_BCTV = "{IEEE} Trans. Broadcast Television Receivers"}
|
STRING{IEEE_J_BCTV = "{IEEE} Trans. Broadcast Television Receivers"}
|
||||||
@STRING{IEEE_J_CE = "{IEEE} Trans. Consum. Electron."}
|
@STRING{IEEE_J_CE = "{IEEE} Trans. Consum. Electron."}
|
||||||
@STRING{IEEE_J_IE = "{IEEE} Trans. Ind. Electron."}
|
@STRING{IEEE_J_IE = "{IEEE} Trans. Ind. Electron."}
|
||||||
@STRING{IEEE_J_IECI = "{IEEE} Trans. Ind. Electron. Contr. Instrum."}
|
@STRING{IEEE_J_IECI = "{IEEE} Trans. Ind. Electron. Contr. Instrum."}
|
||||||
@STRING{IEEE_J_IA = "{IEEE} Trans. Ind. Appl."}
|
@STRING{IEEE_J_IA = "{IEEE} Trans. Ind. Appl."}
|
||||||
@STRING{IEEE_J_IGA = "{IEEE} Trans. Ind. Gen. Appl."}
|
@STRING{IEEE_J_IGA = "{IEEE} Trans. Ind. Gen. Appl."}
|
||||||
@STRING{IEEE_J_IINF = "{IEEE} Trans. Ind. Informat."}
|
@STRING{IEEE_J_IINF = "{IEEE} Trans. Ind. Informat."}
|
||||||
@STRING{IEEE_J_PSE = "{IEEE} J. Product Safety Eng."}
|
@STRING{IEEE_J_PSE = "{IEEE} J. Product Safety Eng."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
instrumentation and measurement
|
instrumentation and measurement
|
||||||
@STRING{IEEE_J_IM = "{IEEE} Trans. Instrum. Meas."}
|
@STRING{IEEE_J_IM = "{IEEE} Trans. Instrum. Meas."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
insulation and materials
|
insulation and materials
|
||||||
@STRING{IEEE_J_JEM = "{IEEE/TMS} J. Electron. Mater."}
|
@STRING{IEEE_J_JEM = "{IEEE/TMS} J. Electron. Mater."}
|
||||||
@STRING{IEEE_J_DEI = "{IEEE} Trans. Dielectr. Electr. Insul."}
|
@STRING{IEEE_J_DEI = "{IEEE} Trans. Dielectr. Electr. Insul."}
|
||||||
@STRING{IEEE_J_EI = "{IEEE} Trans. Electr. Insul."}
|
@STRING{IEEE_J_EI = "{IEEE} Trans. Electr. Insul."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mechanical
|
mechanical
|
||||||
@STRING{IEEE_J_MECH = "{IEEE/ASME} Trans. Mechatronics"}
|
@STRING{IEEE_J_MECH = "{IEEE/ASME} Trans. Mechatronics"}
|
||||||
@STRING{IEEE_J_MEMS = "J. Microelectromech. Syst."}
|
@STRING{IEEE_J_MEMS = "J. Microelectromech. Syst."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
medical and biological
|
medical and biological
|
||||||
@STRING{IEEE_J_BME = "{IEEE} Trans. Biomed. Eng."}
|
@STRING{IEEE_J_BME = "{IEEE} Trans. Biomed. Eng."}
|
||||||
Note: The B-ME journal later dropped the hyphen and became the BME.
|
Note: The B-ME journal later dropped the hyphen and became the BME.
|
||||||
@STRING{IEEE_J_B-ME = "{IEEE} Trans. Bio-Med. Eng."}
|
@STRING{IEEE_J_B-ME = "{IEEE} Trans. Bio-Med. Eng."}
|
||||||
@STRING{IEEE_J_BMELC = "{IEEE} Trans. Bio-Med. Electron."}
|
@STRING{IEEE_J_BMELC = "{IEEE} Trans. Bio-Med. Electron."}
|
||||||
disabled till definition is verified
|
disabled till definition is verified
|
||||||
STRING{IEEE_J_CBB = "{IEEE/ACM} Trans. Comput. Biology Bioinformatics"}
|
STRING{IEEE_J_CBB = "{IEEE/ACM} Trans. Comput. Biology Bioinformatics"}
|
||||||
@STRING{IEEE_J_ITBM = "{IEEE} Trans. Inf. Technol. Biomed."}
|
@STRING{IEEE_J_ITBM = "{IEEE} Trans. Inf. Technol. Biomed."}
|
||||||
@STRING{IEEE_J_ME = "{IEEE} Trans. Med. Electron."}
|
@STRING{IEEE_J_ME = "{IEEE} Trans. Med. Electron."}
|
||||||
@STRING{IEEE_J_MI = "{IEEE} Trans. Med. Imag."}
|
@STRING{IEEE_J_MI = "{IEEE} Trans. Med. Imag."}
|
||||||
@STRING{IEEE_J_NB = "{IEEE} Trans. Nanobiosci."}
|
@STRING{IEEE_J_NB = "{IEEE} Trans. Nanobiosci."}
|
||||||
@STRING{IEEE_J_NSRE = "{IEEE} Trans. Neural Syst. Rehabil. Eng."}
|
@STRING{IEEE_J_NSRE = "{IEEE} Trans. Neural Syst. Rehabil. Eng."}
|
||||||
@STRING{IEEE_J_RE = "{IEEE} Trans. Rehabil. Eng."}
|
@STRING{IEEE_J_RE = "{IEEE} Trans. Rehabil. Eng."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
optics, lightwave and photonics
|
optics, lightwave and photonics
|
||||||
@STRING{IEEE_J_PTL = "{IEEE} Photon. Technol. Lett."}
|
@STRING{IEEE_J_PTL = "{IEEE} Photon. Technol. Lett."}
|
||||||
@STRING{IEEE_J_JLT = "J. Lightw. Technol."}
|
@STRING{IEEE_J_JLT = "J. Lightw. Technol."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
physics, electrons, nanotechnology, nuclear and quantum electronics
|
physics, electrons, nanotechnology, nuclear and quantum electronics
|
||||||
@STRING{IEEE_J_EDL = "{IEEE} Electron Device Lett."}
|
@STRING{IEEE_J_EDL = "{IEEE} Electron Device Lett."}
|
||||||
@STRING{IEEE_J_JQE = "{IEEE} J. Quantum Electron."}
|
@STRING{IEEE_J_JQE = "{IEEE} J. Quantum Electron."}
|
||||||
@STRING{IEEE_J_JSTQE = "{IEEE} J. Sel. Topics Quantum Electron."}
|
@STRING{IEEE_J_JSTQE = "{IEEE} J. Sel. Topics Quantum Electron."}
|
||||||
@STRING{IEEE_J_ED = "{IEEE} Trans. Electron Devices"}
|
@STRING{IEEE_J_ED = "{IEEE} Trans. Electron Devices"}
|
||||||
@STRING{IEEE_J_NANO = "{IEEE} Trans. Nanotechnol."}
|
@STRING{IEEE_J_NANO = "{IEEE} Trans. Nanotechnol."}
|
||||||
@STRING{IEEE_J_NS = "{IEEE} Trans. Nucl. Sci."}
|
@STRING{IEEE_J_NS = "{IEEE} Trans. Nucl. Sci."}
|
||||||
@STRING{IEEE_J_PS = "{IEEE} Trans. Plasma Sci."}
|
@STRING{IEEE_J_PS = "{IEEE} Trans. Plasma Sci."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
reliability
|
reliability
|
||||||
IEEE seems to want "Mat." here, not "Mater."
|
IEEE seems to want "Mat." here, not "Mater."
|
||||||
@STRING{IEEE_J_DMR = "{IEEE} Trans. Device Mater. Rel."}
|
@STRING{IEEE_J_DMR = "{IEEE} Trans. Device Mater. Rel."}
|
||||||
@STRING{IEEE_J_R = "{IEEE} Trans. Rel."}
|
@STRING{IEEE_J_R = "{IEEE} Trans. Rel."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
semiconductors, superconductors, electrochemical and solid state
|
semiconductors, superconductors, electrochemical and solid state
|
||||||
@STRING{IEEE_J_ESSL = "{IEEE/ECS} Electrochem. Solid-State Lett."}
|
@STRING{IEEE_J_ESSL = "{IEEE/ECS} Electrochem. Solid-State Lett."}
|
||||||
@STRING{IEEE_J_JSSC = "{IEEE} J. Solid-State Circuits"}
|
@STRING{IEEE_J_JSSC = "{IEEE} J. Solid-State Circuits"}
|
||||||
@STRING{IEEE_J_ASC = "{IEEE} Trans. Appl. Supercond."}
|
@STRING{IEEE_J_ASC = "{IEEE} Trans. Appl. Supercond."}
|
||||||
@STRING{IEEE_J_SM = "{IEEE} Trans. Semicond. Manuf."}
|
@STRING{IEEE_J_SM = "{IEEE} Trans. Semicond. Manuf."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sensors
|
sensors
|
||||||
@STRING{IEEE_J_SENSOR = "{IEEE} Sensors J."}
|
@STRING{IEEE_J_SENSOR = "{IEEE} Sensors J."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
VLSI
|
VLSI
|
||||||
@STRING{IEEE_J_VLSI = "{IEEE} Trans. {VLSI} Syst."}
|
@STRING{IEEE_J_VLSI = "{IEEE} Trans. {VLSI} Syst."}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
IEEE Magazines
|
IEEE Magazines
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@STRING{IEEE_M_AES = "{IEEE} Aerosp. Electron. Syst. Mag."}
|
@STRING{IEEE_M_AES = "{IEEE} Aerosp. Electron. Syst. Mag."}
|
||||||
@STRING{IEEE_M_HIST = "{IEEE} Ann. Hist. Comput."}
|
@STRING{IEEE_M_HIST = "{IEEE} Ann. Hist. Comput."}
|
||||||
@STRING{IEEE_M_AP = "{IEEE} Antennas Propag. Mag."}
|
@STRING{IEEE_M_AP = "{IEEE} Antennas Propag. Mag."}
|
||||||
@STRING{IEEE_M_ASSP = "{IEEE} {ASSP} Mag."}
|
@STRING{IEEE_M_ASSP = "{IEEE} {ASSP} Mag."}
|
||||||
@STRING{IEEE_M_CD = "{IEEE} Circuits Devices Mag."}
|
@STRING{IEEE_M_CD = "{IEEE} Circuits Devices Mag."}
|
||||||
@STRING{IEEE_M_CAS = "{IEEE} Circuits Syst. Mag."}
|
@STRING{IEEE_M_CAS = "{IEEE} Circuits Syst. Mag."}
|
||||||
@STRING{IEEE_M_COM = "{IEEE} Commun. Mag."}
|
@STRING{IEEE_M_COM = "{IEEE} Commun. Mag."}
|
||||||
@STRING{IEEE_M_COMSOC = "{IEEE} Commun. Soc. Mag."}
|
@STRING{IEEE_M_COMSOC = "{IEEE} Commun. Soc. Mag."}
|
||||||
@STRING{IEEE_M_CIM = "{IEEE} Comput. Intell. Mag."}
|
@STRING{IEEE_M_CIM = "{IEEE} Comput. Intell. Mag."}
|
||||||
CSEM changed to CSE in 1999
|
CSEM changed to CSE in 1999
|
||||||
@STRING{IEEE_M_CSE = "{IEEE} Comput. Sci. Eng."}
|
@STRING{IEEE_M_CSE = "{IEEE} Comput. Sci. Eng."}
|
||||||
@STRING{IEEE_M_CSEM = "{IEEE} Comput. Sci. Eng. Mag."}
|
@STRING{IEEE_M_CSEM = "{IEEE} Comput. Sci. Eng. Mag."}
|
||||||
@STRING{IEEE_M_C = "{IEEE} Computer"}
|
@STRING{IEEE_M_C = "{IEEE} Computer"}
|
||||||
@STRING{IEEE_M_CAP = "{IEEE} Comput. Appl. Power"}
|
@STRING{IEEE_M_CAP = "{IEEE} Comput. Appl. Power"}
|
||||||
@STRING{IEEE_M_CGA = "{IEEE} Comput. Graph. Appl."}
|
@STRING{IEEE_M_CGA = "{IEEE} Comput. Graph. Appl."}
|
||||||
@STRING{IEEE_M_CONC = "{IEEE} Concurrency"}
|
@STRING{IEEE_M_CONC = "{IEEE} Concurrency"}
|
||||||
@STRING{IEEE_M_CS = "{IEEE} Control Syst. Mag."}
|
@STRING{IEEE_M_CS = "{IEEE} Control Syst. Mag."}
|
||||||
@STRING{IEEE_M_DTC = "{IEEE} Des. Test. Comput."}
|
@STRING{IEEE_M_DTC = "{IEEE} Des. Test. Comput."}
|
||||||
@STRING{IEEE_M_EI = "{IEEE} Electr. Insul. Mag."}
|
@STRING{IEEE_M_EI = "{IEEE} Electr. Insul. Mag."}
|
||||||
@STRING{IEEE_M_ETR = "{IEEE} ElectroTechnol. Rev."}
|
@STRING{IEEE_M_ETR = "{IEEE} ElectroTechnol. Rev."}
|
||||||
@STRING{IEEE_M_EMB = "{IEEE} Eng. Med. Biol. Mag."}
|
@STRING{IEEE_M_EMB = "{IEEE} Eng. Med. Biol. Mag."}
|
||||||
@STRING{IEEE_M_EMR = "{IEEE} Eng. Manag. Rev."}
|
@STRING{IEEE_M_EMR = "{IEEE} Eng. Manag. Rev."}
|
||||||
@STRING{IEEE_M_EXP = "{IEEE} Expert"}
|
@STRING{IEEE_M_EXP = "{IEEE} Expert"}
|
||||||
@STRING{IEEE_M_IA = "{IEEE} Ind. Appl. Mag."}
|
@STRING{IEEE_M_IA = "{IEEE} Ind. Appl. Mag."}
|
||||||
@STRING{IEEE_M_IM = "{IEEE} Instrum. Meas. Mag."}
|
@STRING{IEEE_M_IM = "{IEEE} Instrum. Meas. Mag."}
|
||||||
@STRING{IEEE_M_IS = "{IEEE} Intell. Syst."}
|
@STRING{IEEE_M_IS = "{IEEE} Intell. Syst."}
|
||||||
@STRING{IEEE_M_IC = "{IEEE} Internet Comput."}
|
@STRING{IEEE_M_IC = "{IEEE} Internet Comput."}
|
||||||
@STRING{IEEE_M_ITP = "{IEEE} {IT} Prof."}
|
@STRING{IEEE_M_ITP = "{IEEE} {IT} Prof."}
|
||||||
@STRING{IEEE_M_MICRO = "{IEEE} Micro"}
|
@STRING{IEEE_M_MICRO = "{IEEE} Micro"}
|
||||||
@STRING{IEEE_M_MW = "{IEEE} Microw. Mag."}
|
@STRING{IEEE_M_MW = "{IEEE} Microw. Mag."}
|
||||||
@STRING{IEEE_M_MM = "{IEEE} Multimedia"}
|
@STRING{IEEE_M_MM = "{IEEE} Multimedia"}
|
||||||
@STRING{IEEE_M_NET = "{IEEE} Netw."}
|
@STRING{IEEE_M_NET = "{IEEE} Netw."}
|
||||||
IEEE's editorial manual lists "Pers. Commun.",
|
IEEE's editorial manual lists "Pers. Commun.",
|
||||||
but "Personal Commun. Mag." seems to be what is used in the journals
|
but "Personal Commun. Mag." seems to be what is used in the journals
|
||||||
@STRING{IEEE_M_PCOM = "{IEEE} Personal Commun. Mag."}
|
@STRING{IEEE_M_PCOM = "{IEEE} Personal Commun. Mag."}
|
||||||
@STRING{IEEE_M_POT = "{IEEE} Potentials"}
|
@STRING{IEEE_M_POT = "{IEEE} Potentials"}
|
||||||
CAP and PER merged to form PE in 2003
|
CAP and PER merged to form PE in 2003
|
||||||
@STRING{IEEE_M_PE = "{IEEE} Power Energy Mag."}
|
@STRING{IEEE_M_PE = "{IEEE} Power Energy Mag."}
|
||||||
@STRING{IEEE_M_PER = "{IEEE} Power Eng. Rev."}
|
@STRING{IEEE_M_PER = "{IEEE} Power Eng. Rev."}
|
||||||
@STRING{IEEE_M_PVC = "{IEEE} Pervasive Comput."}
|
@STRING{IEEE_M_PVC = "{IEEE} Pervasive Comput."}
|
||||||
@STRING{IEEE_M_RA = "{IEEE} Robot. Autom. Mag."}
|
@STRING{IEEE_M_RA = "{IEEE} Robot. Autom. Mag."}
|
||||||
@STRING{IEEE_M_SAP = "{IEEE} Security Privacy"}
|
@STRING{IEEE_M_SAP = "{IEEE} Security Privacy"}
|
||||||
@STRING{IEEE_M_SP = "{IEEE} Signal Process. Mag."}
|
@STRING{IEEE_M_SP = "{IEEE} Signal Process. Mag."}
|
||||||
@STRING{IEEE_M_S = "{IEEE} Softw."}
|
@STRING{IEEE_M_S = "{IEEE} Softw."}
|
||||||
@STRING{IEEE_M_SPECT = "{IEEE} Spectr."}
|
@STRING{IEEE_M_SPECT = "{IEEE} Spectr."}
|
||||||
@STRING{IEEE_M_TS = "{IEEE} Technol. Soc. Mag."}
|
@STRING{IEEE_M_TS = "{IEEE} Technol. Soc. Mag."}
|
||||||
@STRING{IEEE_M_VT = "{IEEE} Veh. Technol. Mag."}
|
@STRING{IEEE_M_VT = "{IEEE} Veh. Technol. Mag."}
|
||||||
@STRING{IEEE_M_WC = "{IEEE} Wireless Commun. Mag."}
|
@STRING{IEEE_M_WC = "{IEEE} Wireless Commun. Mag."}
|
||||||
@STRING{IEEE_M_TODAY = "Today's Engineer"}
|
@STRING{IEEE_M_TODAY = "Today's Engineer"}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
IEEE Online Publications
|
IEEE Online Publications
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@STRING{IEEE_O_CSTO = "{IEEE} Commun. Surveys Tuts."}
|
@STRING{IEEE_O_CSTO = "{IEEE} Commun. Surveys Tuts."}
|
||||||
disabled till definition is verified
|
disabled till definition is verified
|
||||||
STRING{IEEE_O_DSO = "{IEEE} Distrib. Syst. Online"}
|
STRING{IEEE_O_DSO = "{IEEE} Distrib. Syst. Online"}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
EOF
|
EOF
|
||||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 347 KiB After Width: | Height: | Size: 347 KiB |