neuronum 3.0.3__py3-none-any.whl → 4.0.1__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.

Potentially problematic release.


This version of neuronum might be problematic. Click here for more details.

cli/main.py CHANGED
@@ -304,14 +304,12 @@ async def async_init_node(sync, stream):
304
304
  tx = await cell.list_tx()
305
305
  ctx = await cell.list_ctx()
306
306
  stx = await cell.list_stx()
307
- contracts = await cell.list_contracts()
308
307
  nodes = await cell.list_nodes()
309
308
 
310
309
  await asyncio.to_thread((project_path / "cells.json").write_text, json.dumps(cells, indent=4))
311
310
  await asyncio.to_thread((project_path / "transmitters.json").write_text, json.dumps(tx, indent=4))
312
311
  await asyncio.to_thread((project_path / "circuits.json").write_text, json.dumps(ctx, indent=4))
313
312
  await asyncio.to_thread((project_path / "streams.json").write_text, json.dumps(stx, indent=4))
314
- await asyncio.to_thread((project_path / "contracts.json").write_text, json.dumps(contracts, indent=4))
315
313
  await asyncio.to_thread((project_path / "nodes.json").write_text, json.dumps(nodes, indent=4))
316
314
 
317
315
  env_path = project_path / ".env"
@@ -334,8 +332,8 @@ async def async_init_node(sync, stream):
334
332
  "link": "https://www.python.org/downloads/"
335
333
  },
336
334
  {
337
- "name": "Neuronum Lib",
338
- "version": ">= 3.0.1",
335
+ "name": "neuronum",
336
+ "version": ">= 4.0.0",
339
337
  "link": "https://pypi.org/project/neuronum/"
340
338
  }
341
339
  ],
@@ -442,8 +440,7 @@ cell = neuronum.Cell(
442
440
  )
443
441
 
444
442
  async def main():
445
- STX = "{stx}"
446
- async for operation in cell.sync(STX):
443
+ async for operation in cell.sync():
447
444
  message = operation.get("data").get("message")
448
445
  print(message)
449
446
 
@@ -471,73 +468,34 @@ cell = neuronum.Cell(
471
468
  )
472
469
 
473
470
  async def main():
474
- STX = "{stx}"
475
471
  label = "Welcome to Neuronum"
476
472
 
477
473
  while True:
478
474
  data = {{
479
475
  "message": "Hello, Neuronum!"
480
476
  }}
481
- await cell.stream(label, data, STX)
477
+ await cell.stream(label, data)
482
478
 
483
479
  asyncio.run(main())
484
480
  """)
485
481
 
486
- scan_path = project_path / f"scan.py"
487
- scan_path.write_text(f"""\
488
- import asyncio
489
- import neuronum
490
- import os
491
- from dotenv import load_dotenv
492
-
493
- load_dotenv()
494
- host = os.getenv("HOST")
495
- password = os.getenv("PASSWORD")
496
- network = os.getenv("NETWORK")
497
- synapse = os.getenv("SYNAPSE")
498
-
499
- cell = neuronum.Cell(
500
- host=host,
501
- password=password,
502
- network=network,
503
- synapse=synapse
504
- )
505
-
506
- async def main():
507
- async for cp in cell.scan():
508
- print(cp)
509
-
510
- asyncio.run(main())
511
- """)
512
-
513
482
  click.echo(f"Neuronum Node '{nodeID}' initialized!")
514
483
 
515
484
 
516
- import platform
517
-
518
485
  @click.command()
519
486
  @click.option('--d', is_flag=True, help="Start node in detached mode")
520
487
  def start_node(d):
521
- scan_type = questionary.select(
522
- "Scan for Neuronum Cells and Nodes (Ensure Bluetooth is enabled)",
523
- choices=["On", "Off"]
524
- ).ask()
525
-
526
488
  click.echo("Starting Node...")
527
489
 
528
490
  project_path = Path.cwd()
529
491
  script_files = glob.glob("sync_*.py") + glob.glob("stream_*.py")
530
492
 
531
- if scan_type == "On":
532
- script_files += glob.glob("scan.py")
533
-
534
493
  processes = []
535
- system_name = platform.system() # Detect OS
494
+ system_name = platform.system()
536
495
 
537
496
  for script in script_files:
538
497
  script_path = project_path / script
539
498
  if script_path.exists():
540
- # Use pythonw on Windows, python elsewhere
541
499
  python_cmd = "pythonw" if system_name == "Windows" else "python"
542
500
 
543
501
  if d:
@@ -549,7 +507,7 @@ def start_node(d):
549
507
  start_new_session=True
550
508
  )
551
509
  else:
552
- process = subprocess.Popen([python_cmd, str(script_path)], start_new_session=True)
510
+ process = subprocess.Popen(["python", str(script_path)], start_new_session=True)
553
511
 
554
512
  processes.append(process.pid)
555
513
 
@@ -736,14 +694,12 @@ async def async_update_node():
736
694
  tx = await cell.list_tx()
737
695
  ctx = await cell.list_ctx()
738
696
  stx = await cell.list_stx()
739
- contracts = await cell.list_contracts()
740
697
  nodes = await cell.list_nodes()
741
698
 
742
699
  await asyncio.to_thread(Path("cells.json").write_text, json.dumps(cells, indent=4))
743
700
  await asyncio.to_thread(Path("transmitters.json").write_text, json.dumps(tx, indent=4))
744
701
  await asyncio.to_thread(Path("circuits.json").write_text, json.dumps(ctx, indent=4))
745
702
  await asyncio.to_thread(Path("streams.json").write_text, json.dumps(stx, indent=4))
746
- await asyncio.to_thread(Path("contracts.json").write_text, json.dumps(contracts, indent=4))
747
703
  await asyncio.to_thread(Path("nodes.json").write_text, json.dumps(nodes, indent=4))
748
704
 
749
705
  click.echo(f"Neuronum Node '{nodeID}' updated! Visit: {node_url}")
@@ -843,16 +799,6 @@ async def async_delete_node():
843
799
  click.echo(f"Neuronum Node '{nodeID}' deleted!")
844
800
 
845
801
 
846
-
847
- @click.command()
848
- def call_cellai():
849
- try:
850
- from cellai import cellai
851
- cellai.main()
852
- except ImportError:
853
- click.echo("Cellai not found. Please check the necessary dependencies.")
854
-
855
-
856
802
  cli.add_command(create_cell)
857
803
  cli.add_command(connect_cell)
858
804
  cli.add_command(view_cell)
@@ -865,7 +811,6 @@ cli.add_command(connect_node)
865
811
  cli.add_command(update_node)
866
812
  cli.add_command(disconnect_node)
867
813
  cli.add_command(delete_node)
868
- cli.add_command(call_cellai)
869
814
 
870
815
 
871
816
  if __name__ == "__main__":
neuronum/neuronum.py CHANGED
@@ -4,7 +4,6 @@ import ssl
4
4
  import websockets
5
5
  import json
6
6
  import asyncio
7
- from bleak import BleakScanner
8
7
 
9
8
  class Cell:
10
9
  def __init__(self, host: str, password: str, network: str, synapse: str):
@@ -410,7 +409,6 @@ class Cell:
410
409
  await writer.wait_closed()
411
410
 
412
411
 
413
-
414
412
  async def sync(self, stx: Optional[str] = None) -> AsyncGenerator[str, None]:
415
413
  full_url = f"wss://{self.network}/sync/{stx}"
416
414
 
@@ -446,177 +444,4 @@ class Cell:
446
444
  print(f"An unexpected error occurred: {e}")
447
445
 
448
446
 
449
- async def sign_contract(self, contractID: str):
450
- full_url = f"https://{self.network}/api/sign_contract"
451
-
452
- sign_contract_payload = {
453
- "contractID": contractID,
454
- "cell": self.to_dict()
455
- }
456
-
457
- async with aiohttp.ClientSession() as session:
458
- try:
459
- async with session.post(full_url, json=sign_contract_payload) as response:
460
- response.raise_for_status()
461
- data = await response.json()
462
- return data.get("token")
463
-
464
- except aiohttp.ClientError as e:
465
- print(f"Error sending request: {e}")
466
- except Exception as e:
467
- print(f"Unexpected error: {e}")
468
-
469
-
470
- async def validate_token(self, token: str, cp: str, contractID: str):
471
- full_url = f"https://{self.network}/api/validate_token"
472
-
473
- validate_payload = {
474
- "token": token,
475
- "cp": cp,
476
- "contractID": contractID,
477
- "cell": self.to_dict()
478
- }
479
-
480
- async with aiohttp.ClientSession() as session:
481
- try:
482
- async with session.post(full_url, json=validate_payload) as response:
483
- response.raise_for_status()
484
- data = await response.json()
485
- return data.get("validity")
486
-
487
- except aiohttp.ClientError as e:
488
- print(f"Error sending request: {e}")
489
- except Exception as e:
490
- print(f"Unexpected error: {e}")
491
-
492
-
493
- async def request_token(self, cp: str, contractID: str):
494
- full_url = f"https://{self.network}/api/request_token"
495
-
496
- request_token_payload = {
497
- "cp": cp,
498
- "contractID": contractID,
499
- "cell": self.to_dict()
500
- }
501
-
502
- async with aiohttp.ClientSession() as session:
503
- try:
504
- async with session.post(full_url, json=request_token_payload) as response:
505
- response.raise_for_status()
506
- data = await response.json()
507
- print(f"Response from Neuronum: {data}")
508
- return data
509
-
510
- except aiohttp.ClientError as e:
511
- print(f"Error sending request: {e}")
512
- except Exception as e:
513
- print(f"Unexpected error: {e}")
514
-
515
-
516
- async def present_token(self, token: str, cp: str, contractID: str):
517
- full_url = f"https://{self.network}/api/present_token"
518
-
519
- present_token_payload = {
520
- "token": token,
521
- "cp": cp,
522
- "contractID": contractID,
523
- "cell": self.to_dict()
524
- }
525
-
526
- async with aiohttp.ClientSession() as session:
527
- try:
528
- async with session.post(full_url, json=present_token_payload) as response:
529
- response.raise_for_status()
530
- data = await response.json()
531
- print(f"Response from Neuronum: {data}")
532
- return data
533
-
534
- except aiohttp.ClientError as e:
535
- print(f"Error sending request: {e}")
536
- except Exception as e:
537
- print(f"Unexpected error: {e}")
538
-
539
-
540
- async def create_contract(self, descr: str, details: dict, partners: list):
541
- full_url = f"https://{self.network}/api/create_contract"
542
-
543
- create_contract_payload = {
544
- "cell": self.to_dict(),
545
- "descr": descr,
546
- "details": details,
547
- "partners": partners
548
- }
549
-
550
- async with aiohttp.ClientSession() as session:
551
- try:
552
- async with session.post(full_url, json=create_contract_payload) as response:
553
- response.raise_for_status()
554
- data = await response.json()
555
- return data.get("contractID")
556
-
557
- except aiohttp.ClientError as e:
558
- print(f"Error sending request: {e}")
559
- except Exception as e:
560
- print(f"Unexpected error: {e}")
561
-
562
-
563
- async def delete_contract(self, contractID: str):
564
- full_url = f"https://{self.network}/api/delete_contract"
565
-
566
- request_payload = {
567
- "cell": self.to_dict(),
568
- "contractID": contractID
569
- }
570
-
571
- async with aiohttp.ClientSession() as session:
572
- try:
573
- async with session.post(full_url, json=request_payload) as response:
574
- response.raise_for_status()
575
- data = await response.json()
576
- print(f"Response from Neuronum: {data}")
577
- return data
578
-
579
- except aiohttp.ClientError as e:
580
- print(f"Error sending request: {e}")
581
- except Exception as e:
582
- print(f"Unexpected error: {e}")
583
-
584
-
585
- async def list_contracts(self):
586
- full_url = f"https://{self.network}/api/list_contracts"
587
-
588
- list_contracts_payload = {
589
- "cell": self.to_dict()
590
- }
591
-
592
- async with aiohttp.ClientSession() as session:
593
- try:
594
- async with session.get(full_url, json=list_contracts_payload) as response:
595
- response.raise_for_status()
596
- data = await response.json()
597
- return data.get("Contracts", [])
598
-
599
- except aiohttp.ClientError as e:
600
- print(f"Error sending request: {e}")
601
- except Exception as e:
602
- print(f"Unexpected error: {e}")
603
-
604
-
605
- def device_found(self, device, advertisement_data):
606
- if device.name and (device.name.endswith("::cell") or device.name.endswith("::node")):
607
- asyncio.create_task(self.queue.put(f"{device.name} - {device.address}"))
608
-
609
- async def scan(self):
610
- print("Scanning for Neuronum Cells & Nodes")
611
-
612
- scanner = BleakScanner(self.device_found)
613
- await scanner.start()
614
-
615
- try:
616
- while True:
617
- yield await self.queue.get()
618
- except asyncio.CancelledError:
619
- await scanner.stop()
620
-
621
-
622
447
  __all__ = ['Cell']
@@ -0,0 +1,96 @@
1
+ Metadata-Version: 2.4
2
+ Name: neuronum
3
+ Version: 4.0.1
4
+ Summary: Official client library to interact with the Neuronum Network
5
+ Home-page: https://neuronum.net
6
+ Author: Neuronum Cybernetics
7
+ Author-email: welcome@neuronum.net
8
+ Project-URL: GitHub, https://github.com/neuronumcybernetics/neuronum
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Operating System :: OS Independent
12
+ Requires-Python: >=3.8
13
+ Description-Content-Type: text/markdown
14
+ License-File: LICENSE
15
+ Requires-Dist: aiohttp
16
+ Requires-Dist: websockets
17
+ Requires-Dist: click
18
+ Requires-Dist: questionary
19
+ Requires-Dist: python-dotenv
20
+ Requires-Dist: requests
21
+ Dynamic: author
22
+ Dynamic: author-email
23
+ Dynamic: classifier
24
+ Dynamic: description
25
+ Dynamic: description-content-type
26
+ Dynamic: home-page
27
+ Dynamic: license-file
28
+ Dynamic: project-url
29
+ Dynamic: requires-dist
30
+ Dynamic: requires-python
31
+ Dynamic: summary
32
+
33
+ ![Neuronum Logo](https://neuronum.net/static/logo_pip.png "Neuronum")
34
+
35
+ [![Website](https://img.shields.io/badge/Website-Neuronum-blue)](https://neuronum.net) [![Documentation](https://img.shields.io/badge/Docs-Read%20now-green)](https://github.com/neuronumcybernetics/neuronum)
36
+
37
+
38
+ ### **Getting Started Goals**
39
+ - Learn about Neuronum
40
+ - Connect to Neuronum
41
+ - Build on Neuronum
42
+
43
+
44
+ ### **About Neuronum**
45
+ Neuronum is a framework to build serverless data gateways automating the processing and distribution of data transmission, storage, and streaming.
46
+
47
+
48
+ ### **Neuronum Attributes**
49
+ **Cell & Nodes**
50
+ - Cell: Account to connect and interact with Neuronum
51
+ - Nodes: Soft- and Hardware components hosting data gateways
52
+
53
+ **Data Gateways**
54
+ - Transmitters (TX): Automate data transfer in standardized formats
55
+ - Circuits (CTX): Store data in cloud-based key-value-label databases
56
+ - Streams (STX): Stream, synchronize, and control data in real time
57
+
58
+
59
+ #### Requirements
60
+ - Python >= 3.8 -> https://www.python.org/downloads/
61
+ - neuronum >= 4.0.0 -> https://pypi.org/project/neuronum/
62
+
63
+
64
+ ------------------
65
+
66
+
67
+ ### **Connect to Neuronum**
68
+ Installation
69
+ ```sh
70
+ pip install neuronum # install neuronum dependencies
71
+ ```
72
+
73
+ Create Cell:
74
+ ```sh
75
+ neuronum create-cell # create Cell / Cell type / Cell network
76
+ ```
77
+
78
+
79
+ View connected Cell:
80
+ ```sh
81
+ neuronum view-cell # view Cell / output = Connected Cell: 'cell_id'"
82
+ ```
83
+
84
+
85
+ ------------------
86
+
87
+
88
+ ### **Build on Neuronum**
89
+ Initialize Node (default template):
90
+ ```sh
91
+ neuronum init-node # initialize a Node with default template
92
+ ```
93
+
94
+
95
+ **Node Examples:**
96
+ Visit: https://github.com/neuronumcybernetics/neuronum/tree/main/how_tos/nodes
@@ -0,0 +1,10 @@
1
+ cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ cli/main.py,sha256=g7Y-W1G7C1firXHsEnBFyqa52nSk6GVzcax_6up0Ezg,24991
3
+ neuronum/__init__.py,sha256=Drsm263_w3_VWgl1YsKLUr8WwVodqV3TSjqpxLjyq_M,46
4
+ neuronum/neuronum.py,sha256=botQ0FJIf5e00MqfUeIcD6aAchys9vSsQ3ymj8YzGMc,15223
5
+ neuronum-4.0.1.dist-info/licenses/LICENSE,sha256=UiZjNHiCyRP6WoZfbYQh9cv4JW96wIofKXmzBJrYSUk,1125
6
+ neuronum-4.0.1.dist-info/METADATA,sha256=SVe3ktDGVnjOpjl4PXi0QtIFOgW84Mr0TzfDJpivwsY,2725
7
+ neuronum-4.0.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
8
+ neuronum-4.0.1.dist-info/entry_points.txt,sha256=XKYBcRNxGeJpZZkDPsa8HA_RaJ7Km_R_JaUq5T9Nk2U,42
9
+ neuronum-4.0.1.dist-info/top_level.txt,sha256=ru8Fr84cHm6oHr_DcJ8-uaq3RTiuCRFIr6AC8V0zPu4,13
10
+ neuronum-4.0.1.dist-info/RECORD,,
@@ -1,3 +1,2 @@
1
- cellai
2
1
  cli
3
2
  neuronum
cellai/__init__.py DELETED
File without changes
cellai/cellai.py DELETED
@@ -1,7 +0,0 @@
1
- def main():
2
- print("Hello, it's your task assistant Cellai")
3
- print("I'm still in development, but my creators are happy to share updates.")
4
- print("Feel free to reach out to them at <welcome@neuronum.net> for more details.")
5
-
6
- if __name__ == "__main__":
7
- main()
@@ -1,126 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: neuronum
3
- Version: 3.0.3
4
- Summary: Official client library to interact with the Neuronum Network
5
- Home-page: https://neuronum.net
6
- Author: Neuronum Cybernetics
7
- Author-email: welcome@neuronum.net
8
- Project-URL: GitHub, https://github.com/neuronumcybernetics/neuronum
9
- Classifier: Programming Language :: Python :: 3
10
- Classifier: License :: OSI Approved :: MIT License
11
- Classifier: Operating System :: OS Independent
12
- Requires-Python: >=3.8
13
- Description-Content-Type: text/markdown
14
- License-File: LICENSE
15
- Requires-Dist: aiohttp
16
- Requires-Dist: websockets
17
- Requires-Dist: click
18
- Requires-Dist: questionary
19
- Requires-Dist: python-dotenv
20
- Requires-Dist: bleak
21
- Requires-Dist: requests
22
- Dynamic: author
23
- Dynamic: author-email
24
- Dynamic: classifier
25
- Dynamic: description
26
- Dynamic: description-content-type
27
- Dynamic: home-page
28
- Dynamic: license-file
29
- Dynamic: project-url
30
- Dynamic: requires-dist
31
- Dynamic: requires-python
32
- Dynamic: summary
33
-
34
- ![Neuronum Logo](https://neuronum.net/static/logo_pip.png "Neuronum")
35
-
36
- [![Website](https://img.shields.io/badge/Website-Neuronum-blue)](https://neuronum.net) [![Documentation](https://img.shields.io/badge/Docs-Read%20now-green)](https://github.com/neuronumcybernetics/neuronum)
37
-
38
- A Getting Started into the Neuronum Network: Build, deploy and automate serverless data infrastructures for an interconnected world
39
-
40
- ### **What's New in neuronum 3.0.3**
41
- - Added CLI feature in `neuronum start-node`: use --d flag to start your Node in "detached" mode
42
-
43
- ### **New Feature Set**
44
- - **Cell/Cell-CLI**: Create and manage your Neuronum Cell, a unique identity for interacting with the Network, directly from the command line.
45
- - **Nodes/Node-CLI**: Setup and manage Neuronum Nodes, the software and hardware components that power the Network, via the command line.
46
- - **Transmitters (TX)**: Automate economic data transfer using predefined templates for standardized data exchange.
47
- - **Circuits (CTX)**: Store, manage, and retrieve structured data with Circuits, a cloud-based Key-Value-Label database.
48
- - **Streams (STX)**: Stream, synchronize, and control data in real time, enabling dynamic and responsive data flows.
49
- - **Contracts/Tokens**: Automate service exchange and authorization, ensuring secure interactions between Cells and Nodes.
50
- - **Scan**: Discover Cells and Nodes via BLE-based scanning, powered by Bleak, for seamless network integration.
51
- - **Cellai**: A local AI assistant currently in development (version 0.0.1). While still evolving, Cellai is designed to automate communication between Cells and Nodes, optimizing intelligent data flow and network interactions in future releases.
52
-
53
-
54
- ## Getting Started Goals
55
- - Create a Cell to start interacting with the Network
56
- - Setup a Node that streams and syncs the message: Hello, Neuronum!
57
- - Connect your Node to the Neuronum Network
58
-
59
-
60
- ### Requirements
61
- - Python >= 3.8 -> https://www.python.org/downloads/
62
- - neuronum >= 3.0.0 -> https://pypi.org/project/neuronum/
63
-
64
-
65
- ### Installation
66
- Install the Neuronum library:
67
- ```sh
68
- $ pip install neuronum # install the neuronum dependencies
69
- ```
70
-
71
- ### Neuronum Cell
72
- Create your Cell:
73
- ```sh
74
- $ neuronum create-cell # create Cell / select network and type
75
- ```
76
-
77
- Connect your Cell:
78
- ```sh
79
- $ neuronum connect-cell # connect Cell
80
- ```
81
-
82
- View connected Cell:
83
- ```sh
84
- $ neuronum view-cell # view Cell ID / output = Connected Cell: 'your_cell_id'"
85
- ```
86
-
87
- ### Neuronum Node
88
- Initialize your Node:
89
- ```sh
90
- $ neuronum init-node # initialize a Node with default template
91
- ```
92
-
93
- cd into Node Folder:
94
- ```sh
95
- $ cd node_nodeID # change directory
96
- ```
97
-
98
- Start your Node:
99
- ```sh
100
- $ neuronum start-node # start Node / scan = Off / output = "Hello, Neuronum!"
101
- ```
102
-
103
- Stop your Node:
104
- ```sh
105
- $ neuronum stop-node # stop Node
106
- ```
107
-
108
- Connect your Node:
109
- ```sh
110
- $ neuronum connect-node # connect your Node / Choose Node Type = private / Node description = Test Node
111
- ```
112
-
113
- Update your Node:
114
- ```sh
115
- $ neuronum update-node # update your Node
116
- ```
117
-
118
- Disconnect your Node:
119
- ```sh
120
- $ neuronum disconnect-node # disconnect your Node
121
- ```
122
-
123
- Delete your Node:
124
- ```sh
125
- $ neuronum delete-node # delete your Node
126
- ```
@@ -1,12 +0,0 @@
1
- cellai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- cellai/cellai.py,sha256=g5oBz-Xx6T4-JWzUs-TJ4y9nHtDmA_IpXh_188OqAZA,281
3
- cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- cli/main.py,sha256=ZN1M8O-BHhm0qQmz1y2N2QFH1xCqlfzsIbwkBaI8q38,26423
5
- neuronum/__init__.py,sha256=Drsm263_w3_VWgl1YsKLUr8WwVodqV3TSjqpxLjyq_M,46
6
- neuronum/neuronum.py,sha256=VUwdF3ynOtZHTASnKzSaHG5GWWfG-oAXxdcGDftbuFE,21412
7
- neuronum-3.0.3.dist-info/licenses/LICENSE,sha256=UiZjNHiCyRP6WoZfbYQh9cv4JW96wIofKXmzBJrYSUk,1125
8
- neuronum-3.0.3.dist-info/METADATA,sha256=_TaOsjz0Z6PhSVaNSVW16c6aZ--72DwO5wMZbxVoVb4,4287
9
- neuronum-3.0.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
10
- neuronum-3.0.3.dist-info/entry_points.txt,sha256=XKYBcRNxGeJpZZkDPsa8HA_RaJ7Km_R_JaUq5T9Nk2U,42
11
- neuronum-3.0.3.dist-info/top_level.txt,sha256=gqN5tyGnBKMPSzvWQONO4rpTf4gQPMi77O3KAKx88LQ,20
12
- neuronum-3.0.3.dist-info/RECORD,,