kececilayout 0.5.6__py3-none-any.whl → 0.5.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- kececilayout/__init__.py +6 -1
- kececilayout/_version.py +1 -3
- kececilayout/kececi_layout.py +282 -5
- {kececilayout-0.5.6.dist-info → kececilayout-0.5.7.dist-info}/METADATA +1 -1
- kececilayout-0.5.7.dist-info/RECORD +10 -0
- kececilayout-0.5.6.dist-info/RECORD +0 -10
- {kececilayout-0.5.6.dist-info → kececilayout-0.5.7.dist-info}/WHEEL +0 -0
- {kececilayout-0.5.6.dist-info → kececilayout-0.5.7.dist-info}/licenses/LICENSE +0 -0
- {kececilayout-0.5.6.dist-info → kececilayout-0.5.7.dist-info}/top_level.txt +0 -0
kececilayout/__init__.py
CHANGED
|
@@ -10,7 +10,7 @@ import inspect
|
|
|
10
10
|
import warnings
|
|
11
11
|
|
|
12
12
|
# Paket sürüm numarası
|
|
13
|
-
__version__ = "0.5.
|
|
13
|
+
__version__ = "0.5.7"
|
|
14
14
|
|
|
15
15
|
# =============================================================================
|
|
16
16
|
# OTOMATİK İÇE AKTARMA VE __all__ OLUŞTURMA
|
|
@@ -65,6 +65,8 @@ from .kececi_layout import ( # Veya fonksiyonların bulunduğu asıl modül
|
|
|
65
65
|
avg_edge_length,
|
|
66
66
|
_segments_intersect,
|
|
67
67
|
count_edge_crossings,
|
|
68
|
+
generate_complete_periodic_table,
|
|
69
|
+
load_element_data_from_python_dict,
|
|
68
70
|
|
|
69
71
|
# Drawing functions
|
|
70
72
|
draw_kececi,
|
|
@@ -121,6 +123,8 @@ __all__ = [
|
|
|
121
123
|
'avg_edge_length',
|
|
122
124
|
'_segments_intersect',
|
|
123
125
|
'count_edge_crossings',
|
|
126
|
+
'generate_complete_periodic_table',
|
|
127
|
+
'load_element_data_from_python_dict',
|
|
124
128
|
|
|
125
129
|
# Drawing functions
|
|
126
130
|
'draw_kececi',
|
|
@@ -177,3 +181,4 @@ def old_function_placeholder():
|
|
|
177
181
|
|
|
178
182
|
|
|
179
183
|
|
|
184
|
+
|
kececilayout/_version.py
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
# _version.py
|
|
2
2
|
|
|
3
|
-
__version__ = "0.5.
|
|
3
|
+
__version__ = "0.5.7"
|
|
4
4
|
__license__ = "AGPL3.0-or-later"
|
|
5
5
|
__description__ = "A deterministic node placement algorithm used in graph visualization. In this layout, nodes are arranged sequentially along a defined primary axis. Each subsequent node is then alternately offset along a secondary, perpendicular axis, typically moving to one side of the primary axis and then the other. Often, the magnitude of this secondary offset increases as nodes progress along the primary axis, creating a characteristic zig-zag or serpentine pattern."
|
|
6
6
|
__author__ = "Mehmet Keçeci"
|
|
7
7
|
__url__ = "https://github.com/WhiteSymmetry/kececilayout"
|
|
8
8
|
__docs__ = "https://github.com/WhiteSymmetry/kececilayout" # Opsiyonel: Dokümantasyon linki
|
|
9
9
|
__dependencies__ = ["python>=3.11"] # Diğer bağımlılıkları da ekleyebilirsiniz
|
|
10
|
-
|
|
11
|
-
|
kececilayout/kececi_layout.py
CHANGED
|
@@ -1558,29 +1558,306 @@ def _kececi_layout_3d_helix(nx_graph):
|
|
|
1558
1558
|
def kececi_layout_3d_helix_parametric(nx_graph, z_spacing=2.0, radius=5.0, turns=2.0):
|
|
1559
1559
|
"""
|
|
1560
1560
|
Parametric 3D helix layout for nodes. User can control spacing, radius, and number of turns.
|
|
1561
|
+
Fixed version with division by zero handling.
|
|
1562
|
+
|
|
1561
1563
|
Args:
|
|
1562
1564
|
nx_graph: NetworkX graph.
|
|
1563
1565
|
z_spacing (float): Vertical distance between consecutive nodes.
|
|
1564
1566
|
radius (float): Radius of the helix.
|
|
1565
1567
|
turns (float): Number of full turns the helix makes.
|
|
1568
|
+
|
|
1566
1569
|
Returns:
|
|
1567
1570
|
dict: {node_id: (x, y, z)}
|
|
1568
1571
|
"""
|
|
1569
1572
|
nodes = sorted(list(nx_graph.nodes()))
|
|
1570
1573
|
pos_3d = {}
|
|
1571
1574
|
total_nodes = len(nodes)
|
|
1575
|
+
|
|
1572
1576
|
if total_nodes == 0:
|
|
1577
|
+
print(f"Warning: Graph has {total_nodes} nodes!")
|
|
1573
1578
|
return pos_3d
|
|
1574
1579
|
|
|
1575
1580
|
total_angle = 2 * np.pi * turns
|
|
1581
|
+
|
|
1576
1582
|
for i, node_id in enumerate(nodes):
|
|
1577
1583
|
z = i * z_spacing
|
|
1578
|
-
|
|
1584
|
+
|
|
1585
|
+
# Division by zero fix for single node case
|
|
1586
|
+
if total_nodes > 1:
|
|
1587
|
+
angle = (i / (total_nodes - 1)) * total_angle
|
|
1588
|
+
else:
|
|
1589
|
+
angle = 0
|
|
1590
|
+
|
|
1579
1591
|
x = np.cos(angle) * radius
|
|
1580
1592
|
y = np.sin(angle) * radius
|
|
1581
1593
|
pos_3d[node_id] = (x, y, z)
|
|
1594
|
+
|
|
1582
1595
|
return pos_3d
|
|
1583
1596
|
|
|
1597
|
+
def load_element_data_from_python_dict(filename):
|
|
1598
|
+
"""Loads element data from a Python dictionary format file."""
|
|
1599
|
+
element_data = {}
|
|
1600
|
+
spectral_lines = {}
|
|
1601
|
+
|
|
1602
|
+
print(f"Loading file: {filename}")
|
|
1603
|
+
print(f"File exists: {os.path.exists(filename)}")
|
|
1604
|
+
|
|
1605
|
+
if not os.path.exists(filename):
|
|
1606
|
+
print(f"ERROR: File '{filename}' not found in directory: {os.getcwd()}")
|
|
1607
|
+
return element_data, spectral_lines
|
|
1608
|
+
|
|
1609
|
+
try:
|
|
1610
|
+
with open(filename, 'r', encoding='utf-8') as f:
|
|
1611
|
+
content = f.read()
|
|
1612
|
+
|
|
1613
|
+
# Find element_data dictionary
|
|
1614
|
+
element_data_match = re.search(r'element_data\s*=\s*\{([^}]+)\}', content, re.DOTALL)
|
|
1615
|
+
if element_data_match:
|
|
1616
|
+
element_data_str = element_data_match.group(0)
|
|
1617
|
+
print("Found element_data dictionary")
|
|
1618
|
+
|
|
1619
|
+
# generate a safe environment to evaluate the dictionary
|
|
1620
|
+
safe_dict = {}
|
|
1621
|
+
exec(element_data_str, {"__builtins__": {}}, safe_dict)
|
|
1622
|
+
|
|
1623
|
+
if 'element_data' in safe_dict:
|
|
1624
|
+
element_data = safe_dict['element_data']
|
|
1625
|
+
print(f"Successfully loaded {len(element_data)} elements")
|
|
1626
|
+
else:
|
|
1627
|
+
print("element_data not found in evaluated content")
|
|
1628
|
+
|
|
1629
|
+
# Manual parsing as fallback
|
|
1630
|
+
print("Attempting manual parsing...")
|
|
1631
|
+
lines = element_data_str.split('\n')
|
|
1632
|
+
for line in lines:
|
|
1633
|
+
line = line.strip()
|
|
1634
|
+
if ':' in line and '(' in line:
|
|
1635
|
+
# Parse line like: 1: ("H", 1),
|
|
1636
|
+
match = re.search(r'(\d+):\s*\("([^"]+)",\s*(\d+)\)', line)
|
|
1637
|
+
if match:
|
|
1638
|
+
key = int(match.group(1))
|
|
1639
|
+
symbol = match.group(2)
|
|
1640
|
+
atomic_num = int(match.group(3))
|
|
1641
|
+
element_data[key] = (symbol, atomic_num)
|
|
1642
|
+
|
|
1643
|
+
# Find spectral_lines dictionary if exists
|
|
1644
|
+
spectral_match = re.search(r'spectral_lines\s*=\s*\{([^}]+)\}', content, re.DOTALL)
|
|
1645
|
+
if spectral_match:
|
|
1646
|
+
spectral_str = spectral_match.group(0)
|
|
1647
|
+
print("Found spectral_lines dictionary")
|
|
1648
|
+
|
|
1649
|
+
safe_dict = {}
|
|
1650
|
+
exec(spectral_str, {"__builtins__": {}}, safe_dict)
|
|
1651
|
+
|
|
1652
|
+
if 'spectral_lines' in safe_dict:
|
|
1653
|
+
spectral_lines = safe_dict['spectral_lines']
|
|
1654
|
+
print(f"Successfully loaded {len(spectral_lines)} spectral lines")
|
|
1655
|
+
|
|
1656
|
+
# If no dictionaries found, try simple CSV format
|
|
1657
|
+
if not element_data:
|
|
1658
|
+
print("No dictionaries found, trying CSV format...")
|
|
1659
|
+
lines = content.split('\n')
|
|
1660
|
+
current_section = None
|
|
1661
|
+
|
|
1662
|
+
for line in lines:
|
|
1663
|
+
line = line.strip()
|
|
1664
|
+
if not line or line.startswith('#'):
|
|
1665
|
+
if "element" in line.lower():
|
|
1666
|
+
current_section = "element"
|
|
1667
|
+
elif "spectral" in line.lower():
|
|
1668
|
+
current_section = "spectral"
|
|
1669
|
+
continue
|
|
1670
|
+
|
|
1671
|
+
parts = [p.strip() for p in line.split(',')]
|
|
1672
|
+
if current_section == "element" and len(parts) >= 2:
|
|
1673
|
+
try:
|
|
1674
|
+
symbol = parts[0]
|
|
1675
|
+
atomic_number = int(parts[1])
|
|
1676
|
+
element_data[atomic_number] = (symbol, atomic_number)
|
|
1677
|
+
except:
|
|
1678
|
+
continue
|
|
1679
|
+
elif current_section == "spectral" and len(parts) >= 2:
|
|
1680
|
+
symbol = parts[0]
|
|
1681
|
+
wavelengths = []
|
|
1682
|
+
for wl in parts[1:]:
|
|
1683
|
+
if wl:
|
|
1684
|
+
try:
|
|
1685
|
+
wavelengths.append(float(wl))
|
|
1686
|
+
except:
|
|
1687
|
+
continue
|
|
1688
|
+
if wavelengths:
|
|
1689
|
+
spectral_lines[symbol] = wavelengths
|
|
1690
|
+
|
|
1691
|
+
except Exception as e:
|
|
1692
|
+
print(f"Error reading/parsing file: {str(e)}")
|
|
1693
|
+
import traceback
|
|
1694
|
+
traceback.print_exc()
|
|
1695
|
+
|
|
1696
|
+
print(f"\nTotal elements loaded: {len(element_data)}")
|
|
1697
|
+
print(f"Total spectral lines loaded: {len(spectral_lines)}")
|
|
1698
|
+
|
|
1699
|
+
if element_data:
|
|
1700
|
+
print("\nFirst 10 elements:")
|
|
1701
|
+
for i, (key, val) in enumerate(list(element_data.items())[:10]):
|
|
1702
|
+
print(f" {key}: {val}")
|
|
1703
|
+
|
|
1704
|
+
return element_data, spectral_lines
|
|
1705
|
+
|
|
1706
|
+
def generate_complete_periodic_table():
|
|
1707
|
+
"""generate a complete periodic table with all 118 elements."""
|
|
1708
|
+
print("Creating complete periodic table...")
|
|
1709
|
+
|
|
1710
|
+
periodic_elements = {
|
|
1711
|
+
1: ('H', 1), 2: ('He', 2), 3: ('Li', 3), 4: ('Be', 4), 5: ('B', 5),
|
|
1712
|
+
6: ('C', 6), 7: ('N', 7), 8: ('O', 8), 9: ('F', 9), 10: ('Ne', 10),
|
|
1713
|
+
11: ('Na', 11), 12: ('Mg', 12), 13: ('Al', 13), 14: ('Si', 14), 15: ('P', 15),
|
|
1714
|
+
16: ('S', 16), 17: ('Cl', 17), 18: ('Ar', 18), 19: ('K', 19), 20: ('Ca', 20),
|
|
1715
|
+
21: ('Sc', 21), 22: ('Ti', 22), 23: ('V', 23), 24: ('Cr', 24), 25: ('Mn', 25),
|
|
1716
|
+
26: ('Fe', 26), 27: ('Co', 27), 28: ('Ni', 28), 29: ('Cu', 29), 30: ('Zn', 30),
|
|
1717
|
+
31: ('Ga', 31), 32: ('Ge', 32), 33: ('As', 33), 34: ('Se', 34), 35: ('Br', 35),
|
|
1718
|
+
36: ('Kr', 36), 37: ('Rb', 37), 38: ('Sr', 38), 39: ('Y', 39), 40: ('Zr', 40),
|
|
1719
|
+
41: ('Nb', 41), 42: ('Mo', 42), 43: ('Tc', 43), 44: ('Ru', 44), 45: ('Rh', 45),
|
|
1720
|
+
46: ('Pd', 46), 47: ('Ag', 47), 48: ('Cd', 48), 49: ('In', 49), 50: ('Sn', 50),
|
|
1721
|
+
51: ('Sb', 51), 52: ('Te', 52), 53: ('I', 53), 54: ('Xe', 54), 55: ('Cs', 55),
|
|
1722
|
+
56: ('Ba', 56), 57: ('La', 57), 58: ('Ce', 58), 59: ('Pr', 59), 60: ('Nd', 60),
|
|
1723
|
+
61: ('Pm', 61), 62: ('Sm', 62), 63: ('Eu', 63), 64: ('Gd', 64), 65: ('Tb', 65),
|
|
1724
|
+
66: ('Dy', 66), 67: ('Ho', 67), 68: ('Er', 68), 69: ('Tm', 69), 70: ('Yb', 70),
|
|
1725
|
+
71: ('Lu', 71), 72: ('Hf', 72), 73: ('Ta', 73), 74: ('W', 74), 75: ('Re', 75),
|
|
1726
|
+
76: ('Os', 76), 77: ('Ir', 77), 78: ('Pt', 78), 79: ('Au', 79), 80: ('Hg', 80),
|
|
1727
|
+
81: ('Tl', 81), 82: ('Pb', 82), 83: ('Bi', 83), 84: ('Po', 84), 85: ('At', 85),
|
|
1728
|
+
86: ('Rn', 86), 87: ('Fr', 87), 88: ('Ra', 88), 89: ('Ac', 89), 90: ('Th', 90),
|
|
1729
|
+
91: ('Pa', 91), 92: ('U', 92), 93: ('Np', 93), 94: ('Pu', 94), 95: ('Am', 95),
|
|
1730
|
+
96: ('Cm', 96), 97: ('Bk', 97), 98: ('Cf', 98), 99: ('Es', 99), 100: ('Fm', 100),
|
|
1731
|
+
101: ('Md', 101), 102: ('No', 102), 103: ('Lr', 103), 104: ('Rf', 104), 105: ('Db', 105),
|
|
1732
|
+
106: ('Sg', 106), 107: ('Bh', 107), 108: ('Hs', 108), 109: ('Mt', 109), 110: ('Ds', 110),
|
|
1733
|
+
111: ('Rg', 111), 112: ('Cn', 112), 113: ('Nh', 113), 114: ('Fl', 114), 115: ('Mc', 115),
|
|
1734
|
+
116: ('Lv', 116), 117: ('Ts', 117), 118: ('Og', 118)
|
|
1735
|
+
}
|
|
1736
|
+
|
|
1737
|
+
# Sample spectral lines for common elements
|
|
1738
|
+
spectral_lines = {
|
|
1739
|
+
'H': [656.3, 486.1, 434.0, 410.2], # Balmer serisi (H-α, H-β, H-γ, H-δ)
|
|
1740
|
+
'He': [587.6, 447.1, 388.9, 402.6], # He I çizgileri (Sarı, Mavi, Mor)
|
|
1741
|
+
'Li': [670.8, 610.4], # Lityum çift çizgisi (Kırmızı)
|
|
1742
|
+
'Be': [313.1, 313.0], # Berilyum UV çizgileri (Yakın UV)
|
|
1743
|
+
'B': [249.7, 249.6], # Bor UV çizgileri
|
|
1744
|
+
'C': [426.7, 505.2, 514.5], # Nötr Karbon (C I) çizgileri
|
|
1745
|
+
'N': [346.6, 357.7, 746.8], # Nötr Azot (N I) çizgileri
|
|
1746
|
+
'O': [777.4, 777.2, 777.5, 844.6], # Nötr Oksijen (O I) triplet ve singlet
|
|
1747
|
+
'F': [685.6, 739.9], # Flor çizgileri
|
|
1748
|
+
'Ne': [540.1, 585.2, 588.2], # Neon çizgileri (Yeşil-Sarı)
|
|
1749
|
+
'Na': [589.0, 589.6], # Sodyum D-çifti (Çok belirgin sarı çizgiler)
|
|
1750
|
+
'Mg': [517.3, 518.4, 457.1], # Magnezyum triplet (Yeşil) ve UV çizgisi
|
|
1751
|
+
'Al': [396.1, 394.4], # Alüminyum çizgileri (Mor)
|
|
1752
|
+
'Si': [390.5, 410.7, 504.1], # Silisyum çizgileri
|
|
1753
|
+
'P': [515.3, 516.7], # Fosfor çizgileri
|
|
1754
|
+
'S': [560.6, 564.0, 869.4], # Kükürt çizgileri
|
|
1755
|
+
'Cl': [837.6, 841.8], # Klor çizgileri (Kırmızı)
|
|
1756
|
+
'Ar': [750.4, 763.5], # Argon çizgileri
|
|
1757
|
+
'K': [766.5, 769.9], # Potasyum çift çizgisi (Kırmızı)
|
|
1758
|
+
'Ca': [393.4, 396.8, 422.7], # Kalsiyum H, K çizgileri (Çok belirgin mor) ve IR çizgisi
|
|
1759
|
+
'Sc': [424.7, 431.9], # Skandiyum çizgileri
|
|
1760
|
+
'Ti': [498.2, 520.2, 533.7], # Titanyum çizgileri
|
|
1761
|
+
'V': [430.5, 437.9], # Vanadyum çizgileri
|
|
1762
|
+
'Cr': [425.4, 427.5, 428.9], # Krom çizgileri
|
|
1763
|
+
'Mn': [403.1, 403.5, 475.4], # Manganez çizgileri
|
|
1764
|
+
'Fe': [438.3, 430.8, 427.2, 527.0], # Demir çizgileri (Fe I - çok sayıda çizgi var, en belirginler)
|
|
1765
|
+
'Co': [412.1, 411.9], # Kobalt çizgileri
|
|
1766
|
+
'Ni': [380.7, 385.7], # Nikel çizgileri
|
|
1767
|
+
'Cu': [510.6, 578.2], # Bakır çizgileri
|
|
1768
|
+
'Zn': [468.0, 472.2], # Çinko çizgileri
|
|
1769
|
+
'Ga': [417.2, 403.3], # Galyum çizgileri
|
|
1770
|
+
'Ge': [422.7, 465.6], # Germanyum çizgileri
|
|
1771
|
+
'As': [488.9, 514.6], # Arsenik çizgileri
|
|
1772
|
+
'Se': [479.6, 486.9], # Selenyum çizgileri
|
|
1773
|
+
'Br': [482.5, 515.8], # Brom çizgileri
|
|
1774
|
+
'Kr': [557.0, 587.1], # Kripton çizgileri
|
|
1775
|
+
'Rb': [780.0, 794.8], # Rubidyum çizgileri (Kırmızı)
|
|
1776
|
+
'Sr': [460.7, 421.6], # Stronsiyum çizgileri
|
|
1777
|
+
'Y': [488.4, 490.0], # İtriyum çizgileri
|
|
1778
|
+
'Zr': [468.8, 473.6], # Zirkonyum çizgileri
|
|
1779
|
+
'Nb': [478.7, 488.6], # Niobyum çizgileri
|
|
1780
|
+
'Mo': [478.5, 480.9], # Molibden çizgileri
|
|
1781
|
+
'Tc': [426.2, 429.6], # Teknesyum (radyoaktif, teorik)
|
|
1782
|
+
'Ru': [449.9, 451.3], # Rutenyum çizgileri
|
|
1783
|
+
'Rh': [450.4, 452.2], # Rodiyum çizgileri
|
|
1784
|
+
'Pd': [468.3, 474.9], # Paladyum çizgileri
|
|
1785
|
+
'Ag': [497.6, 507.6], # Gümüş çizgileri
|
|
1786
|
+
'Cd': [508.6, 643.8], # Kadmiyum çizgileri
|
|
1787
|
+
'In': [451.1, 410.2], # İndiyum çizgileri
|
|
1788
|
+
'Sn': [452.5, 462.4], # Kalay çizgileri
|
|
1789
|
+
'Sb': [451.4, 459.3], # Antimon çizgileri
|
|
1790
|
+
'Te': [460.2, 476.2], # Tellür çizgileri
|
|
1791
|
+
'I': [576.5, 579.3], # İyot çizgileri
|
|
1792
|
+
'Xe': [467.1, 473.4], # Xenon çizgileri
|
|
1793
|
+
'Cs': [852.1, 894.3], # Sezyum çizgileri (Kırmızı-IR)
|
|
1794
|
+
'Ba': [455.4, 493.4], # Baryum çizgileri
|
|
1795
|
+
'La': [463.6, 474.8], # Lantan çizgileri
|
|
1796
|
+
'Ce': [456.2, 458.2], # Seryum çizgileri
|
|
1797
|
+
'Pr': [448.8, 451.0], # Praseodimyum çizgileri
|
|
1798
|
+
'Nd': [451.5, 456.2], # Neodimyum çizgileri
|
|
1799
|
+
'Pm': [446.0, 450.7], # Prometyum (radyoaktif, teorik)
|
|
1800
|
+
'Sm': [442.4, 446.5], # Samaryum çizgileri
|
|
1801
|
+
'Eu': [459.4, 462.7], # Avrupyum çizgileri
|
|
1802
|
+
'Gd': [455.9, 459.4], # Gadolinyum çizgileri
|
|
1803
|
+
'Tb': [455.8, 458.2], # Terbiyum çizgileri
|
|
1804
|
+
'Dy': [455.6, 458.0], # Disprozyum çizgileri
|
|
1805
|
+
'Ho': [455.5, 458.0], # Holmiyum çizgileri
|
|
1806
|
+
'Er': [455.4, 457.9], # Erbiyum çizgileri
|
|
1807
|
+
'Tm': [455.3, 457.7], # Tulyum çizgileri
|
|
1808
|
+
'Yb': [455.2, 457.6], # İterbiyum çizgileri
|
|
1809
|
+
'Lu': [455.1, 457.5], # Lutesyum çizgileri
|
|
1810
|
+
'Hf': [460.5, 462.9], # Hafniyum çizgileri
|
|
1811
|
+
'Ta': [457.8, 460.2], # Tantal çizgileri
|
|
1812
|
+
'W': [460.2, 462.6], # Volfram çizgileri
|
|
1813
|
+
'Re': [460.0, 462.4], # Renyum çizgileri
|
|
1814
|
+
'Os': [459.8, 462.2], # Osmiyum çizgileri
|
|
1815
|
+
'Ir': [459.6, 462.0], # İridyum çizgileri
|
|
1816
|
+
'Pt': [459.4, 461.8], # Platin çizgileri
|
|
1817
|
+
'Au': [479.3, 494.6], # Altın çizgileri
|
|
1818
|
+
'Hg': [435.8, 546.1], # Cıva çizgileri (Mavi-Yeşil)
|
|
1819
|
+
'Tl': [535.0, 537.6], # Talyum çizgileri
|
|
1820
|
+
'Pb': [405.8, 436.3], # Kurşun çizgileri
|
|
1821
|
+
'Bi': [472.2, 474.8], # Bizmut çizgileri
|
|
1822
|
+
'Po': [453.5, 456.0], # Polonyum (radyoaktif, teorik)
|
|
1823
|
+
'At': [452.0, 454.5], # Astatin (radyoaktif, teorik)
|
|
1824
|
+
'Rn': [451.0, 453.5], # Radon (radyoaktif, teorik)
|
|
1825
|
+
'Fr': [450.0, 452.5], # Fransiyum (radyoaktif, teorik)
|
|
1826
|
+
'Ra': [449.0, 451.5], # Radyum (radyoaktif, teorik)
|
|
1827
|
+
'Ac': [448.0, 450.5], # Aktinyum çizgileri
|
|
1828
|
+
'Th': [401.9, 409.5], # Toryum çizgileri
|
|
1829
|
+
'Pa': [451.2, 453.7], # Protaktinyum (radyoaktif, teorik)
|
|
1830
|
+
'U': [424.4, 424.2], # Uranyum çizgileri
|
|
1831
|
+
'Np': [450.0, 452.5], # Neptünyum (radyoaktif, teorik)
|
|
1832
|
+
'Pu': [449.0, 451.5], # Plütonyum (radyoaktif, teorik)
|
|
1833
|
+
'Am': [448.0, 450.5], # Amerikyum (radyoaktif, teorik)
|
|
1834
|
+
'Cm': [447.0, 449.5], # Küriyum (radyoaktif, teorik)
|
|
1835
|
+
'Bk': [446.0, 448.5], # Berkelyum (radyoaktif, teorik)
|
|
1836
|
+
'Cf': [445.0, 447.5], # Kaliforniyum (radyoaktif, teorik)
|
|
1837
|
+
'Es': [444.0, 446.5], # Aynştaynyum (radyoaktif, teorik)
|
|
1838
|
+
'Fm': [443.0, 445.5], # Fermiyum (radyoaktif, teorik)
|
|
1839
|
+
'Md': [442.0, 444.5], # Mendelevyum (radyoaktif, teorik)
|
|
1840
|
+
'No': [441.0, 443.5], # Nobelyum (radyoaktif, teorik)
|
|
1841
|
+
'Lr': [440.0, 442.5], # Lavrensiyum (radyoaktif, teorik)
|
|
1842
|
+
'Rf': [439.0, 441.5], # Rutherfordiyum (teorik)
|
|
1843
|
+
'Db': [438.0, 440.5], # Dubniyum (teorik)
|
|
1844
|
+
'Sg': [437.0, 439.5], # Seaborgiyum (teorik)
|
|
1845
|
+
'Bh': [436.0, 438.5], # Bohriyum (teorik)
|
|
1846
|
+
'Hs': [435.0, 437.5], # Hassiyum (teorik)
|
|
1847
|
+
'Mt': [434.0, 436.5], # Meitneriyum (teorik)
|
|
1848
|
+
'Ds': [433.0, 435.5], # Darmstadtium (teorik)
|
|
1849
|
+
'Rg': [432.0, 434.5], # Roentgenyum (teorik)
|
|
1850
|
+
'Cn': [431.0, 433.5], # Kopernikyum (teorik)
|
|
1851
|
+
'Nh': [430.0, 432.5], # Nihonyum (teorik)
|
|
1852
|
+
'Fl': [429.0, 431.5], # Flerovyum (teorik)
|
|
1853
|
+
'Mc': [428.0, 430.5], # Moskovyum (teorik)
|
|
1854
|
+
'Lv': [427.0, 429.5], # Livermorium (teorik)
|
|
1855
|
+
'Ts': [426.0, 428.5], # Tennessin (teorik)
|
|
1856
|
+
'Og': [425.0, 427.5], # Oganesson (teorik)
|
|
1857
|
+
}
|
|
1858
|
+
|
|
1859
|
+
return periodic_elements, spectral_lines
|
|
1860
|
+
|
|
1584
1861
|
def load_element_data_and_spectral_lines(filename):
|
|
1585
1862
|
"""Loads element data and spectral lines from a text file."""
|
|
1586
1863
|
element_data = {}
|
|
@@ -1654,12 +1931,11 @@ def generate_soft_random_colors(n):
|
|
|
1654
1931
|
"""
|
|
1655
1932
|
colors = []
|
|
1656
1933
|
for _ in range(n):
|
|
1657
|
-
|
|
1658
|
-
hue = random.random() # 0.0 - 1.0 arası
|
|
1934
|
+
hue = random.random()
|
|
1659
1935
|
# Soft görünüm için doygunluk (saturation) orta seviyede
|
|
1660
|
-
saturation = 0.4 + (random.random() * 0.4)
|
|
1936
|
+
saturation = 0.4 + (random.random() * 0.4)
|
|
1661
1937
|
# Soft görünüm için parlaklık (value) yüksek
|
|
1662
|
-
value = 0.7 + (random.random() * 0.3)
|
|
1938
|
+
value = 0.7 + (random.random() * 0.3)
|
|
1663
1939
|
from matplotlib.colors import hsv_to_rgb
|
|
1664
1940
|
rgb = hsv_to_rgb([hue, saturation, value])
|
|
1665
1941
|
colors.append(rgb)
|
|
@@ -2265,3 +2541,4 @@ if __name__ == '__main__':
|
|
|
2265
2541
|
|
|
2266
2542
|
|
|
2267
2543
|
|
|
2544
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
docs/conf.py,sha256=GCnObt4uegIychQdfaWy1ObNytxnf3tvot7PDVZR4mA,2831
|
|
2
|
+
kececilayout/__init__.py,sha256=LHUCpadQ03y9iqZZVw8CWsLedkM0rLIxItAG6dE9Diw,5412
|
|
3
|
+
kececilayout/_version.py,sha256=gdI2wv37mIAseVB4SJXuFIWo_vFW28bsjDDfPnUnK88,826
|
|
4
|
+
kececilayout/kececi_layout.py,sha256=6Go3sth_kTcehhrSAEcxtd4ppMv_O-5dTYZSw-J-R1A,111342
|
|
5
|
+
kececilayout-0.5.7.dist-info/licenses/LICENSE,sha256=xdxzt6hFCDi0ssOOl4UK4E8yuf47W_POYGGnBjwkxaM,34518
|
|
6
|
+
tests/test_sample.py,sha256=dDwjPZyVH5GEOHc2WH-Zv8vFHvAKze0iLiH0HCishYI,10764
|
|
7
|
+
kececilayout-0.5.7.dist-info/METADATA,sha256=BLeEV3dZcJMai5gQ_f1IZ5PcVUX6Rd6KdxKMl2viyUE,126759
|
|
8
|
+
kececilayout-0.5.7.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
9
|
+
kececilayout-0.5.7.dist-info/top_level.txt,sha256=BaQiBtdzk9y2bVscER5uJlQqSaXN0Wnyg0rTOnFfbqU,24
|
|
10
|
+
kececilayout-0.5.7.dist-info/RECORD,,
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
docs/conf.py,sha256=GCnObt4uegIychQdfaWy1ObNytxnf3tvot7PDVZR4mA,2831
|
|
2
|
-
kececilayout/__init__.py,sha256=7EqiQdGhWLU_9KpH9cW1nuC3NFy5OWwdkJidpQkSPzs,5246
|
|
3
|
-
kececilayout/_version.py,sha256=EaaT4GFTsiWoOyTKVpE6-F7dm3d7AK5TftcjNpou5dg,830
|
|
4
|
-
kececilayout/kececi_layout.py,sha256=zmhSvKPxUpzZciuxe20vGOPPuM9S1aapqxapeSwZmkA,96019
|
|
5
|
-
kececilayout-0.5.6.dist-info/licenses/LICENSE,sha256=xdxzt6hFCDi0ssOOl4UK4E8yuf47W_POYGGnBjwkxaM,34518
|
|
6
|
-
tests/test_sample.py,sha256=dDwjPZyVH5GEOHc2WH-Zv8vFHvAKze0iLiH0HCishYI,10764
|
|
7
|
-
kececilayout-0.5.6.dist-info/METADATA,sha256=dRaur3ZofyrX30aZ2OvD7w3lkNIcg-RGynOG_lQXxMw,126759
|
|
8
|
-
kececilayout-0.5.6.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
9
|
-
kececilayout-0.5.6.dist-info/top_level.txt,sha256=BaQiBtdzk9y2bVscER5uJlQqSaXN0Wnyg0rTOnFfbqU,24
|
|
10
|
-
kececilayout-0.5.6.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|