its working! itsss woorking!!!
This commit is contained in:
9
.idea/dictionaries/allem.xml
generated
Normal file
9
.idea/dictionaries/allem.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<component name="ProjectDictionaryState">
|
||||||
|
<dictionary name="allem">
|
||||||
|
<words>
|
||||||
|
<w>coset</w>
|
||||||
|
<w>cosets</w>
|
||||||
|
<w>ngens</w>
|
||||||
|
</words>
|
||||||
|
</dictionary>
|
||||||
|
</component>
|
||||||
6
.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
6
.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<settings>
|
||||||
|
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||||
|
<version value="1.0" />
|
||||||
|
</settings>
|
||||||
|
</component>
|
||||||
7
.idea/misc.xml
generated
Normal file
7
.idea/misc.xml
generated
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="JavaScriptSettings">
|
||||||
|
<option name="languageLevel" value="ES6" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Pipenv (tc-fast)" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
||||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/tc-fast.iml" filepath="$PROJECT_DIR$/.idea/tc-fast.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
11
.idea/tc-fast.iml
generated
Normal file
11
.idea/tc-fast.iml
generated
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
<component name="TestRunnerService">
|
||||||
|
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
132
.idea/workspace.xml
generated
Normal file
132
.idea/workspace.xml
generated
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ChangeListManager">
|
||||||
|
<list default="true" id="d9bcf4a3-5128-4140-a8b2-98cb9536d00e" name="Default Changelist" comment="" />
|
||||||
|
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||||
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
|
</component>
|
||||||
|
<component name="DatabaseView">
|
||||||
|
<option name="SHOW_INTERMEDIATE" value="true" />
|
||||||
|
<option name="GROUP_DATA_SOURCES" value="true" />
|
||||||
|
<option name="GROUP_SCHEMA" value="true" />
|
||||||
|
<option name="GROUP_CONTENTS" value="false" />
|
||||||
|
<option name="SORT_POSITIONED" value="false" />
|
||||||
|
<option name="SHOW_EMPTY_GROUPS" value="false" />
|
||||||
|
<option name="AUTO_SCROLL_FROM_SOURCE" value="false" />
|
||||||
|
<option name="HIDDEN_KINDS">
|
||||||
|
<set />
|
||||||
|
</option>
|
||||||
|
<expand />
|
||||||
|
<select />
|
||||||
|
</component>
|
||||||
|
<component name="FileTemplateManagerImpl">
|
||||||
|
<option name="RECENT_TEMPLATES">
|
||||||
|
<list>
|
||||||
|
<option value="Python Script" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="ProjectId" id="1UrBzU5LBS1twz9GRL9IT4R6RuY" />
|
||||||
|
<component name="PropertiesComponent">
|
||||||
|
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||||
|
<property name="settings.editor.selected.configurable" value="preferences.lookFeel" />
|
||||||
|
</component>
|
||||||
|
<component name="RunDashboard">
|
||||||
|
<option name="ruleStates">
|
||||||
|
<list>
|
||||||
|
<RuleState>
|
||||||
|
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
|
||||||
|
</RuleState>
|
||||||
|
<RuleState>
|
||||||
|
<option name="name" value="StatusDashboardGroupingRule" />
|
||||||
|
</RuleState>
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="RunManager">
|
||||||
|
<configuration name="speedy_gonzolas" type="PythonConfigurationType" factoryName="Python" temporary="true">
|
||||||
|
<module name="tc-fast" />
|
||||||
|
<option name="INTERPRETER_OPTIONS" value="" />
|
||||||
|
<option name="PARENT_ENVS" value="true" />
|
||||||
|
<envs>
|
||||||
|
<env name="PYTHONUNBUFFERED" value="1" />
|
||||||
|
</envs>
|
||||||
|
<option name="SDK_HOME" value="" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||||
|
<option name="IS_MODULE_SDK" value="true" />
|
||||||
|
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||||
|
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||||
|
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
||||||
|
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/speedy_gonzolas.py" />
|
||||||
|
<option name="PARAMETERS" value="" />
|
||||||
|
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||||
|
<option name="EMULATE_TERMINAL" value="false" />
|
||||||
|
<option name="MODULE_MODE" value="false" />
|
||||||
|
<option name="REDIRECT_INPUT" value="false" />
|
||||||
|
<option name="INPUT_FILE" value="" />
|
||||||
|
<method v="2" />
|
||||||
|
</configuration>
|
||||||
|
<recent_temporary>
|
||||||
|
<list>
|
||||||
|
<item itemvalue="Python.speedy_gonzolas" />
|
||||||
|
</list>
|
||||||
|
</recent_temporary>
|
||||||
|
</component>
|
||||||
|
<component name="SvnConfiguration">
|
||||||
|
<configuration />
|
||||||
|
</component>
|
||||||
|
<component name="TaskManager">
|
||||||
|
<task active="true" id="Default" summary="Default task">
|
||||||
|
<changelist id="d9bcf4a3-5128-4140-a8b2-98cb9536d00e" name="Default Changelist" comment="" />
|
||||||
|
<created>1576105095293</created>
|
||||||
|
<option name="number" value="Default" />
|
||||||
|
<option name="presentableId" value="Default" />
|
||||||
|
<updated>1576105095293</updated>
|
||||||
|
<workItem from="1576105097677" duration="8305000" />
|
||||||
|
</task>
|
||||||
|
<servers />
|
||||||
|
</component>
|
||||||
|
<component name="TypeScriptGeneratedFilesManager">
|
||||||
|
<option name="version" value="1" />
|
||||||
|
</component>
|
||||||
|
<component name="XDebuggerManager">
|
||||||
|
<breakpoint-manager>
|
||||||
|
<breakpoints>
|
||||||
|
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
||||||
|
<url>file://$PROJECT_DIR$/speedy_gonzolas.py</url>
|
||||||
|
<line>90</line>
|
||||||
|
<option name="timeStamp" value="11" />
|
||||||
|
</line-breakpoint>
|
||||||
|
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
||||||
|
<url>file://$PROJECT_DIR$/speedy_gonzolas.py</url>
|
||||||
|
<line>100</line>
|
||||||
|
<option name="timeStamp" value="14" />
|
||||||
|
</line-breakpoint>
|
||||||
|
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
||||||
|
<url>file://$PROJECT_DIR$/speedy_gonzolas.py</url>
|
||||||
|
<line>145</line>
|
||||||
|
<option name="timeStamp" value="16" />
|
||||||
|
</line-breakpoint>
|
||||||
|
</breakpoints>
|
||||||
|
<default-breakpoints>
|
||||||
|
<breakpoint type="python-exception">
|
||||||
|
<properties notifyOnTerminate="true" exception="BaseException">
|
||||||
|
<option name="notifyOnTerminate" value="true" />
|
||||||
|
</properties>
|
||||||
|
</breakpoint>
|
||||||
|
</default-breakpoints>
|
||||||
|
</breakpoint-manager>
|
||||||
|
<watches-manager>
|
||||||
|
<configuration name="PythonConfigurationType">
|
||||||
|
<watch expression="cosets.data.__len__()" />
|
||||||
|
<watch expression="idx" />
|
||||||
|
</configuration>
|
||||||
|
</watches-manager>
|
||||||
|
</component>
|
||||||
|
<component name="com.intellij.coverage.CoverageDataManagerImpl">
|
||||||
|
<SUITE FILE_PATH="coverage/tc_fast$speedy_gonzolas.coverage" NAME="speedy_gonzolas Coverage Results" MODIFIED="1576113402777" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
11
Pipfile
Normal file
11
Pipfile
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[[source]]
|
||||||
|
name = "pypi"
|
||||||
|
url = "https://pypi.org/simple"
|
||||||
|
verify_ssl = true
|
||||||
|
|
||||||
|
[dev-packages]
|
||||||
|
|
||||||
|
[packages]
|
||||||
|
|
||||||
|
[requires]
|
||||||
|
python_version = "3.8"
|
||||||
172
speedy_gonzolas.py
Normal file
172
speedy_gonzolas.py
Normal file
@@ -0,0 +1,172 @@
|
|||||||
|
from typing import List
|
||||||
|
|
||||||
|
|
||||||
|
class Cosets:
|
||||||
|
def __init__(self, ngens, data=()):
|
||||||
|
assert len(data) % ngens == 0, 'invalid length starting row'
|
||||||
|
|
||||||
|
self.ngens = ngens
|
||||||
|
self.data = list(data)
|
||||||
|
self.len = len(data) // ngens
|
||||||
|
|
||||||
|
def add_row(self):
|
||||||
|
self.len += 1
|
||||||
|
self.data.extend(-1 for _ in range(self.ngens))
|
||||||
|
|
||||||
|
def put(self, idx, target):
|
||||||
|
coset, gen = divmod(idx, self.ngens)
|
||||||
|
self.data[idx] = target
|
||||||
|
self.data[target * self.ngens + gen] = coset
|
||||||
|
|
||||||
|
def get(self, idx):
|
||||||
|
return self.data[idx]
|
||||||
|
|
||||||
|
def __getitem__(self, key):
|
||||||
|
coset, gen = key
|
||||||
|
return self.data[coset * self.ngens + gen]
|
||||||
|
|
||||||
|
def __setitem__(self, key, target):
|
||||||
|
coset, gen = key
|
||||||
|
self.data[coset * self.ngens + gen] = target
|
||||||
|
self.data[target * self.ngens + gen] = coset
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
return self.len
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return '\n'.join(
|
||||||
|
f'{i // self.ngens:>3} | ' +
|
||||||
|
' '.join(
|
||||||
|
f'{e:>3}' for e in self.data[i:i + self.ngens])
|
||||||
|
for i in range(0, len(self.data), self.ngens))
|
||||||
|
|
||||||
|
|
||||||
|
class RelTable:
|
||||||
|
def __init__(self, gens: List[int], mul: int):
|
||||||
|
self.gens = gens
|
||||||
|
self.mul = mul
|
||||||
|
|
||||||
|
self.fam = []
|
||||||
|
self.gen = []
|
||||||
|
self.lst = []
|
||||||
|
|
||||||
|
def add_row(self):
|
||||||
|
idx = len(self.fam)
|
||||||
|
self.fam.append(-1)
|
||||||
|
self.gen.append(-1)
|
||||||
|
self.lst.append(-1)
|
||||||
|
return idx
|
||||||
|
|
||||||
|
|
||||||
|
def solve(cosets: Cosets, rel_tables: List[RelTable]):
|
||||||
|
if len(cosets) < 1:
|
||||||
|
cosets.add_row()
|
||||||
|
|
||||||
|
for rel in rel_tables:
|
||||||
|
idx = rel.add_row()
|
||||||
|
|
||||||
|
count = 0
|
||||||
|
for g in rel.gens:
|
||||||
|
if cosets.get(g) == 0:
|
||||||
|
count += 1
|
||||||
|
|
||||||
|
rel.fam[idx] = 0
|
||||||
|
rel.gen[idx] = 0
|
||||||
|
rel.lst[idx] = 0
|
||||||
|
|
||||||
|
if count == 1:
|
||||||
|
rel.gen[idx] = -1
|
||||||
|
|
||||||
|
idx = 0
|
||||||
|
while True:
|
||||||
|
while idx < len(cosets.data) and cosets.get(idx) >= 0:
|
||||||
|
idx += 1
|
||||||
|
|
||||||
|
if idx == len(cosets.data):
|
||||||
|
break
|
||||||
|
|
||||||
|
# print()
|
||||||
|
# print(cosets)
|
||||||
|
# print()
|
||||||
|
coset, gen = divmod(idx, cosets.ngens)
|
||||||
|
target = len(cosets)
|
||||||
|
|
||||||
|
cosets.add_row()
|
||||||
|
|
||||||
|
for rel in rel_tables:
|
||||||
|
rel.add_row()
|
||||||
|
|
||||||
|
facts = [(coset, gen)]
|
||||||
|
|
||||||
|
while facts:
|
||||||
|
coset, gen = facts.pop()
|
||||||
|
cosets[coset, gen] = target
|
||||||
|
|
||||||
|
for rel in rel_tables:
|
||||||
|
if gen in rel.gens and rel.fam[target] == -1:
|
||||||
|
rel.fam[target] = rel.fam[coset]
|
||||||
|
rel.gen[target] = rel.gen[coset] + 1
|
||||||
|
|
||||||
|
if rel.gen[coset] < 0:
|
||||||
|
rel.gen[target] -= 2
|
||||||
|
|
||||||
|
if rel.gen[target] == rel.mul: # forward learn
|
||||||
|
lst = rel.lst[rel.fam[target]]
|
||||||
|
gen_ = rel.gens[rel.gens[0] == gen]
|
||||||
|
facts.append((lst, gen_))
|
||||||
|
elif rel.gen[target] == -rel.mul: # stationary learn
|
||||||
|
gen_ = rel.gens[rel.gens[0] == gen]
|
||||||
|
facts.append((target, gen_))
|
||||||
|
elif rel.gen[target] == rel.mul - 1:
|
||||||
|
rel.lst[rel.fam[target]] = target
|
||||||
|
|
||||||
|
# print('=====================')
|
||||||
|
# for rel in rel_tables:
|
||||||
|
# print(rel.gens)
|
||||||
|
# print('fam', rel.fam)
|
||||||
|
# print('gen', rel.gen)
|
||||||
|
# print('lst', rel.lst)
|
||||||
|
# print()
|
||||||
|
|
||||||
|
facts.sort(reverse=True)
|
||||||
|
|
||||||
|
for rel in rel_tables:
|
||||||
|
if rel.fam[target] == -1:
|
||||||
|
rel.fam[target] = target
|
||||||
|
rel.gen[target] = 0
|
||||||
|
|
||||||
|
count = 0
|
||||||
|
for g in rel.gens:
|
||||||
|
if cosets[target, g] == target:
|
||||||
|
count += 1
|
||||||
|
|
||||||
|
if count == 1:
|
||||||
|
rel.gen[target] = -1
|
||||||
|
|
||||||
|
# print('=====================')
|
||||||
|
# for rel in rel_tables:
|
||||||
|
# print(rel.gens)
|
||||||
|
# print('fam', rel.fam)
|
||||||
|
# print('gen', rel.gen)
|
||||||
|
# print('lst', rel.lst)
|
||||||
|
# print()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
# cosets = Cosets(3)
|
||||||
|
# mults = [((0, 1), 50000), ((1, 2), 2), ((0, 2), 2)]
|
||||||
|
|
||||||
|
cosets = Cosets(4)
|
||||||
|
n = 100
|
||||||
|
mults = [((0, 1), 5), ((1, 2), 3), ((2, 3), 3),
|
||||||
|
((0, 2), 2), ((1, 3), 2), ((0, 3), 2)]
|
||||||
|
|
||||||
|
rel_tables = [RelTable(*args) for args in mults]
|
||||||
|
|
||||||
|
solve(cosets, rel_tables)
|
||||||
|
|
||||||
|
print(len(cosets))
|
||||||
|
if len(cosets) < 20:
|
||||||
|
print(cosets)
|
||||||
|
else:
|
||||||
|
print('--')
|
||||||
Reference in New Issue
Block a user