pyerualjetwork 1.2.0__py3-none-any.whl → 1.2.2__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.
- plan/__init__.py +1 -1
- plan/plan.py +78 -76
- pyerualjetwork-1.2.2.dist-info/METADATA +8 -0
- pyerualjetwork-1.2.2.dist-info/RECORD +6 -0
- pyerualjetwork-1.2.0.dist-info/METADATA +0 -8
- pyerualjetwork-1.2.0.dist-info/RECORD +0 -6
- {pyerualjetwork-1.2.0.dist-info → pyerualjetwork-1.2.2.dist-info}/WHEEL +0 -0
- {pyerualjetwork-1.2.0.dist-info → pyerualjetwork-1.2.2.dist-info}/top_level.txt +0 -0
plan/__init__.py
CHANGED
@@ -2,4 +2,4 @@
|
|
2
2
|
|
3
3
|
# Bu dosya, plan modülünün ana giriş noktasıdır.
|
4
4
|
|
5
|
-
from .plan import AutoBalancer, Normalization, Softmax, Sigmoid, Relu, SynapticPruning, SynapticDividing, WeightIdentification, Fex, Cat, TrainPLAN, TestPLAN, SavePLAN, LoadPLAN, PredictFromDiscPLAN, PredictFromRamPLAN
|
5
|
+
from .plan import AutoBalancer, Normalization, Softmax, Sigmoid, Relu, SynapticPruning, SynapticDividing, WeightIdentification, Fex, Cat, TrainPLAN, TestPLAN, SavePLAN, LoadPLAN, PredictFromDiscPLAN, PredictFromRamPLAN, GetWeights, GetDf, GetPreds, GetAcc, GetAllFromLoad
|
plan/plan.py
CHANGED
@@ -3,10 +3,12 @@ import time
|
|
3
3
|
from colorama import Fore,Style
|
4
4
|
from typing import List, Union
|
5
5
|
import math
|
6
|
+
from scipy.special import expit, softmax
|
7
|
+
|
6
8
|
# BUILD -----
|
7
9
|
def TrainPLAN(
|
8
|
-
|
9
|
-
|
10
|
+
TrainInputs: List[Union[int, float]],
|
11
|
+
TrainLabels: List[Union[int, float, str]], # At least two.. and one hot encoded
|
10
12
|
ClassCount: int,
|
11
13
|
Layers: List[str],
|
12
14
|
Neurons: List[Union[int, float]],
|
@@ -20,8 +22,8 @@ def TrainPLAN(
|
|
20
22
|
Creates and configures a PLAN model.
|
21
23
|
|
22
24
|
Args:
|
23
|
-
|
24
|
-
|
25
|
+
TrainInputs (list[num]): List of input data.
|
26
|
+
TrainLabels (list[num]): List of TrainLabels. (one hot encoded)
|
25
27
|
ClassCount (int): Number of classes.
|
26
28
|
Layers (list[str]): List of layer names. (options: 'fex' (Feature Extraction), 'cat' (Catalyser))
|
27
29
|
Neurons (list[num]): List of neuron counts for each layer.
|
@@ -45,8 +47,8 @@ def TrainPLAN(
|
|
45
47
|
print(Fore.RED + "ERROR307: Normalization list length must be equal to length of ThresholdSigns List,ThresholdValues List,Layers List,Neurons List. from: TrainPLAN",infoPLAN)
|
46
48
|
return 'e'
|
47
49
|
|
48
|
-
if len(
|
49
|
-
print(Fore.RED + "ERROR301:
|
50
|
+
if len(TrainInputs) != len(TrainLabels):
|
51
|
+
print(Fore.RED + "ERROR301: TrainInputs list and TrainLabels list must be same length.",infoPLAN)
|
50
52
|
return 'e'
|
51
53
|
|
52
54
|
for i, Value in enumerate(ThresholdValues):
|
@@ -117,45 +119,45 @@ def TrainPLAN(
|
|
117
119
|
print(Fore.RED + "ERROR109: at layer type 'fex', pairing with 'none' Threshold is not acceptlable. if you want to 'none' put '==' and make threshold value '0'. from: TrainPLAN ",infoPLAN)
|
118
120
|
return 'e'
|
119
121
|
|
120
|
-
|
121
|
-
for sublist in
|
122
|
+
UniqueTrainLabels = set()
|
123
|
+
for sublist in TrainLabels:
|
122
124
|
|
123
|
-
|
125
|
+
UniqueTrainLabels.add(tuple(sublist))
|
124
126
|
|
125
127
|
|
126
|
-
|
128
|
+
UniqueTrainLabels = list(UniqueTrainLabels)
|
127
129
|
|
128
|
-
|
130
|
+
TrainLabels = [tuple(sublist) for sublist in TrainLabels]
|
129
131
|
|
130
132
|
|
131
|
-
if len(
|
133
|
+
if len(UniqueTrainLabels) != ClassCount:
|
132
134
|
print(Fore.RED + "ERROR106: Label variety length must be same Class Count. from: TrainPLAN",infoPLAN)
|
133
135
|
return 'e'
|
134
136
|
|
135
|
-
|
136
|
-
|
137
|
-
|
137
|
+
TrainInputs[0] = np.array(TrainInputs[0])
|
138
|
+
TrainInputs[0] = TrainInputs[0].ravel()
|
139
|
+
TrainInputsize = len(TrainInputs[0])
|
138
140
|
|
139
|
-
W = WeightIdentification(len(Layers) - 1,ClassCount,Neurons,
|
141
|
+
W = WeightIdentification(len(Layers) - 1,ClassCount,Neurons,TrainInputsize)
|
140
142
|
Divides = SynapticDividing(ClassCount,W)
|
141
143
|
TrainedWs = [1] * len(W)
|
142
144
|
print(Fore.GREEN + "Train Started with 0 ERROR" + Style.RESET_ALL,)
|
143
|
-
TrainPredictions = [1] * len(
|
145
|
+
TrainPredictions = [1] * len(TrainLabels)
|
144
146
|
true = 0
|
145
147
|
StartTime = time.time()
|
146
|
-
for index, inp in enumerate(
|
148
|
+
for index, inp in enumerate(TrainInputs):
|
147
149
|
UniStartTime = time.time()
|
148
150
|
inp = np.array(inp)
|
149
151
|
inp = inp.ravel()
|
150
152
|
|
151
|
-
if
|
152
|
-
print(Fore.RED +"ERROR304: All input matrices or vectors in
|
153
|
+
if TrainInputsize != len(inp):
|
154
|
+
print(Fore.RED +"ERROR304: All input matrices or vectors in TrainInputs list, must be same size. from: TrainPLAN",infoPLAN + Style.RESET_ALL)
|
153
155
|
return 'e'
|
154
156
|
|
155
157
|
|
156
|
-
for Ulindex, Ul in enumerate(
|
158
|
+
for Ulindex, Ul in enumerate(UniqueTrainLabels):
|
157
159
|
|
158
|
-
if Ul ==
|
160
|
+
if Ul == TrainLabels[index]:
|
159
161
|
for Windex, w in enumerate(W):
|
160
162
|
for i, ul in enumerate(Ul):
|
161
163
|
if ul == 1.0:
|
@@ -183,12 +185,12 @@ def TrainPLAN(
|
|
183
185
|
elif Layer == 'cat':
|
184
186
|
NeuralLayer,W[Lindex] = Cat(NeuralLayer, W[Lindex], ThresholdSigns[Lindex], ThresholdValues[Lindex],1)
|
185
187
|
|
186
|
-
RealOutput = np.argmax(
|
188
|
+
RealOutput = np.argmax(TrainLabels[index])
|
187
189
|
PredictedOutput = np.argmax(NeuralLayer)
|
188
190
|
if RealOutput == PredictedOutput:
|
189
191
|
true += 1
|
190
|
-
Acc = true / len(
|
191
|
-
TrainPredictions[index] = PredictedOutput
|
192
|
+
Acc = true / len(TrainLabels)
|
193
|
+
TrainPredictions[index] = PredictedOutput
|
192
194
|
|
193
195
|
if index == 0:
|
194
196
|
for i, w in enumerate(W):
|
@@ -199,12 +201,12 @@ def TrainPLAN(
|
|
199
201
|
TrainedWs[i] = TrainedWs[i] + w
|
200
202
|
|
201
203
|
|
202
|
-
W = WeightIdentification(len(Layers) - 1,ClassCount,Neurons,
|
204
|
+
W = WeightIdentification(len(Layers) - 1,ClassCount,Neurons,TrainInputsize)
|
203
205
|
|
204
206
|
|
205
207
|
UniEndTime = time.time()
|
206
208
|
|
207
|
-
CalculatingEst = round((UniEndTime - UniStartTime) * (len(
|
209
|
+
CalculatingEst = round((UniEndTime - UniStartTime) * (len(TrainInputs) - index),3)
|
208
210
|
|
209
211
|
if CalculatingEst < 60:
|
210
212
|
print('\rest......(sec):',CalculatingEst,'\n',end= "")
|
@@ -253,7 +255,7 @@ def WeightIdentification(
|
|
253
255
|
LayerCount, # int: Number of layers in the neural network.
|
254
256
|
ClassCount, # int: Number of classes in the classification task.
|
255
257
|
Neurons, # list[num]: List of neuron counts for each layer.
|
256
|
-
|
258
|
+
TrainInputsize # int: Size of the input data.
|
257
259
|
) -> str:
|
258
260
|
"""
|
259
261
|
Identifies the weights for a neural network model.
|
@@ -262,7 +264,7 @@ def WeightIdentification(
|
|
262
264
|
LayerCount (int): Number of layers in the neural network.
|
263
265
|
ClassCount (int): Number of classes in the classification task.
|
264
266
|
Neurons (list[num]): List of neuron counts for each layer.
|
265
|
-
|
267
|
+
TrainInputsize (int): Size of the input data.
|
266
268
|
|
267
269
|
Returns:
|
268
270
|
list([numpy_arrays],[...]): Weight matices of the model. .
|
@@ -271,7 +273,7 @@ def WeightIdentification(
|
|
271
273
|
|
272
274
|
Wlen = LayerCount + 1
|
273
275
|
W = [None] * Wlen
|
274
|
-
W[0] = np.ones((Neurons[0],
|
276
|
+
W[0] = np.ones((Neurons[0],TrainInputsize))
|
275
277
|
ws = LayerCount - 1
|
276
278
|
for w in range(ws):
|
277
279
|
W[w + 1] = np.ones((Neurons[w + 1],Neurons[w]))
|
@@ -492,19 +494,8 @@ def Softmax(
|
|
492
494
|
Returns:
|
493
495
|
list[num]: Transformed data after applying softmax function.
|
494
496
|
"""
|
495
|
-
|
496
|
-
|
497
|
-
MaxX = np.max(x)
|
498
|
-
|
499
|
-
x -= MaxX
|
500
|
-
|
501
|
-
ExpX = np.exp(x)
|
502
|
-
|
503
|
-
SumExpX = np.sum(ExpX)
|
504
497
|
|
505
|
-
|
506
|
-
|
507
|
-
return SoftmaxX
|
498
|
+
return softmax(x)
|
508
499
|
|
509
500
|
|
510
501
|
def Sigmoid(
|
@@ -519,18 +510,7 @@ def Sigmoid(
|
|
519
510
|
Returns:
|
520
511
|
list[num]: Transformed data after applying sigmoid function.
|
521
512
|
"""
|
522
|
-
|
523
|
-
PositiveMask = x >= 0
|
524
|
-
NegativeMask = ~PositiveMask
|
525
|
-
|
526
|
-
ExpXPositive = np.exp(-np.clip(x[PositiveMask], -709, None))
|
527
|
-
ExpXNegative = np.exp(np.clip(x[NegativeMask], None, 709))
|
528
|
-
|
529
|
-
SigmoidX = np.zeros_like(x, dtype=float)
|
530
|
-
SigmoidX[PositiveMask] = 1 / (1 + ExpXPositive)
|
531
|
-
SigmoidX[NegativeMask] = ExpXNegative / (1 + ExpXNegative)
|
532
|
-
|
533
|
-
return SigmoidX
|
513
|
+
return expit(x)
|
534
514
|
|
535
515
|
|
536
516
|
def Relu(
|
@@ -615,7 +595,7 @@ def TestPLAN(
|
|
615
595
|
if RealOutput == PredictedOutput:
|
616
596
|
true += 1
|
617
597
|
Acc = true / len(TestLabels)
|
618
|
-
TestPredictions[inpIndex] = PredictedOutput
|
598
|
+
TestPredictions[inpIndex] = PredictedOutput
|
619
599
|
UniEndTime = time.time()
|
620
600
|
|
621
601
|
CalculatingEst = round((UniEndTime - UniStartTime) * (len(TestInputs) - inpIndex),3)
|
@@ -663,7 +643,7 @@ def TestPLAN(
|
|
663
643
|
print(Fore.RED + "ERROR: Testing model parameters like 'Layers' 'ThresholdCounts' must be same as trained model. Check parameters. Are you sure weights are loaded ? from: TestPLAN" + infoTestModel + Style.RESET_ALL)
|
664
644
|
return 'e'
|
665
645
|
|
666
|
-
return TestPredictions,Acc
|
646
|
+
return W,TestPredictions,Acc
|
667
647
|
|
668
648
|
def SavePLAN(ModelName,
|
669
649
|
ModelType,
|
@@ -677,7 +657,7 @@ def SavePLAN(ModelName,
|
|
677
657
|
LogType,
|
678
658
|
WeightsType,
|
679
659
|
WeightsFormat,
|
680
|
-
|
660
|
+
ModelPath,
|
681
661
|
W
|
682
662
|
):
|
683
663
|
|
@@ -697,7 +677,7 @@ def SavePLAN(ModelName,
|
|
697
677
|
LogType (str): Type of log to save (options: 'csv', 'txt', 'hdf5').
|
698
678
|
WeightsType (str): Type of weights to save (options: 'txt', 'npy', 'mat').
|
699
679
|
WeightFormat (str): Format of the weights (options: 'd', 'f', 'raw').
|
700
|
-
|
680
|
+
ModelPath (str): Path where the model will be saved. For example: C:/Users/beydili/Desktop/denemePLAN/
|
701
681
|
W: Weights of the model.
|
702
682
|
|
703
683
|
Returns:
|
@@ -748,7 +728,7 @@ def SavePLAN(ModelName,
|
|
748
728
|
'SAVE DATE': datetime.now(),
|
749
729
|
'WEIGHTS TYPE': WeightsType,
|
750
730
|
'WEIGHTS FORMAT': WeightsFormat,
|
751
|
-
'SAVE PATH':
|
731
|
+
'SAVE PATH': ModelPath
|
752
732
|
}
|
753
733
|
try:
|
754
734
|
|
@@ -756,15 +736,15 @@ def SavePLAN(ModelName,
|
|
756
736
|
|
757
737
|
if LogType == 'csv':
|
758
738
|
|
759
|
-
df.to_csv(
|
739
|
+
df.to_csv(ModelPath + ModelName + '.csv', sep='\t', index=False)
|
760
740
|
|
761
741
|
elif LogType == 'txt':
|
762
742
|
|
763
|
-
df.to_csv(
|
743
|
+
df.to_csv(ModelPath + ModelName + '.txt', sep='\t', index=False)
|
764
744
|
|
765
745
|
elif LogType == 'hdf5':
|
766
746
|
|
767
|
-
df.to_hdf(
|
747
|
+
df.to_hdf(ModelPath + ModelName + '.h5', key='data', mode='w')
|
768
748
|
|
769
749
|
except:
|
770
750
|
|
@@ -775,17 +755,17 @@ def SavePLAN(ModelName,
|
|
775
755
|
if WeightsType == 'txt' and WeightsFormat == 'd':
|
776
756
|
|
777
757
|
for i, w in enumerate(W):
|
778
|
-
np.savetxt(
|
758
|
+
np.savetxt(ModelPath + ModelName + str(i+1) + 'w.txt' , w, fmt='%d')
|
779
759
|
|
780
760
|
if WeightsType == 'txt' and WeightsFormat == 'f':
|
781
761
|
|
782
762
|
for i, w in enumerate(W):
|
783
|
-
np.savetxt(
|
763
|
+
np.savetxt(ModelPath + ModelName + str(i+1) + 'w.txt' , w, fmt='%f')
|
784
764
|
|
785
765
|
if WeightsType == 'txt' and WeightsFormat == 'raw':
|
786
766
|
|
787
767
|
for i, w in enumerate(W):
|
788
|
-
np.savetxt(
|
768
|
+
np.savetxt(ModelPath + ModelName + str(i+1) + 'w.txt' , w)
|
789
769
|
|
790
770
|
|
791
771
|
###
|
@@ -794,17 +774,17 @@ def SavePLAN(ModelName,
|
|
794
774
|
if WeightsType == 'npy' and WeightsFormat == 'd':
|
795
775
|
|
796
776
|
for i, w in enumerate(W):
|
797
|
-
np.save(
|
777
|
+
np.save(ModelPath + ModelName + str(i+1) + 'w.npy', w.astype(int))
|
798
778
|
|
799
779
|
if WeightsType == 'npy' and WeightsFormat == 'f':
|
800
780
|
|
801
781
|
for i, w in enumerate(W):
|
802
|
-
np.save(
|
782
|
+
np.save(ModelPath + ModelName + str(i+1) + 'w.npy' , w, w.astype(float))
|
803
783
|
|
804
784
|
if WeightsType == 'npy' and WeightsFormat == 'raw':
|
805
785
|
|
806
786
|
for i, w in enumerate(W):
|
807
|
-
np.save(
|
787
|
+
np.save(ModelPath + ModelName + str(i+1) + 'w.npy' , w)
|
808
788
|
|
809
789
|
|
810
790
|
###
|
@@ -814,19 +794,19 @@ def SavePLAN(ModelName,
|
|
814
794
|
|
815
795
|
for i, w in enumerate(W):
|
816
796
|
w = {'w': w.astype(int)}
|
817
|
-
io.savemat(
|
797
|
+
io.savemat(ModelPath + ModelName + str(i+1) + 'w.mat', w)
|
818
798
|
|
819
799
|
if WeightsType == 'mat' and WeightsFormat == 'f':
|
820
800
|
|
821
801
|
for i, w in enumerate(W):
|
822
802
|
w = {'w': w.astype(float)}
|
823
|
-
io.savemat(
|
803
|
+
io.savemat(ModelPath + ModelName + str(i+1) + 'w.mat', w)
|
824
804
|
|
825
805
|
if WeightsType == 'mat' and WeightsFormat == 'raw':
|
826
806
|
|
827
807
|
for i, w in enumerate(W):
|
828
808
|
w = {'w': w}
|
829
|
-
io.savemat(
|
809
|
+
io.savemat(ModelPath + ModelName + str(i+1) + 'w.mat', w)
|
830
810
|
|
831
811
|
except:
|
832
812
|
|
@@ -884,7 +864,7 @@ def LoadPLAN(ModelName,
|
|
884
864
|
ClassCount = int(df['CLASS COUNT'].iloc[0])
|
885
865
|
ThresholdSigns = df['THRESHOLD SIGNS'].tolist()
|
886
866
|
ThresholdValues = df['THRESHOLD VALUES'].tolist()
|
887
|
-
|
867
|
+
Normalizations = df['NORMALIZATION'].tolist()
|
888
868
|
Activations = df['ACTIVATIONS'].tolist()
|
889
869
|
NeuronCount = int(df['NEURON COUNT'].iloc[0])
|
890
870
|
SynapseCount = int(df['SYNAPSE COUNT'].iloc[0])
|
@@ -892,12 +872,12 @@ def LoadPLAN(ModelName,
|
|
892
872
|
ModelType = str(df['MODEL TYPE'].iloc[0])
|
893
873
|
WeightType = str(df['WEIGHTS TYPE'].iloc[0])
|
894
874
|
WeightFormat = str(df['WEIGHTS FORMAT'].iloc[0])
|
895
|
-
|
875
|
+
ModelPath = str(df['MODEL PATH'].iloc[0])
|
896
876
|
|
897
877
|
W = [0] * LayerCount
|
898
878
|
|
899
879
|
if WeightType == 'txt':
|
900
|
-
for i in range(LayerCount):
|
880
|
+
for i in range(LayerCount):
|
901
881
|
W[i] = np.loadtxt(LoadPath + ModelName + str(i+1) + 'w.txt')
|
902
882
|
elif WeightType == 'npy':
|
903
883
|
for i in range(LayerCount):
|
@@ -923,7 +903,7 @@ def PredictFromDiscPLAN(Input,ModelName,ModelPath,LogType):
|
|
923
903
|
Returns:
|
924
904
|
ndarray: Output from the model.
|
925
905
|
"""
|
926
|
-
W,Layers,ThresholdSigns,ThresholdValues,
|
906
|
+
W,Layers,ThresholdSigns,ThresholdValues,Normalizations,Activations = LoadPLAN(ModelName,ModelPath,
|
927
907
|
LogType)[0:6]
|
928
908
|
Wc = [0] * len(W)
|
929
909
|
for i, w in enumerate(W):
|
@@ -1048,4 +1028,26 @@ def AutoBalancer(TrainInputs, TrainLabels, ClassCount):
|
|
1048
1028
|
print(Fore.RED + "ERROR: Inputs and labels must be same length check parameters" + infoAutoBalancer)
|
1049
1029
|
return 'e'
|
1050
1030
|
|
1051
|
-
return BalancedInputs, BalancedLabels
|
1031
|
+
return BalancedInputs, BalancedLabels
|
1032
|
+
|
1033
|
+
|
1034
|
+
def GetWeights():
|
1035
|
+
|
1036
|
+
return[0]
|
1037
|
+
|
1038
|
+
def GetDf():
|
1039
|
+
|
1040
|
+
return[6]
|
1041
|
+
|
1042
|
+
def GetPreds():
|
1043
|
+
|
1044
|
+
return[1]
|
1045
|
+
|
1046
|
+
def GetAcc():
|
1047
|
+
|
1048
|
+
return[2]
|
1049
|
+
|
1050
|
+
def GetAllFromLoad():
|
1051
|
+
|
1052
|
+
return[0],[1],[2],[3],[4],[5]
|
1053
|
+
|
@@ -0,0 +1,8 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: pyerualjetwork
|
3
|
+
Version: 1.2.2
|
4
|
+
Summary: Advanced python deep learning library.UPDATED TO 1.2.2 NEW FEATURES: GetWeights() func for TrainPLAN, TestPLAN and LoadPLAN, GetPreds() and GetAcc() funcs for TrainPLAN and TestPLAN, GetAllFromLoad() func for LoadPLAN, GetDf() for LoadPLAN (Documentation in desc. Examples in GİTHUB: HCB06)
|
5
|
+
Author: Hasan Can Beydili
|
6
|
+
Author-email: tchasancan@gmail.com
|
7
|
+
Keywords: model evaluation,classifcation,pruning learning artficial neural networks
|
8
|
+
|
@@ -0,0 +1,6 @@
|
|
1
|
+
plan/__init__.py,sha256=_jNJho5JbgO70TN4ixL13C5XbdeLmsZapy97_yu-GB0,368
|
2
|
+
plan/plan.py,sha256=29ZssCXXZ7WNGsrjE5M2hoCg1CXdIA-E2dtHYsEpVZU,40174
|
3
|
+
pyerualjetwork-1.2.2.dist-info/METADATA,sha256=obGYRZ5kN8sd3vUZ6b630afF0EVanczg0p8sKQEv8E4,513
|
4
|
+
pyerualjetwork-1.2.2.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
5
|
+
pyerualjetwork-1.2.2.dist-info/top_level.txt,sha256=G0Al3HuNJ88434XneyDtRKAIUaLCizOFYFYNhd7e2OM,5
|
6
|
+
pyerualjetwork-1.2.2.dist-info/RECORD,,
|
@@ -1,8 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.1
|
2
|
-
Name: pyerualjetwork
|
3
|
-
Version: 1.2.0
|
4
|
-
Summary: Advanced python deep learning library.(Documentation in desc. Examples in GİTHUB: HCB06)
|
5
|
-
Author: Hasan Can Beydili
|
6
|
-
Author-email: tchasancan@gmail.com
|
7
|
-
Keywords: model evaluation,classifcation,pruning learning artficial neural networks
|
8
|
-
|
@@ -1,6 +0,0 @@
|
|
1
|
-
plan/__init__.py,sha256=cyb3DkUey_4zEApoFtf-UBMGwd8uFADSjy3osQUG_pY,315
|
2
|
-
plan/plan.py,sha256=dp-ZuhbyatgwrLDwEfEtuFWmTV-twvaFvD8TIC8FSXE,40179
|
3
|
-
pyerualjetwork-1.2.0.dist-info/METADATA,sha256=RKNNHxpHzKXhfgJ_M9VO0ln8sM076yc4H6rADoJQOJY,311
|
4
|
-
pyerualjetwork-1.2.0.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
5
|
-
pyerualjetwork-1.2.0.dist-info/top_level.txt,sha256=G0Al3HuNJ88434XneyDtRKAIUaLCizOFYFYNhd7e2OM,5
|
6
|
-
pyerualjetwork-1.2.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|