Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
G
gm_strategy_cvr
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
rank
gm_strategy_cvr
Commits
cd97df76
Commit
cd97df76
authored
Aug 14, 2020
by
赵威
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add features for tractate
parent
b64c2ee0
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
102 additions
and
29 deletions
+102
-29
diary_model.py
src/models/esmm/diary_model.py
+8
-7
diary_fe.py
src/models/esmm/fe/diary_fe.py
+18
-15
tractate_fe.py
src/models/esmm/fe/tractate_fe.py
+22
-3
tractate_model.py
src/models/esmm/tractate_model.py
+50
-2
train_tractate.py
src/train_tractate.py
+4
-2
No files found.
src/models/esmm/diary_model.py
View file @
cd97df76
...
@@ -9,13 +9,14 @@ _int_columns = [
...
@@ -9,13 +9,14 @@ _int_columns = [
"active_type"
,
"active_days"
,
"card_id"
,
"is_pure_author"
,
"is_have_reply"
,
"is_have_pure_reply"
,
"content_level"
,
"active_type"
,
"active_days"
,
"card_id"
,
"is_pure_author"
,
"is_have_reply"
,
"is_have_pure_reply"
,
"content_level"
,
"topic_num"
,
"favor_num"
,
"favor_pure_num"
,
"vote_num"
,
"reply_num"
,
"reply_pure_num"
,
"one_reply_user_num"
,
"topic_num"
,
"favor_num"
,
"favor_pure_num"
,
"vote_num"
,
"reply_num"
,
"reply_pure_num"
,
"one_reply_user_num"
,
"three_reply_user_num"
,
"seven_reply_user_num"
,
"fifteen_reply_user_num"
,
"thirty_reply_user_num"
,
"sixty_reply_user_num"
,
"three_reply_user_num"
,
"seven_reply_user_num"
,
"fifteen_reply_user_num"
,
"thirty_reply_user_num"
,
"sixty_reply_user_num"
,
"ninety_reply_user_num"
,
"history_reply_user_num"
,
"one_click_num"
,
"three_click_num"
,
"seven_click_num"
,
"fifteen_click_num"
,
"ninety_reply_user_num"
,
"history_reply_user_num"
,
"one_reply_num"
,
"three_reply_num"
,
"seven_reply_num"
,
"fifteen_reply_num"
,
"thirty_click_num"
,
"sixty_click_num"
,
"ninety_click_num"
,
"history_click_num"
,
"one_precise_exposure_num"
,
"thirty_reply_num"
,
"sixty_reply_num"
,
"ninety_reply_num"
,
"history_reply_num"
,
"one_click_num"
,
"three_click_num"
,
"three_precise_exposure_num"
,
"seven_precise_exposure_num"
,
"fifteen_precise_exposure_num"
,
"thirty_precise_exposure_num"
,
"seven_click_num"
,
"fifteen_click_num"
,
"thirty_click_num"
,
"sixty_click_num"
,
"ninety_click_num"
,
"history_click_num"
,
"sixty_precise_exposure_num"
,
"ninety_precise_exposure_num"
,
"history_precise_exposure_num"
,
"one_vote_user_num"
,
"one_precise_exposure_num"
,
"three_precise_exposure_num"
,
"seven_precise_exposure_num"
,
"fifteen_precise_exposure_num"
,
"three_vote_user_num"
,
"seven_vote_user_num"
,
"fifteen_vote_user_num"
,
"thirty_vote_user_num"
,
"sixty_vote_user_num"
,
"thirty_precise_exposure_num"
,
"sixty_precise_exposure_num"
,
"ninety_precise_exposure_num"
,
"history_precise_exposure_num"
,
"ninety_vote_user_num"
,
"history_vote_user_num"
,
"topic_seven_click_num"
,
"topic_thirty_click_num"
,
"seven_transform_num"
,
"one_vote_user_num"
,
"three_vote_user_num"
,
"seven_vote_user_num"
,
"fifteen_vote_user_num"
,
"thirty_vote_user_num"
,
"thirty_transform_num"
"sixty_vote_user_num"
,
"ninety_vote_user_num"
,
"history_vote_user_num"
,
"topic_seven_click_num"
,
"topic_thirty_click_num"
,
"seven_transform_num"
,
"thirty_transform_num"
]
]
_float_columns
=
[
"one_ctr"
,
"three_ctr"
,
"seven_ctr"
,
"fifteen_ctr"
,
"thirty_ctr"
,
"sixty_ctr"
,
"ninety_ctr"
,
"history_ctr"
]
_float_columns
=
[
"one_ctr"
,
"three_ctr"
,
"seven_ctr"
,
"fifteen_ctr"
,
"thirty_ctr"
,
"sixty_ctr"
,
"ninety_ctr"
,
"history_ctr"
]
_categorical_columns
=
[
_categorical_columns
=
[
...
...
src/models/esmm/fe/diary_fe.py
View file @
cd97df76
...
@@ -9,25 +9,28 @@ DIARY_COLUMNS = [
...
@@ -9,25 +9,28 @@ DIARY_COLUMNS = [
"card_id"
,
"is_pure_author"
,
"is_have_reply"
,
"is_have_pure_reply"
,
"content_level"
,
"topic_num"
,
"topic_seven_click_num"
,
"card_id"
,
"is_pure_author"
,
"is_have_reply"
,
"is_have_pure_reply"
,
"content_level"
,
"topic_num"
,
"topic_seven_click_num"
,
"topic_thirty_click_num"
,
"seven_transform_num"
,
"thirty_transform_num"
,
"favor_num"
,
"favor_pure_num"
,
"vote_num"
,
"topic_thirty_click_num"
,
"seven_transform_num"
,
"thirty_transform_num"
,
"favor_num"
,
"favor_pure_num"
,
"vote_num"
,
"reply_num"
,
"reply_pure_num"
,
"one_reply_user_num"
,
"three_reply_user_num"
,
"seven_reply_user_num"
,
"fifteen_reply_user_num"
,
"reply_num"
,
"reply_pure_num"
,
"one_reply_user_num"
,
"three_reply_user_num"
,
"seven_reply_user_num"
,
"fifteen_reply_user_num"
,
"thirty_reply_user_num"
,
"sixty_reply_user_num"
,
"ninety_reply_user_num"
,
"history_reply_user_num"
,
"one_click_num"
,
"thirty_reply_user_num"
,
"sixty_reply_user_num"
,
"ninety_reply_user_num"
,
"history_reply_user_num"
,
"one_reply_num"
,
"three_click_num"
,
"seven_click_num"
,
"fifteen_click_num"
,
"thirty_click_num"
,
"sixty_click_num"
,
"ninety_click_num"
,
"three_reply_num"
,
"seven_reply_num"
,
"fifteen_reply_num"
,
"thirty_reply_num"
,
"sixty_reply_num"
,
"ninety_reply_num"
,
"history_click_num"
,
"one_precise_exposure_num"
,
"three_precise_exposure_num"
,
"seven_precise_exposure_num"
,
"history_reply_num"
,
"one_click_num"
,
"three_click_num"
,
"seven_click_num"
,
"fifteen_click_num"
,
"thirty_click_num"
,
"fifteen_precise_exposure_num"
,
"thirty_precise_exposure_num"
,
"sixty_precise_exposure_num"
,
"ninety_precise_exposure_num"
,
"sixty_click_num"
,
"ninety_click_num"
,
"history_click_num"
,
"one_precise_exposure_num"
,
"three_precise_exposure_num"
,
"history_precise_exposure_num"
,
"one_vote_user_num"
,
"three_vote_user_num"
,
"seven_vote_user_num"
,
"fifteen_vote_user_num"
,
"seven_precise_exposure_num"
,
"fifteen_precise_exposure_num"
,
"thirty_precise_exposure_num"
,
"sixty_precise_exposure_num"
,
"thirty_vote_user_num"
,
"sixty_vote_user_num"
,
"ninety_vote_user_num"
,
"history_vote_user_num"
,
"one_ctr"
,
"three_ctr"
,
"ninety_precise_exposure_num"
,
"history_precise_exposure_num"
,
"one_vote_user_num"
,
"three_vote_user_num"
,
"seven_ctr"
,
"fifteen_ctr"
,
"thirty_ctr"
,
"sixty_ctr"
,
"ninety_ctr"
,
"history_ctr"
,
"first_demands"
,
"second_demands"
,
"seven_vote_user_num"
,
"fifteen_vote_user_num"
,
"thirty_vote_user_num"
,
"sixty_vote_user_num"
,
"ninety_vote_user_num"
,
"first_solutions"
,
"second_solutions"
,
"first_positions"
,
"second_positions"
,
"projects"
"history_vote_user_num"
,
"one_ctr"
,
"three_ctr"
,
"seven_ctr"
,
"fifteen_ctr"
,
"thirty_ctr"
,
"sixty_ctr"
,
"ninety_ctr"
,
"history_ctr"
,
"first_demands"
,
"second_demands"
,
"first_solutions"
,
"second_solutions"
,
"first_positions"
,
"second_positions"
,
"projects"
]
]
INT_COLUMNS
=
[
INT_COLUMNS
=
[
"active_days"
,
"topic_num"
,
"favor_num"
,
"favor_pure_num"
,
"vote_num"
,
"reply_num"
,
"reply_pure_num"
,
"one_reply_user_num"
,
"active_days"
,
"topic_num"
,
"favor_num"
,
"favor_pure_num"
,
"vote_num"
,
"reply_num"
,
"reply_pure_num"
,
"one_reply_user_num"
,
"three_reply_user_num"
,
"seven_reply_user_num"
,
"fifteen_reply_user_num"
,
"thirty_reply_user_num"
,
"sixty_reply_user_num"
,
"three_reply_user_num"
,
"seven_reply_user_num"
,
"fifteen_reply_user_num"
,
"thirty_reply_user_num"
,
"sixty_reply_user_num"
,
"ninety_reply_user_num"
,
"history_reply_user_num"
,
"one_click_num"
,
"three_click_num"
,
"seven_click_num"
,
"fifteen_click_num"
,
"ninety_reply_user_num"
,
"history_reply_user_num"
,
"one_reply_num"
,
"three_reply_num"
,
"seven_reply_num"
,
"fifteen_reply_num"
,
"thirty_click_num"
,
"sixty_click_num"
,
"ninety_click_num"
,
"history_click_num"
,
"topic_seven_click_num"
,
"thirty_reply_num"
,
"sixty_reply_num"
,
"ninety_reply_num"
,
"history_reply_num"
,
"one_click_num"
,
"three_click_num"
,
"topic_thirty_click_num"
,
"one_precise_exposure_num"
,
"three_precise_exposure_num"
,
"seven_precise_exposure_num"
,
"seven_click_num"
,
"fifteen_click_num"
,
"thirty_click_num"
,
"sixty_click_num"
,
"ninety_click_num"
,
"history_click_num"
,
"fifteen_precise_exposure_num"
,
"thirty_precise_exposure_num"
,
"sixty_precise_exposure_num"
,
"ninety_precise_exposure_num"
,
"topic_seven_click_num"
,
"topic_thirty_click_num"
,
"one_precise_exposure_num"
,
"three_precise_exposure_num"
,
"history_precise_exposure_num"
,
"one_vote_user_num"
,
"three_vote_user_num"
,
"seven_vote_user_num"
,
"fifteen_vote_user_num"
,
"seven_precise_exposure_num"
,
"fifteen_precise_exposure_num"
,
"thirty_precise_exposure_num"
,
"sixty_precise_exposure_num"
,
"thirty_vote_user_num"
,
"sixty_vote_user_num"
,
"ninety_vote_user_num"
,
"history_vote_user_num"
,
"seven_transform_num"
,
"ninety_precise_exposure_num"
,
"history_precise_exposure_num"
,
"one_vote_user_num"
,
"three_vote_user_num"
,
"thirty_transform_num"
"seven_vote_user_num"
,
"fifteen_vote_user_num"
,
"thirty_vote_user_num"
,
"sixty_vote_user_num"
,
"ninety_vote_user_num"
,
"history_vote_user_num"
,
"seven_transform_num"
,
"thirty_transform_num"
]
]
FLOAT_COLUMNS
=
[
"one_ctr"
,
"three_ctr"
,
"seven_ctr"
,
"fifteen_ctr"
,
"thirty_ctr"
,
"sixty_ctr"
,
"ninety_ctr"
,
"history_ctr"
]
FLOAT_COLUMNS
=
[
"one_ctr"
,
"three_ctr"
,
"seven_ctr"
,
"fifteen_ctr"
,
"thirty_ctr"
,
"sixty_ctr"
,
"ninety_ctr"
,
"history_ctr"
]
CATEGORICAL_COLUMNS
=
[
CATEGORICAL_COLUMNS
=
[
...
...
src/models/esmm/fe/tractate_fe.py
View file @
cd97df76
...
@@ -7,11 +7,30 @@ from ..utils import common_elements, nth_element
...
@@ -7,11 +7,30 @@ from ..utils import common_elements, nth_element
TRACTATE_COLUMNS
=
[
TRACTATE_COLUMNS
=
[
"card_id"
,
"is_pure_author"
,
"is_have_pure_reply"
,
"is_have_reply"
,
"content_level"
,
"show_tag_id"
,
"reply_num"
,
"card_id"
,
"is_pure_author"
,
"is_have_pure_reply"
,
"is_have_reply"
,
"content_level"
,
"show_tag_id"
,
"reply_num"
,
"reply_pure_num"
,
"one_ctr"
,
"three_ctr"
,
"seven_ctr"
,
"fifteen_ctr"
,
"thirty_ctr"
,
"sixty_ctr"
,
"ninety_ctr"
,
"history_ctr"
,
"reply_pure_num"
,
"one_reply_user_num"
,
"three_reply_user_num"
,
"seven_reply_user_num"
,
"fifteen_reply_user_num"
,
"first_demands"
,
"second_demands"
,
"first_solutions"
,
"second_solutions"
,
"first_positions"
,
"second_positions"
,
"projects"
"thirty_reply_user_num"
,
"sixty_reply_user_num"
,
"ninety_reply_user_num"
,
"history_reply_user_num"
,
"one_reply_num"
,
"three_reply_num"
,
"seven_reply_num"
,
"fifteen_reply_num"
,
"thirty_reply_num"
,
"sixty_reply_num"
,
"ninety_reply_num"
,
"history_reply_num"
,
"one_click_num"
,
"three_click_num"
,
"seven_click_num"
,
"fifteen_click_num"
,
"thirty_click_num"
,
"sixty_click_num"
,
"ninety_click_num"
,
"history_click_num"
,
"one_precise_exposure_num"
,
"three_precise_exposure_num"
,
"seven_precise_exposure_num"
,
"fifteen_precise_exposure_num"
,
"thirty_precise_exposure_num"
,
"sixty_precise_exposure_num"
,
"ninety_precise_exposure_num"
,
"history_precise_exposure_num"
,
"one_vote_user_num"
,
"three_vote_user_num"
,
"seven_vote_user_num"
,
"fifteen_vote_user_num"
,
"thirty_vote_user_num"
,
"sixty_vote_user_num"
,
"ninety_vote_user_num"
,
"history_vote_user_num"
,
"one_ctr"
,
"three_ctr"
,
"seven_ctr"
,
"fifteen_ctr"
,
"thirty_ctr"
,
"sixty_ctr"
,
"ninety_ctr"
,
"history_ctr"
,
"first_demands"
,
"second_demands"
,
"first_solutions"
,
"second_solutions"
,
"first_positions"
,
"second_positions"
,
"projects"
]
]
INT_COLUMNS
=
[
"active_days"
,
"reply_num"
,
"reply_pure_num"
]
INT_COLUMNS
=
[
"active_days"
,
"reply_num"
,
"reply_pure_num"
,
"one_reply_user_num"
,
"three_reply_user_num"
,
"seven_reply_user_num"
,
"fifteen_reply_user_num"
,
"thirty_reply_user_num"
,
"sixty_reply_user_num"
,
"ninety_reply_user_num"
,
"history_reply_user_num"
,
"one_reply_num"
,
"three_reply_num"
,
"seven_reply_num"
,
"fifteen_reply_num"
,
"thirty_reply_num"
,
"sixty_reply_num"
,
"ninety_reply_num"
,
"history_reply_num"
,
"one_click_num"
,
"three_click_num"
,
"seven_click_num"
,
"fifteen_click_num"
,
"thirty_click_num"
,
"sixty_click_num"
,
"ninety_click_num"
,
"history_click_num"
,
"one_precise_exposure_num"
,
"three_precise_exposure_num"
,
"seven_precise_exposure_num"
,
"fifteen_precise_exposure_num"
,
"thirty_precise_exposure_num"
,
"sixty_precise_exposure_num"
,
"ninety_precise_exposure_num"
,
"history_precise_exposure_num"
,
"one_vote_user_num"
,
"three_vote_user_num"
,
"seven_vote_user_num"
,
"fifteen_vote_user_num"
,
"thirty_vote_user_num"
,
"sixty_vote_user_num"
,
"ninety_vote_user_num"
,
"history_vote_user_num"
]
FLOAT_COLUMNS
=
[
"one_ctr"
,
"three_ctr"
,
"seven_ctr"
,
"fifteen_ctr"
,
"thirty_ctr"
,
"sixty_ctr"
,
"ninety_ctr"
,
"history_ctr"
]
FLOAT_COLUMNS
=
[
"one_ctr"
,
"three_ctr"
,
"seven_ctr"
,
"fifteen_ctr"
,
"thirty_ctr"
,
"sixty_ctr"
,
"ninety_ctr"
,
"history_ctr"
]
CATEGORICAL_COLUMNS
=
[
CATEGORICAL_COLUMNS
=
[
"device_id"
,
"active_type"
,
"past_consume_ability_history"
,
"potential_consume_ability_history"
,
"price_sensitive_history"
,
"device_id"
,
"active_type"
,
"past_consume_ability_history"
,
"potential_consume_ability_history"
,
"price_sensitive_history"
,
...
...
src/models/esmm/tractate_model.py
View file @
cd97df76
...
@@ -6,8 +6,55 @@ from .fe.tractate_fe import device_tractate_fe
...
@@ -6,8 +6,55 @@ from .fe.tractate_fe import device_tractate_fe
from
.model
import
_bytes_feature
,
_float_feature
,
_int64_feature
from
.model
import
_bytes_feature
,
_float_feature
,
_int64_feature
_int_columns
=
[
_int_columns
=
[
"active_type"
,
"active_days"
,
"card_id"
,
"is_pure_author"
,
"is_have_reply"
,
"is_have_pure_reply"
,
"content_level"
,
"active_type"
,
"reply_num"
,
"reply_pure_num"
"active_days"
,
"card_id"
,
"is_pure_author"
,
"is_have_reply"
,
"is_have_pure_reply"
,
"content_level"
,
"reply_num"
,
"reply_pure_num"
,
"one_reply_user_num"
,
"three_reply_user_num"
,
"seven_reply_user_num"
,
"fifteen_reply_user_num"
,
"thirty_reply_user_num"
,
"sixty_reply_user_num"
,
"ninety_reply_user_num"
,
"history_reply_user_num"
,
"one_reply_num"
,
"three_reply_num"
,
"seven_reply_num"
,
"fifteen_reply_num"
,
"thirty_reply_num"
,
"sixty_reply_num"
,
"ninety_reply_num"
,
"history_reply_num"
,
"one_click_num"
,
"three_click_num"
,
"seven_click_num"
,
"fifteen_click_num"
,
"thirty_click_num"
,
"sixty_click_num"
,
"ninety_click_num"
,
"history_click_num"
,
"one_precise_exposure_num"
,
"three_precise_exposure_num"
,
"seven_precise_exposure_num"
,
"fifteen_precise_exposure_num"
,
"thirty_precise_exposure_num"
,
"sixty_precise_exposure_num"
,
"ninety_precise_exposure_num"
,
"history_precise_exposure_num"
,
"one_vote_user_num"
,
"three_vote_user_num"
,
"seven_vote_user_num"
,
"fifteen_vote_user_num"
,
"thirty_vote_user_num"
,
"sixty_vote_user_num"
,
"ninety_vote_user_num"
,
"history_vote_user_num"
,
]
]
_float_columns
=
[
"one_ctr"
,
"three_ctr"
,
"seven_ctr"
,
"fifteen_ctr"
,
"thirty_ctr"
,
"sixty_ctr"
,
"ninety_ctr"
,
"history_ctr"
]
_float_columns
=
[
"one_ctr"
,
"three_ctr"
,
"seven_ctr"
,
"fifteen_ctr"
,
"thirty_ctr"
,
"sixty_ctr"
,
"ninety_ctr"
,
"history_ctr"
]
_categorical_columns
=
[
_categorical_columns
=
[
...
@@ -20,6 +67,7 @@ _categorical_columns = [
...
@@ -20,6 +67,7 @@ _categorical_columns = [
PREDICTION_ALL_COLUMNS
=
_int_columns
+
_float_columns
+
_categorical_columns
PREDICTION_ALL_COLUMNS
=
_int_columns
+
_float_columns
+
_categorical_columns
def
model_predict_tractate
(
device_id
,
tractate_ids
,
device_dict
,
tractate_dict
,
predict_fn
):
def
model_predict_tractate
(
device_id
,
tractate_ids
,
device_dict
,
tractate_dict
,
predict_fn
):
try
:
try
:
time_1
=
timeit
.
default_timer
()
time_1
=
timeit
.
default_timer
()
...
...
src/train_tractate.py
View file @
cd97df76
...
@@ -58,7 +58,8 @@ def main():
...
@@ -58,7 +58,8 @@ def main():
estimator_config
=
tf
.
estimator
.
RunConfig
(
session_config
=
session_config
)
estimator_config
=
tf
.
estimator
.
RunConfig
(
session_config
=
session_config
)
model
=
tf
.
estimator
.
Estimator
(
model_fn
=
esmm_model_fn
,
params
=
params
,
model_dir
=
model_path
,
config
=
estimator_config
)
model
=
tf
.
estimator
.
Estimator
(
model_fn
=
esmm_model_fn
,
params
=
params
,
model_dir
=
model_path
,
config
=
estimator_config
)
train_spec
=
tf
.
estimator
.
TrainSpec
(
input_fn
=
lambda
:
esmm_input_fn
(
train_df
,
shuffle
=
True
),
max_steps
=
50000
)
# TODO 50000
train_spec
=
tf
.
estimator
.
TrainSpec
(
input_fn
=
lambda
:
esmm_input_fn
(
train_df
,
shuffle
=
True
),
max_steps
=
20000
)
eval_spec
=
tf
.
estimator
.
EvalSpec
(
input_fn
=
lambda
:
esmm_input_fn
(
val_df
,
shuffle
=
False
))
eval_spec
=
tf
.
estimator
.
EvalSpec
(
input_fn
=
lambda
:
esmm_input_fn
(
val_df
,
shuffle
=
False
))
res
=
tf
.
estimator
.
train_and_evaluate
(
model
,
train_spec
,
eval_spec
)
res
=
tf
.
estimator
.
train_and_evaluate
(
model
,
train_spec
,
eval_spec
)
print
(
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
)
print
(
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
)
...
@@ -69,7 +70,8 @@ def main():
...
@@ -69,7 +70,8 @@ def main():
model_export_path
=
str
(
Path
(
"~/data/models/tractate/"
)
.
expanduser
())
model_export_path
=
str
(
Path
(
"~/data/models/tractate/"
)
.
expanduser
())
save_path
=
model_export
(
model
,
all_features
,
model_export_path
)
save_path
=
model_export
(
model
,
all_features
,
model_export_path
)
print
(
"save to: "
+
save_path
)
print
(
"save to: "
+
save_path
)
set_essm_model_save_path
(
"tractate"
,
save_path
)
# TODO save model
# set_essm_model_save_path("tractate", save_path)
print
(
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
)
print
(
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
)
print
(
"============================================================"
)
print
(
"============================================================"
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment